This commit is contained in:
aozhiwei 2024-07-19 12:41:25 +08:00
parent a9072e731a
commit 0e2a555f32
9 changed files with 0 additions and 790 deletions

View File

@ -1,22 +0,0 @@
package task
import (
"f5"
"fmt"
"q5"
"time"
)
type DailyTaskMgr struct {
SeasonRankMgr
}
func (this *DailyTaskMgr) Init() {
//sleepTime := f5.GetApp().GetNowDaySeconds() + 3600*24 - f5.GetApp().GetNowSeconds()
f5.GetTimer().SetInterval(
1000*3600*24,
func(e int32, args *q5.Args) {
this.SeasonRankMgr.CalcRanking()
fmt.Printf("DailyTask.sleepTime:%v \n", time.Now())
})
}

View File

@ -1,94 +0,0 @@
package task
import (
"fmt"
"math"
"q5"
)
func _xif(cond bool, trueVal int64, falseVal int64) int64 {
if cond {
return trueVal
} else {
return falseVal
}
}
func _round(x float64, y int64) float64 {
var num float64
if y == 0 {
num = math.Round(x)
} else {
//roundedNum := math.Round(x*100) / 100
strFmt := "%." + q5.ToString(y) + "f"
result := fmt.Sprintf(strFmt, x)
num = q5.ToFloat64(result)
}
//t := q5.ToString(result)
return num
}
func celTopX(ranking int64) int64 {
t := _xif(ranking > 0, 1, 0)*_xif(ranking <= 3, 1, 0)*1 +
_xif(ranking > 3, 1, 0)*_xif(ranking <= 10, 1, 0)*2 +
_xif(ranking > 10, 1, 0)*_xif(ranking <= 50, 1, 0)*3 +
_xif(ranking > 50, 1, 0)*_xif(ranking <= 100, 1, 0)*4 +
_xif(ranking > 100, 1, 0)*_xif(ranking <= 500, 1, 0)*5 +
_xif(ranking > 500, 1, 0)*_xif(ranking <= 1000, 1, 0)*6 +
_xif(ranking > 1000, 1, 0)*_xif(ranking <= 2000, 1, 0)*7 +
_xif(ranking > 2000, 1, 0)*_xif(ranking <= 5000, 1, 0)*8 +
_xif(ranking > 5000, 1, 0)*_xif(ranking <= 10000, 1, 0)*9 +
_xif(ranking > 10000, 1, 0)*10
return t
}
func celUserRankingPoint(ranking int64, topX int64) float64 {
//let XX = this.startTopX(topTd+1) ? this.startTopX(topTd+1):10001;
var x float64
if topX > 9 {
x = 10001
} else {
x = startTopX(topX + 1)
}
////TopX排位赛标准分配额=MAX(ROUND(TopX梯队最高值-(TopX梯队最高值-TopX梯队最低值)/(TopX梯队开始值(TopX梯队+1)-TopX梯队开始值-1)*(TopX-TopX梯队开始值),2),TopX梯队最低值)
//return Math.max(jsRound(this.maxTopX(topTd)-(this.maxTopX(topTd)-this.minTopX(topTd))/(XX-this.startTopX(topTd)-1)*(top-this.startTopX(topTd)),2),this.minTopX(topTd));
t := maxTopX(topX) - (maxTopX(topX)-minTopX(topX))/
(x-startTopX(topX)-1)*
(q5.ToFloat64(ranking)-startTopX(topX))
return math.Max(_round(t, 2), minTopX(topX))
}
func startTopX(topX int64) float64 {
t := _xif(topX == 1, 1, 0)*1 +
_xif(topX == 2, 1, 0)*4 +
_xif(topX == 3, 1, 0)*11 +
_xif(topX == 4, 1, 0)*51 +
_xif(topX == 5, 1, 0)*101 +
_xif(topX == 6, 1, 0)*501 +
_xif(topX == 7, 1, 0)*1001 +
_xif(topX == 8, 1, 0)*2001 +
_xif(topX == 9, 1, 0)*5001 +
_xif(topX == 10, 1, 0)*10001
return q5.ToFloat64(t)
}
func maxTopX(topX int64) float64 {
//TopX梯队最高值=ROUND(20000*0.6^(TopX梯队-1)*0.8*0.9^(TopX梯队-1),0)
//return jsRound(20000 * Math.pow(0.6,topTd-1) * 0.8 * Math.pow(0.9,topTd-1),0);
t := 20000 * math.Pow(0.6, q5.ToFloat64(topX-1)) * 0.8 * math.Pow(0.9, q5.ToFloat64(topX-1))
return _round(t, 0)
}
func minTopX(topX int64) float64 {
//TopX梯队最低值=ROUND(20000*0.6^(TopX梯队)*0.8*0.9^(TopX梯队-1),0)
//return jsRound(20000 * Math.pow(0.6,topTd) * 0.8 * Math.pow(0.9,topTd-1),0);
t := 20000 * math.Pow(0.6, q5.ToFloat64(topX)) * 0.8 * math.Pow(0.9, q5.ToFloat64(topX-1))
return _round(t, 0)
}
func ceilEx(number float64, decimals float64) float64 {
intPart := math.Floor(number)
floatPart := number - intPart
finallyFloatPart := math.Ceil(floatPart*math.Pow(q5.ToFloat64(10), decimals)) / math.Pow(q5.ToFloat64(10), decimals)
return intPart + finallyFloatPart
}

