Skip to content

Commit 35de40c

Browse files
committed
update
1 parent 63282cb commit 35de40c

File tree

2 files changed

+55
-12
lines changed

2 files changed

+55
-12
lines changed

receipts/token_transfers.go

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@ import (
1010
"github.com/0xsequence/go-sequence/contracts/gen/tokens"
1111
)
1212

13+
var tokenTransferTopicHashes = []common.Hash{
14+
common.HexToHash("0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"), // ERC20 Transfer
15+
common.HexToHash("0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4"), // Polygon POL LogTransfer (custom)
16+
}
17+
1318
// FetchReceiptTokenTransfers fetches the transaction receipt for the given transaction hash
1419
// and decodes any token transfer events (ERC20) that occurred within that transaction. TODOXXX: we
1520
// currently only support ERC20 token transfers, but we can extend this to support ERC721 and ERC1155 as well.
@@ -68,7 +73,7 @@ type TokenTransfer struct {
6873

6974
type TokenTransfers []*TokenTransfer
7075

71-
func (t TokenTransfers) FilterTokenTransfersByContractAddress(ctx context.Context, contract common.Address) TokenTransfers {
76+
func (t TokenTransfers) FilterByContractAddress(ctx context.Context, contract common.Address) TokenTransfers {
7277
var out TokenTransfers
7378
for _, transfer := range t {
7479
if transfer.Raw.Address == contract {
@@ -78,7 +83,17 @@ func (t TokenTransfers) FilterTokenTransfersByContractAddress(ctx context.Contex
7883
return out
7984
}
8085

81-
func (t TokenTransfers) FilterTokenTransfersByFromAddress(ctx context.Context, from common.Address) TokenTransfers {
86+
func (t TokenTransfers) FilterByAccountAddress(ctx context.Context, account common.Address) TokenTransfers {
87+
var out TokenTransfers
88+
for _, transfer := range t {
89+
if transfer.From == account || transfer.To == account {
90+
out = append(out, transfer)
91+
}
92+
}
93+
return out
94+
}
95+
96+
func (t TokenTransfers) FilterByFromAddress(ctx context.Context, from common.Address) TokenTransfers {
8297
var out TokenTransfers
8398
for _, transfer := range t {
8499
if transfer.From == from {
@@ -88,7 +103,7 @@ func (t TokenTransfers) FilterTokenTransfersByFromAddress(ctx context.Context, f
88103
return out
89104
}
90105

91-
func (t TokenTransfers) FilterTokenTransfersByToAddress(ctx context.Context, to common.Address) TokenTransfers {
106+
func (t TokenTransfers) FilterByToAddress(ctx context.Context, to common.Address) TokenTransfers {
92107
var out TokenTransfers
93108
for _, transfer := range t {
94109
if transfer.To == to {

receipts/token_transfers_test.go

Lines changed: 37 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,44 @@ import (
1212
)
1313

1414
func TestFetchReceiptTokenTransfers(t *testing.T) {
15-
// txnHash := https://polygonscan.com/tx/0x252419983224542bfb07dab75808fa57186a7a269d0d267ae655eb7ef037fdd5
16-
provider, err := ethrpc.NewProvider("https://nodes.sequence.app/polygon")
17-
require.NoError(t, err)
1815

19-
txnHash := common.HexToHash("0x252419983224542bfb07dab75808fa57186a7a269d0d267ae655eb7ef037fdd5")
16+
t.Run("ERC20 Transfer on Arbitrum", func(t *testing.T) {
17+
// https://arbiscan.io/tx/0xb88cc2fea7cd26c88e169f6244fea76f590fc0797ba4c424669d1b74643f1dc9
18+
provider, err := ethrpc.NewProvider("https://nodes.sequence.app/arbitrum")
19+
require.NoError(t, err)
2020

21-
receipt, transfers, err := receipts.FetchReceiptTokenTransfers(context.Background(), provider, txnHash)
22-
require.NoError(t, err)
23-
require.NotNil(t, receipt)
24-
require.Greater(t, len(transfers), 0)
21+
txnHash := common.HexToHash("0xb88cc2fea7cd26c88e169f6244fea76f590fc0797ba4c424669d1b74643f1dc9")
2522

26-
spew.Dump(transfers)
23+
// TODO: lets find a very simple metamask erc20 transfer, and check it in the test
24+
// TODO2: find a batch of different erc20 transfers to test against.. for example
25+
// its possible there can be multiple erc20 transfers in a single tx that come and go from an individual
26+
// so what we want to see is the delta, the diff, etc. .. aka, the "Result" .. aka... "TokenTransferResult"
27+
// and not just all of the TokenTransferLogs ..
28+
// TODO3: vault bridge USDC .. lets check the token transfer event, prob just erc20 too
29+
30+
receipt, transfers, err := receipts.FetchReceiptTokenTransfers(context.Background(), provider, txnHash)
31+
require.NoError(t, err)
32+
require.NotNil(t, receipt)
33+
require.Greater(t, len(transfers), 0)
34+
35+
spew.Dump(transfers)
36+
37+
})
38+
39+
t.Run("Polygon POL LogTransfer", func(t *testing.T) {
40+
t.Skip("POL")
41+
42+
// txnHash := https://polygonscan.com/tx/0x252419983224542bfb07dab75808fa57186a7a269d0d267ae655eb7ef037fdd5
43+
provider, err := ethrpc.NewProvider("https://nodes.sequence.app/polygon")
44+
require.NoError(t, err)
45+
46+
txnHash := common.HexToHash("0x252419983224542bfb07dab75808fa57186a7a269d0d267ae655eb7ef037fdd5")
47+
48+
receipt, transfers, err := receipts.FetchReceiptTokenTransfers(context.Background(), provider, txnHash)
49+
require.NoError(t, err)
50+
require.NotNil(t, receipt)
51+
require.Greater(t, len(transfers), 0)
52+
53+
spew.Dump(transfers)
54+
})
2755
}

0 commit comments

Comments
 (0)