Skip to content

Commit 7414031

Browse files
committed
update
1 parent 6175c85 commit 7414031

File tree

2 files changed

+32
-8
lines changed

2 files changed

+32
-8
lines changed

receipts/token_transfers.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,13 @@ func FetchReceiptTokenTransfers(ctx context.Context, provider *ethrpc.Provider,
4040
continue
4141
}
4242

43+
tokenAddress := log.Address
44+
4345
if log.Topics[0] == transferTopic {
4446
filterer, err := tokens.NewIERC20Filterer(log.Address, provider)
4547
if err == nil {
4648
if ev, err := filterer.ParseTransfer(*log); err == nil && ev != nil {
47-
decoded = append(decoded, &TokenTransfer{From: ev.From, To: ev.To, Value: ev.Value, Raw: *log})
49+
decoded = append(decoded, &TokenTransfer{Token: tokenAddress, From: ev.From, To: ev.To, Value: ev.Value, Raw: *log})
4850
continue
4951
}
5052
}
@@ -53,21 +55,23 @@ func FetchReceiptTokenTransfers(ctx context.Context, provider *ethrpc.Provider,
5355
// TODO: need to try all of the various versions of this.. and we may as well support ERC721 and ERC1155 too
5456
// note: "indexed" args, etc.
5557

58+
// TODO: this is wrong, etc.
5659
if len(log.Topics) >= 3 {
5760
from := common.BytesToAddress(log.Topics[1].Bytes())
5861
to := common.BytesToAddress(log.Topics[2].Bytes())
5962
value := new(big.Int).SetBytes(log.Data)
60-
decoded = append(decoded, &TokenTransfer{From: from, To: to, Value: value, Raw: *log})
63+
decoded = append(decoded, &TokenTransfer{Token: tokenAddress, From: from, To: to, Value: value, Raw: *log})
6164
}
6265
}
6366

6467
return receipt, decoded, nil
6568
}
6669

6770
type TokenTransfer struct {
71+
Token common.Address
6872
From common.Address
6973
To common.Address
70-
Value *big.Int
74+
Value *big.Int // TODO: check the erc20 log spec to see if we should call this value or amount
7175
Raw types.Log
7276
}
7377

receipts/token_transfers_test.go

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package receipts_test
22

33
import (
44
"context"
5+
"math/big"
56
"testing"
67

78
"github.com/0xsequence/ethkit/ethrpc"
@@ -13,9 +14,6 @@ import (
1314

1415
func TestFetchReceiptTokenTransfers(t *testing.T) {
1516

16-
// TODO: lets find a very simple metamask erc20 transfer, and check it in the test
17-
// https://arbiscan.io/tx/0x6753a97203d159702e594662729b06608cf3b9c99c0cce177b9d7b66e6456150
18-
1917
// TODO2: a txn with a bunch of different erc20 transfers inside of it, ie. batch send
2018
// this is a sequence v2 send of usdc and magic on arbitrum.. batch send
2119
// https://arbiscan.io/tx/0x65c70290232207a21ef6805ae50622def8d52b7a8f381e1c3eac24d5423e0657
@@ -34,9 +32,9 @@ func TestFetchReceiptTokenTransfers(t *testing.T) {
3432
// and we have to do a delta/diff, and return the "result" maybe "TokenTransferResult" ?
3533
// https://etherscan.io/tx/0xb11ff491495e145b07a1d3cc304f7d04b235b80af51b50da9a54095a6882fca4
3634

37-
// Test 1: Simple ERC20 Transfer via EOA, which shows just a simple transfer event
35+
// Case 1: Simple ERC20 Transfer via EOA, which shows just a simple transfer event
3836
// https://arbiscan.io/tx/0x6753a97203d159702e594662729b06608cf3b9c99c0cce177b9d7b66e6456150
39-
t.Run("Simple ERC20 Transfer via EOA", func(t *testing.T) {
37+
t.Run("Case 1: Simple ERC20 Transfer via EOA", func(t *testing.T) {
4038
provider, err := ethrpc.NewProvider("https://nodes.sequence.app/arbitrum")
4139
require.NoError(t, err)
4240

@@ -46,7 +44,29 @@ func TestFetchReceiptTokenTransfers(t *testing.T) {
4644
require.NotNil(t, receipt)
4745
require.Greater(t, len(transfers), 0)
4846

47+
// spew.Dump(transfers)
48+
require.Equal(t, 1, len(transfers))
49+
require.Equal(t, common.HexToAddress("0xaf88d065e77c8cC2239327C5EDb3A432268e5831"), transfers[0].Token) // USDC
50+
require.Equal(t, common.HexToAddress("0x1D17C0F90A0b3dFb5124C2FF56B33a0D2E202e1d"), transfers[0].From)
51+
require.Equal(t, common.HexToAddress("0x5646E2424A7b7d43740EF14bc5b4f1e00Bf9B6Ba"), transfers[0].To)
52+
require.Equal(t, big.NewInt(184840), transfers[0].Value)
53+
})
54+
55+
// Case 2: a txn with a bunch of different erc20 transfers inside of it, ie. batch send
56+
// this is a sequence v2 send of usdc and magic on arbitrum.. batch send
57+
// https://arbiscan.io/tx/0x65c70290232207a21ef6805ae50622def8d52b7a8f381e1c3eac24d5423e0657
58+
t.Run("Case 2: Batch of ERC20 Transfers via SCW", func(t *testing.T) {
59+
provider, err := ethrpc.NewProvider("https://nodes.sequence.app/arbitrum")
60+
require.NoError(t, err)
61+
62+
txnHash := common.HexToHash("0x65c70290232207a21ef6805ae50622def8d52b7a8f381e1c3eac24d5423e0657")
63+
receipt, transfers, err := receipts.FetchReceiptTokenTransfers(context.Background(), provider, txnHash)
64+
require.NoError(t, err)
65+
require.NotNil(t, receipt)
66+
require.Greater(t, len(transfers), 0)
67+
4968
spew.Dump(transfers)
69+
require.Equal(t, 2, len(transfers))
5070
})
5171

5272
//--

0 commit comments

Comments
 (0)