View File

@ -1,179 +0,0 @@
package task
import (
"f5"
"fmt"
"main/constant"
"mt"
"q5"
)
type HashRateMgr struct {
totalPowerNumber float64
period int32
hashRateMate *mt.HashRateCommon
}
func (this *HashRateMgr) CalPowerByCECReward() {
this.hashRateMate = mt.Table.HashRateCommon.GetLatestPeriod()
this.period = this.hashRateMate.GetId()
var totalPower float64 = 0
f5.NewAsyncTask(
func(task *f5.AsyncTask) {
sql := fmt.Sprintf("SELECT * FROM t_power_exchange_record WHERE period = %d",
this.period)
f5.GetJsStyleDb().SelectCustomQuery(
constant.GAME_DB,
sql,
func(err error, rows *f5.DataSet) {
if err != nil {
task.SetFail()
f5.GetSysLog().Error("HashRateMgr Error1:%v \n", err)
return
}
for rows.Next() {
totalPower += q5.ToFloat64(rows.GetByName("total_num"))
}
if rows.NumOfReaded() <= 0 {
task.SetFail()
} else {
task.SetSucc()
}
},
)
},
).OnSucc(
func(task *f5.AsyncTask) {
if totalPower != 0 {
this.totalPowerNumber = totalPower
this.getAccountGroup()
}
}).OnFail(
func(task *f5.AsyncTask) {
fmt.Printf("Cal Fail")
})
}
func (this *HashRateMgr) getAccountGroup() {
accountIds := []string{}
f5.NewAsyncTask(
func(task *f5.AsyncTask) {
sql := fmt.Sprintf("SELECT account_id,`period` FROM t_power_exchange_record WHERE period = %d group by account_id",
this.period)
f5.GetJsStyleDb().SelectCustomQuery(
constant.GAME_DB,
sql,
func(err error, rows *f5.DataSet) {
if err != nil {
task.SetFail()
f5.GetSysLog().Error("HashRateMgr Error2:%v \n", err)
return
}
for rows.Next() {
accountId := rows.GetByName("account_id")
accountIds = append(accountIds, accountId)
}
task.SetSucc()
},
)
}).OnSucc(
func(task *f5.AsyncTask) {
this.checkAccountIsSettle(accountIds)
}).OnFail(
func(task *f5.AsyncTask) {
})
}
func (this *HashRateMgr) checkAccountIsSettle(param []string) {
var index = 0
f5.NewAsyncTask(
func(task *f5.AsyncTask) {
if index >= len(param) {
task.SetSucc()
return
}
f5.GetJsStyleDb().OrmSelectOne(
constant.GAME_DB,
"t_hash_rate_reward",
[][]string{
{"account_id", q5.ToString(param[index])},
{"period", q5.ToString(this.period)},
},
func(err error, row *f5.DataSet) {
if err != nil {
f5.GetSysLog().Error("HashRateMgr Error3:%v \n", err)
task.SetFail()
return
}
if row.Next() {
index += 1
task.Continue()
} else {
//结算操作
this.getOwnerPower(param[index], func(ownerPower float64) {
target := ceilEx(q5.Min(this.totalPowerNumber/q5.ToFloat64(this.hashRateMate.GetCecPool()), 1), 6)
ratio := ownerPower / this.totalPowerNumber
cecNUm := ceilEx(q5.ToFloat64(this.hashRateMate.GetCecPool())*target*ratio, 2)
this.pushHashRateReward(param[index], cecNUm)
index += 1
task.Continue()
})
}
})
}).OnSucc(
func(task *f5.AsyncTask) {
}).OnFail(
func(task *f5.AsyncTask) {
})
}
func (this *HashRateMgr) getOwnerPower(account string, cb func(param float64)) {
var ownerPower float64 = 0
f5.NewAsyncTask(func(task *f5.AsyncTask) {
sql1 := fmt.Sprintf("SELECT * FROM t_power_exchange_record WHERE account_id = '%s' AND period = %d",
account,
this.period)
f5.GetJsStyleDb().SelectCustomQuery(
constant.GAME_DB,
sql1,
func(err error, rows *f5.DataSet) {
if err != nil {
task.SetFail()
f5.GetSysLog().Error("HashRateMgr Error4:%v \n", err)
return
}
for rows.Next() {
ownerPower += q5.ToFloat64(rows.GetByName("total_num"))
}
task.SetSucc()
},
)
}).OnSucc(func(task *f5.AsyncTask) {
cb(ownerPower)
}).OnFail(func(task *f5.AsyncTask) {
})
}
func (this *HashRateMgr) pushHashRateReward(account string, num float64) {
fields := [][]string{
{"account_id", account},
//q5.GenFieldKvEmptyAsNull("address", v.address),
{"address", q5.ToString("test123456789")},
{"period", q5.ToString(this.period)},
{"reward_cec", q5.ToString(num)},
{"createtime", q5.ToString(f5.GetApp().GetNowSeconds())},
{"modifytime", q5.ToString(f5.GetApp().GetNowSeconds())},
}
f5.GetJsStyleDb().Insert(
constant.GAME_DB,
"t_hash_rate_reward",
fields,
func(err error, id int64, affectedRows int64) {
if err != nil || affectedRows != 1 {
// 插入失败,处理错误逻辑
f5.GetSysLog().Error("HashRateMgr Error5:%v \n", err)
}
},
)
}

