Skip to content

Commit 2b4f987

Browse files
authored
remove pre-v1.4.0 attestation stability subnets (#5402)
* remove pre-v1.4.0 attestation stability subnets * re-add most of should register stability subnets on attester duties test
1 parent ff176a1 commit 2b4f987

File tree

8 files changed

+10
-68
lines changed

8 files changed

+10
-68
lines changed

beacon_chain/conf.nim

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -248,11 +248,6 @@ type
248248
desc: "Number of worker threads (\"0\" = use as many threads as there are CPU cores available)"
249249
name: "num-threads" .}: int
250250

251-
useOldStabilitySubnets* {.
252-
hidden
253-
defaultValue: false
254-
name: "debug-use-old-attestation-stability-subnets" .}: bool
255-
256251
# https://github.com/ethereum/execution-apis/blob/v1.0.0-beta.3/src/engine/authentication.md#key-distribution
257252
jwtSecret* {.
258253
desc: "A file containing the hex-encoded 256 bit secret key to be used for verifying/generating JWT tokens"

beacon_chain/consensus_object_pools/blockchain_dag.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -597,7 +597,7 @@ func init*(
597597
# checkpoint - we pre-load the balances here to avoid rewinding the justified
598598
# state later and compress them because not all checkpoints end up being used
599599
# for fork choice - specially during long periods of non-finalization
600-
proc snappyEncode(inp: openArray[byte]): seq[byte] =
600+
func snappyEncode(inp: openArray[byte]): seq[byte] =
601601
try:
602602
snappy.encode(inp)
603603
except CatchableError as err:

beacon_chain/nimbus_beacon_node.nim

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -324,8 +324,7 @@ proc initFullNode(
324324
blobQuarantine = newClone(BlobQuarantine())
325325
consensusManager = ConsensusManager.new(
326326
dag, attestationPool, quarantine, node.elManager,
327-
ActionTracker.init(rng, node.network.nodeId, config.subscribeAllSubnets,
328-
config.useOldStabilitySubnets),
327+
ActionTracker.init(node.network.nodeId, config.subscribeAllSubnets),
329328
node.dynamicFeeRecipientsStore, config.validatorsDir,
330329
config.defaultFeeRecipient, config.suggestedGasLimit)
331330
blockProcessor = BlockProcessor.new(

beacon_chain/rpc/rest_config_api.nim

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -253,9 +253,6 @@ proc installConfigApiHandlers*(router: var RestRouter, node: BeaconNode) =
253253
# https://github.com/ethereum/consensus-specs/blob/v1.3.0/specs/phase0/validator.md#constants
254254
TARGET_AGGREGATORS_PER_COMMITTEE:
255255
Base10.toString(TARGET_AGGREGATORS_PER_COMMITTEE),
256-
RANDOM_SUBNETS_PER_VALIDATOR: "1",
257-
EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION:
258-
Base10.toString(EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION),
259256
ATTESTATION_SUBNET_COUNT:
260257
Base10.toString(ATTESTATION_SUBNET_COUNT),
261258

beacon_chain/spec/presets.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ const
2323

2424
# Constants from `validator.md` not covered by config/presets in the spec
2525
TARGET_AGGREGATORS_PER_COMMITTEE*: uint64 = 16
26-
EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION*: uint64 = 256
26+
EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION: uint64 = 256
2727

2828
type
2929
Version* = distinct array[4, byte]

beacon_chain/validators/action_tracker.nim

Lines changed: 2 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
import
99
stew/shims/[sets, hashes], chronicles,
10-
eth/p2p/discoveryv5/random2,
1110
../spec/forks
1211

1312
from ../spec/validator import compute_subscribed_subnets
@@ -38,8 +37,6 @@ type
3837
slot*: Slot
3938

4039
ActionTracker* = object
41-
useOldStabilitySubnets: bool
42-
rng: ref HmacDrbgContext
4340
nodeId: UInt256
4441

4542
subscribeAllAttnets: bool
@@ -50,9 +47,6 @@ type
5047
subscribedSubnets*: AttnetBits
5148
## All subnets we're currently subscribed to
5249

53-
stabilitySubnets: seq[tuple[subnet_id: SubnetId, expiration: Epoch]]
54-
## The subnets on which we listen and broadcast gossip traffic to maintain
55-
## the health of the network - these are advertised in the ENR
5650
nextCycleEpoch: Epoch
5751

5852
# Used to track the next attestation and proposal slots using an
@@ -81,14 +75,6 @@ type
8175
func hash*(x: AggregatorDuty): Hash =
8276
hashAllFields(x)
8377

84-
func randomStabilitySubnet(
85-
self: ActionTracker, epoch: Epoch): tuple[subnet_id: SubnetId, expiration: Epoch] =
86-
(
87-
self.rng[].rand(ATTESTATION_SUBNET_COUNT - 1).SubnetId,
88-
epoch + EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION +
89-
self.rng[].rand(EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION.int).uint64,
90-
)
91-
9278
proc registerDuty*(
9379
tracker: var ActionTracker, slot: Slot, subnet_id: SubnetId,
9480
vidx: ValidatorIndex, isAggregator: bool) =
@@ -150,11 +136,7 @@ func stabilitySubnets*(tracker: ActionTracker, slot: Slot): AttnetBits =
150136
allSubnetBits
151137
else:
152138
var res: AttnetBits
153-
154-
if tracker.useOldStabilitySubnets or tracker.stabilitySubnets.len == 0:
155-
for v in tracker.stabilitySubnets:
156-
res[v.subnet_id.int] = true
157-
else:
139+
if tracker.knownValidators.len > 0:
158140
for subnetId in compute_subscribed_subnets(tracker.nodeId, slot.epoch):
159141
res[subnetId.int] = true
160142
res
@@ -173,36 +155,13 @@ proc updateSlot*(tracker: var ActionTracker, wallSlot: Slot) =
173155
for k in dels:
174156
tracker.syncDuties.del(k)
175157

176-
# Keep stability subnets for as long as validators are validating
177158
var toPrune: seq[ValidatorIndex]
178159
for k, v in tracker.knownValidators:
179160
if v + KNOWN_VALIDATOR_DECAY < wallSlot: toPrune.add k
180161
for k in toPrune:
181162
debug "Validator no longer active", index = k
182163
tracker.knownValidators.del k
183164

184-
let expectedSubnets =
185-
min(ATTESTATION_SUBNET_COUNT.int, tracker.knownValidators.len)
186-
187-
let epoch = wallSlot.epoch
188-
block:
189-
# If we have too many stability subnets, remove some expired ones
190-
var i = 0
191-
while tracker.stabilitySubnets.len > expectedSubnets and
192-
i < tracker.stabilitySubnets.len:
193-
if epoch >= tracker.stabilitySubnets[i].expiration:
194-
tracker.stabilitySubnets.delete(i)
195-
else:
196-
inc i
197-
198-
for ss in tracker.stabilitySubnets.mitems():
199-
if epoch >= ss.expiration:
200-
ss = tracker.randomStabilitySubnet(epoch)
201-
202-
# and if we have too few, add a few more
203-
for i in tracker.stabilitySubnets.len..<expectedSubnets:
204-
tracker.stabilitySubnets.add(tracker.randomStabilitySubnet(epoch))
205-
206165
tracker.currentSlot = wallSlot
207166

208167
func getNextValidatorAction(
@@ -300,11 +259,8 @@ func updateActions*(
300259
(1'u32 shl (slot mod SLOTS_PER_EPOCH))
301260

302261
func init*(
303-
T: type ActionTracker, rng: ref HmacDrbgContext, nodeId: UInt256,
304-
subscribeAllAttnets: bool, useOldStabilitySubnets: bool): T =
262+
T: type ActionTracker, nodeId: UInt256, subscribeAllAttnets: bool): T =
305263
T(
306-
rng: rng,
307264
nodeId: nodeId,
308265
subscribeAllAttnets: subscribeAllAttnets,
309-
useOldStabilitySubnets: useOldStabilitySubnets
310266
)

ncli/resttest-rules.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2802,7 +2802,7 @@
28022802
"response": {
28032803
"status": {"operator": "equals", "value": "200"},
28042804
"headers": [{"key": "Content-Type", "value": "application/json", "operator": "equals"}],
2805-
"body": [{"operator": "jstructcmps", "start": ["data"], "value": {"MAX_COMMITTEES_PER_SLOT":"","TARGET_COMMITTEE_SIZE":"","MAX_VALIDATORS_PER_COMMITTEE":"","SHUFFLE_ROUND_COUNT":"","HYSTERESIS_QUOTIENT":"","HYSTERESIS_DOWNWARD_MULTIPLIER":"","HYSTERESIS_UPWARD_MULTIPLIER":"","MIN_DEPOSIT_AMOUNT":"","MAX_EFFECTIVE_BALANCE":"","EFFECTIVE_BALANCE_INCREMENT":"","MIN_ATTESTATION_INCLUSION_DELAY":"","SLOTS_PER_EPOCH":"","MIN_SEED_LOOKAHEAD":"","MAX_SEED_LOOKAHEAD":"","EPOCHS_PER_ETH1_VOTING_PERIOD":"","SLOTS_PER_HISTORICAL_ROOT":"","MIN_EPOCHS_TO_INACTIVITY_PENALTY":"","EPOCHS_PER_HISTORICAL_VECTOR":"","EPOCHS_PER_SLASHINGS_VECTOR":"","HISTORICAL_ROOTS_LIMIT":"","VALIDATOR_REGISTRY_LIMIT":"","BASE_REWARD_FACTOR":"","WHISTLEBLOWER_REWARD_QUOTIENT":"","PROPOSER_REWARD_QUOTIENT":"","INACTIVITY_PENALTY_QUOTIENT":"","MIN_SLASHING_PENALTY_QUOTIENT":"","PROPORTIONAL_SLASHING_MULTIPLIER":"","MAX_PROPOSER_SLASHINGS":"","MAX_ATTESTER_SLASHINGS":"","MAX_ATTESTATIONS":"","MAX_DEPOSITS":"","MAX_VOLUNTARY_EXITS":"","INACTIVITY_PENALTY_QUOTIENT_ALTAIR":"","MIN_SLASHING_PENALTY_QUOTIENT_ALTAIR":"","PROPORTIONAL_SLASHING_MULTIPLIER_ALTAIR":"","SYNC_COMMITTEE_SIZE":"","EPOCHS_PER_SYNC_COMMITTEE_PERIOD":"","MIN_SYNC_COMMITTEE_PARTICIPANTS":"","UPDATE_TIMEOUT":"","INACTIVITY_PENALTY_QUOTIENT_BELLATRIX":"","MIN_SLASHING_PENALTY_QUOTIENT_BELLATRIX":"","PROPORTIONAL_SLASHING_MULTIPLIER_BELLATRIX":"","MAX_BYTES_PER_TRANSACTION":"","MAX_TRANSACTIONS_PER_PAYLOAD":"","BYTES_PER_LOGS_BLOOM":"","MAX_EXTRA_DATA_BYTES":"","MAX_BLS_TO_EXECUTION_CHANGES":"","MAX_WITHDRAWALS_PER_PAYLOAD":"","MAX_VALIDATORS_PER_WITHDRAWALS_SWEEP":"","PRESET_BASE":"","CONFIG_NAME":"","TERMINAL_TOTAL_DIFFICULTY":"","TERMINAL_BLOCK_HASH":"","TERMINAL_BLOCK_HASH_ACTIVATION_EPOCH":"","MIN_GENESIS_ACTIVE_VALIDATOR_COUNT":"","MIN_GENESIS_TIME":"","GENESIS_FORK_VERSION":"","GENESIS_DELAY":"","ALTAIR_FORK_VERSION":"","ALTAIR_FORK_EPOCH":"","BELLATRIX_FORK_VERSION":"","BELLATRIX_FORK_EPOCH":"","CAPELLA_FORK_VERSION":"","CAPELLA_FORK_EPOCH":"","DENEB_FORK_VERSION":"","DENEB_FORK_EPOCH":"","SECONDS_PER_SLOT":"","SECONDS_PER_ETH1_BLOCK":"","MIN_VALIDATOR_WITHDRAWABILITY_DELAY":"","SHARD_COMMITTEE_PERIOD":"","ETH1_FOLLOW_DISTANCE":"","INACTIVITY_SCORE_BIAS":"","INACTIVITY_SCORE_RECOVERY_RATE":"","EJECTION_BALANCE":"","MIN_PER_EPOCH_CHURN_LIMIT":"","CHURN_LIMIT_QUOTIENT":"","PROPOSER_SCORE_BOOST":"","DEPOSIT_CHAIN_ID":"","DEPOSIT_NETWORK_ID":"","DEPOSIT_CONTRACT_ADDRESS":"","BLS_WITHDRAWAL_PREFIX":"","ETH1_ADDRESS_WITHDRAWAL_PREFIX":"","DOMAIN_BEACON_PROPOSER":"","DOMAIN_BEACON_ATTESTER":"","DOMAIN_RANDAO":"","DOMAIN_DEPOSIT":"","DOMAIN_VOLUNTARY_EXIT":"","DOMAIN_SELECTION_PROOF":"","DOMAIN_AGGREGATE_AND_PROOF":"","TIMELY_SOURCE_FLAG_INDEX":"","TIMELY_TARGET_FLAG_INDEX":"","TIMELY_HEAD_FLAG_INDEX":"","TIMELY_SOURCE_WEIGHT":"","TIMELY_TARGET_WEIGHT":"","TIMELY_HEAD_WEIGHT":"","SYNC_REWARD_WEIGHT":"","PROPOSER_WEIGHT":"","WEIGHT_DENOMINATOR":"","DOMAIN_SYNC_COMMITTEE":"","DOMAIN_SYNC_COMMITTEE_SELECTION_PROOF":"","DOMAIN_CONTRIBUTION_AND_PROOF":"","DOMAIN_BLS_TO_EXECUTION_CHANGE":"","TARGET_AGGREGATORS_PER_COMMITTEE":"","RANDOM_SUBNETS_PER_VALIDATOR":"","EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION":"","ATTESTATION_SUBNET_COUNT":"","TARGET_AGGREGATORS_PER_SYNC_SUBCOMMITTEE":"","SYNC_COMMITTEE_SUBNET_COUNT":""}}]
2805+
"body": [{"operator": "jstructcmps", "start": ["data"], "value": {"MAX_COMMITTEES_PER_SLOT":"","TARGET_COMMITTEE_SIZE":"","MAX_VALIDATORS_PER_COMMITTEE":"","SHUFFLE_ROUND_COUNT":"","HYSTERESIS_QUOTIENT":"","HYSTERESIS_DOWNWARD_MULTIPLIER":"","HYSTERESIS_UPWARD_MULTIPLIER":"","MIN_DEPOSIT_AMOUNT":"","MAX_EFFECTIVE_BALANCE":"","EFFECTIVE_BALANCE_INCREMENT":"","MIN_ATTESTATION_INCLUSION_DELAY":"","SLOTS_PER_EPOCH":"","MIN_SEED_LOOKAHEAD":"","MAX_SEED_LOOKAHEAD":"","EPOCHS_PER_ETH1_VOTING_PERIOD":"","SLOTS_PER_HISTORICAL_ROOT":"","MIN_EPOCHS_TO_INACTIVITY_PENALTY":"","EPOCHS_PER_HISTORICAL_VECTOR":"","EPOCHS_PER_SLASHINGS_VECTOR":"","HISTORICAL_ROOTS_LIMIT":"","VALIDATOR_REGISTRY_LIMIT":"","BASE_REWARD_FACTOR":"","WHISTLEBLOWER_REWARD_QUOTIENT":"","PROPOSER_REWARD_QUOTIENT":"","INACTIVITY_PENALTY_QUOTIENT":"","MIN_SLASHING_PENALTY_QUOTIENT":"","PROPORTIONAL_SLASHING_MULTIPLIER":"","MAX_PROPOSER_SLASHINGS":"","MAX_ATTESTER_SLASHINGS":"","MAX_ATTESTATIONS":"","MAX_DEPOSITS":"","MAX_VOLUNTARY_EXITS":"","INACTIVITY_PENALTY_QUOTIENT_ALTAIR":"","MIN_SLASHING_PENALTY_QUOTIENT_ALTAIR":"","PROPORTIONAL_SLASHING_MULTIPLIER_ALTAIR":"","SYNC_COMMITTEE_SIZE":"","EPOCHS_PER_SYNC_COMMITTEE_PERIOD":"","MIN_SYNC_COMMITTEE_PARTICIPANTS":"","UPDATE_TIMEOUT":"","INACTIVITY_PENALTY_QUOTIENT_BELLATRIX":"","MIN_SLASHING_PENALTY_QUOTIENT_BELLATRIX":"","PROPORTIONAL_SLASHING_MULTIPLIER_BELLATRIX":"","MAX_BYTES_PER_TRANSACTION":"","MAX_TRANSACTIONS_PER_PAYLOAD":"","BYTES_PER_LOGS_BLOOM":"","MAX_EXTRA_DATA_BYTES":"","MAX_BLS_TO_EXECUTION_CHANGES":"","MAX_WITHDRAWALS_PER_PAYLOAD":"","MAX_VALIDATORS_PER_WITHDRAWALS_SWEEP":"","PRESET_BASE":"","CONFIG_NAME":"","TERMINAL_TOTAL_DIFFICULTY":"","TERMINAL_BLOCK_HASH":"","TERMINAL_BLOCK_HASH_ACTIVATION_EPOCH":"","MIN_GENESIS_ACTIVE_VALIDATOR_COUNT":"","MIN_GENESIS_TIME":"","GENESIS_FORK_VERSION":"","GENESIS_DELAY":"","ALTAIR_FORK_VERSION":"","ALTAIR_FORK_EPOCH":"","BELLATRIX_FORK_VERSION":"","BELLATRIX_FORK_EPOCH":"","CAPELLA_FORK_VERSION":"","CAPELLA_FORK_EPOCH":"","DENEB_FORK_VERSION":"","DENEB_FORK_EPOCH":"","SECONDS_PER_SLOT":"","SECONDS_PER_ETH1_BLOCK":"","MIN_VALIDATOR_WITHDRAWABILITY_DELAY":"","SHARD_COMMITTEE_PERIOD":"","ETH1_FOLLOW_DISTANCE":"","INACTIVITY_SCORE_BIAS":"","INACTIVITY_SCORE_RECOVERY_RATE":"","EJECTION_BALANCE":"","MIN_PER_EPOCH_CHURN_LIMIT":"","CHURN_LIMIT_QUOTIENT":"","PROPOSER_SCORE_BOOST":"","DEPOSIT_CHAIN_ID":"","DEPOSIT_NETWORK_ID":"","DEPOSIT_CONTRACT_ADDRESS":"","BLS_WITHDRAWAL_PREFIX":"","ETH1_ADDRESS_WITHDRAWAL_PREFIX":"","DOMAIN_BEACON_PROPOSER":"","DOMAIN_BEACON_ATTESTER":"","DOMAIN_RANDAO":"","DOMAIN_DEPOSIT":"","DOMAIN_VOLUNTARY_EXIT":"","DOMAIN_SELECTION_PROOF":"","DOMAIN_AGGREGATE_AND_PROOF":"","TIMELY_SOURCE_FLAG_INDEX":"","TIMELY_TARGET_FLAG_INDEX":"","TIMELY_HEAD_FLAG_INDEX":"","TIMELY_SOURCE_WEIGHT":"","TIMELY_TARGET_WEIGHT":"","TIMELY_HEAD_WEIGHT":"","SYNC_REWARD_WEIGHT":"","PROPOSER_WEIGHT":"","WEIGHT_DENOMINATOR":"","DOMAIN_SYNC_COMMITTEE":"","DOMAIN_SYNC_COMMITTEE_SELECTION_PROOF":"","DOMAIN_CONTRIBUTION_AND_PROOF":"","DOMAIN_BLS_TO_EXECUTION_CHANGE":"","TARGET_AGGREGATORS_PER_COMMITTEE":"","ATTESTATION_SUBNET_COUNT":"","TARGET_AGGREGATORS_PER_SYNC_SUBCOMMITTEE":"","SYNC_COMMITTEE_SUBNET_COUNT":""}}]
28062806
}
28072807
},
28082808
{

tests/test_action_tracker.nim

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,8 @@ import
1212
../beacon_chain/validators/action_tracker
1313

1414
suite "subnet tracker":
15-
setup:
16-
let rng = HmacDrbgContext.new()
17-
1815
test "should register stability subnets on attester duties":
19-
var tracker = ActionTracker.init(rng, default(UInt256), false, true)
16+
var tracker = ActionTracker.init(default(UInt256), false)
2017

2118
check:
2219
tracker.stabilitySubnets(Slot(0)).countOnes() == 0
@@ -27,7 +24,6 @@ suite "subnet tracker":
2724
tracker.updateSlot(Slot(0))
2825

2926
check:
30-
tracker.stabilitySubnets(Slot(0)).countOnes() == 1
3127
tracker.aggregateSubnets(Slot(0)).countOnes() == 1
3228
tracker.aggregateSubnets(Slot(1)).countOnes() == 0
3329

@@ -52,17 +48,16 @@ suite "subnet tracker":
5248

5349
# Guaranteed to expire
5450
tracker.updateSlot(
55-
(Epoch(EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION * 2) + 1).start_slot() +
56-
SUBNET_SUBSCRIPTION_LEAD_TIME_SLOTS + KNOWN_VALIDATOR_DECAY + 1)
57-
51+
(Epoch(1025).start_slot() +
52+
SUBNET_SUBSCRIPTION_LEAD_TIME_SLOTS + KNOWN_VALIDATOR_DECAY + 1))
5853

5954
check:
6055
tracker.stabilitySubnets(Slot(0)).countOnes() == 0
6156
tracker.aggregateSubnets(Slot(0)).countOnes() == 0
6257

6358
test "should register sync committee duties":
6459
var
65-
tracker = ActionTracker.init(rng, default(UInt256), false, true)
60+
tracker = ActionTracker.init(default(UInt256), false)
6661
pk0 = ValidatorPubKey.fromHex("0xb4102a1f6c80e5c596a974ebd930c9f809c3587dc4d1d3634b77ff66db71e376dbc86c3252c6d140ce031f4ec6167798").get()
6762
pk1 = ValidatorPubKey.fromHex("0xa00d2954717425ce047e0928e5f4ec7c0e3bbe1058db511303fd659770ddace686ee2e22ac180422e516f4c503eb2228").get()
6863

0 commit comments

Comments
 (0)