use EF consensus spec v1.5.0-alpha.1 test vectors (#6249)

This commit is contained in:
tersec 2024-04-28 03:33:44 +00:00 committed by GitHub
parent 6119389c3a
commit 302f645a01
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 64 additions and 26 deletions

View File

@ -2399,8 +2399,9 @@ OK: 4/4 Fail: 0/4 Skip: 0/4
## EF - Electra - Epoch Processing - Effective balance updates [Preset: mainnet] ## EF - Electra - Epoch Processing - Effective balance updates [Preset: mainnet]
```diff ```diff
+ Effective balance updates - effective_balance_hysteresis [Preset: mainnet] OK + Effective balance updates - effective_balance_hysteresis [Preset: mainnet] OK
+ Effective balance updates - effective_balance_hysteresis_with_compounding_credentials [Pre OK
``` ```
OK: 1/1 Fail: 0/1 Skip: 0/1 OK: 2/2 Fail: 0/2 Skip: 0/2
## EF - Electra - Epoch Processing - Eth1 data reset [Preset: mainnet] ## EF - Electra - Epoch Processing - Eth1 data reset [Preset: mainnet]
```diff ```diff
+ Eth1 data reset - eth1_vote_no_reset [Preset: mainnet] OK + Eth1 data reset - eth1_vote_no_reset [Preset: mainnet] OK
@ -2658,10 +2659,8 @@ OK: 6/6 Fail: 0/6 Skip: 0/6
+ [Invalid] EF - Electra - Operations - Consolidation - invalid_no_execution_withdrawal_cred OK + [Invalid] EF - Electra - Operations - Consolidation - invalid_no_execution_withdrawal_cred OK
+ [Invalid] EF - Electra - Operations - Consolidation - invalid_not_enough_consolidation_chu OK + [Invalid] EF - Electra - Operations - Consolidation - invalid_not_enough_consolidation_chu OK
+ [Invalid] EF - Electra - Operations - Consolidation - invalid_source_equals_target OK + [Invalid] EF - Electra - Operations - Consolidation - invalid_source_equals_target OK
+ [Invalid] EF - Electra - Operations - Consolidation - invalid_source_signature OK
+ [Invalid] EF - Electra - Operations - Consolidation - invalid_target_signature OK
``` ```
OK: 11/11 Fail: 0/11 Skip: 0/11 OK: 9/9 Fail: 0/9 Skip: 0/9
## EF - Electra - Operations - Deposit [Preset: mainnet] ## EF - Electra - Operations - Deposit [Preset: mainnet]
```diff ```diff
+ [Invalid] EF - Electra - Operations - Deposit - invalid_bad_merkle_proof OK + [Invalid] EF - Electra - Operations - Deposit - invalid_bad_merkle_proof OK
@ -3026,12 +3025,13 @@ OK: 6/6 Fail: 0/6 Skip: 0/6
OK: 14/14 Fail: 0/14 Skip: 0/14 OK: 14/14 Fail: 0/14 Skip: 0/14
## EF - Merkle proof [Preset: mainnet] ## EF - Merkle proof [Preset: mainnet]
```diff ```diff
Merkle proof - Single merkle proof - eip7594 Skip
+ Merkle proof - Single merkle proof - mainnet/deneb/merkle_proof/single_merkle_proof/Beacon OK + Merkle proof - Single merkle proof - mainnet/deneb/merkle_proof/single_merkle_proof/Beacon OK
+ Merkle proof - Single merkle proof - mainnet/deneb/merkle_proof/single_merkle_proof/Beacon OK + Merkle proof - Single merkle proof - mainnet/deneb/merkle_proof/single_merkle_proof/Beacon OK
+ Merkle proof - Single merkle proof - mainnet/deneb/merkle_proof/single_merkle_proof/Beacon OK + Merkle proof - Single merkle proof - mainnet/deneb/merkle_proof/single_merkle_proof/Beacon OK
+ Merkle proof - Single merkle proof - mainnet/deneb/merkle_proof/single_merkle_proof/Beacon OK + Merkle proof - Single merkle proof - mainnet/deneb/merkle_proof/single_merkle_proof/Beacon OK
``` ```
OK: 4/4 Fail: 0/4 Skip: 0/4 OK: 4/5 Fail: 0/5 Skip: 1/5
## EF - Phase 0 - Epoch Processing - Effective balance updates [Preset: mainnet] ## EF - Phase 0 - Epoch Processing - Effective balance updates [Preset: mainnet]
```diff ```diff
+ Effective balance updates - effective_balance_hysteresis [Preset: mainnet] OK + Effective balance updates - effective_balance_hysteresis [Preset: mainnet] OK
@ -3534,4 +3534,4 @@ OK: 69/88 Fail: 0/88 Skip: 19/88
OK: 3/3 Fail: 0/3 Skip: 0/3 OK: 3/3 Fail: 0/3 Skip: 0/3
---TOTAL--- ---TOTAL---
OK: 2837/2856 Fail: 0/2856 Skip: 19/2856 OK: 2836/2856 Fail: 0/2856 Skip: 20/2856

View File

@ -2508,8 +2508,9 @@ OK: 4/4 Fail: 0/4 Skip: 0/4
## EF - Electra - Epoch Processing - Effective balance updates [Preset: minimal] ## EF - Electra - Epoch Processing - Effective balance updates [Preset: minimal]
```diff ```diff
+ Effective balance updates - effective_balance_hysteresis [Preset: minimal] OK + Effective balance updates - effective_balance_hysteresis [Preset: minimal] OK
+ Effective balance updates - effective_balance_hysteresis_with_compounding_credentials [Pre OK
``` ```
OK: 1/1 Fail: 0/1 Skip: 0/1 OK: 2/2 Fail: 0/2 Skip: 0/2
## EF - Electra - Epoch Processing - Eth1 data reset [Preset: minimal] ## EF - Electra - Epoch Processing - Eth1 data reset [Preset: minimal]
```diff ```diff
+ Eth1 data reset - eth1_vote_no_reset [Preset: minimal] OK + Eth1 data reset - eth1_vote_no_reset [Preset: minimal] OK
@ -2795,9 +2796,8 @@ OK: 6/6 Fail: 0/6 Skip: 0/6
+ [Valid] EF - Electra - Operations - Consolidation - consolidation_balance_larger_than_ch OK + [Valid] EF - Electra - Operations - Consolidation - consolidation_balance_larger_than_ch OK
+ [Valid] EF - Electra - Operations - Consolidation - consolidation_balance_through_two_ch OK + [Valid] EF - Electra - Operations - Consolidation - consolidation_balance_through_two_ch OK
+ [Valid] EF - Electra - Operations - Consolidation - consolidation_churn_limit_balance OK + [Valid] EF - Electra - Operations - Consolidation - consolidation_churn_limit_balance OK
+ [Valid] EF - Electra - Operations - Consolidation - multiple_consolidations_above_churn OK
``` ```
OK: 20/20 Fail: 0/20 Skip: 0/20 OK: 19/19 Fail: 0/19 Skip: 0/19
## EF - Electra - Operations - Deposit [Preset: minimal] ## EF - Electra - Operations - Deposit [Preset: minimal]
```diff ```diff
+ [Invalid] EF - Electra - Operations - Deposit - invalid_bad_merkle_proof OK + [Invalid] EF - Electra - Operations - Deposit - invalid_bad_merkle_proof OK
@ -3199,12 +3199,13 @@ OK: 20/20 Fail: 0/20 Skip: 0/20
OK: 4/4 Fail: 0/4 Skip: 0/4 OK: 4/4 Fail: 0/4 Skip: 0/4
## EF - Merkle proof [Preset: minimal] ## EF - Merkle proof [Preset: minimal]
```diff ```diff
Merkle proof - Single merkle proof - eip7594 Skip
+ Merkle proof - Single merkle proof - minimal/deneb/merkle_proof/single_merkle_proof/Beacon OK + Merkle proof - Single merkle proof - minimal/deneb/merkle_proof/single_merkle_proof/Beacon OK
+ Merkle proof - Single merkle proof - minimal/deneb/merkle_proof/single_merkle_proof/Beacon OK + Merkle proof - Single merkle proof - minimal/deneb/merkle_proof/single_merkle_proof/Beacon OK
+ Merkle proof - Single merkle proof - minimal/deneb/merkle_proof/single_merkle_proof/Beacon OK + Merkle proof - Single merkle proof - minimal/deneb/merkle_proof/single_merkle_proof/Beacon OK
+ Merkle proof - Single merkle proof - minimal/deneb/merkle_proof/single_merkle_proof/Beacon OK + Merkle proof - Single merkle proof - minimal/deneb/merkle_proof/single_merkle_proof/Beacon OK
``` ```
OK: 4/4 Fail: 0/4 Skip: 0/4 OK: 4/5 Fail: 0/5 Skip: 1/5
## EF - Phase 0 - Epoch Processing - Effective balance updates [Preset: minimal] ## EF - Phase 0 - Epoch Processing - Effective balance updates [Preset: minimal]
```diff ```diff
+ Effective balance updates - effective_balance_hysteresis [Preset: minimal] OK + Effective balance updates - effective_balance_hysteresis [Preset: minimal] OK
@ -3836,4 +3837,4 @@ OK: 185/207 Fail: 0/207 Skip: 22/207
OK: 3/3 Fail: 0/3 Skip: 0/3 OK: 3/3 Fail: 0/3 Skip: 0/3
---TOTAL--- ---TOTAL---
OK: 3108/3130 Fail: 0/3130 Skip: 22/3130 OK: 3108/3131 Fail: 0/3131 Skip: 23/3131

View File

@ -74,7 +74,7 @@ export
tables, results, endians2, json_serialization, sszTypes, beacon_time, crypto, tables, results, endians2, json_serialization, sszTypes, beacon_time, crypto,
digest, presets digest, presets
const SPEC_VERSION* = "1.5.0-alpha.0" const SPEC_VERSION* = "1.5.0-alpha.1"
## Spec version we're aiming to be compatible with, right now ## Spec version we're aiming to be compatible with, right now
const const

View File

@ -462,6 +462,10 @@ proc collectSignatureSets*(
genesis_fork, genesis_validators_root, bls_change.message, genesis_fork, genesis_validators_root, bls_change.message,
validator_pubkey, sig) validator_pubkey, sig)
block:
# 9. Consolidations
debugRaiseAssert "check consolidations signatures"
ok() ok()
proc batchVerify*(verifier: var BatchVerifier, sigs: openArray[SignatureSet]): bool = proc batchVerify*(verifier: var BatchVerifier, sigs: openArray[SignatureSet]): bool =

View File

@ -1000,7 +1000,7 @@ func process_execution_layer_withdrawal_request*(
)) ))
# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.0/specs/electra/beacon-chain.md#consolidations # https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.0/specs/electra/beacon-chain.md#consolidations
func process_consolidation*( proc process_consolidation*(
cfg: RuntimeConfig, state: var electra.BeaconState, cfg: RuntimeConfig, state: var electra.BeaconState,
signed_consolidation: SignedConsolidation, cache: var StateCache): signed_consolidation: SignedConsolidation, cache: var StateCache):
Result[void, cstring] = Result[void, cstring] =
@ -1055,14 +1055,18 @@ func process_consolidation*(
target_validator.withdrawal_credentials.data.toOpenArray(12, 31)): target_validator.withdrawal_credentials.data.toOpenArray(12, 31)):
return err("Consolidation: source and target don't have same withdrawal address") return err("Consolidation: source and target don't have same withdrawal address")
debugRaiseAssert "add signature checking for process_consolidation, which oddly isn't tested" debugRaiseAssert "this is per spec, near-verbatim, but Nimbus generally factors this out into spec/signatures.nim. so, create verify_consolidation_signature infra there, call here"
# Verify consolidation is signed by the source and the target # Verify consolidation is signed by the source and the target
#let let
# domain = compute_domain( domain = compute_domain(
# DOMAIN_CONSOLIDATION, genesis_validators_root=state.genesis_validators_root) DOMAIN_CONSOLIDATION, cfg.GENESIS_FORK_VERSION,
# signing_root = compute_signing_root(consolidation, domain) genesis_validators_root=state.genesis_validators_root)
# pubkeys = [source_validator.pubkey, target_validator.pubkey] signing_root = compute_signing_root(consolidation, domain)
#assert bls.FastAggregateVerify(pubkeys, signing_root, signed_consolidation.signature) pubkeys = [source_validator[].pubkey, target_validator.pubkey]
if not blsFastAggregateVerify(
pubkeys, signing_root.data, signed_consolidation.signature):
return err("Consolidation: invalid signature")
# Initiate source validator exit and append pending consolidation # Initiate source validator exit and append pending consolidation
source_validator[].exit_epoch = compute_consolidation_epoch_and_update_churn( source_validator[].exit_epoch = compute_consolidation_epoch_and_update_churn(

View File

@ -1033,7 +1033,10 @@ template effective_balance_might_update*(
effective_balance + UPWARD_THRESHOLD < balance effective_balance + UPWARD_THRESHOLD < balance
# https://github.com/ethereum/consensus-specs/blob/v1.4.0/specs/phase0/beacon-chain.md#effective-balances-updates # https://github.com/ethereum/consensus-specs/blob/v1.4.0/specs/phase0/beacon-chain.md#effective-balances-updates
func process_effective_balance_updates*(state: var ForkyBeaconState) = func process_effective_balance_updates*(
state: var (phase0.BeaconState | altair.BeaconState |
bellatrix.BeaconState | capella.BeaconState |
deneb.BeaconState)) =
# Update effective balances with hysteresis # Update effective balances with hysteresis
for vidx in state.validators.vindices: for vidx in state.validators.vindices:
let let
@ -1048,6 +1051,35 @@ func process_effective_balance_updates*(state: var ForkyBeaconState) =
if new_effective_balance != effective_balance: if new_effective_balance != effective_balance:
state.validators.mitem(vidx).effective_balance = new_effective_balance state.validators.mitem(vidx).effective_balance = new_effective_balance
# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.1/specs/electra/beacon-chain.md#updated-process_effective_balance_updates
func process_effective_balance_updates*(state: var electra.BeaconState) =
# Update effective balances with hysteresis
for vidx in state.validators.vindices:
let
balance = state.balances.item(vidx)
effective_balance = state.validators.item(vidx).effective_balance
if effective_balance_might_update(balance, effective_balance):
debugRaiseAssert "amortize validator read access"
# Wrapping MAX_EFFECTIVE_BALANCE_ELECTRA.Gwei and
# MIN_ACTIVATION_BALANCE.Gwei in static() results
# in
# beacon_chain/spec/state_transition_epoch.nim(1067, 20) Error: expected: ':', but got: '('
# even though it'd be better to statically verify safety
let
effective_balance_limit =
if has_compounding_withdrawal_credential(
state.validators.item(vidx)):
MAX_EFFECTIVE_BALANCE_ELECTRA.Gwei
else:
MIN_ACTIVATION_BALANCE.Gwei
new_effective_balance =
min(
balance - balance mod EFFECTIVE_BALANCE_INCREMENT.Gwei,
effective_balance_limit)
# Protect against unnecessary cache invalidation
if new_effective_balance != effective_balance:
state.validators.mitem(vidx).effective_balance = new_effective_balance
# https://github.com/ethereum/consensus-specs/blob/v1.4.0/specs/phase0/beacon-chain.md#slashings-balances-updates # https://github.com/ethereum/consensus-specs/blob/v1.4.0/specs/phase0/beacon-chain.md#slashings-balances-updates
func process_slashings_reset*(state: var ForkyBeaconState) = func process_slashings_reset*(state: var ForkyBeaconState) =
let next_epoch = get_current_epoch(state) + 1 let next_epoch = get_current_epoch(state) + 1

View File

@ -147,7 +147,7 @@ suite baseDescription & "BLS to execution change " & preset():
applyBlsToExecutionChange, path) applyBlsToExecutionChange, path)
suite baseDescription & "Consolidation " & preset(): suite baseDescription & "Consolidation " & preset():
func applyConsolidation( proc applyConsolidation(
preState: var electra.BeaconState, preState: var electra.BeaconState,
signed_consolidation: SignedConsolidation): signed_consolidation: SignedConsolidation):
Result[void, cstring] = Result[void, cstring] =
@ -157,9 +157,6 @@ suite baseDescription & "Consolidation " & preset():
for path in walkTests(OpConsolidationDir): for path in walkTests(OpConsolidationDir):
if path in [ if path in [
"multiple_consolidations_below_churn", # missing consolidation.ssz
"multiple_consolidations_equal_churn", # missing consolidation.ssz
"multiple_consolidations_equal_twice_churn", # missing consolidation.ssz
"invalid_exceed_pending_consolidations_limit", # apparently invalid prestate SSZ "invalid_exceed_pending_consolidations_limit", # apparently invalid prestate SSZ
]: ]:
continue continue

@ -1 +1 @@
Subproject commit 1c29412737b0228a20b410fceb7767d9e787eed0 Subproject commit 67f8fa8506e3b97b5e68a9c60e38157507aeec61