Browse Source

return error if peer sent us a block we didn't expect with a height too far ahead/behind

pull/1244/head
Anton Kaliaev 7 years ago
parent
commit
baf457e6d4
No known key found for this signature in database GPG Key ID: 7B6881D965918214
1 changed files with 11 additions and 2 deletions
  1. +11
    -2
      blockchain/pool.go

+ 11
- 2
blockchain/pool.go View File

@ -40,6 +40,9 @@ const (
// Assuming a DSL connection (not a good choice) 128 Kbps (upload) ~ 15 KB/s, // Assuming a DSL connection (not a good choice) 128 Kbps (upload) ~ 15 KB/s,
// sending data across atlantic ~ 7.5 KB/s. // sending data across atlantic ~ 7.5 KB/s.
minRecvRate = 7680 minRecvRate = 7680
// Maximum difference between current and new block's height.
maxDiffBetweenCurrentAndReceivedBlockHeight = 100
) )
var peerTimeout = 15 * time.Second // not const so we can override with tests var peerTimeout = 15 * time.Second // not const so we can override with tests
@ -230,8 +233,14 @@ func (pool *BlockPool) AddBlock(peerID p2p.ID, block *types.Block, blockSize int
requester := pool.requesters[block.Height] requester := pool.requesters[block.Height]
if requester == nil { if requester == nil {
// a block we didn't expect.
// TODO:if height is too far ahead, punish peer
pool.Logger.Info("peer sent us a block we didn't expect", "peer", peerID, "curHeight", pool.height, "blockHeight", block.Height)
diff := pool.height - block.Height
if diff < 0 {
diff *= -1
}
if diff > maxDiffBetweenCurrentAndReceivedBlockHeight {
pool.sendError(errors.New("peer sent us a block we didn't expect with a height too far ahead/behind"), peerID)
}
return return
} }


Loading…
Cancel
Save