mirror of
https://github.com/status-im/nimbus-eth2.git
synced 2025-01-09 13:56:23 +00:00
fc9bc1da3a
In split view situation, the canonical chain may only be served by a tiny amount of peers, and branches may span long durations. Minority branches may still have a large weight from attestations and should be discovered. To assist with that, add a branch discovery module that assists in such a situation by specifically targeting peers with unknown histories and downloading from them, in addition to sync manager work which handles popular branches.
60 lines
2.2 KiB
Nim
60 lines
2.2 KiB
Nim
# beacon_chain
|
|
# Copyright (c) 2018-2024 Status Research & Development GmbH
|
|
# Licensed and distributed under either of
|
|
# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT).
|
|
# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0).
|
|
# at your option. This file may not be copied, modified, or distributed except according to those terms.
|
|
|
|
{.push raises: [].}
|
|
|
|
const
|
|
NewPeerScore* = 300
|
|
## Score which will be assigned to newly connected peer
|
|
PeerScoreLowLimit* = 0
|
|
## Score after which peer will be kicked
|
|
PeerScoreHighLimit* = 1000
|
|
## Max value of peer's score
|
|
PeerScorePoorRequest* = -50
|
|
## This peer is not responding on time or behaving improperly otherwise
|
|
PeerScoreInvalidRequest* = -500
|
|
## This peer is sending malformed or nonsensical data
|
|
|
|
PeerScoreNoStatus* = -100
|
|
## Peer did not answer `status` request.
|
|
PeerScoreStaleStatus* = -50
|
|
## Peer's `status` answer did not progress in time.
|
|
PeerScoreUseless* = -10
|
|
## Peer's latest head is lower then ours.
|
|
PeerScoreGoodStatus* = 50
|
|
## Peer's `status` answer is fine.
|
|
PeerScoreNoValues* = -100
|
|
## Peer did not respond in time to a request.
|
|
PeerScoreGoodBatchValue* = 5
|
|
## Individual portion of peer's multi-step answer is fine.
|
|
PeerScoreGoodValues* = 100
|
|
## Peer's answer to our request is fine.
|
|
PeerScoreBadValues* = -1000
|
|
## Peer's response contains incorrect data.
|
|
PeerScoreBadResponse* = -1000
|
|
## Peer's response is not in requested range.
|
|
PeerScoreMissingValues* = -25
|
|
## Peer response contains too much missing data - this can happen either
|
|
## because a long reorg happened or the peer is falsely trying to convince
|
|
## us that a long reorg happened.
|
|
PeerScoreUnviableFork* = -200
|
|
## Peer responded with data from an unviable fork - are they on a
|
|
## different chain?
|
|
|
|
type
|
|
SyncResponseKind* {.pure.} = enum
|
|
Good, Empty
|
|
|
|
SyncResponseStats* = array[int(high(SyncResponseKind)) + 1, uint64]
|
|
|
|
template get*(a: SyncResponseStats, index: SyncResponseKind): uint64 =
|
|
a[int(index)]
|
|
|
|
template update*(a: var SyncResponseStats, index: SyncResponseKind,
|
|
value: uint64) =
|
|
a[int(index)] += value
|