@@ -34,7 +34,7 @@ func TestFetchReceiptTokenTransfers(t *testing.T) {
3434 // Get the balance outputs from the transfer logs
3535 balances := transfers .ComputeBalanceOutputs ()
3636 require .NotNil (t , balances )
37- require .Equal (t , len (balances ), 2 )
37+ require .Equal (t , 2 , len (balances ))
3838 // spew.Dump(balances)
3939
4040 require .Equal (t , common .HexToAddress ("0xaf88d065e77c8cC2239327C5EDb3A432268e5831" ), balances [0 ].Token ) // USDC
@@ -77,7 +77,7 @@ func TestFetchReceiptTokenTransfers(t *testing.T) {
7777 // Get the balance outputs from the transfer logs
7878 balances := transfers .ComputeBalanceOutputs ()
7979 require .NotNil (t , balances )
80- require .Equal (t , len (balances ), 4 )
80+ require .Equal (t , 4 , len (balances ))
8181 // spew.Dump(balances)
8282
8383 require .Equal (t , common .HexToAddress ("0x539bdE0d7Dbd336b79148AA742883198BBF60342" ), balances [0 ].Token ) // MAGIC
@@ -139,9 +139,9 @@ func TestFetchReceiptTokenTransfers(t *testing.T) {
139139 require .Equal (t , big .NewInt (9979 ), transfers [2 ].Value )
140140
141141 // Get the balance outputs from the transfer logs
142- balances := transfers .ComputeBalanceOutputs ()
142+ balances := transfers .ComputeBalanceOutputs (). OmitZeroBalances ()
143143 require .NotNil (t , balances )
144- require .Equal (t , len (balances ), 3 )
144+ require .Equal (t , 3 , len (balances ))
145145 // spew.Dump(balances)
146146
147147 require .Equal (t , usdc , balances [0 ].Token )
@@ -176,9 +176,9 @@ func TestFetchReceiptTokenTransfers(t *testing.T) {
176176 // spew.Dump(transfers)
177177
178178 // Get the balance outputs from the transfer logs
179- balances := transfers .ComputeBalanceOutputs ()
179+ balances := transfers .ComputeBalanceOutputs (). OmitZeroBalances ()
180180 require .NotNil (t , balances )
181- require .Equal (t , len (balances ), 9 )
181+ require .Equal (t , 9 , len (balances ))
182182 // spew.Dump(balances)
183183
184184 usdc := common .HexToAddress ("0xaf88d065e77c8cC2239327C5EDb3A432268e5831" )
@@ -270,14 +270,13 @@ func TestFetchReceiptTokenTransfers(t *testing.T) {
270270 require .Greater (t , len (transfers ), 0 )
271271 require .Equal (t , 1 , len (receipt .Logs ))
272272
273- // Trails intent
274273 require .Equal (t , 1 , len (transfers ))
275274 // spew.Dump(transfers)
276275
277276 // Get the balance outputs from the transfer logs
278277 balances := transfers .ComputeBalanceOutputs ()
279278 require .NotNil (t , balances )
280- require .Equal (t , len (balances ), 2 )
279+ require .Equal (t , 2 , len (balances ))
281280 // spew.Dump(balances)
282281
283282 require .Equal (t , common .HexToAddress ("0x203A662b0BD271A6ed5a60EdFbd04bFce608FD36" ), balances [0 ].Token )
@@ -292,17 +291,46 @@ func TestFetchReceiptTokenTransfers(t *testing.T) {
292291 // Case 6: polygon POL LogTransfer event
293292 // https://polygonscan.com/tx/0x252419983224542bfb07dab75808fa57186a7a269d0d267ae655eb7ef037fdd5
294293 t .Run ("Case 6: POL with LogTransfer" , func (t * testing.T ) {
294+ provider , err := ethrpc .NewProvider ("https://nodes.sequence.app/polygon" )
295+ require .NoError (t , err )
296+
297+ txnHash := common .HexToHash ("0x252419983224542bfb07dab75808fa57186a7a269d0d267ae655eb7ef037fdd5" )
298+ receipt , transfers , err := receipts .FetchReceiptTokenTransfers (context .Background (), provider , txnHash )
299+ require .NoError (t , err )
300+ require .NotNil (t , receipt )
301+ require .Greater (t , len (transfers ), 0 )
302+ require .Equal (t , 25 , len (receipt .Logs )) // actually a ton of stuff in here
303+
304+ // Trails intent
305+ transfers = transfers .FilterByContractAddress (common .HexToAddress ("0x0000000000000000000000000000000000001010" )) // POL token
306+ require .Equal (t , 2 , len (transfers ))
307+ // spew.Dump(transfers)
308+
309+ // Get the balance outputs from the transfer logs
310+ balances := transfers .ComputeBalanceOutputs (true ) // omit zero balances
311+ require .NotNil (t , balances )
312+ require .Equal (t , 2 , len (balances ))
313+ // spew.Dump(balances)
314+
315+ polPsuedoToken := common .HexToAddress ("0x0000000000000000000000000000000000001010" )
316+
317+ require .Equal (t , polPsuedoToken , balances [0 ].Token )
318+ require .Equal (t , common .HexToAddress ("0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270" ), balances [0 ].Account )
319+ require .Equal (t , makeBigInt (t , "-3965683724100320759" ), balances [0 ].Balance )
320+
321+ require .Equal (t , polPsuedoToken , balances [1 ].Token )
322+ require .Equal (t , common .HexToAddress ("0x1D17C0F90A0b3dFb5124C2FF56B33a0D2E202e1d" ), balances [1 ].Account )
323+ require .Equal (t , makeBigInt (t , "3965683724100320759" ), balances [1 ].Balance )
295324 })
296325
297326 // Case 7: bunch of logs for the same erc20 token, and we need to sum it up, ie. a big uniswap call
298327 // https://etherscan.io/tx/0xb11ff491495e145b07a1d3cc304f7d04b235b80af51b50da9a54095a6882fca4
299328 t .Run ("Case 7: Random txn with swap and many tokens" , func (t * testing.T ) {
329+ // NOTE, skippig writing this for now as its pretty similar
330+ // to case 4
300331 })
301332}
302333
303- // TODO: lets test the TokenTransfers directly with mock
304- // data we write by hand to ensure aggregation works properly, etc.
305-
306334func makeBigInt (t * testing.T , s string ) * big.Int {
307335 bi , ok := new (big.Int ).SetString (s , 10 )
308336 require .True (t , ok )
0 commit comments