Storing tx receipts in extraDb
This commit is contained in:
		@@ -23,6 +23,8 @@ const (
 | 
				
			|||||||
	BlockChainVersion = 2
 | 
						BlockChainVersion = 2
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var receiptsPre = []byte("receipts-")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type BlockProcessor struct {
 | 
					type BlockProcessor struct {
 | 
				
			||||||
	db      common.Database
 | 
						db      common.Database
 | 
				
			||||||
	extraDb common.Database
 | 
						extraDb common.Database
 | 
				
			||||||
@@ -262,9 +264,23 @@ func (sm *BlockProcessor) processWithParent(block, parent *types.Block) (logs st
 | 
				
			|||||||
		putTx(sm.extraDb, tx, block, uint64(i))
 | 
							putTx(sm.extraDb, tx, block, uint64(i))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						receiptsRlp := block.Receipts().RlpEncode()
 | 
				
			||||||
 | 
						sm.extraDb.Put(append(receiptsPre, block.Hash().Bytes()...), receiptsRlp)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return state.Logs(), nil
 | 
						return state.Logs(), nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (self *BlockProcessor) GetBlockReceipts(bhash common.Hash) (receipts types.Receipts, err error) {
 | 
				
			||||||
 | 
						var rdata []byte
 | 
				
			||||||
 | 
						rdata, err = self.extraDb.Get(append(receiptsPre, bhash[:]...))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if err == nil {
 | 
				
			||||||
 | 
							err = rlp.DecodeBytes(rdata, &receipts)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Validates the current block. Returns an error if the block was invalid,
 | 
					// Validates the current block. Returns an error if the block was invalid,
 | 
				
			||||||
// an uncle or anything that isn't on the current block chain.
 | 
					// an uncle or anything that isn't on the current block chain.
 | 
				
			||||||
// Validation validates easy over difficult (dagger takes longer time = difficult)
 | 
					// Validation validates easy over difficult (dagger takes longer time = difficult)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										18
									
								
								xeth/xeth.go
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								xeth/xeth.go
									
									
									
									
									
								
							@@ -350,6 +350,24 @@ func (self *XEth) CurrentBlock() *types.Block {
 | 
				
			|||||||
	return self.backend.ChainManager().CurrentBlock()
 | 
						return self.backend.ChainManager().CurrentBlock()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (self *XEth) GetBlockReceipts(bhash common.Hash) (receipts types.Receipts, err error) {
 | 
				
			||||||
 | 
						return self.backend.BlockProcessor().GetBlockReceipts(bhash)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (self *XEth) GetTxReceipt(txhash common.Hash) (receipt *types.Receipt, err error) {
 | 
				
			||||||
 | 
						_, bhash, _, txi := self.EthTransactionByHash(common.ToHex(txhash[:]))
 | 
				
			||||||
 | 
						var receipts types.Receipts
 | 
				
			||||||
 | 
						receipts, err = self.backend.BlockProcessor().GetBlockReceipts(bhash)
 | 
				
			||||||
 | 
						if err == nil {
 | 
				
			||||||
 | 
							if txi < uint64(len(receipts)) {
 | 
				
			||||||
 | 
								receipt = receipts[txi]
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								err = fmt.Errorf("Invalid tx index")
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (self *XEth) GasLimit() *big.Int {
 | 
					func (self *XEth) GasLimit() *big.Int {
 | 
				
			||||||
	return self.backend.ChainManager().GasLimit()
 | 
						return self.backend.ChainManager().GasLimit()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user