diff --git a/core/blockchain.go b/core/blockchain.go index d228c65661..cc21b24eba 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -1205,7 +1205,7 @@ func (bc *BlockChain) InsertReceiptChain(blockChain types.Blocks, receiptChain [ if frozen, _ := bc.db.Ancients(); frozen == 0 { b := bc.genesisBlock td := bc.genesisBlock.Difficulty() - writeSize, err := rawdb.WriteAncientBlocks(bc.db, []*types.Block{b}, []types.Receipts{nil}, td) + writeSize, err := rawdb.WriteAncientBlocks(bc.db, []*types.Block{b}, []types.Receipts{nil}, []types.Receipts{nil}, td) size += writeSize if err != nil { log.Error("Error writing genesis to ancients", "err", err) @@ -1223,7 +1223,7 @@ func (bc *BlockChain) InsertReceiptChain(blockChain types.Blocks, receiptChain [ // Write all chain data to ancients. td := bc.GetTd(first.Hash(), first.NumberU64()) - writeSize, err := rawdb.WriteAncientBlocks(bc.db, blockChain, receiptChain, td) + writeSize, err := rawdb.WriteAncientBlocks(bc.db, blockChain, receiptChain, []types.Receipts{d}, td) size += writeSize if err != nil { log.Error("Error importing chain data to ancients", "err", err) diff --git a/core/rawdb/accessors_chain.go b/core/rawdb/accessors_chain.go index bca7280725..332a7016d1 100644 --- a/core/rawdb/accessors_chain.go +++ b/core/rawdb/accessors_chain.go @@ -769,10 +769,11 @@ func WriteBlock(db ethdb.KeyValueWriter, block *types.Block) { } // WriteAncientBlock writes entire block data into ancient store and returns the total written size. -func WriteAncientBlocks(db ethdb.AncientWriter, blocks []*types.Block, receipts []types.Receipts, td *big.Int) (int64, error) { +func WriteAncientBlocks(db ethdb.AncientWriter, blocks []*types.Block, receipts []types.Receipts, borReceipts []types.Receipts, td *big.Int) (int64, error) { var ( - tdSum = new(big.Int).Set(td) - stReceipts []*types.ReceiptForStorage + tdSum = new(big.Int).Set(td) + stReceipts []*types.ReceiptForStorage + borStReceipts []*types.ReceiptForStorage ) return db.ModifyAncients(func(op ethdb.AncientWriteOp) error { for i, block := range blocks { @@ -781,11 +782,18 @@ func WriteAncientBlocks(db ethdb.AncientWriter, blocks []*types.Block, receipts for _, receipt := range receipts[i] { stReceipts = append(stReceipts, (*types.ReceiptForStorage)(receipt)) } + + // Convert bor receipts to storage format and sum up total difficulty. + borStReceipts = borStReceipts[:0] + for _, borReceipt := range borReceipts[i] { + borStReceipts = append(borStReceipts, (*types.ReceiptForStorage)(borReceipt)) + } + header := block.Header() if i > 0 { tdSum.Add(tdSum, header.Difficulty) } - if err := writeAncientBlock(op, block, header, stReceipts, tdSum); err != nil { + if err := writeAncientBlock(op, block, header, stReceipts, borStReceipts, tdSum); err != nil { return err } } @@ -793,7 +801,7 @@ func WriteAncientBlocks(db ethdb.AncientWriter, blocks []*types.Block, receipts }) } -func writeAncientBlock(op ethdb.AncientWriteOp, block *types.Block, header *types.Header, receipts []*types.ReceiptForStorage, td *big.Int) error { +func writeAncientBlock(op ethdb.AncientWriteOp, block *types.Block, header *types.Header, receipts []*types.ReceiptForStorage, borReceipts []*types.ReceiptForStorage, td *big.Int) error { num := block.NumberU64() if err := op.AppendRaw(freezerHashTable, num, block.Hash().Bytes()); err != nil { return fmt.Errorf("can't add block %d hash: %v", num, err) @@ -810,6 +818,9 @@ func writeAncientBlock(op ethdb.AncientWriteOp, block *types.Block, header *type if err := op.Append(freezerDifficultyTable, num, td); err != nil { return fmt.Errorf("can't append block %d total difficulty: %v", num, err) } + if err := op.Append(freezerBorReceiptTable, num, borReceipts); err != nil { + return fmt.Errorf("can't append block %d borReceipts: %v", num, err) + } return nil }