@@ -26,6 +26,7 @@ import (
2626 "github.com/ethereum/go-ethereum/core/types"
2727 "github.com/ethereum/go-ethereum/rlp"
2828 "github.com/ethereum/go-ethereum/statediff/indexer"
29+ "github.com/ethereum/go-ethereum/statediff/indexer/ipfs"
2930 "github.com/ethereum/go-ethereum/statediff/indexer/ipfs/ipld"
3031 "github.com/ethereum/go-ethereum/statediff/indexer/mocks"
3132 "github.com/ethereum/go-ethereum/statediff/indexer/models"
@@ -310,62 +311,94 @@ func TestPublishAndIndexer(t *testing.T) {
310311 }
311312 })
312313
313- t .Run ("Publish and index log IPLDs for single receipt" , func (t * testing.T ) {
314+ t .Run ("Publish and index log IPLDs for multiple receipt of a specific block " , func (t * testing.T ) {
314315 setup (t )
315316 defer tearDown (t )
317+
318+ rcts := make ([]string , 0 )
319+ pgStr := `SELECT receipt_cids.leaf_cid FROM eth.receipt_cids, eth.transaction_cids, eth.header_cids
320+ WHERE receipt_cids.tx_id = transaction_cids.id
321+ AND transaction_cids.header_id = header_cids.id
322+ AND header_cids.block_number = $1
323+ ORDER BY transaction_cids.index`
324+ err = db .Select (& rcts , pgStr , mocks .BlockNumber .Uint64 ())
325+ if err != nil {
326+ t .Fatal (err )
327+ }
328+
316329 type logIPLD struct {
317330 Index int `db:"index"`
318331 Address string `db:"address"`
319332 Data []byte `db:"data"`
320333 Topic0 string `db:"topic0"`
321334 Topic1 string `db:"topic1"`
322335 }
323-
324- results := make ([]logIPLD , 0 )
325- pgStr : = `SELECT log_cids.index, log_cids.address, log_cids.Topic0, log_cids.Topic1, data FROM eth.log_cids
336+ for i := range rcts {
337+ results := make ([]logIPLD , 0 )
338+ pgStr = `SELECT log_cids.index, log_cids.address, log_cids.Topic0, log_cids.Topic1, data FROM eth.log_cids
326339 INNER JOIN eth.receipt_cids ON (log_cids.receipt_id = receipt_cids.id)
327340 INNER JOIN public.blocks ON (log_cids.leaf_mh_key = blocks.key)
328- WHERE receipt_cids.cid = $1 ORDER BY eth.log_cids.index ASC`
329- err = db .Select (& results , pgStr , rct4CID . String () )
330- require .NoError (t , err )
341+ WHERE receipt_cids.leaf_cid = $1 ORDER BY eth.log_cids.index ASC`
342+ err = db .Select (& results , pgStr , rcts [ i ] )
343+ require .NoError (t , err )
331344
332- // expecting MockLog1 and MockLog2 for mockReceipt4
333- expectedLogs := mocks .MockReceipts [3 ].Logs
334- shared .ExpectEqual (t , len (results ), len (expectedLogs ))
345+ // expecting MockLog1 and MockLog2 for mockReceipt4
346+ expectedLogs := mocks .MockReceipts [i ].Logs
347+ shared .ExpectEqual (t , len (results ), len (expectedLogs ))
335348
336- var nodeElements []interface {}
337- for idx , r := range results {
338- // Decode the log leaf node.
339- err = rlp .DecodeBytes (r .Data , & nodeElements )
340- require .NoError (t , err )
349+ var nodeElements []interface {}
350+ for idx , r := range results {
351+ // Decode the log leaf node.
352+ err = rlp .DecodeBytes (r .Data , & nodeElements )
353+ require .NoError (t , err )
341354
342- logRaw , err := rlp .EncodeToBytes (expectedLogs [idx ])
343- require .NoError (t , err )
355+ logRaw , err := rlp .EncodeToBytes (expectedLogs [idx ])
356+ require .NoError (t , err )
344357
345- // 2nd element of the leaf node contains the encoded log data.
346- shared .ExpectEqual (t , logRaw , nodeElements [1 ].([]byte ))
358+ // 2nd element of the leaf node contains the encoded log data.
359+ shared .ExpectEqual (t , logRaw , nodeElements [1 ].([]byte ))
360+ }
347361 }
348362 })
349363
350364 t .Run ("Publish and index receipt IPLDs in a single tx" , func (t * testing.T ) {
351365 setup (t )
352366 defer tearDown (t )
367+
353368 // check receipts were properly indexed
354369 rcts := make ([]string , 0 )
355- pgStr := `SELECT receipt_cids.cid FROM eth.receipt_cids, eth.transaction_cids, eth.header_cids
370+ pgStr := `SELECT receipt_cids.leaf_cid FROM eth.receipt_cids, eth.transaction_cids, eth.header_cids
356371 WHERE receipt_cids.tx_id = transaction_cids.id
357372 AND transaction_cids.header_id = header_cids.id
358- AND header_cids.block_number = $1`
373+ AND header_cids.block_number = $1 order by transaction_cids.id `
359374 err = db .Select (& rcts , pgStr , mocks .BlockNumber .Uint64 ())
360375 if err != nil {
361376 t .Fatal (err )
362377 }
363378 shared .ExpectEqual (t , len (rcts ), 5 )
364- expectTrue (t , shared .ListContainsString (rcts , rct1CID .String ()))
365- expectTrue (t , shared .ListContainsString (rcts , rct2CID .String ()))
366- expectTrue (t , shared .ListContainsString (rcts , rct3CID .String ()))
367- expectTrue (t , shared .ListContainsString (rcts , rct4CID .String ()))
368- expectTrue (t , shared .ListContainsString (rcts , rct5CID .String ()))
379+
380+ for idx , rctLeafCID := range rcts {
381+ result := make ([]ipfs.BlockModel , 0 )
382+ pgStr = `SELECT data
383+ FROM eth.receipt_cids
384+ INNER JOIN public.blocks ON (receipt_cids.leaf_mh_key = public.blocks.key)
385+ WHERE receipt_cids.leaf_cid = $1`
386+ err = db .Select (& result , pgStr , rctLeafCID )
387+ if err != nil {
388+ t .Fatal (err )
389+ }
390+
391+ // Decode the log leaf node.
392+ var nodeElements []interface {}
393+ err = rlp .DecodeBytes (result [0 ].Data , & nodeElements )
394+ require .NoError (t , err )
395+
396+ expectedRct , err := mocks .MockReceipts [idx ].MarshalBinary ()
397+ require .NoError (t , err )
398+
399+ shared .ExpectEqual (t , expectedRct , nodeElements [1 ].([]byte ))
400+ }
401+
369402 // and published
370403 for _ , c := range rcts {
371404 dc , err := cid .Decode (c )
@@ -379,11 +412,12 @@ func TestPublishAndIndexer(t *testing.T) {
379412 if err != nil {
380413 t .Fatal (err )
381414 }
415+
382416 switch c {
383417 case rct1CID .String ():
384418 shared .ExpectEqual (t , data , rct1 )
385419 var postStatus uint64
386- pgStr = `SELECT post_status FROM eth.receipt_cids WHERE cid = $1`
420+ pgStr = `SELECT post_status FROM eth.receipt_cids WHERE leaf_cid = $1`
387421 err = db .Get (& postStatus , pgStr , c )
388422 if err != nil {
389423 t .Fatal (err )
@@ -392,7 +426,7 @@ func TestPublishAndIndexer(t *testing.T) {
392426 case rct2CID .String ():
393427 shared .ExpectEqual (t , data , rct2 )
394428 var postState string
395- pgStr = `SELECT post_state FROM eth.receipt_cids WHERE cid = $1`
429+ pgStr = `SELECT post_state FROM eth.receipt_cids WHERE leaf_cid = $1`
396430 err = db .Get (& postState , pgStr , c )
397431 if err != nil {
398432 t .Fatal (err )
@@ -401,7 +435,7 @@ func TestPublishAndIndexer(t *testing.T) {
401435 case rct3CID .String ():
402436 shared .ExpectEqual (t , data , rct3 )
403437 var postState string
404- pgStr = `SELECT post_state FROM eth.receipt_cids WHERE cid = $1`
438+ pgStr = `SELECT post_state FROM eth.receipt_cids WHERE leaf_cid = $1`
405439 err = db .Get (& postState , pgStr , c )
406440 if err != nil {
407441 t .Fatal (err )
@@ -410,7 +444,7 @@ func TestPublishAndIndexer(t *testing.T) {
410444 case rct4CID .String ():
411445 shared .ExpectEqual (t , data , rct4 )
412446 var postState string
413- pgStr = `SELECT post_state FROM eth.receipt_cids WHERE cid = $1`
447+ pgStr = `SELECT post_state FROM eth.receipt_cids WHERE leaf_cid = $1`
414448 err = db .Get (& postState , pgStr , c )
415449 if err != nil {
416450 t .Fatal (err )
@@ -419,7 +453,7 @@ func TestPublishAndIndexer(t *testing.T) {
419453 case rct5CID .String ():
420454 shared .ExpectEqual (t , data , rct5 )
421455 var postState string
422- pgStr = `SELECT post_state FROM eth.receipt_cids WHERE cid = $1`
456+ pgStr = `SELECT post_state FROM eth.receipt_cids WHERE leaf_cid = $1`
423457 err = db .Get (& postState , pgStr , c )
424458 if err != nil {
425459 t .Fatal (err )
0 commit comments