diff --git a/server/jccommon/types.go b/server/jccommon/types.go index a198237c..7c6212fd 100644 --- a/server/jccommon/types.go +++ b/server/jccommon/types.go @@ -114,6 +114,16 @@ type ContractStakeAndUnstakeCecPo struct { Amount string `json:"amount"` } +type Erc20TransferPo struct { + From string `json:"from"` + To string `json:"to"` + Value string `json:"value"` +} + +type BlockDataPo struct { + TimeStamp string `json:"timestamp"` +} + type NftIdentity struct { NetId int32 ContractAddress string @@ -157,3 +167,13 @@ func NewUserStackingPo() *UserStackingPo { p.Contracts = []*ContractStackingPo{} return p } + +func NewErc20TransferPo() *Erc20TransferPo { + p := new(Erc20TransferPo) + return p +} + +func NewBlockDataPo() *BlockDataPo { + p := new(BlockDataPo) + return p +} diff --git a/server/light_backtask/service/vip.go b/server/light_backtask/service/vip.go index 6331765b..80b8d361 100644 --- a/server/light_backtask/service/vip.go +++ b/server/light_backtask/service/vip.go @@ -30,6 +30,9 @@ func (this *vip) Add(accountAddress string, val string, idx int64, valField stri } nowTime := f5.GetApp().GetRealSeconds() if ds.Next() { + if q5.ToInt64(ds.GetByName(idxField)) <= idx { + return true + } bnVal, ok := new(big.Int).SetString(val, 10) if !ok { f5.GetSysLog().Info("vip.Add val to bigint error:%s", val) @@ -71,5 +74,5 @@ func (this *vip) Add(accountAddress string, val string, idx int64, valField stri return false } } - return false + return true } diff --git a/server/light_backtask/task/escec_Transfer.go b/server/light_backtask/task/escec_Transfer.go index 9f4768f8..6611ba3b 100644 --- a/server/light_backtask/task/escec_Transfer.go +++ b/server/light_backtask/task/escec_Transfer.go @@ -6,6 +6,8 @@ import ( "jccommon" "main/mt" "main/constant" + "main/service" + "strings" "fmt" ) @@ -58,5 +60,62 @@ ORDER BY idx LIMIT 1000 } func (this* esCecTransfer) saveToDb(ds *f5.DataSet) bool { + ro := jccommon.NewErc20TransferPo() + bo := jccommon.NewBlockDataPo() + if err := q5.DecodeJson(ds.GetByName("return_values"), ro); err != nil { + f5.GetSysLog().Warning("esCecTransfer.parser.return_values error:%s", err) + return false + } + if err := q5.DecodeJson(ds.GetByName("block_data"), bo); err != nil { + f5.GetSysLog().Warning("esCecTransfer.parser.block_data error:%s", err) + return false + } + idx := q5.ToInt64(ds.GetByName("idx")) + if !q5.IsWeb3ZeroAddress(ro.To) { + if !service.Vip.Add(ro.To, ro.Value, idx, "escec_balance", "escec_transfer_last_src_idx") { + return false + } + } + if !q5.IsWeb3ZeroAddress(ro.From) { + if !service.Vip.Add(ro.From, "-" + ro.Value, idx, "escec_balance", "escec_transfer_last_src_idx") { + return false + } + } + txhash := ds.GetByName("txhash") + logIndex := ds.GetByName("log_index") + netId := ds.GetByName("net_id") + eventName := ds.GetByName("event_name") + contractAddress := ds.GetByName("contract_address") + createTime := ds.GetByName("createtime") + modifyTime := ds.GetByName("modifytime") + + if err, _, _ := f5.GetGoStyleDb().NewUpsert( + constant.BCEVENT_DB, + "t_escec_transfer", + [][]string{ + {"txhash", txhash}, + {"log_index", logIndex}, + {"net_id", netId}, + {"contract_address", contractAddress}, + }, + [][]string{ + + }, + [][]string{ + {"txhash", txhash}, + {"log_index", logIndex}, + {"net_id", netId}, + {"contract_address", strings.ToLower(contractAddress)}, + {"src_idx", q5.ToString(idx)}, + {"event_name", eventName}, + {"chain_timestamp", q5.ToString(bo.TimeStamp)}, + {"from_address", strings.ToLower(ro.From)}, + {"to_address", strings.ToLower(ro.To)}, + {"value", ro.Value}, + {"createtime", createTime}, + {"modifytime", modifyTime}, + }); err != nil { + return false + } return true }