package blockchain import ( "ktogame/controller" "ktogame/models" "ktogame/util" "strconv" "github.com/go-xorm/xorm" ) func participate(engine *xorm.Engine, user, inviter, hash string, amount float64) error { var dui models.UserInfo ok, err := engine.Id(inviter).Get(&dui) if err != nil { return err } if !ok { //return errors.New("participate get user info failed") dui.Id = -1 dui.Direct = "" dui.Superiors = "-1" } //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 * controller.Decimals) ui.State = 1 ui.CreateTime = util.NowTimeString() ui.Hash = hash _, err = engine.Insert(&ui) if err != nil { return err } //insert new user Performance var uper models.Performance uper.Addr = user _, err = engine.Insert(&uper) if err != nil { return err } //update rewards pool err = controller.UpdateRewardsPool(engine, amount) if err != nil { return err } ///update Recommendation Rewards ///update direct recommend rewards(10%) rewards := amount * 10 / 100 if ui.Direct != "" { err := controller.UpdateAvailableRewards(engine, rewards, ui.Direct, true, true) if err != nil { return err } } ///update indirect recommend rewards(10%) if ui.Indirect != "" { err := controller.UpdateAvailableRewards(engine, rewards, ui.Indirect, true, false) if err != nil { return err } } //update all supers performance (15%) err = controller.UpdateSuperiorsPerformance(engine, ui.Superiors, amount) if err != nil { return err } //update Community Gift(50%) err = controller.UpdateCommunityGift(engine, amount, inviter) if err != nil { return err } //Update Community Nodes(5%) err = controller.UpdateCommunityNodes(engine, amount) if err != nil { return err } //update Market(10%) err = controller.UpdateMarket(engine, amount) if err != nil { return err } return nil } func checkClaim(engine *xorm.Engine, addr, hash, sign string, amount float64) error { var tx models.ClaimedTxs ok, err := engine.Id(hash).Get(&tx) if err != nil { return err } if !ok { //set record claimTx := models.ClaimedTxs{Addr: addr, Amount: amount, Hash: hash, Signature: sign, State: 1, Droped: 0, CreateTime: util.NowTimeString()} _, err := engine.Insert(&claimTx) if err != nil { return err } } tx.State = 1 _, err = engine.ID(hash).Cols("hash").Update(&tx) if err != nil { return err } return nil }