mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-22 04:36:42 +00:00
fix block rlp decode
This commit is contained in:
parent
f91a39e43c
commit
74f4456ccf
2 changed files with 12 additions and 34 deletions
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue