diff --git a/core/types/receipt.go b/core/types/receipt.go index b627f46a4..5216162f2 100644 --- a/core/types/receipt.go +++ b/core/types/receipt.go @@ -172,10 +172,8 @@ func (r *Receipt) MarshalBinary() ([]byte, error) { return rlp.EncodeToBytes(r) } data := &receiptRLP{r.statusEncoding(), r.CumulativeGasUsed, r.Bloom, r.Logs} - buf := encodeBufferPool.Get().(*bytes.Buffer) - defer encodeBufferPool.Put(buf) - buf.Reset() - err := r.encodeTyped(data, buf) + var buf bytes.Buffer + err := r.encodeTyped(data, &buf) return buf.Bytes(), err } diff --git a/statediff/indexer/ipfs/ipld/eip2930_test_data/eth-block-12252078 b/statediff/indexer/ipfs/ipld/eip2930_test_data/eth-block-12252078 new file mode 100644 index 000000000..baee170ab Binary files /dev/null and b/statediff/indexer/ipfs/ipld/eip2930_test_data/eth-block-12252078 differ diff --git a/statediff/indexer/ipfs/ipld/eip2930_test_data/eth-block-12365585 b/statediff/indexer/ipfs/ipld/eip2930_test_data/eth-block-12365585 new file mode 100644 index 000000000..6f7d87645 Binary files /dev/null and b/statediff/indexer/ipfs/ipld/eip2930_test_data/eth-block-12365585 differ diff --git a/statediff/indexer/ipfs/ipld/eip2930_test_data/eth-block-12365586 b/statediff/indexer/ipfs/ipld/eip2930_test_data/eth-block-12365586 new file mode 100644 index 000000000..119215e01 Binary files /dev/null and b/statediff/indexer/ipfs/ipld/eip2930_test_data/eth-block-12365586 differ diff --git a/statediff/indexer/ipfs/ipld/eip2930_test_data/eth-receipts-12252078 b/statediff/indexer/ipfs/ipld/eip2930_test_data/eth-receipts-12252078 new file mode 100644 index 000000000..b4dcfb65c Binary files /dev/null and b/statediff/indexer/ipfs/ipld/eip2930_test_data/eth-receipts-12252078 differ diff --git a/statediff/indexer/ipfs/ipld/eip2930_test_data/eth-receipts-12365585 b/statediff/indexer/ipfs/ipld/eip2930_test_data/eth-receipts-12365585 new file mode 100644 index 000000000..3bce0cf37 Binary files /dev/null and b/statediff/indexer/ipfs/ipld/eip2930_test_data/eth-receipts-12365585 differ diff --git a/statediff/indexer/ipfs/ipld/eip2930_test_data/eth-receipts-12365586 b/statediff/indexer/ipfs/ipld/eip2930_test_data/eth-receipts-12365586 new file mode 100644 index 000000000..c0dbec5a5 Binary files /dev/null and b/statediff/indexer/ipfs/ipld/eip2930_test_data/eth-receipts-12365586 differ diff --git a/statediff/indexer/ipfs/ipld/eth_parser_test.go b/statediff/indexer/ipfs/ipld/eth_parser_test.go new file mode 100644 index 000000000..1a53455c7 --- /dev/null +++ b/statediff/indexer/ipfs/ipld/eth_parser_test.go @@ -0,0 +1,81 @@ +package ipld + +import ( + "io/ioutil" + "path/filepath" + "testing" + + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/rlp" +) + +type kind string + +const ( + legacy kind = "legacy" + eip1559 kind = "eip2930" +) + +var blockFileNames = []string{ + "eth-block-12252078", + "eth-block-12365585", + "eth-block-12365586", +} + +var receiptsFileNames = []string{ + "eth-receipts-12252078", + "eth-receipts-12365585", + "eth-receipts-12365586", +} + +var kinds = []kind{ + eip1559, + eip1559, + legacy, +} + +type testCase struct { + kind kind + block *types.Block + receipts types.Receipts +} + +func loadBlockData(t *testing.T) []testCase { + fileDir := "./eip2930_test_data" + testCases := make([]testCase, len(blockFileNames)) + for i, blockFileName := range blockFileNames { + blockRLP, err := ioutil.ReadFile(filepath.Join(fileDir, blockFileName)) + if err != nil { + t.Fatalf("failed to load blockRLP from file, err %v", err) + } + block := new(types.Block) + if err := rlp.DecodeBytes(blockRLP, block); err != nil { + t.Fatalf("failed to decode blockRLP, err %v", err) + } + receiptsFileName := receiptsFileNames[i] + receiptsRLP, err := ioutil.ReadFile(filepath.Join(fileDir, receiptsFileName)) + if err != nil { + t.Fatalf("failed to load receiptsRLP from file, err %s", err) + } + receipts := make(types.Receipts, 0) + if err := rlp.DecodeBytes(receiptsRLP, &receipts); err != nil { + t.Fatalf("failed to decode receiptsRLP, err %s", err) + } + testCases[i] = testCase{ + block: block, + receipts: receipts, + kind: kinds[i], + } + } + return testCases +} + +func TestFromBlockAndReceipts(t *testing.T) { + testCases := loadBlockData(t) + for _, tc := range testCases { + _, _, _, _, _, _, err := FromBlockAndReceipts(tc.block, tc.receipts) + if err != nil { + t.Fatalf("error generating IPLDs from block and receipts, err %v, kind %s, block hash %s", err, tc.kind, tc.block.Hash()) + } + } +} diff --git a/statediff/indexer/ipfs/ipld/eth_receipt_trie.go b/statediff/indexer/ipfs/ipld/eth_receipt_trie.go index 30847d9a1..ee371c15a 100644 --- a/statediff/indexer/ipfs/ipld/eth_receipt_trie.go +++ b/statediff/indexer/ipfs/ipld/eth_receipt_trie.go @@ -24,7 +24,6 @@ import ( "github.com/multiformats/go-multihash" "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/rlp" ) // EthRctTrie (eth-tx-trie codec 0x92) represents @@ -61,9 +60,8 @@ func DecodeEthRctTrie(c cid.Cid, b []byte) (*EthRctTrie, error) { // decodeEthRctTrieLeaf parses a eth-rct-trie leaf //from decoded RLP elements func decodeEthRctTrieLeaf(i []interface{}) ([]interface{}, error) { - var r types.Receipt - err := rlp.DecodeBytes(i[1].([]byte), &r) - if err != nil { + r := new(types.Receipt) + if err := r.UnmarshalBinary(i[1].([]byte)); err != nil { return nil, err } c, err := RawdataToCid(MEthTxReceipt, i[1].([]byte), multihash.KECCAK_256) @@ -73,7 +71,7 @@ func decodeEthRctTrieLeaf(i []interface{}) ([]interface{}, error) { return []interface{}{ i[0].([]byte), &EthReceipt{ - Receipt: &r, + Receipt: r, cid: c, rawdata: i[1].([]byte), }, @@ -135,7 +133,7 @@ func (rt *rctTrie) getNodes() ([]*EthRctTrie, error) { for _, k := range keys { rawdata, err := rt.db.Get(k) if err != nil { - panic(err) + return nil, err } c, err := RawdataToCid(MEthTxReceiptTrie, rawdata, multihash.KECCAK_256) if err != nil { diff --git a/statediff/indexer/ipfs/ipld/eth_tx_trie.go b/statediff/indexer/ipfs/ipld/eth_tx_trie.go index 6438bc8ce..7e79ff164 100644 --- a/statediff/indexer/ipfs/ipld/eth_tx_trie.go +++ b/statediff/indexer/ipfs/ipld/eth_tx_trie.go @@ -24,7 +24,6 @@ import ( "github.com/multiformats/go-multihash" "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/rlp" ) // EthTxTrie (eth-tx-trie codec 0x92) represents @@ -61,9 +60,8 @@ func DecodeEthTxTrie(c cid.Cid, b []byte) (*EthTxTrie, error) { // decodeEthTxTrieLeaf parses a eth-tx-trie leaf //from decoded RLP elements func decodeEthTxTrieLeaf(i []interface{}) ([]interface{}, error) { - var t types.Transaction - err := rlp.DecodeBytes(i[1].([]byte), &t) - if err != nil { + t := new(types.Transaction) + if err := t.UnmarshalBinary(i[1].([]byte)); err != nil { return nil, err } c, err := RawdataToCid(MEthTx, i[1].([]byte), multihash.KECCAK_256) @@ -73,7 +71,7 @@ func decodeEthTxTrieLeaf(i []interface{}) ([]interface{}, error) { return []interface{}{ i[0].([]byte), &EthTx{ - Transaction: &t, + Transaction: t, cid: c, rawdata: i[1].([]byte), }, @@ -135,7 +133,7 @@ func (tt *txTrie) getNodes() ([]*EthTxTrie, error) { for _, k := range keys { rawdata, err := tt.db.Get(k) if err != nil { - panic(err) + return nil, err } c, err := RawdataToCid(MEthTxTrie, rawdata, multihash.KECCAK_256) if err != nil {