Eric0718 2 rokov pred
rodič
commit
cc14ed2ce9
10 zmenil súbory, kde vykonal 267 pridanie a 265 odobranie
  1. 4 3
      controller/BaseController.go
  2. 2 2
      dbUtil/mysql.go
  3. 2 1
      go.mod
  4. BIN
      ktogame
  5. 6 5
      main.go
  6. 63 55
      models/blockData.go
  7. 0 10
      routers/router.go
  8. 2 1
      routers/routers.go
  9. 170 171
      util/ktoFunction.go
  10. 18 17
      util/task.go

+ 4 - 3
controller/BaseController.go

@@ -1,15 +1,16 @@
 package controller
 
 import (
+	"ktogame/dbUtil"
+
 	"github.com/astaxie/beego"
 	"github.com/beego/i18n"
 	"github.com/go-xorm/xorm"
-	"server_fhl/dbUtil"
 )
 
 type baseController struct {
 	beego.Controller
-	x          *xorm.Engine
+	x *xorm.Engine
 	i18n.Locale
 }
 
@@ -21,4 +22,4 @@ func (p *baseController) Prepare() {
 	} else {
 		p.Lang = "zh-CN"
 	}
-}
+}

+ 2 - 2
models/mysql.go → dbUtil/mysql.go

@@ -1,4 +1,4 @@
-package connect
+package dbUtil
 
 import (
 	"fmt"
@@ -8,7 +8,7 @@ import (
 	"github.com/go-xorm/xorm"
 )
 
-var Engine *xorm.Engine
+var SqlEngine *xorm.Engine
 
 func init() {
 	var err error

+ 2 - 1
go.mod

@@ -1,4 +1,4 @@
-module server_fhl
+module ktogame
 
 go 1.16
 
@@ -12,6 +12,7 @@ require (
 	github.com/gomodule/redigo v2.0.0+incompatible
 	github.com/korthochain/korthochain v0.0.0-00010101000000-000000000000
 	github.com/shopspring/decimal v1.2.0
+	github.com/smartystreets/goconvey v1.6.4
 	google.golang.org/grpc v1.40.0
 )
 

BIN
ktogame


+ 6 - 5
main.go

@@ -1,17 +1,18 @@
 package main
 
 import (
+	_ "ktogame/routers"
+	_ "ktogame/util"
+
 	"github.com/astaxie/beego"
 	"github.com/astaxie/beego/logs"
 	"github.com/astaxie/beego/plugins/cors"
 	"github.com/beego/i18n"
-	_ "server_fhl/routers"
-	_ "server_fhl/util"
 )
 
-func main(){
+func main() {
 	log := logs.NewLogger()
-	log.SetLogger(logs.AdapterConsole,`{"level":1,"color":false}`)
+	log.SetLogger(logs.AdapterConsole, `{"level":1,"color":false}`)
 	logs.SetLogger(logs.AdapterFile, `{"filename":"listener.log","maxsize":512000,"maxlines":10000,"daily":true}`)
 	logs.EnableFuncCallDepth(true)
 	logs.SetLogFuncCallDepth(3)
@@ -23,7 +24,7 @@ func main(){
 		AllowHeaders:     []string{"*"},
 		ExposeHeaders:    []string{"*"},
 		AllowCredentials: true,
-		AllowOrigins: []string{"http://172.*.*.*:*","http://localhost:*","http://127.0.0.1:*"},
+		AllowOrigins:     []string{"http://172.*.*.*:*", "http://localhost:*", "http://127.0.0.1:*"},
 	}))
 	i18n.SetMessage("zh-CN", "conf/locale_zh-CN.ini")
 	i18n.SetMessage("en-US", "conf/locale_en-US.ini")

+ 63 - 55
models/blockData.go

@@ -1,92 +1,100 @@
 package models
 
 import (
-	"github.com/ethereum/go-ethereum/common"
 	"math/big"
+
+	"github.com/ethereum/go-ethereum/common"
 )
 
+type RewardDetails struct {
+	Id               int64
+	Addr             string
+	AvailableClaim   float64 `xorm:"Decimal"`
+	Claimed          float64 `xorm:"Decimal"`
+	AvailableReinput float64 `xorm:"Decimal"`
+	Reinputed        float64 `xorm:"Decimal"`
+}
+
 type AddrBill struct {
-	Id int64
-	Addr string
-	Amount float64 `xorm:"Decimal"`
-	BillType int
+	Id         int64
+	Addr       string
+	Amount     float64 `xorm:"Decimal"`
+	BillType   int
 	CreateTime string
 }
 
 type UserAddr struct {
-	Addr string `xorm:"pk"`
-	IdFlag int
-	Pid int
-	RealPid int
-	PidFlag string
-	People int
-	Level int
+	Addr         string `xorm:"pk"`
+	IdFlag       int
+	Pid          int
+	RealPid      int
+	PidFlag      string
+	People       int
+	Level        int
 	RemovePeople int
-	TeamBoss int
-	BadTime string
-	Msg string
-	LockAmount1 float64 `xorm:"Decimal"`
-	LockAmount2 float64 `xorm:"Decimal"`
-	Profit1 float64 `xorm:"Decimal"`
-	Profit2 float64 `xorm:"Decimal"`
-	Profit3 float64 `xorm:"Decimal"`
-	Profit4 float64 `xorm:"Decimal"`
-	Amount float64 `xorm:"Decimal"`
-	Price float64 `xorm:"Decimal"`
-	UseAmount float64 `xorm:"Decimal"`
-	AmountLv float64 `xorm:"Decimal"`
-	Hash string
-	Block int64
-	CreateTime string
+	TeamBoss     int
+	BadTime      string
+	Msg          string
+	LockAmount1  float64 `xorm:"Decimal"`
+	LockAmount2  float64 `xorm:"Decimal"`
+	Profit1      float64 `xorm:"Decimal"`
+	Profit2      float64 `xorm:"Decimal"`
+	Profit3      float64 `xorm:"Decimal"`
+	Profit4      float64 `xorm:"Decimal"`
+	Amount       float64 `xorm:"Decimal"`
+	Price        float64 `xorm:"Decimal"`
+	UseAmount    float64 `xorm:"Decimal"`
+	AmountLv     float64 `xorm:"Decimal"`
+	Hash         string
+	Block        int64
+	CreateTime   string
 }
 
 type CommonInfo struct {
-	Id int64
-	Amount float64 `xorm:"Decimal"`
+	Id           int64
+	Amount       float64 `xorm:"Decimal"`
 	SupplyAmount float64 `xorm:"Decimal"`
-	SupplyTime string
+	SupplyTime   string
 }
 
 type SuccessBill struct {
-	Id int64
-	Addr string
-	Amount float64 `xorm:"Decimal"`
-	Status int
-	Block int64
-	Hash string
-	FromAddr string
-	Ty int
+	Id         int64
+	Addr       string
+	Amount     float64 `xorm:"Decimal"`
+	Status     int
+	Block      int64
+	Hash       string
+	FromAddr   string
+	Ty         int
 	CreateTime string
 }
 
 type WithdrawalBill struct {
-	Id int64
-	Addr string
-	Amount float64 `xorm:"Decimal"`
-	Status int
+	Id          int64
+	Addr        string
+	Amount      float64 `xorm:"Decimal"`
+	Status      int
 	CreateBlock int64
-	SucBlock int64
-	Hash string
-	CreateTime string
+	SucBlock    int64
+	Hash        string
+	CreateTime  string
 }
 
-
 type TeamUserInfo struct {
-	Addr string
-	People int
-	NftNum int
+	Addr       string
+	People     int
+	NftNum     int
 	CreateTime string
 }
 
 type Ihot struct {
-	User common.Address
+	User     common.Address
 	Referrer common.Address
-	Amount *big.Int
-	Price *big.Int
+	Amount   *big.Int
+	Price    *big.Int
 }
 
 type Withdraw struct {
-	User common.Address
+	User   common.Address
 	Amount *big.Int
 }
-

+ 0 - 10
routers/router.go

@@ -1,10 +0,0 @@
-package routers
-
-import (
-	"ktogame/controllers"
-	"github.com/astaxie/beego"
-)
-
-func init() {
-    beego.Router("/", &controllers.MainController{})
-}

+ 2 - 1
routers/routers.go

@@ -1,8 +1,9 @@
 package routers
 
 import (
+	"ktogame/controller"
+
 	"github.com/astaxie/beego"
-	"server_fhl/controller"
 )
 
 func init() {

+ 170 - 171
util/ktoFunction.go

@@ -4,6 +4,13 @@ import (
 	"context"
 	"encoding/hex"
 	"fmt"
+	"ktogame/dbUtil"
+	"ktogame/enums"
+	"ktogame/models"
+	"os"
+	"strings"
+	"time"
+
 	"github.com/astaxie/beego"
 	"github.com/astaxie/beego/logs"
 	"github.com/ethereum/go-ethereum/accounts/abi"
@@ -17,12 +24,6 @@ import (
 	"github.com/korthochain/korthochain/pkg/transaction"
 	"github.com/shopspring/decimal"
 	"google.golang.org/grpc"
-	"os"
-	"server_fhl/dbUtil"
-	"server_fhl/enums"
-	"server_fhl/models"
-	"strings"
-	"time"
 )
 
 var ktoClient pb.GreeterClient
@@ -32,19 +33,19 @@ var ethRpc = beego.AppConfig.String("miner_eth")
 var IdWork *Snowflake
 var kx int64
 
-func init(){
+func init() {
 	fmt.Println("a3")
 	IdWork, _ = NewSnowflake(0)
-	kc, err := grpc.Dial(ktoRpc,grpc.WithInsecure(),grpc.WithBlock())
-	if err!=nil {
+	kc, err := grpc.Dial(ktoRpc, grpc.WithInsecure(), grpc.WithBlock())
+	if err != nil {
 		logs.Info(err)
 		os.Exit(1)
 	}
 	ktoClient = pb.NewGreeterClient(kc)
 	utilAddress.SetNetWork("mainnet")
-	conn,err = ethclient.Dial(ethRpc)
-	if err!= nil {
-		fmt.Printf("Failed to connect to etherum client: %v\n",err)
+	conn, err = ethclient.Dial(ethRpc)
+	if err != nil {
+		fmt.Printf("Failed to connect to etherum client: %v\n", err)
 	}
 	go getNewBlock()
 	go listenKto()
@@ -52,51 +53,51 @@ func init(){
 	//go fenfa()
 }
 
-func listenKto(){
-	time.Sleep(time.Second*2)
-	kxredis := dbUtil.GetValue(enums.USE_FHL_BLOCK,1)
-	if kxredis.(int64)==0 {
-		nb := dbUtil.GetValue(enums.MAX_FHL_BLOCK,1)
+func listenKto() {
+	time.Sleep(time.Second * 2)
+	kxredis := dbUtil.GetValue(enums.USE_FHL_BLOCK, 1)
+	if kxredis.(int64) == 0 {
+		nb := dbUtil.GetValue(enums.MAX_FHL_BLOCK, 1)
 		kx = nb.(int64)
-	}else{
+	} else {
 		kx = kxredis.(int64)
 	}
 	//kx =62203394
 	for {
-		nb := dbUtil.GetValue(enums.MAX_FHL_BLOCK,1)
-		fmt.Println("当前=",kx,"最新=",nb.(int64),"相差=",nb.(int64)-kx)
-		if nb.(int64)<kx+1 {
-			time.Sleep(time.Second*10)
+		nb := dbUtil.GetValue(enums.MAX_FHL_BLOCK, 1)
+		fmt.Println("当前=", kx, "最新=", nb.(int64), "相差=", nb.(int64)-kx)
+		if nb.(int64) < kx+1 {
+			time.Sleep(time.Second * 10)
 			continue
 		}
-		func(){
+		func() {
 			reqBlock := new(pb.ReqBlockByNumber)
 			reqBlock.Height = uint64(kx)
 			bl, err := ktoClient.GetBlockByNum(context.Background(), reqBlock)
-			if err!=nil || bl.Code !=0{
-				fmt.Println("获取交易block错误=",err)
-				time.Sleep(time.Second*5)
+			if err != nil || bl.Code != 0 {
+				fmt.Println("获取交易block错误=", err)
+				time.Sleep(time.Second * 5)
 				return
 			}
 			blc, errs := block.Deserialize(bl.Data)
-			if errs!=nil {
-				time.Sleep(time.Second*5)
-				fmt.Println("获取交易blc错误=",errs)
+			if errs != nil {
+				time.Sleep(time.Second * 5)
+				fmt.Println("获取交易blc错误=", errs)
 			}
 			for _, v := range blc.Transactions {
 				evm, errLog := transaction.DecodeEvmData(v.Input)
-				if errLog!=nil {
+				if errLog != nil {
 					continue
 				}
-				if len(evm.Logs)!=1 {
+				if len(evm.Logs) != 1 {
 					continue
 				}
 				for _, l := range evm.Logs {
 
-					th :=l.Topics[0].Hex()
-					method:=dbUtil.TopsMap[th]
+					th := l.Topics[0].Hex()
+					method := dbUtil.TopsMap[th]
 					addr := l.Address.String()
-					if method==enums.NEWDEPOSIT  && addr==enums.USDTMINTCONTRACT{
+					if method == enums.NEWDEPOSIT && addr == enums.USDTMINTCONTRACT {
 						var ev models.Ihot
 						abi, err := abi.JSON(strings.NewReader(FhlMetaData.ABI))
 						if err != nil {
@@ -107,8 +108,8 @@ func listenKto(){
 							logs.Error("abi err2=", err)
 						}
 						fmt.Printf("data=%+v\n ", ev)
-						usdrido(ev.User.String(),ev.Referrer.String(),v.HashToString(),decimal.NewFromBigInt(ev.Amount,-11),decimal.NewFromBigInt(ev.Price,-18),kx)
-					}else if method==enums.WITHDRAWAL  && addr==enums.WITHDRAWCONTRACT{
+						usdrido(ev.User.String(), ev.Referrer.String(), v.HashToString(), decimal.NewFromBigInt(ev.Amount, -11), decimal.NewFromBigInt(ev.Price, -18), kx)
+					} else if method == enums.WITHDRAWAL && addr == enums.WITHDRAWCONTRACT {
 						var ev models.Withdraw
 						abi, err := abi.JSON(strings.NewReader(FhlMetaData.ABI))
 						if err != nil {
@@ -119,35 +120,35 @@ func listenKto(){
 							logs.Error("abi err2=", err)
 						}
 						fmt.Printf("data=%+v\n ", ev)
-						withdrawal(kx,"0x"+v.HashToString(),ev.User.String(),decimal.NewFromBigInt(ev.Amount,-18))
+						withdrawal(kx, "0x"+v.HashToString(), ev.User.String(), decimal.NewFromBigInt(ev.Amount, -18))
 					}
 				}
 			}
 		}()
 		kx++
-		dbUtil.SetValue(enums.USE_FHL_BLOCK,kx)
+		dbUtil.SetValue(enums.USE_FHL_BLOCK, kx)
 		continue
 		//return
 	}
 }
 
-func getNewBlock(){
-	for  {
+func getNewBlock() {
+	for {
 		number := new(pb.ReqMaxBlockHeight)
 		num, err := ktoClient.GetMaxBlockHeight(context.Background(), number)
-		if err!=nil {
-			logs.Info("断开重连2",err)
+		if err != nil {
+			logs.Info("断开重连2", err)
 			time.Sleep(time.Second * 10)
 			continue
-		}else{
+		} else {
 			dbUtil.SetValue(enums.MAX_FHL_BLOCK, int64(num.MaxHeight))
 		}
 		time.Sleep(time.Second * 10)
 	}
 }
 
-func usdrido(addr,bindAddr,hash string,da,price decimal.Decimal,block int64 ){
-	fmt.Println("==进来==",addr)
+func usdrido(addr, bindAddr, hash string, da, price decimal.Decimal, block int64) {
+	fmt.Println("==进来==", addr)
 	//当前用户
 	var user models.UserAddr
 
@@ -162,7 +163,7 @@ func usdrido(addr,bindAddr,hash string,da,price decimal.Decimal,block int64 ){
 	//原始上上级
 	var realBossUser models.UserAddr
 	var rb bool
-	if bindUser.Pid!=bindUser.RealPid {
+	if bindUser.Pid != bindUser.RealPid {
 		rb, _ = dbUtil.Engine.Where("id_flag=?", bindUser.RealPid).Get(&realBossUser)
 	}
 
@@ -180,92 +181,92 @@ func usdrido(addr,bindAddr,hash string,da,price decimal.Decimal,block int64 ){
 	var msxSort models.UserAddr
 	dbUtil.Engine.Desc("id_flag").Get(&msxSort) //最大序号
 	user.Addr = addr
-	user.IdFlag = msxSort.IdFlag+1
+	user.IdFlag = msxSort.IdFlag + 1
 	//上级是boss,不转移
-	if bindUser.Level>0 || bindUser.Pid==-1{
+	if bindUser.Level > 0 || bindUser.Pid == -1 {
 		user.Pid = bindUser.IdFlag
 		user.RealPid = bindUser.IdFlag
-		user.PidFlag = bindUser.PidFlag+","+fmt.Sprint(bindUser.IdFlag)
-	}else{
+		user.PidFlag = bindUser.PidFlag + "," + fmt.Sprint(bindUser.IdFlag)
+	} else {
 		user.Pid = bossUser.IdFlag
 		user.RealPid = bindUser.IdFlag
-		user.PidFlag = bossUser.PidFlag+","+fmt.Sprint(bossUser.IdFlag)
+		user.PidFlag = bossUser.PidFlag + "," + fmt.Sprint(bossUser.IdFlag)
 	}
 	user.Msg = "暂无惩罚"
-	user.BadTime =NowTimeString()
-	user.CreateTime =NowTimeString()
-	user.Amount,_ = da.Float64()
-	user.Price,_= price.Float64()
+	user.BadTime = NowTimeString()
+	user.CreateTime = NowTimeString()
+	user.Amount, _ = da.Float64()
+	user.Price, _ = price.Float64()
 	user.Block = block
 	user.Hash = hash
 	//-----------处理用户结束--------------
 
 	nt := time.Now().Unix()
-	var sbbu,sbbo,sbpb,sbpbp models.SuccessBill
+	var sbbu, sbbo, sbpb, sbpbp models.SuccessBill
 	//2.处理用户的直推
 	var isUp bool
-	if bindUser.Pid!=-1 {
-		te, _ := time.ParseInLocation("2006-01-02 15:04:05", bindUser.BadTime,time.Local)
-		sbbu = models.SuccessBill{IdWork.Generate(),bindUser.Addr,0,1,0,"",addr,1,NowTimeString()}
-		if bindUser.Level>0 && te.Unix()<nt { //在处罚中
-			sbbu.Amount,_ = da.Mul(decimal.NewFromFloat(0.3)).Float64()
-			bindUser.AmountLv,_= decimal.NewFromFloat(bindUser.AmountLv).Add(decimal.NewFromFloat(0.3)).Float64()
-		}else{
-			sbbu.Amount,_ = da.Mul(decimal.NewFromFloat(0.5)).Float64()
-			bindUser.AmountLv,_= decimal.NewFromFloat(bindUser.AmountLv).Add(decimal.NewFromFloat(0.5)).Float64()
+	if bindUser.Pid != -1 {
+		te, _ := time.ParseInLocation("2006-01-02 15:04:05", bindUser.BadTime, time.Local)
+		sbbu = models.SuccessBill{IdWork.Generate(), bindUser.Addr, 0, 1, 0, "", addr, 1, NowTimeString()}
+		if bindUser.Level > 0 && te.Unix() < nt { //在处罚中
+			sbbu.Amount, _ = da.Mul(decimal.NewFromFloat(0.3)).Float64()
+			bindUser.AmountLv, _ = decimal.NewFromFloat(bindUser.AmountLv).Add(decimal.NewFromFloat(0.3)).Float64()
+		} else {
+			sbbu.Amount, _ = da.Mul(decimal.NewFromFloat(0.5)).Float64()
+			bindUser.AmountLv, _ = decimal.NewFromFloat(bindUser.AmountLv).Add(decimal.NewFromFloat(0.5)).Float64()
 		}
-		bindUser.UseAmount,_=decimal.NewFromFloat(bindUser.UseAmount).Add(decimal.NewFromFloat(sbbu.Amount)).Float64()
-		bindUser.Profit1,_ = decimal.NewFromFloat(bindUser.Profit1).Add(decimal.NewFromFloat(sbbu.Amount)).Float64()
-		if bindUser.RemovePeople==0 {
-			bindUser.RemovePeople = bindUser.RemovePeople+1
-		}else if bindUser.RemovePeople==1{
+		bindUser.UseAmount, _ = decimal.NewFromFloat(bindUser.UseAmount).Add(decimal.NewFromFloat(sbbu.Amount)).Float64()
+		bindUser.Profit1, _ = decimal.NewFromFloat(bindUser.Profit1).Add(decimal.NewFromFloat(sbbu.Amount)).Float64()
+		if bindUser.RemovePeople == 0 {
+			bindUser.RemovePeople = bindUser.RemovePeople + 1
+		} else if bindUser.RemovePeople == 1 {
 			isUp = true
-			bindUser.RemovePeople = bindUser.RemovePeople+1
-			if bindUser.Level<3 {
+			bindUser.RemovePeople = bindUser.RemovePeople + 1
+			if bindUser.Level < 3 {
 				bindUser.Level = 1
 			}
 			format := time.Now().AddDate(0, 0, 7).Format("2006-01-02 15:04:05")
 			bindUser.BadTime = format
 			bindUser.Msg = "当给上级boss转移的2位员工发生直推时,将重置惩罚时间"
-		}else{
-			bindUser.People = bindUser.People+1
+		} else {
+			bindUser.People = bindUser.People + 1
 		}
-	}else{
-		mul,_ := da.Mul(decimal.NewFromFloat(0.5)).Float64()
-		sbbu = models.SuccessBill{IdWork.Generate(),bindUser.Addr,mul,1,0,"",addr,1,NowTimeString()}
-		bindUser.Profit1,_ = decimal.NewFromFloat(bindUser.Profit1).Add(decimal.NewFromFloat(mul)).Float64()
-		bindUser.UseAmount,_=decimal.NewFromFloat(bindUser.UseAmount).Add(decimal.NewFromFloat(mul)).Float64()
+	} else {
+		mul, _ := da.Mul(decimal.NewFromFloat(0.5)).Float64()
+		sbbu = models.SuccessBill{IdWork.Generate(), bindUser.Addr, mul, 1, 0, "", addr, 1, NowTimeString()}
+		bindUser.Profit1, _ = decimal.NewFromFloat(bindUser.Profit1).Add(decimal.NewFromFloat(mul)).Float64()
+		bindUser.UseAmount, _ = decimal.NewFromFloat(bindUser.UseAmount).Add(decimal.NewFromFloat(mul)).Float64()
 	}
 
 	//-----------处理上级结束--------------
 
 	//3.处理上上级
 	if bb {
-		te, _ := time.ParseInLocation("2006-01-02 15:04:05", bossUser.BadTime,time.Local)
-		sbbo = models.SuccessBill{IdWork.Generate(),bossUser.Addr,0,1,0,"",addr,2,NowTimeString()}
-		if bossUser.Pid!=-1 {
-			if bossUser.Level>0 && te.Unix()<nt { //在处罚中
-				sbbo.Amount,_ = da.Mul(decimal.NewFromFloat(0.1)).Float64()
-				bossUser.AmountLv,_= decimal.NewFromFloat(bossUser.AmountLv).Add(decimal.NewFromFloat(0.1)).Float64()
-			}else{
-				sbbo.Amount,_ = da.Mul(decimal.NewFromFloat(0.3)).Float64()
-				bossUser.AmountLv,_= decimal.NewFromFloat(bossUser.AmountLv).Add(decimal.NewFromFloat(0.3)).Float64()
+		te, _ := time.ParseInLocation("2006-01-02 15:04:05", bossUser.BadTime, time.Local)
+		sbbo = models.SuccessBill{IdWork.Generate(), bossUser.Addr, 0, 1, 0, "", addr, 2, NowTimeString()}
+		if bossUser.Pid != -1 {
+			if bossUser.Level > 0 && te.Unix() < nt { //在处罚中
+				sbbo.Amount, _ = da.Mul(decimal.NewFromFloat(0.1)).Float64()
+				bossUser.AmountLv, _ = decimal.NewFromFloat(bossUser.AmountLv).Add(decimal.NewFromFloat(0.1)).Float64()
+			} else {
+				sbbo.Amount, _ = da.Mul(decimal.NewFromFloat(0.3)).Float64()
+				bossUser.AmountLv, _ = decimal.NewFromFloat(bossUser.AmountLv).Add(decimal.NewFromFloat(0.3)).Float64()
 			}
-			bossUser.Profit2,_ = decimal.NewFromFloat(bossUser.Profit2).Add(decimal.NewFromFloat(sbbo.Amount)).Float64()
-			bossUser.UseAmount,_=decimal.NewFromFloat(bossUser.UseAmount).Add(decimal.NewFromFloat(sbbo.Amount)).Float64()
+			bossUser.Profit2, _ = decimal.NewFromFloat(bossUser.Profit2).Add(decimal.NewFromFloat(sbbo.Amount)).Float64()
+			bossUser.UseAmount, _ = decimal.NewFromFloat(bossUser.UseAmount).Add(decimal.NewFromFloat(sbbo.Amount)).Float64()
 			if isUp {
 				if bb {
-					if bossUser.TeamBoss>0 && bossUser.TeamBoss<3 {
-						bossUser.Level = bossUser.TeamBoss+1
+					if bossUser.TeamBoss > 0 && bossUser.TeamBoss < 3 {
+						bossUser.Level = bossUser.TeamBoss + 1
 					}
-					bossUser.TeamBoss = bossUser.TeamBoss+1
+					bossUser.TeamBoss = bossUser.TeamBoss + 1
 				}
 			}
-		}else{
-			f,_:= da.Mul(decimal.NewFromFloat(0.3)).Float64()
+		} else {
+			f, _ := da.Mul(decimal.NewFromFloat(0.3)).Float64()
 			sbbo.Amount = f
-			bossUser.UseAmount,_=decimal.NewFromFloat(bossUser.UseAmount).Add(decimal.NewFromFloat(f)).Float64()
-			bossUser.Profit2,_ = decimal.NewFromFloat(bossUser.Profit2).Add(decimal.NewFromFloat(f)).Float64()
+			bossUser.UseAmount, _ = decimal.NewFromFloat(bossUser.UseAmount).Add(decimal.NewFromFloat(f)).Float64()
+			bossUser.Profit2, _ = decimal.NewFromFloat(bossUser.Profit2).Add(decimal.NewFromFloat(f)).Float64()
 		}
 	}
 
@@ -274,22 +275,22 @@ func usdrido(addr,bindAddr,hash string,da,price decimal.Decimal,block int64 ){
 	//4.处理原始上上级
 	if rb {
 		var rpUser []models.UserAddr
-		dbUtil.Engine.Where("real_pid=? and pid!=real_pid",bindUser.RealPid).Find(&rpUser)
+		dbUtil.Engine.Where("real_pid=? and pid!=real_pid", bindUser.RealPid).Find(&rpUser)
 		if realBossUser.RemovePeople == 2 {
-			e1:= rpUser[0].RemovePeople
-			e2:= rpUser[1].RemovePeople
-			if bindUser.IdFlag==rpUser[0].IdFlag {
-				e1 = e1+1
+			e1 := rpUser[0].RemovePeople
+			e2 := rpUser[1].RemovePeople
+			if bindUser.IdFlag == rpUser[0].IdFlag {
+				e1 = e1 + 1
 			}
-			if bindUser.IdFlag==rpUser[1].IdFlag {
-				e2 = e2+1
+			if bindUser.IdFlag == rpUser[1].IdFlag {
+				e2 = e2 + 1
 			}
-			if e1+e2>1 && e1!=0 && e2!=0{
-				if e1>0 && e2>0 && (e1<2 || e2<2){
+			if e1+e2 > 1 && e1 != 0 && e2 != 0 {
+				if e1 > 0 && e2 > 0 && (e1 < 2 || e2 < 2) {
 					format := time.Now().AddDate(0, 0, 7).Format("2006-01-02 15:04:05")
 					realBossUser.BadTime = format
 					realBossUser.Msg = "当给上级boss转移的2位员工都成为BOSS时,您将永久解除惩罚"
-				}else if e1>1 && e2>1{
+				} else if e1 > 1 && e2 > 1 {
 					realBossUser.BadTime = "2099-01-01 08:00:00"
 					realBossUser.Msg = "您已永久解除惩罚"
 				}
@@ -300,49 +301,48 @@ func usdrido(addr,bindAddr,hash string,da,price decimal.Decimal,block int64 ){
 
 	//5.处理上上上级
 	if pbb {
-		te, _ := time.ParseInLocation("2006-01-02 15:04:05", pbossUser.BadTime,time.Local)
-		sbpb = models.SuccessBill{IdWork.Generate(),pbossUser.Addr,0,1,0,"",addr,3,NowTimeString()}
-		if pbossUser.Pid!=-1{
+		te, _ := time.ParseInLocation("2006-01-02 15:04:05", pbossUser.BadTime, time.Local)
+		sbpb = models.SuccessBill{IdWork.Generate(), pbossUser.Addr, 0, 1, 0, "", addr, 3, NowTimeString()}
+		if pbossUser.Pid != -1 {
 			if pbb {
-				ru1:= da.Mul(decimal.NewFromFloat(0.04))
-				if pbossUser.Level>0 && te.Unix()<nt { //在处罚中
-					pbossUser.LockAmount2,_=decimal.NewFromFloat(pbossUser.LockAmount2).Add(ru1).Float64()
-				}else{
-					sbpb.Amount,_ = ru1.Float64()
-					pbossUser.AmountLv,_= decimal.NewFromFloat(pbossUser.AmountLv).Add(decimal.NewFromFloat(0.04)).Float64()
+				ru1 := da.Mul(decimal.NewFromFloat(0.04))
+				if pbossUser.Level > 0 && te.Unix() < nt { //在处罚中
+					pbossUser.LockAmount2, _ = decimal.NewFromFloat(pbossUser.LockAmount2).Add(ru1).Float64()
+				} else {
+					sbpb.Amount, _ = ru1.Float64()
+					pbossUser.AmountLv, _ = decimal.NewFromFloat(pbossUser.AmountLv).Add(decimal.NewFromFloat(0.04)).Float64()
 				}
-				pbossUser.UseAmount,_=decimal.NewFromFloat(pbossUser.UseAmount).Add(decimal.NewFromFloat(sbpb.Amount)).Float64()
-				pbossUser.Profit3,_ = decimal.NewFromFloat(pbossUser.Profit3).Add(decimal.NewFromFloat(sbpb.Amount)).Float64()
+				pbossUser.UseAmount, _ = decimal.NewFromFloat(pbossUser.UseAmount).Add(decimal.NewFromFloat(sbpb.Amount)).Float64()
+				pbossUser.Profit3, _ = decimal.NewFromFloat(pbossUser.Profit3).Add(decimal.NewFromFloat(sbpb.Amount)).Float64()
 			}
-		}else{
-			mul,_ := da.Mul(decimal.NewFromFloat(0.04)).Float64()
+		} else {
+			mul, _ := da.Mul(decimal.NewFromFloat(0.04)).Float64()
 			sbpb.Amount = mul
-			pbossUser.UseAmount,_=decimal.NewFromFloat(pbossUser.UseAmount).Add(decimal.NewFromFloat(mul)).Float64()
-			pbossUser.Profit3,_ = decimal.NewFromFloat(pbossUser.Profit3).Add(decimal.NewFromFloat(mul)).Float64()
+			pbossUser.UseAmount, _ = decimal.NewFromFloat(pbossUser.UseAmount).Add(decimal.NewFromFloat(mul)).Float64()
+			pbossUser.Profit3, _ = decimal.NewFromFloat(pbossUser.Profit3).Add(decimal.NewFromFloat(mul)).Float64()
 		}
 	}
 
-
 	//5.处理上上上上级
 	if ppbb {
-		te, _ := time.ParseInLocation("2006-01-02 15:04:05", ppbossUser.BadTime,time.Local)
-		sbpbp = models.SuccessBill{IdWork.Generate(),ppbossUser.Addr,0,1,0,"",addr,4,NowTimeString()}
-		ru1:= da.Mul(decimal.NewFromFloat(0.06))
-		if ppbossUser.Pid!=-1{
+		te, _ := time.ParseInLocation("2006-01-02 15:04:05", ppbossUser.BadTime, time.Local)
+		sbpbp = models.SuccessBill{IdWork.Generate(), ppbossUser.Addr, 0, 1, 0, "", addr, 4, NowTimeString()}
+		ru1 := da.Mul(decimal.NewFromFloat(0.06))
+		if ppbossUser.Pid != -1 {
 			if ppbb {
-				if ppbossUser.Level>0 && te.Unix()<nt { //在处罚中
-					ppbossUser.LockAmount2,_=decimal.NewFromFloat(ppbossUser.LockAmount2).Add(ru1).Float64()
-				}else{
-					sbpbp.Amount,_ = ru1.Float64()
-					ppbossUser.AmountLv,_= decimal.NewFromFloat(ppbossUser.AmountLv).Add(decimal.NewFromFloat(0.06)).Float64()
+				if ppbossUser.Level > 0 && te.Unix() < nt { //在处罚中
+					ppbossUser.LockAmount2, _ = decimal.NewFromFloat(ppbossUser.LockAmount2).Add(ru1).Float64()
+				} else {
+					sbpbp.Amount, _ = ru1.Float64()
+					ppbossUser.AmountLv, _ = decimal.NewFromFloat(ppbossUser.AmountLv).Add(decimal.NewFromFloat(0.06)).Float64()
 				}
-				ppbossUser.UseAmount,_=decimal.NewFromFloat(ppbossUser.UseAmount).Add(decimal.NewFromFloat(sbpbp.Amount)).Float64()
-				ppbossUser.Profit3,_ = decimal.NewFromFloat(ppbossUser.Profit3).Add(decimal.NewFromFloat(sbpbp.Amount)).Float64()
+				ppbossUser.UseAmount, _ = decimal.NewFromFloat(ppbossUser.UseAmount).Add(decimal.NewFromFloat(sbpbp.Amount)).Float64()
+				ppbossUser.Profit3, _ = decimal.NewFromFloat(ppbossUser.Profit3).Add(decimal.NewFromFloat(sbpbp.Amount)).Float64()
 			}
-		}else{
-			sbpbp.Amount,_ = ru1.Float64()
-			ppbossUser.UseAmount,_=decimal.NewFromFloat(ppbossUser.UseAmount).Add(ru1).Float64()
-			ppbossUser.Profit3,_ = decimal.NewFromFloat(ppbossUser.Profit3).Add(ru1).Float64()
+		} else {
+			sbpbp.Amount, _ = ru1.Float64()
+			ppbossUser.UseAmount, _ = decimal.NewFromFloat(ppbossUser.UseAmount).Add(ru1).Float64()
+			ppbossUser.Profit3, _ = decimal.NewFromFloat(ppbossUser.Profit3).Add(ru1).Float64()
 		}
 	}
 
@@ -363,50 +363,50 @@ func usdrido(addr,bindAddr,hash string,da,price decimal.Decimal,block int64 ){
 		dbUtil.Engine.ID(ppbossUser.Addr).Update(&ppbossUser)
 	}
 	var suc decimal.Decimal
-	if sbbu.Amount>0 {
+	if sbbu.Amount > 0 {
 		suc = suc.Add(decimal.NewFromFloat(sbbu.Amount))
 		dbUtil.Engine.Insert(&sbbu)
 	}
 
-	if sbbo.Amount>0 {
+	if sbbo.Amount > 0 {
 		suc = suc.Add(decimal.NewFromFloat(sbbo.Amount))
 		dbUtil.Engine.Insert(&sbbo)
 	}
 
-	if sbpb.Amount>0 {
+	if sbpb.Amount > 0 {
 		suc = suc.Add(decimal.NewFromFloat(sbpb.Amount))
 		dbUtil.Engine.Insert(&sbpb)
 	}
 
-	if sbpbp.Amount>0 {
+	if sbpbp.Amount > 0 {
 		suc = suc.Add(decimal.NewFromFloat(sbpbp.Amount))
 		dbUtil.Engine.Insert(&sbpbp)
 	}
 	sub := da.Sub(suc)
-	com.Amount,_=decimal.NewFromFloat(com.Amount).Add(sub).Float64()
+	com.Amount, _ = decimal.NewFromFloat(com.Amount).Add(sub).Float64()
 	dbUtil.Engine.ID(com.Id).Update(&com)
 }
 
-func Sign(amountStr,addr,timeStr string)string{
-	keccakA := crypto.Keccak256([]byte(amountStr),[]byte(enums.DIGIT))
-	keccakS := crypto.Keccak256(keccakA, []byte(timeStr),[]byte(addr))
-	return "0x"+hex.EncodeToString(keccakS)
+func Sign(amountStr, addr, timeStr string) string {
+	keccakA := crypto.Keccak256([]byte(amountStr), []byte(enums.DIGIT))
+	keccakS := crypto.Keccak256(keccakA, []byte(timeStr), []byte(addr))
+	return "0x" + hex.EncodeToString(keccakS)
 }
 
 //提币
-func withdrawal(kx int64,hash,addr string,amount decimal.Decimal){
+func withdrawal(kx int64, hash, addr string, amount decimal.Decimal) {
 	var ua models.UserAddr
 	b, _ := dbUtil.Engine.Id(addr).Get(&ua)
 	if !b {
 		return
 	}
-	f,_:= amount.Float64()
+	f, _ := amount.Float64()
 	var wb models.WithdrawalBill
 	bw, _ := dbUtil.Engine.Where("addr=? and status=0 and hash=?", addr, hash).Get(&wb)
 	if !bw {
-		bill := models.WithdrawalBill{IdWork.Generate(), addr, f, 1, kx,kx, hash, NowTimeString()}
+		bill := models.WithdrawalBill{IdWork.Generate(), addr, f, 1, kx, kx, hash, NowTimeString()}
 		dbUtil.Engine.Insert(&bill)
-		ua.UseAmount,_ = decimal.NewFromFloat(ua.UseAmount).Sub(amount).Float64()
+		ua.UseAmount, _ = decimal.NewFromFloat(ua.UseAmount).Sub(amount).Float64()
 		dbUtil.Engine.ID(ua.Addr).Cols("use_amount").Update(&ua)
 		return
 	}
@@ -415,55 +415,54 @@ func withdrawal(kx int64,hash,addr string,amount decimal.Decimal){
 	dbUtil.Engine.ID(wb.Id).Cols("status,suc_block").Update(&wb)
 }
 
-func cheakWithdrawal(){
+func cheakWithdrawal() {
 	for {
 		h, _ := time.ParseDuration("-1200s")
 		format := time.Now().AddDate(0, 0, 0).Add(h).Format("2006-01-02 15:04:05")
 		var wb []models.WithdrawalBill
-		dbUtil.Engine.Where("status=0 AND create_block<? AND create_time<?",kx-int64(30),format).Find(&wb)
+		dbUtil.Engine.Where("status=0 AND create_block<? AND create_time<?", kx-int64(30), format).Find(&wb)
 		for _, v := range wb {
 			req1 := new(pb.ReqTxByHash)
-			req1.Hash=v.Hash
+			req1.Hash = v.Hash
 			data, err := ktoClient.GetTxByHash(context.Background(), req1)
-			if err!=nil {
-				logs.Error("addr=",v.Addr,"block=",kx,"err=",err)
+			if err != nil {
+				logs.Error("addr=", v.Addr, "block=", kx, "err=", err)
 				continue
 			}
 			tx, err := transaction.DeserializeFinishedTransaction(data.Data)
-			if err!=nil {
+			if err != nil {
 				v.Status = -1
 				dbUtil.Engine.ID(v.Id).Cols("status").Update(&v)
 				var ua models.UserAddr
 				dbUtil.Engine.Id(v.Addr).Get(&ua)
-				ua.UseAmount,_ = decimal.NewFromFloat(ua.UseAmount).Add( decimal.NewFromFloat(v.Amount)).Float64()
+				ua.UseAmount, _ = decimal.NewFromFloat(ua.UseAmount).Add(decimal.NewFromFloat(v.Amount)).Float64()
 				dbUtil.Engine.ID(ua.Addr).Cols("use_amount").Update(&ua)
-			}else{
+			} else {
 				v.Status = 1
 				v.SucBlock = int64(tx.BlockNum)
 				v.Hash = tx.HashToString()
 				dbUtil.Engine.ID(v.Id).Cols("status,suc_block,hash").Update(&v)
 			}
 		}
-		time.Sleep(time.Second*300)
+		time.Sleep(time.Second * 300)
 	}
 }
 
-func getAmountOut()decimal.Decimal{
+func getAmountOut() decimal.Decimal {
 	ic, err := NewRouter(common.HexToAddress(enums.AMOUNTCONTRACT), conn)
-	if err!=nil {
-		logs.Error("err=",err)
+	if err != nil {
+		logs.Error("err=", err)
 		return decimal.Zero
 	}
-	amountIn:=decimal.New(1,11).BigInt()
-	addrs :=make([]common.Address,0)
+	amountIn := decimal.New(1, 11).BigInt()
+	addrs := make([]common.Address, 0)
 	gdlAddress := common.HexToAddress(enums.KTOCONTRACT)
 	usdtAddress := common.HexToAddress(enums.USDT)
-	addrs = append(addrs,gdlAddress,usdtAddress)
-	b,err := ic.GetAmountsOut(&bind.CallOpts{}, amountIn, addrs)
-	if err!=nil {
-		logs.Error("err=",err)
+	addrs = append(addrs, gdlAddress, usdtAddress)
+	b, err := ic.GetAmountsOut(&bind.CallOpts{}, amountIn, addrs)
+	if err != nil {
+		logs.Error("err=", err)
 		return decimal.Zero
 	}
-	return decimal.NewFromBigInt(b[1],-18)
+	return decimal.NewFromBigInt(b[1], -18)
 }
-

+ 18 - 17
util/task.go

@@ -2,14 +2,15 @@ package util
 
 import (
 	"fmt"
+	"ktogame/dbUtil"
+	"ktogame/models"
+	"time"
+
 	"github.com/astaxie/beego/toolbox"
 	"github.com/shopspring/decimal"
-	"server_fhl/dbUtil"
-	"server_fhl/models"
-	"time"
 )
 
-func init(){
+func init() {
 	fmt.Println("进来定时")
 	tk1 := toolbox.NewTask("myTask1", "0 01 0 * * 0-6", func() error {
 		fenfa()
@@ -19,7 +20,7 @@ func init(){
 	toolbox.StartTask()
 }
 
-func fenfa(){
+func fenfa() {
 	var ci models.CommonInfo
 	dbUtil.Engine.Get(&ci)
 	nowFormat := NowTimeDayString()
@@ -29,28 +30,28 @@ func fenfa(){
 	}
 	format := time.Now().AddDate(0, 0, -6).Format("2006-01-02 15:04:05")
 	sql_total := "SELECT IFNULL(SUM(1-amount_lv),0) as total FROM user_addr WHERE amount_lv<1 AND create_time<?"
-	res,_ :=dbUtil.Engine.SQL(sql_total,format).QueryInterface()
-	totalLv,_ := decimal.NewFromString(string(res[0]["total"].([]uint8)))
+	res, _ := dbUtil.Engine.SQL(sql_total, format).QueryInterface()
+	totalLv, _ := decimal.NewFromString(string(res[0]["total"].([]uint8)))
 	st := time.Now().AddDate(0, 0, 2).Format("2006-01-02 15:04:05")
 	ci.SupplyTime = st
-	if totalLv.Cmp(decimal.Zero)==0 {
+	if totalLv.Cmp(decimal.Zero) == 0 {
 		dbUtil.Engine.ID(ci.Id).Cols("supply_time").Update(&ci)
 		return
 	}
 	var user []models.UserAddr
-	dbUtil.Engine.Where("amount_lv<1 and create_time<?",format).Find(&user)
+	dbUtil.Engine.Where("amount_lv<1 and create_time<?", format).Find(&user)
 	div := decimal.NewFromFloat(ci.SupplyAmount).Div(totalLv)
-	fmt.Println("div=",div)
+	fmt.Println("div=", div)
 	out := getAmountOut()
-	fmt.Println("out=",out)
+	fmt.Println("out=", out)
 	for _, v := range user {
-		mul := decimal.NewFromFloat(1-v.AmountLv).Mul(div)
-		v.Profit4,_=decimal.NewFromFloat(v.Profit4).Add(mul).Float64()
-		v.UseAmount,_=decimal.NewFromFloat(v.UseAmount).Add(mul).Float64()
+		mul := decimal.NewFromFloat(1 - v.AmountLv).Mul(div)
+		v.Profit4, _ = decimal.NewFromFloat(v.Profit4).Add(mul).Float64()
+		v.UseAmount, _ = decimal.NewFromFloat(v.UseAmount).Add(mul).Float64()
 		i := mul.Mul(out).Div(decimal.NewFromFloat(200.0))
-		v.AmountLv,_=decimal.NewFromFloat(v.AmountLv).Add(i).Float64()
-		f,_ := mul.Float64()
-		sb := models.SuccessBill{IdWork.Generate(),v.Addr,f,1,0,"","-",5,NowTimeString()}
+		v.AmountLv, _ = decimal.NewFromFloat(v.AmountLv).Add(i).Float64()
+		f, _ := mul.Float64()
+		sb := models.SuccessBill{IdWork.Generate(), v.Addr, f, 1, 0, "", "-", 5, NowTimeString()}
 		dbUtil.Engine.ID(v.Addr).Cols("amount_lv,use_amount,profit4").Update(&v)
 		dbUtil.Engine.Insert(&sb)
 		dbUtil.Engine.ID(ci.Id).Cols("supply_time").Update(&ci)