Skip to content

Commit da565fc

Browse files
committed
update
1 parent c0009ba commit da565fc

File tree

1 file changed

+17
-10
lines changed

1 file changed

+17
-10
lines changed

receipts/token_transfers.go

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

14-
var tokenTransferTopicHashes = []common.Hash{
15-
common.HexToHash("0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"), // ERC20 Transfer
16-
common.HexToHash("0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4"), // Polygon POL LogTransfer (custom)
17-
}
18-
1914
// FetchReceiptTokenTransfers fetches the transaction receipt for the given transaction hash
2015
// and decodes any token transfer events (ERC20) that occurred within that transaction. TODOXXX: we
2116
// currently only support ERC20 token transfers, but we can extend this to support ERC721 and ERC1155 as well.
@@ -27,13 +22,25 @@ func FetchReceiptTokenTransfers(ctx context.Context, provider *ethrpc.Provider,
2722
if receipt == nil {
2823
return nil, nil, nil
2924
}
25+
transfers, err := DecodeTokenTransfersFromLogs(ctx, receipt.Logs)
26+
if err != nil {
27+
return receipt, nil, err
28+
}
29+
return receipt, transfers, nil
30+
}
31+
32+
var tokenTransferTopicHashes = []common.Hash{
33+
common.HexToHash("0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"), // ERC20 Transfer
34+
common.HexToHash("0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4"), // Polygon POL LogTransfer (custom)
35+
}
3036

37+
func DecodeTokenTransfersFromLogs(ctx context.Context, logs []*types.Log) (TokenTransfers, error) {
3138
transferTopic := common.HexToHash("0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef")
3239
polLogTransferTopic := common.HexToHash("0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4")
3340

3441
var decoded []*TokenTransfer
3542

36-
for _, log := range receipt.Logs {
43+
for _, log := range logs {
3744
if len(log.Topics) == 0 {
3845
continue
3946
}
@@ -44,7 +51,7 @@ func FetchReceiptTokenTransfers(ctx context.Context, provider *ethrpc.Provider,
4451
tokenAddress := log.Address
4552

4653
if log.Topics[0] == transferTopic {
47-
filterer, err := tokens.NewIERC20Filterer(log.Address, provider)
54+
filterer, err := tokens.NewIERC20Filterer(log.Address, nil)
4855
if err == nil {
4956
if ev, err := filterer.ParseTransfer(*log); err == nil && ev != nil {
5057
decoded = append(decoded, &TokenTransfer{Token: tokenAddress, From: ev.From, To: ev.To, Value: ev.Value, Raw: *log})
@@ -65,14 +72,14 @@ func FetchReceiptTokenTransfers(ctx context.Context, provider *ethrpc.Provider,
6572
}
6673
}
6774

68-
return receipt, decoded, nil
75+
return decoded, nil
6976
}
7077

7178
type TokenTransfer struct {
7279
Token common.Address
7380
From common.Address
7481
To common.Address
75-
Value *big.Int // TODO: check the erc20 log spec to see if we should call this value or amount
82+
Value *big.Int
7683
Raw types.Log
7784
}
7885

@@ -131,7 +138,7 @@ func (t TokenTransfers) Delta() TokenTransfers {
131138
return out
132139
}
133140

134-
// ComputeBalances aggregates net balance changes per token per account from the transfers.
141+
// ComputeBalanceOutputs aggregates net balance changes per token per account from the transfers.
135142
// For each transfer, it subtracts `Value` from `From` and adds `Value` to `To`.
136143
// Accounts with a resulting zero balance change for a given token are omitted.
137144
func (s TokenTransfers) ComputeBalanceOutputs() TokenBalances {

0 commit comments

Comments
 (0)