fix block rlp decode

This commit is contained in:
zelig 2015-01-03 10:21:08 +00:00
parent cf93649275
commit 08dd3f0f20
2 changed files with 12 additions and 34 deletions

View file

@ -102,41 +102,19 @@ func NewBlockWithHeader(header *Header) *Block {
} }
func (self *Block) DecodeRLP(s *rlp.Stream) error { 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 return err
} }
self.header = extblock.Header
var header Header self.uncles = extblock.Uncles
if err := s.Decode(&header); err != nil { self.transactions = extblock.Txs
return err self.TD = extblock.TD
}
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
return nil return nil
} }

View file

@ -199,7 +199,7 @@ func (self *ethProtocol) handle() error {
msgStream := rlp.NewStream(msg.Payload) msgStream := rlp.NewStream(msg.Payload)
msgStream.List() msgStream.List()
for { for {
var block *types.Block var block types.Block
if err := msgStream.Decode(&block); err != nil { if err := msgStream.Decode(&block); err != nil {
if err == rlp.EOL { if err == rlp.EOL {
break break