fix block rlp decode

This commit is contained in:
zelig 2015-01-03 10:21:08 +00:00
parent f91a39e43c
commit 74f4456ccf
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 {
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
}

View file

@ -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