contract.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. package blockchain
  2. import (
  3. "ktogame/controller"
  4. "ktogame/models"
  5. "ktogame/util"
  6. "strconv"
  7. "github.com/astaxie/beego/logs"
  8. "github.com/go-xorm/xorm"
  9. )
  10. func participate(engine *xorm.Engine, user, inviter, hash string, amount float64) error {
  11. var ui, dui models.UserInfo
  12. ok, err := engine.Id(inviter).Get(&dui)
  13. if err != nil {
  14. logs.Info(err)
  15. return err
  16. }
  17. if !ok {
  18. dui.Id = -1
  19. dui.Direct = ""
  20. dui.Superiors = "-1"
  21. ui.Direct = ""
  22. } else {
  23. ui.Direct = inviter
  24. }
  25. logs.Info("inviter info:", dui.Id, dui.Direct, dui.Indirect, dui.Superiors)
  26. //insert new user info
  27. ui.Addr = user
  28. ui.Indirect = dui.Direct
  29. ui.Superiors = dui.Superiors + "," + strconv.FormatInt(dui.Id, 10)
  30. ui.ParticipateAmount = amount
  31. ui.State = 1
  32. ui.CreateTime = util.NowTimeString()
  33. ui.Hash = hash
  34. logs.Info("user info:", ui.Direct, ui.Indirect, ui.Superiors)
  35. okk, err := engine.Id(ui.Addr).Get(&dui)
  36. if err != nil {
  37. logs.Info(err)
  38. return err
  39. }
  40. if okk {
  41. logs.Info("%v already participated!", ui.Addr)
  42. return nil
  43. }
  44. _, err = engine.Insert(&ui)
  45. if err != nil {
  46. logs.Info(err)
  47. return err
  48. }
  49. //insert new user Performance
  50. var uper models.Performance
  51. uper.Addr = user
  52. _, err = engine.Insert(&uper)
  53. if err != nil {
  54. return err
  55. }
  56. //update rewards pool
  57. err = controller.UpdateRewardsPool(engine, amount)
  58. if err != nil {
  59. logs.Info(err)
  60. return err
  61. }
  62. ///update Recommendation Rewards
  63. ///update direct recommend rewards(10%)
  64. rewards := amount * 10 / 100
  65. if ui.Direct != "" {
  66. err := controller.UpdateAvailableRewards(rewards, ui.Direct, true, true)
  67. if err != nil {
  68. logs.Info(err)
  69. return err
  70. }
  71. }
  72. ///update indirect recommend rewards(10%)
  73. if ui.Indirect != "" {
  74. err := controller.UpdateAvailableRewards(rewards, ui.Indirect, true, false)
  75. if err != nil {
  76. logs.Info(err)
  77. return err
  78. }
  79. }
  80. //update all supers performance (15%)
  81. err = controller.UpdateSuperiorsPerformance(engine, ui.Superiors, amount)
  82. if err != nil {
  83. logs.Info(err)
  84. return err
  85. }
  86. //update Community Gift(50%)
  87. err = controller.UpdateCommunityGift(engine, amount, inviter)
  88. if err != nil {
  89. logs.Info(err)
  90. return err
  91. }
  92. //Update Community Nodes(5%)
  93. err = controller.UpdateCommunityNodes(engine, amount)
  94. if err != nil {
  95. logs.Info(err)
  96. return err
  97. }
  98. //update Market(10%)
  99. err = controller.UpdateMarket(engine, amount)
  100. if err != nil {
  101. logs.Info(err)
  102. return err
  103. }
  104. logs.Info("participate end")
  105. return nil
  106. }
  107. func checkClaim(engine *xorm.Engine, addr, hash string, height int64, amount float64, sign string) error {
  108. var tx models.ClaimedTxs
  109. ok, err := engine.Id(hash).Get(&tx)
  110. if err != nil {
  111. logs.Error(err)
  112. return err
  113. }
  114. if !ok {
  115. logs.Info("set new claim record,addr:%v,hash:%v", addr, hash)
  116. itx := models.ClaimedTxs{
  117. Addr: addr,
  118. BlockHeight: height,
  119. Hash: hash,
  120. Signature: sign,
  121. Amount: amount,
  122. State: 1,
  123. Droped: 0,
  124. CreateTime: util.NowTimeString(),
  125. }
  126. _, err := engine.Insert(&itx)
  127. if err != nil {
  128. return err
  129. }
  130. return nil
  131. }
  132. logs.Info("update record========:", addr, hash)
  133. tx.State = 1
  134. tx.BlockHeight = height
  135. _, err = engine.ID(hash).Cols("block_height,state").Update(&tx)
  136. if err != nil {
  137. return err
  138. }
  139. return nil
  140. }