View File

@ -1,21 +0,0 @@
package task
import (
"f5"
"fmt"
"q5"
"time"
)
type HourlyTaskMgr struct {
HashRateMgr
}
func (this *HourlyTaskMgr) Init() {
f5.GetTimer().SetInterval(
1000*3600,
func(e int32, args *q5.Args) {
this.HashRateMgr.CalPowerByCECReward()
fmt.Printf("HourlyTask.sleepTime:%v \n", time.Now())
})
}

View File

@ -1,151 +0,0 @@
package task
import (
"f5"
"fmt"
"main/constant"
"math"
"mt"
"q5"
"sort"
)
type userDb struct {
idx int64
account_id string
address string
channel int32
rank int32
score int32
score_modifytime int64
}
type sortUserDb []userDb
func (this sortUserDb) Len() int {
return len(this)
}
func (this sortUserDb) Swap(i, j int) {
this[i], this[j] = this[j], this[i]
}
func (this sortUserDb) Less(i, j int) bool {
if this[i].score == this[j].score {
if this[i].score_modifytime == this[j].score_modifytime {
return this[i].idx < this[j].idx
} else {
return this[i].score_modifytime < this[j].score_modifytime
}
} else {
return this[i].score > this[j].score
}
}
type SeasonRankMgr struct {
}
func (this *SeasonRankMgr) CalcRanking() {
seasonMt := mt.Table.RankSeason.GetCurrentSeason()
season := mt.Table.RankSeason.GetLastSeason()
f5.GetJsStyleDb().OrmSelectOne(
constant.GAME_DB,
"t_season_ranking",
[][]string{
{"season", q5.ToString(season.GetId())},
},
func(err error, row *f5.DataSet) {
if err != nil {
f5.GetSysLog().Error("SeasonRankMgr Error1:%v \n", err)
return
}
row.Next()
if row.NumOfReaded() <= 0 && seasonMt == nil {
fmt.Println("OK")
this.goGetUsersRecords()
}
})
}
func (this *SeasonRankMgr) goGetUsersRecords() {
userHash := make(map[int64]*userDb)
userList := []userDb{}
var lastIdx int64 = 0
f5.NewAsyncTask(
func(task *f5.AsyncTask) {
sql := fmt.Sprintf("SELECT * FROM t_user WHERE idx > %d AND score >= %d LIMIT %d",
lastIdx,
constant.BASE_SCORE,
1000)
f5.GetJsStyleDb().SelectCustomQuery(
constant.GAME_DB,
sql,
func(err error, rows *f5.DataSet) {
if err != nil {
task.SetFail()
f5.GetSysLog().Error("SeasonRankMgr Error2:%v \n", err)
return
}
for rows.Next() {
user := userDb{}
user.idx = q5.ToInt64(rows.GetByName("idx"))
user.account_id = q5.ToString(rows.GetByName("account_id"))
user.address = q5.ToString(rows.GetByName("address"))
user.channel = q5.ToInt32(rows.GetByName("channel"))
user.rank = q5.ToInt32(rows.GetByName("rank"))
user.score = q5.ToInt32(rows.GetByName("score"))
user.score_modifytime = q5.ToInt64(rows.GetByName("score_modifytime"))
userHash[user.idx] = &user
userList = append(userList, user)
if user.idx > lastIdx {
lastIdx = user.idx
}
f5.GetSysLog().Info("get User:%s \n", user.idx)
}
task.SetSucc()
},
)
}).OnSucc(
func(task *f5.AsyncTask) {
if userList != nil {
sort.Sort(sortUserDb(userList))
this.pushRankingResult(userList)
}
}).OnFail(
func(task *f5.AsyncTask) {
f5.GetSysLog().Error("SeasonRankMgr Error3 \n")
return
})
}
func (this *SeasonRankMgr) pushRankingResult(record []userDb) {
for i, v := range record {
ranking := i + 1
topX := celTopX(q5.ToInt64(ranking))
point := math.Round(celUserRankingPoint(q5.ToInt64(ranking), topX))
fields := [][]string{
{"ranking", q5.ToString(ranking)},
{"ranking_point", q5.ToString(point)},
{"account_id", v.account_id},
q5.GenFieldKvEmptyAsNull("address", v.address),
{"channel", q5.ToString(v.channel)},
{"rank", q5.ToString(v.rank)},
{"score", q5.ToString(v.score)},
{"season", q5.ToString(2)},
{"createtime", q5.ToString(f5.GetApp().GetNowSeconds())},
{"modifytime", q5.ToString(f5.GetApp().GetNowSeconds())},
}
//f5.GetJsStyleDb().Insert(
// constant.GAME_DB,
// "t_season_ranking",
// fields,
// func(err error, id int64, affectedRows int64) {
// if err != nil || affectedRows != 1 {
// // 插入失败,处理错误逻辑
// fmt.Printf("Failed to insert t_season_ranking: %v", err)
// }
// },
//)
f5.GetSysLog().Info("ranking:%v", fields)
}
}

