forked from cerc-io/plugeth
Merge pull request #1049 from zsfelfoldi/receipts
Storing tx receipts in extraDb
This commit is contained in:
commit
8fe8ec84f6
@ -23,6 +23,8 @@ const (
|
||||
BlockChainVersion = 2
|
||||
)
|
||||
|
||||
var receiptsPre = []byte("receipts-")
|
||||
|
||||
type BlockProcessor struct {
|
||||
db 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))
|
||||
}
|
||||
|
||||
receiptsRlp := block.Receipts().RlpEncode()
|
||||
sm.extraDb.Put(append(receiptsPre, block.Hash().Bytes()...), receiptsRlp)
|
||||
|
||||
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,
|
||||
// an uncle or anything that isn't on the current block chain.
|
||||
// Validation validates easy over difficult (dagger takes longer time = difficult)
|
||||
|
18
xeth/xeth.go
18
xeth/xeth.go
@ -354,6 +354,24 @@ func (self *XEth) CurrentBlock() *types.Block {
|
||||
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 {
|
||||
return self.backend.ChainManager().GasLimit()
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user