Eric0718 2 éve
szülő
commit
d5f605924a
9 módosított fájl, 75 hozzáadás és 32 törlés
  1. 19 10
      blockchain/contract.go
  2. 5 3
      blockchain/scan.go
  3. 1 1
      blockchain/types.go
  4. 32 14
      controller/calculate.go
  5. 2 2
      controller/controller.go
  6. BIN
      ktogame
  7. 11 0
      main.go
  8. 2 2
      models/tables.go
  9. 3 0
      util/utils.go

+ 19 - 10
blockchain/contract.go

@@ -12,30 +12,39 @@ import (
 )
 
 func participate(engine *xorm.Engine, user, inviter, hash string, amount float64) error {
-	var dui models.UserInfo
+	var ui, dui models.UserInfo
 	ok, err := engine.Id(inviter).Get(&dui)
 	if err != nil {
 		logs.Info(err)
 		return err
 	}
 	if !ok {
-		//return errors.New("participate get user info failed")
 		dui.Id = -1
 		dui.Direct = ""
 		dui.Superiors = "-1"
+		ui.Direct = ""
+	} else {
+		ui.Direct = inviter
 	}
-
+	logs.Info("inviter info:", dui.Id, dui.Direct, dui.Indirect, dui.Superiors)
 	//insert new user info
-	var ui models.UserInfo
 	ui.Addr = user
-	ui.Direct = inviter
 	ui.Indirect = dui.Direct
 	ui.Superiors = dui.Superiors + "," + strconv.FormatInt(dui.Id, 10)
-	ui.ParticipateAmount = float64(controller.PARTICIPATEVALUE)
+	ui.ParticipateAmount = amount
 	ui.State = 1
 	ui.CreateTime = util.NowTimeString()
 	ui.Hash = hash
-
+	logs.Info("user info:", ui.Direct, ui.Indirect, ui.Superiors)
+	okk, err := engine.Id(ui.Addr).Get(&dui)
+	if err != nil {
+		logs.Info(err)
+		return err
+	}
+	if okk {
+		logs.Info("%v already participated!", ui.Addr)
+		return nil
+	}
 	_, err = engine.Insert(&ui)
 	if err != nil {
 		logs.Info(err)
@@ -61,7 +70,7 @@ func participate(engine *xorm.Engine, user, inviter, hash string, amount float64
 	///update direct recommend rewards(10%)
 	rewards := amount * 10 / 100
 	if ui.Direct != "" {
-		err := controller.UpdateAvailableRewards(engine, rewards, ui.Direct, true, true)
+		err := controller.UpdateAvailableRewards(rewards, ui.Direct, true, true)
 		if err != nil {
 			logs.Info(err)
 			return err
@@ -69,7 +78,7 @@ func participate(engine *xorm.Engine, user, inviter, hash string, amount float64
 	}
 	///update indirect recommend rewards(10%)
 	if ui.Indirect != "" {
-		err := controller.UpdateAvailableRewards(engine, rewards, ui.Indirect, true, false)
+		err := controller.UpdateAvailableRewards(rewards, ui.Indirect, true, false)
 		if err != nil {
 			logs.Info(err)
 			return err
@@ -82,7 +91,6 @@ func participate(engine *xorm.Engine, user, inviter, hash string, amount float64
 		logs.Info(err)
 		return err
 	}
-
 	//update Community Gift(50%)
 	err = controller.UpdateCommunityGift(engine, amount, inviter)
 	if err != nil {
@@ -103,6 +111,7 @@ func participate(engine *xorm.Engine, user, inviter, hash string, amount float64
 		logs.Info(err)
 		return err
 	}
+	logs.Info("participate end")
 	return nil
 }
 

+ 5 - 3
blockchain/scan.go

@@ -62,12 +62,13 @@ func scanBlock() {
 	//currentBlock =62203394
 	for {
 		time.Sleep(time.Second * 3)
-		logs.Info("currentBlock...", currentBlock)
+
 		res, err := ktoClient.GetMaxBlockHeight(context.Background(), &pb.ReqMaxBlockHeight{})
 		if err != nil {
 			logs.Error("获取交易block number错误=", err)
 			continue
 		}
+		logs.Info("currentBlock:", currentBlock, "chainblock:", res.MaxHeight)
 		if res.MaxHeight < currentBlock {
 			currentBlock = res.MaxHeight
 		}
@@ -109,14 +110,14 @@ func scanBlock() {
 							ERR = err
 							break
 						}
-						logs.Info("method=%+v,l.Data=%v\n ", method, l.Data)
+
 						err = abi.UnpackIntoInterface(&ev, method, l.Data)
 						if err != nil {
 							logs.Error(err)
 							ERR = err
 							break
 						}
-						logs.Info("participate data=%+v\n ", ev)
+						logs.Info("participate data:", ev.Participant.String(), ev.Inviter.String(), v.HashToString(), float64(ev.Amount.Uint64()/controller.Decimals))
 						//handle user participate
 						err = participate(dbUtil.Engine, ev.Participant.String(), ev.Inviter.String(), v.HashToString(), float64(ev.Amount.Uint64()/controller.Decimals))
 						if err != nil {
@@ -173,6 +174,7 @@ func confirmClaimedTxs() {
 	var mark int64 = 0
 	for {
 		time.Sleep(time.Second * 5)
+		logs.Info("confirmClaimedTxs mark= %v\n", mark)
 		var txs []models.ClaimedTxs
 		ok, err := dbUtil.Engine.Where("state = ?", 0).Where("droped = ?", 0).Where("id > ?", mark).Get(&txs)
 		if err != nil {

+ 1 - 1
blockchain/types.go

@@ -9,7 +9,7 @@ import (
 const (
 	TOPIC_PARTICIPATE    = "0x8ed860f76da405897619eab937f09dcb4d0d9b56cf68a3d489130a2489cf151f"
 	COLLECT_PARTICIPATE  = "Participate"
-	COLLECT_CLAIMREWARDS = "claimRewards"
+	COLLECT_CLAIMREWARDS = "Claim"
 	COLLECTCONTRACT      = "0xC6Ff5462e5409d11AF6B080ADC3dc0a17E94b0A6"
 	CONFIRMINTERVAL      = 450
 )

+ 32 - 14
controller/calculate.go

@@ -1,15 +1,18 @@
 package controller
 
 import (
-	"errors"
 	"fmt"
+	"ktogame/dbUtil"
 	"ktogame/models"
 	"strings"
 
+	"github.com/astaxie/beego/logs"
+
 	"github.com/go-xorm/xorm"
 )
 
 func UpdateSuperiorsPerformance(engine *xorm.Engine, superiorsStr string, amount float64) error {
+	logs.Info("into UpdateSuperiorsPerformance:", superiorsStr, amount)
 	ids := strings.Split(superiorsStr, ",")
 	if len(ids) <= 0 {
 		return nil
@@ -44,6 +47,7 @@ func UpdateSuperiorsPerformance(engine *xorm.Engine, superiorsStr string, amount
 			continue
 		}
 		if !ok {
+			logs.Info("%v not exist!", super.Addr)
 			continue
 		}
 
@@ -57,6 +61,7 @@ func UpdateSuperiorsPerformance(engine *xorm.Engine, superiorsStr string, amount
 					continue
 				}
 				if !ok {
+					logs.Info("%v not exist!", per.Addr)
 					continue
 				}
 				super.MarketNum += 1
@@ -85,7 +90,7 @@ func UpdateSuperiorsPerformance(engine *xorm.Engine, superiorsStr string, amount
 					per.PerformanceRewards += rewards //user add rewards to PerformanceRewards
 					per.PerformanceLevel = level
 					//update available
-					err := UpdateAvailableRewards(engine, rewards, super.Addr, false, false)
+					err := UpdateAvailableRewards(rewards, super.Addr, false, false)
 					if err != nil {
 						return err
 					}
@@ -102,11 +107,12 @@ func UpdateSuperiorsPerformance(engine *xorm.Engine, superiorsStr string, amount
 	if err != nil {
 		return err
 	}
-
+	logs.Info("into UpdateSuperiorsPerformance end:", rp)
 	return nil
 }
 
 func UpdateRewardsPool(engine *xorm.Engine, amount float64) error {
+	logs.Info("into UpdateRewardsPool:", amount)
 	var rp models.RewardsPool
 	rp.TeamPerformance = amount * 0.15
 	rp.TeamCultivate = amount * 0.10
@@ -115,18 +121,21 @@ func UpdateRewardsPool(engine *xorm.Engine, amount float64) error {
 	if err != nil {
 		return err
 	}
+	logs.Info("UpdateRewardsPool end:", rp)
 	return nil
 }
 
-func UpdateAvailableRewards(engine *xorm.Engine, rewards float64, uaddr string, join, isdirect bool) error {
+func UpdateAvailableRewards(rewards float64, uaddr string, join, isdirect bool) error {
+	logs.Info("into UpdateAvailableRewards:", rewards, uaddr, join, isdirect)
 	a_rewards := rewards * 60 / 100
 	a_reinput := rewards * 40 / 100
 	var user models.UserInfo
-	ok, err := engine.Id(uaddr).Get(&user)
+	ok, err := dbUtil.Engine.Id(uaddr).Get(&user)
 	if err != nil {
 		return err
 	}
 	if !ok {
+		logs.Info("%v not exist!", uaddr)
 		return nil
 	}
 	user.AvailableClaim = a_rewards
@@ -135,29 +144,33 @@ func UpdateAvailableRewards(engine *xorm.Engine, rewards float64, uaddr string,
 		if isdirect {
 			user.DirectNumber += 1
 			user.DirectRewards += rewards
-			_, err = engine.ID(user.Addr).Cols("available_claim,available_reinput,direct_number,direct_rewards").Update(&user)
+			logs.Info("check direct info=====:", rewards, a_rewards, a_reinput, user.AvailableClaim, user.AvailableReinput, user.DirectNumber, user.DirectRewards)
+			_, err := dbUtil.Engine.ID(user.Addr).Cols("available_claim,available_reinput,direct_number,direct_rewards").Update(&user)
 			if err != nil {
 				return err
 			}
-
 		} else {
 			user.IndirectNumber += 1
 			user.IndirectRewards += rewards
-			_, err = engine.ID(user.Addr).Cols("available_claim,available_reinput,indirect_number,indirect_rewards").Update(&user)
+			logs.Info("check indirect info=====:", rewards, a_rewards, a_reinput, user.AvailableClaim, user.AvailableReinput, user.DirectNumber, user.DirectRewards)
+			_, err := dbUtil.Engine.ID(user.Addr).Cols("available_claim,available_reinput,indirect_number,indirect_rewards").Update(&user)
 			if err != nil {
 				return err
 			}
 		}
 	} else {
-		_, err = engine.ID(user.Addr).Cols("available_claim,available_reinput").Update(&user)
+		logs.Info("check else info=====:", user.AvailableClaim, user.AvailableReinput)
+		_, err := dbUtil.Engine.ID(user.Addr).Cols("available_claim,available_reinput").Update(&user)
 		if err != nil {
 			return err
 		}
 	}
+	logs.Info("into UpdateAvailableRewards end:", user)
 	return nil
 }
 
 func UpdateCommunityGift(engine *xorm.Engine, amount float64, uaddr string) error {
+	logs.Info("into UpdateCommunityGift:", amount, uaddr)
 	var user, tmpUser models.UserInfo
 	ok, err := engine.Id(uaddr).Get(&user)
 	if err != nil {
@@ -172,7 +185,8 @@ func UpdateCommunityGift(engine *xorm.Engine, amount float64, uaddr string) erro
 		return err
 	}
 	if !ok {
-		return errors.New("engine get info failed")
+		logs.Info("%v not exist!", uaddr)
+		return nil
 	}
 
 	var leftNum, rightNum int64
@@ -188,7 +202,7 @@ func UpdateCommunityGift(engine *xorm.Engine, amount float64, uaddr string) erro
 	}
 
 	rewards := amount * (float64(leftNum+rightNum) / 100)
-	err = UpdateAvailableRewards(engine, rewards, user.Addr, false, false)
+	err = UpdateAvailableRewards(rewards, user.Addr, false, false)
 	if err != nil {
 		return err
 	}
@@ -206,11 +220,12 @@ func UpdateCommunityGift(engine *xorm.Engine, amount float64, uaddr string) erro
 	if err != nil {
 		return err
 	}
-
+	logs.Info("into UpdateCommunityGift end:", amount, uaddr)
 	return nil
 }
 
 func UpdateCommunityNodes(engine *xorm.Engine, amount float64) error {
+	logs.Info("into UpdateCommunityNodes:", amount)
 	var nodes []models.UserInfo
 	err := engine.Where("state = ?", CommunityUsers).Find(&nodes)
 	if err != nil {
@@ -221,16 +236,18 @@ func UpdateCommunityNodes(engine *xorm.Engine, amount float64) error {
 	}
 	rewards := (amount * 5 / 100) / float64(len(nodes))
 	for _, node := range nodes {
-		err = UpdateAvailableRewards(engine, rewards, node.Addr, false, false)
+		err = UpdateAvailableRewards(rewards, node.Addr, false, false)
 		if err != nil {
 			fmt.Println(err)
 			continue
 		}
 	}
+	logs.Info("into UpdateCommunityNodes end:", amount)
 	return nil
 }
 
 func UpdateMarket(engine *xorm.Engine, amount float64) error {
+	logs.Info("into UpdateMarket:", amount)
 	var pers []models.Performance
 	err := engine.Where("market_num >= ?", 2).Find(&pers)
 	if err != nil {
@@ -262,7 +279,7 @@ func UpdateMarket(engine *xorm.Engine, amount float64) error {
 					per.MarketRewards += rewards //user add rewards to PerformanceRewards
 					per.MarketLevel = level
 					//update available
-					err := UpdateAvailableRewards(engine, rewards, per.Addr, false, false)
+					err := UpdateAvailableRewards(rewards, per.Addr, false, false)
 					if err != nil {
 						return err
 					}
@@ -278,5 +295,6 @@ func UpdateMarket(engine *xorm.Engine, amount float64) error {
 	if err != nil {
 		return err
 	}
+	logs.Info("into UpdateMarket end:", amount)
 	return nil
 }

+ 2 - 2
controller/controller.go

@@ -48,7 +48,7 @@ func (uc *UserController) Reinput(user string) {
 	///update direct recommend rewards
 	rewards := reinputValue * 10 / 100
 	if ui.Direct != "" {
-		err := UpdateAvailableRewards(uc.engine, rewards, ui.Direct, false, false)
+		err := UpdateAvailableRewards(rewards, ui.Direct, false, false)
 		if err != nil {
 			ErrResponse(uc.Controller, err)
 			return
@@ -56,7 +56,7 @@ func (uc *UserController) Reinput(user string) {
 	}
 	///update indirect recommend rewards
 	if ui.Indirect != "" {
-		err := UpdateAvailableRewards(uc.engine, rewards, ui.Indirect, false, false)
+		err := UpdateAvailableRewards(rewards, ui.Indirect, false, false)
 		if err != nil {
 			ErrResponse(uc.Controller, err)
 			return

BIN
ktogame


+ 11 - 0
main.go

@@ -2,7 +2,9 @@ package main
 
 import (
 	_ "ktogame/blockchain"
+	"ktogame/dbUtil"
 	_ "ktogame/dbUtil"
+	"ktogame/models"
 	_ "ktogame/routers"
 
 	"github.com/astaxie/beego"
@@ -30,5 +32,14 @@ func main() {
 	i18n.SetMessage("zh-CN", "conf/locale_zh-CN.ini")
 	i18n.SetMessage("en-US", "conf/locale_en-US.ini")
 	beego.BConfig.RecoverPanic = true
+	{
+		var nodes []models.UserInfo
+		err := dbUtil.Engine.Where("state = ?", 1).Find(&nodes)
+		if err != nil {
+			logs.Error(err)
+		}
+		logs.Info("nodes:=======", nodes)
+	}
 	beego.Run()
+
 }

+ 2 - 2
models/tables.go

@@ -2,7 +2,7 @@ package models
 
 type UserInfo struct {
 	Id                int64   //自增
-	Addr              string  //主键
+	Addr              string  `xorm:"pk"` //主键
 	Direct            string  //我的上级
 	DirectNumber      int     //直推总人数
 	IndirectRewards   float64 `xorm:"Decimal"`
@@ -26,7 +26,7 @@ type UserInfo struct {
 // 	CommunityNode float64 `xorm:"Decimal"`
 
 type Performance struct {
-	Addr               string  //主键
+	Addr               string  `xorm:"pk"` //主键
 	TotalPerformance   float64 `xorm:"Decimal"`
 	PerformanceLevel   int
 	PerformanceRewards float64 `xorm:"Decimal"`

+ 3 - 0
util/utils.go

@@ -6,6 +6,8 @@ import (
 	"ktogame/enums"
 	"time"
 
+	"github.com/astaxie/beego/logs"
+
 	"github.com/ethereum/go-ethereum/crypto"
 )
 
@@ -24,6 +26,7 @@ func Md5(str string) string {
 }
 
 func Sign(amountStr, addr, timeStr string) string {
+	logs.Info("Sign==========", amountStr, addr, timeStr)
 	keccakA := crypto.Keccak256([]byte(amountStr), []byte(enums.DIGIT))
 	keccakS := crypto.Keccak256(keccakA, []byte(timeStr), []byte(addr))
 	return "0x" + hex.EncodeToString(keccakS)