From 2ccc80280912aa78813ca7b443141d76ba2559c8 Mon Sep 17 00:00:00 2001 From: Tobeyw Date: Wed, 13 Nov 2024 16:07:14 +0800 Subject: [PATCH] add token withdrawal --- .../biz/api/bridge.GetBridgeTxByNonce.go | 35 ++++++++++++++----- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/neo3fura_http/biz/api/bridge.GetBridgeTxByNonce.go b/neo3fura_http/biz/api/bridge.GetBridgeTxByNonce.go index 629b5f76..804503ad 100644 --- a/neo3fura_http/biz/api/bridge.GetBridgeTxByNonce.go +++ b/neo3fura_http/biz/api/bridge.GetBridgeTxByNonce.go @@ -3,7 +3,10 @@ package api import ( "encoding/json" "strconv" + "strings" + "github.com/joeqian10/neo3-gogogo/crypto" + "github.com/nspcc-dev/neo-go/pkg/util" "go.mongodb.org/mongo-driver/bson" "neo3fura_http/lib/type/h160" @@ -12,15 +15,34 @@ import ( func (me *T) GetBridgeTxByNonce(args struct { ContractHash h160.T + TokenHash h160.T Nonce int64 Limit int64 Skip int64 Filter map[string]interface{} }, ret *json.RawMessage) error { + var filter bson.M + nonceStr := strconv.FormatInt(args.Nonce, 10) if args.ContractHash.Valid() == false { return stderr.ErrInvalidArgs } - nonceStr := strconv.FormatInt(args.Nonce, 10) + + filter = bson.M{"contract": args.ContractHash.Val(), + "$or": []interface{}{bson.M{"eventname": "GasWithdrawal"}, bson.M{"eventname": "GasClaimable"}}, + "state.value.0.value": nonceStr, + } + + if args.TokenHash.Valid() == true && args.TokenHash.Val() != "0xd2a4cff31913016155e38e474a2c06d08be276cf" { + token, _ := util.Uint160DecodeStringLE(strings.TrimPrefix(args.TokenHash.Val(), "0x")) + + encoded := crypto.Base64Encode(token.BytesBE()) + filter = bson.M{"contract": args.ContractHash.Val(), + "$or": []interface{}{bson.M{"eventname": "TokenWithdrawal"}, bson.M{"eventname": "TokenClaimable"}}, + "state.value.1.value": nonceStr, + "state.value.0.value": encoded, + } + } + r1, _, err := me.Client.QueryAll(struct { Collection string Index string @@ -33,13 +55,10 @@ func (me *T) GetBridgeTxByNonce(args struct { Collection: "Notification", Index: "GetBridgeTxByNonce", Sort: bson.M{"_id": -1}, - Filter: bson.M{"contract": args.ContractHash.Val(), - "$or": []interface{}{bson.M{"eventname": "GasWithdrawal"}, bson.M{"eventname": "Claimable"}}, - "state.value.0.value": nonceStr, - }, - Query: []string{}, - Limit: args.Limit, - Skip: args.Skip, + Filter: filter, + Query: []string{}, + Limit: args.Limit, + Skip: args.Skip, }, ret) var result map[string]interface{}