diff options
author | Jeffrey Wilcke <jeffrey@ethereum.org> | 2015-05-28 22:35:07 +0800 |
---|---|---|
committer | Jeffrey Wilcke <jeffrey@ethereum.org> | 2015-05-28 22:35:07 +0800 |
commit | 03178a77b66b55c26b966dab5069847b1d139054 (patch) | |
tree | f5552fae68535f2308bef2e01053bfaabd52d078 /core/types/receipt.go | |
parent | 4baa5ca963552df6ed11112094f08111c8cf14bd (diff) | |
parent | e3253b5d5e65bfb6944ddaabd3c79400fbe06ef8 (diff) | |
download | go-tangerine-03178a77b66b55c26b966dab5069847b1d139054.tar go-tangerine-03178a77b66b55c26b966dab5069847b1d139054.tar.gz go-tangerine-03178a77b66b55c26b966dab5069847b1d139054.tar.bz2 go-tangerine-03178a77b66b55c26b966dab5069847b1d139054.tar.lz go-tangerine-03178a77b66b55c26b966dab5069847b1d139054.tar.xz go-tangerine-03178a77b66b55c26b966dab5069847b1d139054.tar.zst go-tangerine-03178a77b66b55c26b966dab5069847b1d139054.zip |
Merge pull request #1132 from obscuren/log_optimisations
core: log optimisations
Diffstat (limited to 'core/types/receipt.go')
-rw-r--r-- | core/types/receipt.go | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/core/types/receipt.go b/core/types/receipt.go index 414e4d364..6b4024ada 100644 --- a/core/types/receipt.go +++ b/core/types/receipt.go @@ -26,10 +26,39 @@ func (self *Receipt) SetLogs(logs state.Logs) { self.logs = logs } +func (self *Receipt) Logs() state.Logs { + return self.logs +} + func (self *Receipt) EncodeRLP(w io.Writer) error { return rlp.Encode(w, []interface{}{self.PostState, self.CumulativeGasUsed, self.Bloom, self.logs}) } +func (self *Receipt) DecodeRLP(s *rlp.Stream) error { + var r struct { + PostState []byte + CumulativeGasUsed *big.Int + Bloom Bloom + Logs state.Logs + } + if err := s.Decode(&r); err != nil { + return err + } + self.PostState, self.CumulativeGasUsed, self.Bloom, self.logs = r.PostState, r.CumulativeGasUsed, r.Bloom, r.Logs + + return nil +} + +type ReceiptForStorage Receipt + +func (self *ReceiptForStorage) EncodeRLP(w io.Writer) error { + storageLogs := make([]*state.LogForStorage, len(self.logs)) + for i, log := range self.logs { + storageLogs[i] = (*state.LogForStorage)(log) + } + return rlp.Encode(w, []interface{}{self.PostState, self.CumulativeGasUsed, self.Bloom, storageLogs}) +} + func (self *Receipt) RlpEncode() []byte { bytes, err := rlp.EncodeToBytes(self) if err != nil { |