Advertisement
Guest User

Untitled

a guest
Apr 8th, 2013
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.21 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "flag"
  5. "fmt"
  6. "time"
  7. "math"
  8. "math/rand"
  9. "math/big"
  10. "os"
  11. "strconv"
  12. )
  13.  
  14. var block = 4 //block count ( for genesis block = 0 )
  15.  
  16. var pi = float64(3.1415926535897932384626433832795)
  17.  
  18. var DCoef = new(big.Int)
  19. var BCoef = new(big.Int)
  20.  
  21.  
  22. //var coef = float64(0.43429448190325182765112891891661)
  23. var coef = float64(4.3429448190325182765112891891661)
  24.  
  25. var year = 262980
  26.  
  27. var percent_year = 0.0314159
  28. var percent_day_multi = math.Pow(1+percent_year, float64(1.0/365.0))
  29. var percent = (percent_day_multi - 1) / 720.0
  30.  
  31. var Coin = int64(1000000)
  32. var Cent = int64(10000)
  33.  
  34. var mplus, wMplus, sMplus float64
  35.  
  36. var stakeTgtSpacing = 600
  37. var tgtTimeSpan = int64(7 * 24 * 60 * 60)
  38.  
  39. var maxWreward = float64(99.99)
  40. //var wDiff = float64(1.0)
  41. var sDiff = 0.0001
  42.  
  43.  
  44. //blockchain index for 200 years
  45. var pindex = make([]int64, 52596006)
  46. var targets = make([]big.Int, 52596006)
  47.  
  48. var supply = 0.0 //moneysupply
  49. var fees = 0.0
  50.  
  51. var wHour = 29 //PoW blocks' rate per 1 hour
  52. var shour = 1 // PoS blocks' rate per 1 hour
  53.  
  54. var maxTgt = "26959535291011309493156476344723991336010898738574164086137773096960"
  55. var Limit = "26959123914871979191645937602428351998384653054607755691171935944704"
  56.  
  57.  
  58.  
  59. func getWdiff() float64 {
  60.  
  61. actSpacing := pindex[block - 1] - pindex[block - 2]
  62. tgtSpacing := 61 * (1 + pindex[block - 1] - pindex[block - 2])
  63. // tgtSpacing := int64(600 * (1 + 1))
  64.  
  65. if tgtSpacing==0 { tgtSpacing = 1 }
  66. interval := int64(tgtTimeSpan / tgtSpacing)
  67. // fmt.Println("Interval=", interval)
  68. bits := new(big.Int)
  69. bits = &targets[block - 1]
  70. // fmt.Println("Bits_0=", bits.String())
  71. bits.Mul(bits, big.NewInt((interval + int64(1)) * tgtSpacing + actSpacing + actSpacing))
  72. bits.Div(bits, big.NewInt((interval - int64(1)) * tgtSpacing))
  73.  
  74. bitsTest := new(big.Int)
  75. if block > 95 {
  76. bitsTest.Sub(bits, &targets[block - 60])
  77. // fmt.Println("BitsTest=", bitsTest.String(), bitsTest.Sign())
  78. cmp := bitsTest.Cmp(&targets[block - 30])
  79. if cmp == 1 {
  80. // bits.Add(&targets[block - 10], bits)
  81. bits.Div(bits, big.NewInt(2))
  82. // bits.Mul(bits, big.NewInt(2))
  83. fmt.Println("B/2 ====", bits.String())
  84. }
  85. }
  86. if bits.Cmp(&targets[0])==1 { bits = &targets[0] }
  87. // fmt.Println("Bits_3=", bits.String())
  88. targets[block].Set(bits)
  89. diff := new(big.Int)
  90. // if block > 3 {
  91. diff.Div(&targets[0], bits)
  92. // } else {
  93. // return float64(1.0)
  94. // }
  95. // fmt.Println("diff=", diff.String())
  96. return float64(diff.Int64())
  97. }
  98.  
  99. //nth root function
  100. func root(a float64, n int) float64 {
  101. n1 := n - 1
  102. n1f, rn := float64(n1), 1/float64(n)
  103. x, x0 := 1., 0.
  104. for {
  105. potx, t2 := 1/x, a
  106. for b := n1; b > 0; b >>= 1 {
  107. if b&1 == 1 {
  108. t2 *= potx
  109. }
  110. potx *= potx
  111. }
  112. x0, x = x, rn*(n1f*x+t2)
  113. if math.Abs(x-x0)*1e15 < x {
  114. break
  115. }
  116. }
  117. return x
  118. }
  119.  
  120. func main() {
  121. flag.Parse()
  122. wReward := 0.0
  123. sReward := 0.0
  124. targets[0].SetString(maxTgt, 10)
  125. targets[1].SetString(maxTgt, 10)
  126. targets[2].SetString(maxTgt, 10)
  127. targets[3].SetString(Limit, 10)
  128. targets[4].SetString(Limit, 10)
  129. // fmt.Println(targets[3].String())
  130. fl, _ := strconv.ParseInt(flag.Arg(0), 10, 8)
  131.  
  132. //years to mine in blocks
  133. eoTime := year*int(fl) + 2
  134.  
  135. pindex[0] = time.Now().Unix()
  136. pindex[1] = pindex[0] + 120
  137. pindex[2] = pindex[1] + 120
  138. pindex[3] = pindex[2] + 120
  139. pindex[4] = pindex[3] + 120
  140. // fmt.Println("started at : ", pindex[0])
  141.  
  142. rnd := rand.New(rand.NewSource((int64(time.Now().Nanosecond()))))
  143. for {
  144. if block < 1000000000 {
  145. wDiff := getWdiff()
  146. fmt.Println("diff=", strconv.FormatFloat(wDiff, 'f', -1, 64))
  147. // wReward = 10.0 + coef*math.Log(wDiff)
  148. wReward = maxWreward / root(wDiff, 6)
  149. // fmt.Println("PoW bounty: ", wReward, "wDiff=", wDiff)
  150. // if block > 10 {
  151. // wDiff = (1.005*wDiff + rnd.Float64()*111111.0 + 1.0) / 2
  152. // }
  153. // if wDiff > 64000.0 {
  154. // wDiff = 63999.0
  155. // }
  156. block++
  157. freq := 121//average time between blocks
  158. if wDiff > 33000000.0 { freq = 119 }
  159. after := rnd.Int63n(240) - int64(freq)//power input point ;)
  160.  
  161. pindex[block] = pindex[block - 1] + after
  162. // fmt.Println(block, pindex[block] - pindex[block-1])
  163. }
  164. // if block >= 1000000 { wReward = 0.0 }
  165. txFees := rnd.Float64() / 1.35
  166. if txFees > 0.66 {
  167. txFees = 0.02
  168. }
  169. // coinAge := rnd.Int63n(89970) + 30 //pseudorandom coin_age in days
  170. // sReward := float64((33*coinAge)/12053) * 0.01
  171.  
  172. // fmt.Println("PoS: ", sReward, "Fees=", txFees)
  173. // sRewardAndFees := sReward + txFees
  174.  
  175. // block++
  176. // fmt.Println("")
  177. supply = supply + wReward// + sReward
  178. fees = fees + txFees
  179. if (block % year) == 0 {
  180. fmt.Println("moneysupply: ", strconv.FormatFloat(supply, 'f', -1, 64), " at block #", block)
  181. fmt.Println("tx_fees =", fees)
  182. fmt.Println("PoW bounty: ", wReward, "wDiff=", getWdiff())
  183. fmt.Println("PoS: ", sReward, "Fees=", txFees)
  184. fmt.Println("==========================================================")
  185. }
  186. if block > eoTime {
  187. break
  188. }
  189. }
  190.  
  191. os.Exit(0)
  192. }
  193.  
  194. func show(supply, fees float64) {
  195. fmt.Println("moneysupply: ", strconv.FormatFloat(supply, 'f', -1, 64), " at block #", block)
  196. fmt.Println("tx_fees =", fees)
  197. fmt.Println("==========================================================")
  198. return
  199. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement