aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeffrey Wilcke <jeffrey@ethereum.org>2015-05-20 18:00:36 +0800
committerJeffrey Wilcke <jeffrey@ethereum.org>2015-05-20 18:00:36 +0800
commit8fe8ec84f6a0cbc51d6018af7269952062279234 (patch)
tree764f9206eeb976c08e4d655c96a958e2569e3e0b
parent0300eef94d7d1e58bc5cf94094a3d492c70486e1 (diff)
parent00ec4132f89527a6e2ae6b1d3842c447cab38cef (diff)
downloadgo-tangerine-8fe8ec84f6a0cbc51d6018af7269952062279234.tar.gz
go-tangerine-8fe8ec84f6a0cbc51d6018af7269952062279234.tar.zst
go-tangerine-8fe8ec84f6a0cbc51d6018af7269952062279234.zip
Merge pull request #1049 from zsfelfoldi/receipts
Storing tx receipts in extraDb
-rw-r--r--core/block_processor.go16
-rw-r--r--xeth/xeth.go18
2 files changed, 34 insertions, 0 deletions
diff --git a/core/block_processor.go b/core/block_processor.go
index 20e6722a4..3a224059b 100644
--- a/core/block_processor.go
+++ b/core/block_processor.go
@@ -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)
diff --git a/xeth/xeth.go b/xeth/xeth.go
index 4925fe635..3ec3f7dd4 100644
--- a/xeth/xeth.go
+++ b/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()
}