159 lines
5.7 KiB
Nim
159 lines
5.7 KiB
Nim
# beacon_chain
|
|
# Copyright (c) 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: [].}
|
|
{.used.}
|
|
|
|
import
|
|
# Beacon chain internals
|
|
../beacon_chain/spec/helpers,
|
|
../beacon_chain/spec/datatypes/[bellatrix, capella],
|
|
../beacon_chain/spec/mev/[bellatrix_mev, capella_mev, deneb_mev, electra_mev,
|
|
fulu_mev],
|
|
# Test utilities
|
|
unittest2
|
|
|
|
|
|
template do_check() =
|
|
check:
|
|
hash_tree_root(b.message) == hash_tree_root(
|
|
b.toSignedBlindedBeaconBlock.message)
|
|
b.signature == b.toSignedBlindedBeaconBlock.signature
|
|
|
|
const
|
|
nondefaultEth1Data = Eth1Data(
|
|
deposit_root: Eth2Digest.fromHex(
|
|
"0x55aaf2ee893f67db190d617070bd10d1583b00194fbcfda03d89baa24626f5bb"),
|
|
deposit_count: 1,
|
|
block_hash: Eth2Digest.fromHex(
|
|
"0xe617d58db390a10741ab7d3de0ba9460b5df5e0772e9721fe33c0422a63b2677"))
|
|
|
|
let nondefaultValidatorSig = ValidatorSig.fromHex(
|
|
"0xac08ca70066c6ea0525aa54dd867f82b86945818cb9305aae30f3bee13275dcf13d6d0680a47e889482ff2bb9a9f3cdb0588746f9e30c04645eda6d01bbd0ce6326ceb695294cb338ebace5b130c5b8f2e4f8efa63d63d5bb255c21a39da9c12")[]
|
|
|
|
template bellatrix_steps() =
|
|
b.message.slot = 1.Slot
|
|
do_check
|
|
b.message.proposer_index = 1
|
|
do_check
|
|
b.message.state_root = Eth2Digest.fromHex(
|
|
"0xb277ed302ade6685d0f0765fd0659c4b448656ab697409f2935cd9ab7189e48e")
|
|
do_check
|
|
b.message.parent_root = Eth2Digest.fromHex(
|
|
"0x2f6eaa73ec39aeb864884a2371f3e4a8abc29d277074459e46c987418f5df430")
|
|
do_check
|
|
b.message.body.randao_reveal = nondefaultValidatorSig
|
|
do_check
|
|
b.message.body.eth1_data = nondefaultEth1Data
|
|
do_check
|
|
distinctBase(b.message.body.graffiti)[0] = 1
|
|
do_check
|
|
check: b.message.body.proposer_slashings.add(default(ProposerSlashing))
|
|
do_check
|
|
when false:
|
|
debugComment "both Electra attestations and attestation slashings need to be done iff Electra"
|
|
check:
|
|
b.message.body.attester_slashings.add(default(phase0.AttesterSlashing))
|
|
do_check
|
|
check: b.message.body.attestations.add(
|
|
phase0.Attestation(aggregation_bits: CommitteeValidatorsBits.init(1)))
|
|
do_check
|
|
check: b.message.body.deposits.add(default(Deposit))
|
|
do_check
|
|
check: b.message.body.voluntary_exits.add(default(SignedVoluntaryExit))
|
|
do_check
|
|
b.message.body.sync_aggregate.sync_committee_signature =
|
|
nondefaultValidatorSig
|
|
do_check
|
|
b.message.body.execution_payload.parent_hash = Eth2Digest.fromHex(
|
|
"0x941bdf6ccf731a7ede6bac0c9533ecee5e3dc5081ea59d57c3fd8c624eeca85d")
|
|
do_check
|
|
b.message.body.execution_payload.fee_recipient =
|
|
ExecutionAddress.fromHex("0x1234567812345678123456781234567812345678")
|
|
do_check
|
|
b.message.body.execution_payload.state_root = Eth2Digest.fromHex(
|
|
"0x9e7d9bca96a9d0af9013ad6abb8708988beef02d58c16ba1a90075960b99c2ff")
|
|
do_check
|
|
b.message.body.execution_payload.receipts_root = Eth2Digest.fromHex(
|
|
"0x0e66a5007cf7bb16f4398adbbd01b34067a80faaef41a0a6be324c5fdb93a6df")
|
|
do_check
|
|
b.message.body.execution_payload.logs_bloom.data[0] = 2
|
|
do_check
|
|
b.message.body.execution_payload.prev_randao = Eth2Digest.fromHex(
|
|
"0x8aa830156370e6a5ec7679d7e5ee712dd87f24fef76a1954a03c1df8c68bc0fd")
|
|
do_check
|
|
b.message.body.execution_payload.block_number = 3
|
|
do_check
|
|
b.message.body.execution_payload.gas_limit = 4
|
|
do_check
|
|
b.message.body.execution_payload.gas_used = 5
|
|
do_check
|
|
b.message.body.execution_payload.timestamp = 6
|
|
do_check
|
|
check: b.message.body.execution_payload.extra_data.add 0'u8
|
|
do_check
|
|
b.message.body.execution_payload.base_fee_per_gas = 7.u256
|
|
do_check
|
|
b.message.body.execution_payload.block_hash = Eth2Digest.fromHex(
|
|
"0x4b1aed517ac48bfbf6ab19846923d5256897fbc934c20ca5b8c486bfe71c6ef1")
|
|
do_check
|
|
check: b.message.body.execution_payload.transactions.add default(Transaction)
|
|
do_check
|
|
|
|
template capella_steps() =
|
|
check: b.message.body.bls_to_execution_changes.add(
|
|
default(SignedBLSToExecutionChange))
|
|
do_check
|
|
check: b.message.body.execution_payload.withdrawals.add(default(
|
|
Withdrawal))
|
|
do_check
|
|
|
|
template deneb_steps() =
|
|
b.message.body.execution_payload.blob_gas_used = 8
|
|
do_check
|
|
b.message.body.execution_payload.excess_blob_gas = 9
|
|
do_check
|
|
check: b.message.body.blob_kzg_commitments.add(default(KzgCommitment))
|
|
do_check
|
|
|
|
template electra_steps() =
|
|
check: b.message.body.execution_requests.deposits.add(
|
|
default(DepositRequest))
|
|
do_check
|
|
check: b.message.body.execution_requests.withdrawals.add(
|
|
default(WithdrawalRequest))
|
|
do_check
|
|
check: b.message.body.execution_requests.consolidations.add(
|
|
default(ConsolidationRequest))
|
|
do_check
|
|
|
|
template fulu_steps() =
|
|
check: b.message.body.execution_requests.deposits.add(
|
|
default(DepositRequest))
|
|
do_check
|
|
check: b.message.body.execution_requests.withdrawals.add(
|
|
default(WithdrawalRequest))
|
|
do_check
|
|
check: b.message.body.execution_requests.consolidations.add(
|
|
default(ConsolidationRequest))
|
|
do_check
|
|
|
|
suite "Blinded block conversions":
|
|
withAll(ConsensusFork):
|
|
when consensusFork >= ConsensusFork.Bellatrix:
|
|
test $consensusFork & " toSignedBlindedBeaconBlock":
|
|
var b = default(consensusFork.SignedBeaconBlock)
|
|
do_check
|
|
bellatrix_steps
|
|
when consensusFork >= ConsensusFork.Capella:
|
|
capella_steps
|
|
when consensusFork >= ConsensusFork.Deneb:
|
|
deneb_steps
|
|
when consensusFork >= ConsensusFork.Electra:
|
|
electra_steps
|
|
static: doAssert high(ConsensusFork) == ConsensusFork.Fulu
|