don't require attached validator for blinded block BN endpoint (#4313)
This commit is contained in:
parent
48994f67d3
commit
04cbea754b
|
@ -212,8 +212,7 @@ type
|
||||||
eth1_deposit_index*: uint64
|
eth1_deposit_index*: uint64
|
||||||
|
|
||||||
# Registry
|
# Registry
|
||||||
#validators*: HashList[ValidatorStatus, Limit VALIDATOR_REGISTRY_LIMIT]
|
validators*: HashList[ValidatorStatus, Limit VALIDATOR_REGISTRY_LIMIT]
|
||||||
validators*: HashList[Validator, Limit VALIDATOR_REGISTRY_LIMIT]
|
|
||||||
balances*: HashList[Gwei, Limit VALIDATOR_REGISTRY_LIMIT]
|
balances*: HashList[Gwei, Limit VALIDATOR_REGISTRY_LIMIT]
|
||||||
|
|
||||||
# Randomness
|
# Randomness
|
||||||
|
|
|
@ -763,7 +763,7 @@ func forkDigests(node: BeaconNode): auto =
|
||||||
node.dag.forkDigests.capella]
|
node.dag.forkDigests.capella]
|
||||||
forkDigestsArray
|
forkDigestsArray
|
||||||
|
|
||||||
# https://github.com/ethereum/consensus-specs/blob/v1.2.0/specs/phase0/validator.md#phase-0-attestation-subnet-stability
|
# https://github.com/ethereum/consensus-specs/blob/v1.3.0-alpha.0/specs/phase0/validator.md#phase-0-attestation-subnet-stability
|
||||||
proc updateAttestationSubnetHandlers(node: BeaconNode, slot: Slot) =
|
proc updateAttestationSubnetHandlers(node: BeaconNode, slot: Slot) =
|
||||||
if node.gossipState.card == 0:
|
if node.gossipState.card == 0:
|
||||||
# When disconnected, updateGossipState is responsible for all things
|
# When disconnected, updateGossipState is responsible for all things
|
||||||
|
|
|
@ -33,7 +33,7 @@ func increase_balance*(
|
||||||
if delta != 0: # avoid dirtying the balance cache if not needed
|
if delta != 0: # avoid dirtying the balance cache if not needed
|
||||||
increase_balance(state.balances.mitem(index), delta)
|
increase_balance(state.balances.mitem(index), delta)
|
||||||
|
|
||||||
# https://github.com/ethereum/consensus-specs/blob/v1.2.0/specs/phase0/beacon-chain.md#decrease_balance
|
# https://github.com/ethereum/consensus-specs/blob/v1.3.0-alpha.0/specs/phase0/beacon-chain.md#decrease_balance
|
||||||
func decrease_balance*(balance: var Gwei, delta: Gwei) =
|
func decrease_balance*(balance: var Gwei, delta: Gwei) =
|
||||||
balance =
|
balance =
|
||||||
if delta > balance:
|
if delta > balance:
|
||||||
|
@ -151,7 +151,7 @@ func get_slashing_penalty*(state: ForkyBeaconState,
|
||||||
{.fatal: "invalid BeaconState type".}
|
{.fatal: "invalid BeaconState type".}
|
||||||
|
|
||||||
# https://github.com/ethereum/consensus-specs/blob/v1.2.0/specs/phase0/beacon-chain.md#slash_validator
|
# https://github.com/ethereum/consensus-specs/blob/v1.2.0/specs/phase0/beacon-chain.md#slash_validator
|
||||||
# https://github.com/ethereum/consensus-specs/blob/v1.2.0/specs/altair/beacon-chain.md#modified-slash_validator
|
# https://github.com/ethereum/consensus-specs/blob/v1.3.0-alpha.0/specs/altair/beacon-chain.md#modified-slash_validator
|
||||||
# https://github.com/ethereum/consensus-specs/blob/v1.2.0/specs/bellatrix/beacon-chain.md#modified-slash_validator
|
# https://github.com/ethereum/consensus-specs/blob/v1.2.0/specs/bellatrix/beacon-chain.md#modified-slash_validator
|
||||||
func get_whistleblower_reward*(validator_effective_balance: Gwei): Gwei =
|
func get_whistleblower_reward*(validator_effective_balance: Gwei): Gwei =
|
||||||
validator_effective_balance div WHISTLEBLOWER_REWARD_QUOTIENT
|
validator_effective_balance div WHISTLEBLOWER_REWARD_QUOTIENT
|
||||||
|
|
|
@ -141,7 +141,7 @@ type
|
||||||
message*: ContributionAndProof
|
message*: ContributionAndProof
|
||||||
signature*: ValidatorSig
|
signature*: ValidatorSig
|
||||||
|
|
||||||
# https://github.com/ethereum/consensus-specs/blob/v1.2.0/specs/altair/validator.md#syncaggregatorselectiondata
|
# https://github.com/ethereum/consensus-specs/blob/v1.3.0-alpha.0/specs/altair/validator.md#syncaggregatorselectiondata
|
||||||
SyncAggregatorSelectionData* = object
|
SyncAggregatorSelectionData* = object
|
||||||
slot*: Slot
|
slot*: Slot
|
||||||
subcommittee_index*: uint64 # `SyncSubcommitteeIndex` after validation
|
subcommittee_index*: uint64 # `SyncSubcommitteeIndex` after validation
|
||||||
|
|
|
@ -354,7 +354,7 @@ func is_execution_enabled*(
|
||||||
capella.SigVerifiedBeaconBlockBody): bool =
|
capella.SigVerifiedBeaconBlockBody): bool =
|
||||||
is_merge_transition_block(state, body) or is_merge_transition_complete(state)
|
is_merge_transition_block(state, body) or is_merge_transition_complete(state)
|
||||||
|
|
||||||
# https://github.com/ethereum/consensus-specs/blob/v1.2.0/specs/bellatrix/beacon-chain.md#compute_timestamp_at_slot
|
# https://github.com/ethereum/consensus-specs/blob/v1.3.0-alpha.0/specs/bellatrix/beacon-chain.md#compute_timestamp_at_slot
|
||||||
func compute_timestamp_at_slot*(state: ForkyBeaconState, slot: Slot): uint64 =
|
func compute_timestamp_at_slot*(state: ForkyBeaconState, slot: Slot): uint64 =
|
||||||
# Note: This function is unsafe with respect to overflows and underflows.
|
# Note: This function is unsafe with respect to overflows and underflows.
|
||||||
let slots_since_genesis = slot - GENESIS_SLOT
|
let slots_since_genesis = slot - GENESIS_SLOT
|
||||||
|
|
|
@ -181,7 +181,8 @@ func maybeUpgradeStateToBellatrix(
|
||||||
bellatrixData: bellatrix.HashedBeaconState(
|
bellatrixData: bellatrix.HashedBeaconState(
|
||||||
root: hash_tree_root(newState[]), data: newState[]))[]
|
root: hash_tree_root(newState[]), data: newState[]))[]
|
||||||
|
|
||||||
from ./datatypes/capella import HashedBeaconState
|
from ./datatypes/capella import
|
||||||
|
ExecutionPayload, HashedBeaconState, asSigVerified
|
||||||
|
|
||||||
func maybeUpgradeStateToCapella(
|
func maybeUpgradeStateToCapella(
|
||||||
cfg: RuntimeConfig, state: var ForkedHashedBeaconState) =
|
cfg: RuntimeConfig, state: var ForkedHashedBeaconState) =
|
||||||
|
@ -322,7 +323,7 @@ template partialBeaconBlock(
|
||||||
deposits: seq[Deposit],
|
deposits: seq[Deposit],
|
||||||
exits: BeaconBlockExits,
|
exits: BeaconBlockExits,
|
||||||
sync_aggregate: SyncAggregate,
|
sync_aggregate: SyncAggregate,
|
||||||
execution_payload: ExecutionPayload): phase0.BeaconBlock =
|
execution_payload: bellatrix.ExecutionPayload): phase0.BeaconBlock =
|
||||||
phase0.BeaconBlock(
|
phase0.BeaconBlock(
|
||||||
slot: state.data.slot,
|
slot: state.data.slot,
|
||||||
proposer_index: proposer_index.uint64,
|
proposer_index: proposer_index.uint64,
|
||||||
|
@ -348,7 +349,7 @@ proc makeBeaconBlock*(
|
||||||
deposits: seq[Deposit],
|
deposits: seq[Deposit],
|
||||||
exits: BeaconBlockExits,
|
exits: BeaconBlockExits,
|
||||||
sync_aggregate: SyncAggregate,
|
sync_aggregate: SyncAggregate,
|
||||||
execution_payload: ExecutionPayload,
|
execution_payload: bellatrix.ExecutionPayload,
|
||||||
rollback: RollbackHashedProc[phase0.HashedBeaconState],
|
rollback: RollbackHashedProc[phase0.HashedBeaconState],
|
||||||
cache: var StateCache,
|
cache: var StateCache,
|
||||||
# TODO:
|
# TODO:
|
||||||
|
@ -391,7 +392,7 @@ template partialBeaconBlock(
|
||||||
deposits: seq[Deposit],
|
deposits: seq[Deposit],
|
||||||
exits: BeaconBlockExits,
|
exits: BeaconBlockExits,
|
||||||
sync_aggregate: SyncAggregate,
|
sync_aggregate: SyncAggregate,
|
||||||
execution_payload: ExecutionPayload): altair.BeaconBlock =
|
execution_payload: bellatrix.ExecutionPayload): altair.BeaconBlock =
|
||||||
altair.BeaconBlock(
|
altair.BeaconBlock(
|
||||||
slot: state.data.slot,
|
slot: state.data.slot,
|
||||||
proposer_index: proposer_index.uint64,
|
proposer_index: proposer_index.uint64,
|
||||||
|
@ -418,7 +419,7 @@ proc makeBeaconBlock*(
|
||||||
deposits: seq[Deposit],
|
deposits: seq[Deposit],
|
||||||
exits: BeaconBlockExits,
|
exits: BeaconBlockExits,
|
||||||
sync_aggregate: SyncAggregate,
|
sync_aggregate: SyncAggregate,
|
||||||
execution_payload: ExecutionPayload,
|
execution_payload: bellatrix.ExecutionPayload,
|
||||||
rollback: RollbackHashedProc[altair.HashedBeaconState],
|
rollback: RollbackHashedProc[altair.HashedBeaconState],
|
||||||
cache: var StateCache,
|
cache: var StateCache,
|
||||||
# TODO:
|
# TODO:
|
||||||
|
@ -462,7 +463,7 @@ template partialBeaconBlock(
|
||||||
deposits: seq[Deposit],
|
deposits: seq[Deposit],
|
||||||
exits: BeaconBlockExits,
|
exits: BeaconBlockExits,
|
||||||
sync_aggregate: SyncAggregate,
|
sync_aggregate: SyncAggregate,
|
||||||
execution_payload: ExecutionPayload): bellatrix.BeaconBlock =
|
execution_payload: bellatrix.ExecutionPayload): bellatrix.BeaconBlock =
|
||||||
bellatrix.BeaconBlock(
|
bellatrix.BeaconBlock(
|
||||||
slot: state.data.slot,
|
slot: state.data.slot,
|
||||||
proposer_index: proposer_index.uint64,
|
proposer_index: proposer_index.uint64,
|
||||||
|
@ -490,7 +491,7 @@ proc makeBeaconBlock*(
|
||||||
deposits: seq[Deposit],
|
deposits: seq[Deposit],
|
||||||
exits: BeaconBlockExits,
|
exits: BeaconBlockExits,
|
||||||
sync_aggregate: SyncAggregate,
|
sync_aggregate: SyncAggregate,
|
||||||
execution_payload: ExecutionPayload,
|
execution_payload: bellatrix.ExecutionPayload,
|
||||||
rollback: RollbackHashedProc[bellatrix.HashedBeaconState],
|
rollback: RollbackHashedProc[bellatrix.HashedBeaconState],
|
||||||
cache: var StateCache,
|
cache: var StateCache,
|
||||||
# TODO:
|
# TODO:
|
||||||
|
@ -532,7 +533,7 @@ proc makeBeaconBlock*(
|
||||||
deposits: seq[Deposit],
|
deposits: seq[Deposit],
|
||||||
exits: BeaconBlockExits,
|
exits: BeaconBlockExits,
|
||||||
sync_aggregate: SyncAggregate,
|
sync_aggregate: SyncAggregate,
|
||||||
executionPayload: ExecutionPayload,
|
executionPayload: bellatrix.ExecutionPayload,
|
||||||
rollback: RollbackForkedHashedProc,
|
rollback: RollbackForkedHashedProc,
|
||||||
cache: var StateCache,
|
cache: var StateCache,
|
||||||
# TODO:
|
# TODO:
|
||||||
|
|
|
@ -626,7 +626,7 @@ proc getBlindedBeaconBlock[T](
|
||||||
forkedBlock, executionPayloadHeader))
|
forkedBlock, executionPayloadHeader))
|
||||||
|
|
||||||
proc getBlindedBlockParts(
|
proc getBlindedBlockParts(
|
||||||
node: BeaconNode, head: BlockRef, validator: AttachedValidator,
|
node: BeaconNode, head: BlockRef, pubkey: ValidatorPubKey,
|
||||||
slot: Slot, randao: ValidatorSig, validator_index: ValidatorIndex):
|
slot: Slot, randao: ValidatorSig, validator_index: ValidatorIndex):
|
||||||
Future[Result[(bellatrix.ExecutionPayloadHeader, ForkedBeaconBlock), string]]
|
Future[Result[(bellatrix.ExecutionPayloadHeader, ForkedBeaconBlock), string]]
|
||||||
{.async.} =
|
{.async.} =
|
||||||
|
@ -636,7 +636,7 @@ proc getBlindedBlockParts(
|
||||||
try:
|
try:
|
||||||
awaitWithTimeout(
|
awaitWithTimeout(
|
||||||
node.getBlindedExecutionPayload(
|
node.getBlindedExecutionPayload(
|
||||||
slot, executionBlockRoot, validator.pubkey),
|
slot, executionBlockRoot, pubkey),
|
||||||
BUILDER_PROPOSAL_DELAY_TOLERANCE):
|
BUILDER_PROPOSAL_DELAY_TOLERANCE):
|
||||||
Result[bellatrix.ExecutionPayloadHeader, string].err(
|
Result[bellatrix.ExecutionPayloadHeader, string].err(
|
||||||
"getBlindedExecutionPayload timed out")
|
"getBlindedExecutionPayload timed out")
|
||||||
|
@ -685,7 +685,7 @@ proc proposeBlockMEV(
|
||||||
randao: ValidatorSig, validator_index: ValidatorIndex):
|
randao: ValidatorSig, validator_index: ValidatorIndex):
|
||||||
Future[Opt[BlockRef]] {.async.} =
|
Future[Opt[BlockRef]] {.async.} =
|
||||||
let blindedBlockParts = await getBlindedBlockParts(
|
let blindedBlockParts = await getBlindedBlockParts(
|
||||||
node, head, validator, slot, randao, validator_index)
|
node, head, validator.pubkey, slot, randao, validator_index)
|
||||||
if blindedBlockParts.isErr:
|
if blindedBlockParts.isErr:
|
||||||
# Not signed yet, fine to try to fall back on EL
|
# Not signed yet, fine to try to fall back on EL
|
||||||
beacon_block_builder_missed_with_fallback.inc()
|
beacon_block_builder_missed_with_fallback.inc()
|
||||||
|
@ -739,7 +739,7 @@ proc makeBlindedBeaconBlockForHeadAndSlot*(
|
||||||
## signed by a validator. A blinded block is a block with only a transactions
|
## signed by a validator. A blinded block is a block with only a transactions
|
||||||
## root, rather than a full transactions list.
|
## root, rather than a full transactions list.
|
||||||
let
|
let
|
||||||
validator =
|
pubkey =
|
||||||
# Relevant state for knowledge of validators
|
# Relevant state for knowledge of validators
|
||||||
withState(node.dag.headState):
|
withState(node.dag.headState):
|
||||||
if distinctBase(validator_index) >= forkyState.data.validators.lenu64:
|
if distinctBase(validator_index) >= forkyState.data.validators.lenu64:
|
||||||
|
@ -749,19 +749,10 @@ proc makeBlindedBeaconBlockForHeadAndSlot*(
|
||||||
validators_len = forkyState.data.validators.len
|
validators_len = forkyState.data.validators.len
|
||||||
return err("Invalid validator index")
|
return err("Invalid validator index")
|
||||||
|
|
||||||
let pubkey = forkyState.data.validators.item(validator_index).pubkey
|
forkyState.data.validators.item(validator_index).pubkey
|
||||||
if pubkey notin node.attachedValidators.validators:
|
|
||||||
debug "makeBlindedBeaconBlockForHeadAndSlot: validator pubkey unknown",
|
|
||||||
head = shortLog(head),
|
|
||||||
validator_index,
|
|
||||||
validators_len = forkyState.data.validators.len,
|
|
||||||
pubkey = shortLog(pubkey)
|
|
||||||
return err("Validator pubkey unknown")
|
|
||||||
|
|
||||||
node.attachedValidators.validators[pubkey]
|
|
||||||
|
|
||||||
blindedBlockParts = await getBlindedBlockParts(
|
blindedBlockParts = await getBlindedBlockParts(
|
||||||
node, head, validator, slot, randao_reveal, validator_index)
|
node, head, pubkey, slot, randao_reveal, validator_index)
|
||||||
if blindedBlockParts.isErr:
|
if blindedBlockParts.isErr:
|
||||||
# Don't try EL fallback -- VC specifically requested a blinded block
|
# Don't try EL fallback -- VC specifically requested a blinded block
|
||||||
return err("Unable to create blinded block")
|
return err("Unable to create blinded block")
|
||||||
|
|
|
@ -70,8 +70,9 @@ cli do(slots = SLOTS_PER_EPOCH * 6,
|
||||||
var
|
var
|
||||||
cfg = defaultRuntimeConfig
|
cfg = defaultRuntimeConfig
|
||||||
|
|
||||||
cfg.ALTAIR_FORK_EPOCH = 32.Slot.epoch
|
cfg.ALTAIR_FORK_EPOCH = 1.Epoch
|
||||||
cfg.BELLATRIX_FORK_EPOCH = 96.Slot.epoch
|
cfg.BELLATRIX_FORK_EPOCH = 2.Epoch
|
||||||
|
cfg.CAPELLA_FORK_EPOCH = FAR_FUTURE_EPOCH
|
||||||
|
|
||||||
echo "Starting simulation..."
|
echo "Starting simulation..."
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue