aboutsummaryrefslogtreecommitdiffstats
path: root/core/blockchain.go
diff options
context:
space:
mode:
Diffstat (limited to 'core/blockchain.go')
-rw-r--r--core/blockchain.go33
1 files changed, 9 insertions, 24 deletions
diff --git a/core/blockchain.go b/core/blockchain.go
index 6772ea284..bb1c14f43 100644
--- a/core/blockchain.go
+++ b/core/blockchain.go
@@ -759,16 +759,10 @@ func (bc *BlockChain) InsertReceiptChain(blockChain types.Blocks, receiptChain [
log.Crit("Failed to write log blooms", "err", err)
return
}
- if err := WriteTransactions(bc.chainDb, block); err != nil {
- errs[index] = fmt.Errorf("failed to write individual transactions: %v", err)
+ if err := WriteTxLookupEntries(bc.chainDb, block); err != nil {
+ errs[index] = fmt.Errorf("failed to write lookup metadata: %v", err)
atomic.AddInt32(&failed, 1)
- log.Crit("Failed to write individual transactions", "err", err)
- return
- }
- if err := WriteReceipts(bc.chainDb, receipts); err != nil {
- errs[index] = fmt.Errorf("failed to write individual receipts: %v", err)
- atomic.AddInt32(&failed, 1)
- log.Crit("Failed to write individual receipts", "err", err)
+ log.Crit("Failed to write lookup metadata", "err", err)
return
}
atomic.AddInt32(&stats.processed, 1)
@@ -1002,12 +996,8 @@ func (bc *BlockChain) InsertChain(chain types.Blocks) (int, error) {
blockInsertTimer.UpdateSince(bstart)
events = append(events, ChainEvent{block, block.Hash(), logs})
- // This puts transactions in a extra db for rpc
- if err := WriteTransactions(bc.chainDb, block); err != nil {
- return i, err
- }
- // store the receipts
- if err := WriteReceipts(bc.chainDb, receipts); err != nil {
+ // Write the positional metadata for transaction and receipt lookups
+ if err := WriteTxLookupEntries(bc.chainDb, block); err != nil {
return i, err
}
// Write map map bloom filters
@@ -1167,16 +1157,12 @@ func (bc *BlockChain) reorg(oldBlock, newBlock *types.Block) error {
for _, block := range newChain {
// insert the block in the canonical way, re-writing history
bc.insert(block)
- // write canonical receipts and transactions
- if err := WriteTransactions(bc.chainDb, block); err != nil {
- return err
- }
- receipts := GetBlockReceipts(bc.chainDb, block.Hash(), block.NumberU64())
- // write receipts
- if err := WriteReceipts(bc.chainDb, receipts); err != nil {
+ // write lookup entries for hash based transaction/receipt searches
+ if err := WriteTxLookupEntries(bc.chainDb, block); err != nil {
return err
}
// Write map map bloom filters
+ receipts := GetBlockReceipts(bc.chainDb, block.Hash(), block.NumberU64())
if err := WriteMipmapBloom(bc.chainDb, block.NumberU64(), receipts); err != nil {
return err
}
@@ -1188,8 +1174,7 @@ func (bc *BlockChain) reorg(oldBlock, newBlock *types.Block) error {
// When transactions get deleted from the database that means the
// receipts that were created in the fork must also be deleted
for _, tx := range diff {
- DeleteReceipt(bc.chainDb, tx.Hash())
- DeleteTransaction(bc.chainDb, tx.Hash())
+ DeleteTxLookupEntry(bc.chainDb, tx.Hash())
}
// Must be posted in a goroutine because of the transaction pool trying
// to acquire the chain manager lock