Storing tx receipts in extraDb
This commit is contained in:
parent
79042223dc
commit
00ec4132f8
@ -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()
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user