View File

@ -1,129 +0,0 @@
package spec_transfer721
import (
"q5"
"f5"
"main/service"
"main/constant"
"mt"
"jccommon"
"fmt"
)
type goldBullion struct {
mailCfgHash *q5.ConcurrentMap[string, *jccommon.MailConfig]
}
func (this* goldBullion) onMint(dbIdx int64, netId int32, contractAddress string, tokenId string,
from string, to string) bool {
ok := this.internalSendMail(dbIdx, to, constant.MAIL_GOLD_BULLION_MINT, tokenId)
return ok
}
func (this* goldBullion) onLock(dbIdx int64, netId int32, contractAddress string, tokenId string,
from string, to string) bool {
/*
ok := this.internalSendMail(dbIdx, from, constant.MAIL_GOLD_BULLION_LOCK, tokenId)
return ok
*/
return true
}
func (this *goldBullion) onUnlock(dbIdx int64, netId int32, contractAddress string, tokenId string,
from string, to string) bool {
accountAddress := to
accountId := service.GetAccountIdByAddress(accountAddress)
if accountId == "" {
return false
}
{
}
/*
goldDb := service.GetGoldBullionByTokenId(tokenId)
if goldDb == nil {
return false
}*/
ok := this.internalSendMail(dbIdx, to, constant.MAIL_GOLD_BULLION_UNLOCK, tokenId)
return ok
}
func (this* goldBullion) internalSendMail(dbIdx int64, accountAddress string, mailName string, tokenId string) bool {
var itemId int32
if !service.GetGoldBullionItemIdByTokenId(tokenId, &itemId) {
return true
}
goldNum := jccommon.GetGoldBullionGoldNum(itemId)
goldNumStr := this.formatGoldNum(goldNum)
itemMeta := mt.Table.Item.GetById(q5.ToInt64(itemId))
if itemMeta == nil {
return true
}
accountId := service.GetAccountIdByAddress(accountAddress)
if accountId == "" {
return true
}
mailMeta := mt.Table.Mail.GetByName(mailName)
if mailMeta == nil {
return true
}
mailCfg := this.getMailConfig(mailName)
if mailCfg == nil {
return true
}
nowTime := f5.GetApp().GetRealSeconds() + 3600 * 24 * 7
subject := mailMeta.GetTitle()
content := mailMeta.ReplaceContent(map[string]string{
"${item.name}": itemMeta.GetRealName(),
"${gold}": goldNumStr,
})
uniKey := fmt.Sprintf("%s_%s_%d", mailName, tokenId, dbIdx)
sendOk := service.SendSysMail(
uniKey,
accountId,
subject,
content,
q5.ToInt32(nowTime),
q5.ToInt32(nowTime),
mailCfg.Tag1,
mailCfg.Tag2)
if sendOk {
return service.UpdateSpecTransferStatus(dbIdx, 1)
}
return false
}
func (this *goldBullion) getMailConfig(mailName string) *jccommon.MailConfig {
if v, ok := this.mailCfgHash.Load(mailName); ok {
return *v
} else {
return nil
}
}
func (this *goldBullion) registerMailConfig(mailName string, tag1 int32, tag2 int32) {
p := new(jccommon.MailConfig)
p.MailName = mailName
p.Tag1 = tag1
p.Tag2 = tag2
this.mailCfgHash.Store(mailName, p)
}
func (this *goldBullion) formatGoldNum(goldNum int32) string {
return ""
}
func newGoldBullion() *goldBullion {
p := new(goldBullion)
p.mailCfgHash = new(q5.ConcurrentMap[string, *jccommon.MailConfig])
p.registerMailConfig(constant.MAIL_GOLD_BULLION_MINT,
jccommon.MAIL_TAG1_GOLD_BULLION,
jccommon.MAIL_TAG2_GOLD_BULLION_MINT)
p.registerMailConfig(constant.MAIL_GOLD_BULLION_LOCK,
jccommon.MAIL_TAG1_GOLD_BULLION,
jccommon.MAIL_TAG2_GOLD_BULLION_LOCK)
p.registerMailConfig(constant.MAIL_GOLD_BULLION_UNLOCK,
jccommon.MAIL_TAG1_GOLD_BULLION,
jccommon.MAIL_TAG2_GOLD_BULLION_UNLOCK)
return p
}

