diff --git a/src/model/service/task_service.go b/src/model/service/task_service.go index 97ce01e..6c15789 100644 --- a/src/model/service/task_service.go +++ b/src/model/service/task_service.go @@ -216,8 +216,29 @@ func TryProcessEvmERC20Transfer(chainNetwork string, contract common.Address, to log.Sugar.Infof("[%s-%s][%s] skip non-positive or nil amount", net, tokenSym, walletAddr) return } + + chainTokens, err := data.ListChainTokens(chainNetwork) + if err != nil { + log.Sugar.Warnf("[%s-%s] load chain tokens: %v", net, tokenSym, err) + return + } + var tokenConfig *mdb.ChainToken + for _, t := range chainTokens { + if strings.EqualFold(t.Symbol, tokenSym) { + tokenConfig = &t + break + } + } + if tokenConfig == nil || !tokenConfig.Enabled { + log.Sugar.Warnf("[%s-%s] token not enabled or configured in chain_tokens", net, tokenSym) + return + } + + pow := decimal.New(1, int32(tokenConfig.Decimals)) + log.Sugar.Warnf("tokenConfig.Decimals %d pow %s", tokenConfig.Decimals, pow.String()) + decimalQuant := decimal.NewFromBigInt(rawValue, 0) - amount := math.MustParsePrecFloat64(decimalQuant.Div(decimal.NewFromInt(1_000_000)).InexactFloat64(), 2) + amount := math.MustParsePrecFloat64(decimalQuant.Div(pow).InexactFloat64(), 2) if amount <= 0 { log.Sugar.Warnf("[%s-%s][%s] skip non-positive amount %.2f", net, tokenSym, walletAddr, amount) return diff --git a/src/task/listen.go b/src/task/listen.go index 36b4a05..96d14e7 100644 --- a/src/task/listen.go +++ b/src/task/listen.go @@ -16,13 +16,24 @@ func Start() { go StartTronBlockScannerListener() c := cron.New() + + // Solana polling + _, err := c.AddJob("@every 5s", ListenSolJob{}) + if err != nil { + log.Sugar.Errorf("[task] Failed to add ListenSolJob: %v", err) + return + } + + log.Sugar.Info("[task] ListenSolJob scheduled successfully (@every 5s)") + // RPC node health checks - _, err := c.AddJob("@every 30s", RpcHealthJob{}) + _, err = c.AddJob("@every 30s", RpcHealthJob{}) if err != nil { log.Sugar.Errorf("[task] Failed to add RpcHealthJob: %v", err) return } log.Sugar.Info("[task] RpcHealthJob scheduled successfully (@every 30s)") + c.Start() log.Sugar.Info("[task] Task scheduler started") }