contract.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. package blockchain
  2. import (
  3. "ktogame/controller"
  4. "ktogame/models"
  5. "ktogame/util"
  6. "strconv"
  7. "github.com/go-xorm/xorm"
  8. )
  9. func participate(engine *xorm.Engine, user, inviter, hash string, amount float64) error {
  10. var dui models.UserInfo
  11. ok, err := engine.Id(inviter).Get(&dui)
  12. if err != nil {
  13. return err
  14. }
  15. if !ok {
  16. //return errors.New("participate get user info failed")
  17. dui.Id = -1
  18. dui.Direct = ""
  19. dui.Superiors = "-1"
  20. }
  21. //insert new user info
  22. var ui models.UserInfo
  23. ui.Addr = user
  24. ui.Direct = inviter
  25. ui.Indirect = dui.Direct
  26. ui.Superiors = dui.Superiors + "," + strconv.FormatInt(dui.Id, 10)
  27. ui.ParticipateAmount = float64(controller.ParticipateValue * controller.Decimals)
  28. ui.State = 1
  29. ui.CreateTime = util.NowTimeString()
  30. ui.Hash = hash
  31. _, err = engine.Insert(&ui)
  32. if err != nil {
  33. return err
  34. }
  35. //insert new user Performance
  36. var uper models.Performance
  37. uper.Addr = user
  38. _, err = engine.Insert(&uper)
  39. if err != nil {
  40. return err
  41. }
  42. //update rewards pool
  43. err = controller.UpdateRewardsPool(engine, amount)
  44. if err != nil {
  45. return err
  46. }
  47. ///update Recommendation Rewards
  48. ///update direct recommend rewards(10%)
  49. rewards := amount * 10 / 100
  50. if ui.Direct != "" {
  51. err := controller.UpdateAvailableRewards(engine, rewards, ui.Direct, true, true)
  52. if err != nil {
  53. return err
  54. }
  55. }
  56. ///update indirect recommend rewards(10%)
  57. if ui.Indirect != "" {
  58. err := controller.UpdateAvailableRewards(engine, rewards, ui.Indirect, true, false)
  59. if err != nil {
  60. return err
  61. }
  62. }
  63. //update all supers performance (15%)
  64. err = controller.UpdateSuperiorsPerformance(engine, ui.Superiors, amount)
  65. if err != nil {
  66. return err
  67. }
  68. //update Community Gift(50%)
  69. err = controller.UpdateCommunityGift(engine, amount, inviter)
  70. if err != nil {
  71. return err
  72. }
  73. //Update Community Nodes(5%)
  74. err = controller.UpdateCommunityNodes(engine, amount)
  75. if err != nil {
  76. return err
  77. }
  78. //update Market(10%)
  79. err = controller.UpdateMarket(engine, amount)
  80. if err != nil {
  81. return err
  82. }
  83. return nil
  84. }
  85. func checkClaim(engine *xorm.Engine, addr, hash, sign string, amount float64) error {
  86. var tx models.ClaimedTxs
  87. ok, err := engine.Id(hash).Get(&tx)
  88. if err != nil {
  89. return err
  90. }
  91. if !ok {
  92. //set record
  93. claimTx := models.ClaimedTxs{Addr: addr, Amount: amount, Hash: hash,
  94. Signature: sign, State: 1, Droped: 0, CreateTime: util.NowTimeString()}
  95. _, err := engine.Insert(&claimTx)
  96. if err != nil {
  97. return err
  98. }
  99. } else {
  100. tx.State = 1
  101. _, err = engine.ID(hash).Cols("hash").Update(&tx)
  102. if err != nil {
  103. return err
  104. }
  105. }
  106. return nil
  107. }