View File

@ -1,104 +0,0 @@
package spec_transfer721
import (
"q5"
"f5"
"main/service"
"main/constant"
"mt"
"jccommon"
"fmt"
)
type hero struct {
mailCfgHash *q5.ConcurrentMap[string, *jccommon.MailConfig]
}
func (this* hero) onMint(dbIdx int64, netId int32, contractAddress string, tokenId string,
from string, to string) bool {
if jccommon.IsAirDropNft(tokenId) {
return service.UpdateSpecTransferStatus(dbIdx, 1)
}
ok := this.internalSendMail(dbIdx, to, constant.MAIL_HERO_MINT, tokenId)
return ok
}
func (this* hero) onLock(dbIdx int64, netId int32, contractAddress string, tokenId string,
from string, to string) bool {
ok := this.internalSendMail(dbIdx, from, constant.MAIL_HERO_LOCK, tokenId)
return ok
}
func (this *hero) onUnlock(dbIdx int64, netId int32, contractAddress string, tokenId string,
from string, to string) bool {
ok := this.internalSendMail(dbIdx, to, constant.MAIL_HERO_UNLOCK, tokenId)
return ok
}
func (this* hero) internalSendMail(dbIdx int64, accountAddress string, mailName string, tokenId string) bool {
var itemId, heroQuality int32
if !service.GetHeroByTokenId(tokenId, &itemId, &heroQuality) {
return true
}
itemMeta := mt.Table.Item.GetById(q5.ToInt64(itemId))
if itemMeta == nil {
return true
}
accountId := service.GetAccountIdByAddress(accountAddress)
if accountId == "" {
return true
}
mailMeta := mt.Table.Mail.GetByName(mailName)
if mailMeta == nil {
return true
}
mailCfg := this.getMailConfig(mailName)
if mailCfg == nil {
return true
}
nowTime := f5.GetApp().GetRealSeconds() + 3600 * 24 * 7
subject := mailMeta.GetTitle()
content := mailMeta.ReplaceContent(map[string]string{
"${hero.name}": itemMeta.GetRealName(),
"${hero.quality}": q5.ToString(heroQuality),
})
uniKey := fmt.Sprintf("%s_%s_%d", mailName, tokenId, dbIdx)
sendOk := service.SendSysMail(
uniKey,
accountId,
subject,
content,
q5.ToInt32(nowTime),
q5.ToInt32(nowTime),
mailCfg.Tag1,
mailCfg.Tag2)
if sendOk {
return service.UpdateSpecTransferStatus(dbIdx, 1)
}
return false
}
func (this *hero) getMailConfig(mailName string) *jccommon.MailConfig {
if v, ok := this.mailCfgHash.Load(mailName); ok {
return *v
} else {
return nil
}
}
func (this *hero) registerMailConfig(mailName string, tag1 int32, tag2 int32) {
p := new(jccommon.MailConfig)
p.MailName = mailName
p.Tag1 = tag1
p.Tag2 = tag2
this.mailCfgHash.Store(mailName, p)
}
func newHero() *hero {
p := new(hero)
p.mailCfgHash = new(q5.ConcurrentMap[string, *jccommon.MailConfig])
p.registerMailConfig(constant.MAIL_HERO_MINT, jccommon.MAIL_TAG1_HERO, jccommon.MAIL_TAG2_HERO_MINT)
p.registerMailConfig(constant.MAIL_HERO_LOCK, jccommon.MAIL_TAG1_HERO, jccommon.MAIL_TAG2_HERO_LOCK)
p.registerMailConfig(constant.MAIL_HERO_UNLOCK, jccommon.MAIL_TAG1_HERO, jccommon.MAIL_TAG2_HERO_UNLOCK)
return p
}

View File

@ -1,80 +0,0 @@
package spec_transfer721
import (
"q5"
"f5"
"fmt"
"mt"
"jccommon"
"main/constant"
"math/rand"
)
type SpecTransfer721 struct {
handleHash *q5.ConcurrentMap[string, specTransfer721Handle]
}
func (this* SpecTransfer721) Init() {
return
this.handleHash = new(q5.ConcurrentMap[string, specTransfer721Handle])
this.handleHash.Store(jccommon.CONTRACT_NAME_CFHero, newHero())
//this.handleHash.Store(jccommon.CONTRACT_NAME_GoldBrick, newGoldBullion())
go this.process()
}
func (this* SpecTransfer721) UnInit() {
}
func (this* SpecTransfer721) process() {
f5.GetGoStyleDb().LoopLoad(
constant.BCEVENT_DB,
"t_721nft_spec_transfer",
"t_721nft_spec_transfer",
func () int64 {
return 3 + q5.ToInt64(rand.Intn(2))
},
func (lastIdx int64) string {
nowTime := f5.GetApp().GetRealSeconds()
expiredTime := nowTime - 3600 * 24 * 7
sql := fmt.Sprintf(`
SELECT * FROM t_721nft_spec_transfer WHERE idx > %d AND status = 0 AND createtime > %d LIMIT 1000
`,
lastIdx,
expiredTime)
return sql
},
[]string{
},
func () int64{
return 3
},
func () int64 {
return 60 * 1
},
this.dispatch)
}
func (this* SpecTransfer721) dispatch(ds *f5.DataSet) bool {
idx := q5.ToInt64(ds.GetByName("idx"))
netId := q5.ToInt32(ds.GetByName("net_id"))
contractAddress := ds.GetByName("contract_address")
tokenId := ds.GetByName("token_id")
fromAddress := ds.GetByName("from_address")
toAddress := ds.GetByName("to_address")
contractMeta := mt.Table.Contract.GetByNetIdAddress(netId, contractAddress)
nftLockMeta := mt.Table.Contract.GetByNetIdName(netId, jccommon.CONTRACT_NAME_NFTLock)
if contractMeta != nil {
if p, ok := this.handleHash.Load(contractMeta.GetName()); ok {
if q5.IsWeb3ZeroAddress(fromAddress) {
return (*p).onMint(idx, netId, contractAddress, tokenId, fromAddress, toAddress)
} else if nftLockMeta != nil {
if toAddress == nftLockMeta.GetAddress() {
return (*p).onLock(idx, netId, contractAddress, tokenId, fromAddress, toAddress)
} else if fromAddress == nftLockMeta.GetAddress() {
return (*p).onUnlock(idx, netId, contractAddress, tokenId, fromAddress, toAddress)
}
}
}
}
return false
}

View File

@ -1,10 +0,0 @@
package spec_transfer721
type specTransfer721Handle interface {
onMint(dbIdx int64, netId int32, contractAddress string, tokenId string,
from string, to string) bool
onLock(dbIdx int64, netId int32, contractAddress string, tokenId string,
from string, to string) bool
onUnlock(dbIdx int64, netId int32, contractAddress string, tokenId string,
from string, to string) bool
}