From 74f4456ccf2b0d90a953b544a3fef962b29f45f0 Mon Sep 17 00:00:00 2001 From: zelig Date: Sat, 3 Jan 2015 10:21:08 +0000 Subject: [PATCH] fix block rlp decode --- core/types/block.go | 44 +++++++++++--------------------------------- eth/protocol.go | 2 +- 2 files changed, 12 insertions(+), 34 deletions(-) diff --git a/core/types/block.go b/core/types/block.go index f48f04ad4f..0a5c8eaed7 100644 --- a/core/types/block.go +++ b/core/types/block.go @@ -102,41 +102,19 @@ func NewBlockWithHeader(header *Header) *Block { } func (self *Block) DecodeRLP(s *rlp.Stream) error { - if _, err := s.List(); err != nil { + var extblock struct { + Header + Txs []*Transaction + Uncles *Header + TD *big.Int // optional + } + if err := s.Decode(&extblock); err != nil { return err } - - var header Header - if err := s.Decode(&header); err != nil { - return err - } - - var transactions []*Transaction - if err := s.Decode(&transactions); err != nil { - return err - } - - var uncleHeaders []*Header - if err := s.Decode(&uncleHeaders); err != nil { - return err - } - - var tdBytes []byte - if err := s.Decode(&tdBytes); err != nil { - // If this block comes from the network that's fine. If loaded from disk it should be there - // Blocks don't store their Td when propagated over the network - } else { - self.Td = ethutil.BigD(tdBytes) - } - - if err := s.ListEnd(); err != nil { - return err - } - - self.header = &header - self.uncles = uncleHeaders - self.transactions = transactions - + self.header = extblock.Header + self.uncles = extblock.Uncles + self.transactions = extblock.Txs + self.TD = extblock.TD return nil } diff --git a/eth/protocol.go b/eth/protocol.go index 745dd23425..6f843162a7 100644 --- a/eth/protocol.go +++ b/eth/protocol.go @@ -199,7 +199,7 @@ func (self *ethProtocol) handle() error { msgStream := rlp.NewStream(msg.Payload) msgStream.List() for { - var block *types.Block + var block types.Block if err := msgStream.Decode(&block); err != nil { if err == rlp.EOL { break