diff --git a/cmd/devp2p/internal/ethtest/chain.go b/cmd/devp2p/internal/ethtest/chain.go index 36c395cdef..16b5a36558 100644 --- a/cmd/devp2p/internal/ethtest/chain.go +++ b/cmd/devp2p/internal/ethtest/chain.go @@ -231,7 +231,7 @@ func (c *Chain) GetHeaders(req *eth.GetBlockHeadersPacket) ([]*types.Header, err } if req.Reverse { for i := 1; i < int(req.Amount); i++ { - blockNumber -= (1 - req.Skip) + blockNumber -= (1 + req.Skip) headers[i] = c.blocks[blockNumber].Header() } return headers, nil diff --git a/cmd/devp2p/internal/ethtest/chain_test.go b/cmd/devp2p/internal/ethtest/chain_test.go index 62bd6d26ea..31c90c6c04 100644 --- a/cmd/devp2p/internal/ethtest/chain_test.go +++ b/cmd/devp2p/internal/ethtest/chain_test.go @@ -186,6 +186,21 @@ func TestChainGetHeaders(t *testing.T) { chain.Head().Header(), }, }, + { + req: eth.GetBlockHeadersPacket{ + GetBlockHeadersRequest: ð.GetBlockHeadersRequest{ + Origin: eth.HashOrNumber{Number: uint64(10)}, + Amount: uint64(3), + Skip: 1, + Reverse: true, + }, + }, + expected: []*types.Header{ + chain.blocks[10].Header(), + chain.blocks[8].Header(), + chain.blocks[6].Header(), + }, + }, } for i, tt := range tests {