mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-18 18:02:24 +00:00
core: improve getBadBlocks to return full block rlp
This commit is contained in:
parent
400332b99d
commit
caf0e1fc37
1 changed files with 20 additions and 8 deletions
|
|
@ -1387,25 +1387,37 @@ func (bc *BlockChain) update() {
|
|||
|
||||
// BadBlockArgs represents the entries in the list returned when bad blocks are queried.
|
||||
type BadBlockArgs struct {
|
||||
Hash common.Hash `json:"hash"`
|
||||
Header *types.Header `json:"header"`
|
||||
Hash common.Hash `json:"hash"`
|
||||
Header *types.Header `json:"header"`
|
||||
BlockRLP string `json:"blockrlp"`
|
||||
}
|
||||
|
||||
// BadBlocks returns a list of the last 'bad blocks' that the client has seen on the network
|
||||
func (bc *BlockChain) BadBlocks() ([]BadBlockArgs, error) {
|
||||
headers := make([]BadBlockArgs, 0, bc.badBlocks.Len())
|
||||
blocks := make([]BadBlockArgs, 0, bc.badBlocks.Len())
|
||||
var (
|
||||
err error
|
||||
rlpData []byte
|
||||
)
|
||||
for _, hash := range bc.badBlocks.Keys() {
|
||||
if hdr, exist := bc.badBlocks.Peek(hash); exist {
|
||||
header := hdr.(*types.Header)
|
||||
headers = append(headers, BadBlockArgs{header.Hash(), header})
|
||||
if blk, exist := bc.badBlocks.Peek(hash); exist {
|
||||
block := blk.(*types.Block)
|
||||
rlpData, err = rlp.EncodeToBytes(block)
|
||||
if err != nil {
|
||||
break
|
||||
}
|
||||
blocks = append(blocks, BadBlockArgs{
|
||||
Hash: block.Hash(),
|
||||
Header: block.Header(),
|
||||
BlockRLP: fmt.Sprintf("%x", rlpData)})
|
||||
}
|
||||
}
|
||||
return headers, nil
|
||||
return blocks, err
|
||||
}
|
||||
|
||||
// addBadBlock adds a bad block to the bad-block LRU cache
|
||||
func (bc *BlockChain) addBadBlock(block *types.Block) {
|
||||
bc.badBlocks.Add(block.Header().Hash(), block.Header())
|
||||
bc.badBlocks.Add(block.Hash(), block)
|
||||
}
|
||||
|
||||
// reportBlock logs a bad block error.
|
||||
|
|
|
|||
Loading…
Reference in a new issue