use EF consensus spec v1.5.0-alpha.6 test vectors (#6568)
* use EF consensus spec v1.5.0-alpha.6 test vectors * LC changes are good as is, no need for the debug comment * Fix indentation * Use `execution_requests` for requests root * fill in spec reference URLs for ExecutionPayload(Header) * copy `execution_requests` when blidning blocks for Electra and add test * fix `test_engine_api_conversions` --------- Co-authored-by: Etan Kissling <etan@nimbus.team>
This commit is contained in:
parent
9df3d075de
commit
193a982d24
|
@ -2914,6 +2914,7 @@ OK: 24/24 Fail: 0/24 Skip: 0/24
|
||||||
+ [Valid] EF - Electra - Operations - Withdrawal Request - activation_epoch_less_than_shar OK
|
+ [Valid] EF - Electra - Operations - Withdrawal Request - activation_epoch_less_than_shar OK
|
||||||
+ [Valid] EF - Electra - Operations - Withdrawal Request - basic_withdrawal_request OK
|
+ [Valid] EF - Electra - Operations - Withdrawal Request - basic_withdrawal_request OK
|
||||||
+ [Valid] EF - Electra - Operations - Withdrawal Request - basic_withdrawal_request_with_c OK
|
+ [Valid] EF - Electra - Operations - Withdrawal Request - basic_withdrawal_request_with_c OK
|
||||||
|
+ [Valid] EF - Electra - Operations - Withdrawal Request - basic_withdrawal_request_with_f OK
|
||||||
+ [Valid] EF - Electra - Operations - Withdrawal Request - incorrect_source_address OK
|
+ [Valid] EF - Electra - Operations - Withdrawal Request - incorrect_source_address OK
|
||||||
+ [Valid] EF - Electra - Operations - Withdrawal Request - incorrect_withdrawal_credential OK
|
+ [Valid] EF - Electra - Operations - Withdrawal Request - incorrect_withdrawal_credential OK
|
||||||
+ [Valid] EF - Electra - Operations - Withdrawal Request - insufficient_effective_balance OK
|
+ [Valid] EF - Electra - Operations - Withdrawal Request - insufficient_effective_balance OK
|
||||||
|
@ -2926,7 +2927,7 @@ OK: 24/24 Fail: 0/24 Skip: 0/24
|
||||||
+ [Valid] EF - Electra - Operations - Withdrawal Request - partial_withdrawal_on_exit_init OK
|
+ [Valid] EF - Electra - Operations - Withdrawal Request - partial_withdrawal_on_exit_init OK
|
||||||
+ [Valid] EF - Electra - Operations - Withdrawal Request - pending_withdrawals_consume_all OK
|
+ [Valid] EF - Electra - Operations - Withdrawal Request - pending_withdrawals_consume_all OK
|
||||||
```
|
```
|
||||||
OK: 14/14 Fail: 0/14 Skip: 0/14
|
OK: 15/15 Fail: 0/15 Skip: 0/15
|
||||||
## EF - Electra - Operations - Withdrawals [Preset: mainnet]
|
## EF - Electra - Operations - Withdrawals [Preset: mainnet]
|
||||||
```diff
|
```diff
|
||||||
+ [Invalid] EF - Electra - Operations - Withdrawals - invalid_a_lot_fully_withdrawable_too_f OK
|
+ [Invalid] EF - Electra - Operations - Withdrawals - invalid_a_lot_fully_withdrawable_too_f OK
|
||||||
|
@ -3063,6 +3064,7 @@ OK: 34/34 Fail: 0/34 Skip: 0/34
|
||||||
+ Testing Eth1Data OK
|
+ Testing Eth1Data OK
|
||||||
+ Testing ExecutionPayload OK
|
+ Testing ExecutionPayload OK
|
||||||
+ Testing ExecutionPayloadHeader OK
|
+ Testing ExecutionPayloadHeader OK
|
||||||
|
+ Testing ExecutionRequests OK
|
||||||
+ Testing Fork OK
|
+ Testing Fork OK
|
||||||
+ Testing ForkData OK
|
+ Testing ForkData OK
|
||||||
+ Testing HistoricalBatch OK
|
+ Testing HistoricalBatch OK
|
||||||
|
@ -3096,7 +3098,7 @@ OK: 34/34 Fail: 0/34 Skip: 0/34
|
||||||
+ Testing Withdrawal OK
|
+ Testing Withdrawal OK
|
||||||
+ Testing WithdrawalRequest OK
|
+ Testing WithdrawalRequest OK
|
||||||
```
|
```
|
||||||
OK: 54/54 Fail: 0/54 Skip: 0/54
|
OK: 55/55 Fail: 0/55 Skip: 0/55
|
||||||
## EF - Electra - Sanity - Blocks [Preset: mainnet]
|
## EF - Electra - Sanity - Blocks [Preset: mainnet]
|
||||||
```diff
|
```diff
|
||||||
+ [Invalid] EF - Electra - Sanity - Blocks - deposit_transition__invalid_eth1_deposits_overl OK
|
+ [Invalid] EF - Electra - Sanity - Blocks - deposit_transition__invalid_eth1_deposits_overl OK
|
||||||
|
@ -3761,4 +3763,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: 3035/3055 Fail: 0/3055 Skip: 20/3055
|
OK: 3037/3057 Fail: 0/3057 Skip: 20/3057
|
||||||
|
|
|
@ -3060,6 +3060,7 @@ OK: 20/20 Fail: 0/20 Skip: 0/20
|
||||||
+ [Valid] EF - Electra - Operations - Withdrawal Request - basic_withdrawal_request OK
|
+ [Valid] EF - Electra - Operations - Withdrawal Request - basic_withdrawal_request OK
|
||||||
+ [Valid] EF - Electra - Operations - Withdrawal Request - basic_withdrawal_request_with_c OK
|
+ [Valid] EF - Electra - Operations - Withdrawal Request - basic_withdrawal_request_with_c OK
|
||||||
+ [Valid] EF - Electra - Operations - Withdrawal Request - basic_withdrawal_request_with_f OK
|
+ [Valid] EF - Electra - Operations - Withdrawal Request - basic_withdrawal_request_with_f OK
|
||||||
|
+ [Valid] EF - Electra - Operations - Withdrawal Request - basic_withdrawal_request_with_f OK
|
||||||
+ [Valid] EF - Electra - Operations - Withdrawal Request - incorrect_source_address OK
|
+ [Valid] EF - Electra - Operations - Withdrawal Request - incorrect_source_address OK
|
||||||
+ [Valid] EF - Electra - Operations - Withdrawal Request - incorrect_withdrawal_credential OK
|
+ [Valid] EF - Electra - Operations - Withdrawal Request - incorrect_withdrawal_credential OK
|
||||||
+ [Valid] EF - Electra - Operations - Withdrawal Request - insufficient_effective_balance OK
|
+ [Valid] EF - Electra - Operations - Withdrawal Request - insufficient_effective_balance OK
|
||||||
|
@ -3078,7 +3079,7 @@ OK: 20/20 Fail: 0/20 Skip: 0/20
|
||||||
+ [Valid] EF - Electra - Operations - Withdrawal Request - partial_withdrawal_request_with OK
|
+ [Valid] EF - Electra - Operations - Withdrawal Request - partial_withdrawal_request_with OK
|
||||||
+ [Valid] EF - Electra - Operations - Withdrawal Request - pending_withdrawals_consume_all OK
|
+ [Valid] EF - Electra - Operations - Withdrawal Request - pending_withdrawals_consume_all OK
|
||||||
```
|
```
|
||||||
OK: 24/24 Fail: 0/24 Skip: 0/24
|
OK: 25/25 Fail: 0/25 Skip: 0/25
|
||||||
## EF - Electra - Operations - Withdrawals [Preset: minimal]
|
## EF - Electra - Operations - Withdrawals [Preset: minimal]
|
||||||
```diff
|
```diff
|
||||||
+ [Invalid] EF - Electra - Operations - Withdrawals - invalid_a_lot_fully_withdrawable_too_f OK
|
+ [Invalid] EF - Electra - Operations - Withdrawals - invalid_a_lot_fully_withdrawable_too_f OK
|
||||||
|
@ -3216,6 +3217,7 @@ OK: 34/34 Fail: 0/34 Skip: 0/34
|
||||||
+ Testing Eth1Data OK
|
+ Testing Eth1Data OK
|
||||||
+ Testing ExecutionPayload OK
|
+ Testing ExecutionPayload OK
|
||||||
+ Testing ExecutionPayloadHeader OK
|
+ Testing ExecutionPayloadHeader OK
|
||||||
|
+ Testing ExecutionRequests OK
|
||||||
+ Testing Fork OK
|
+ Testing Fork OK
|
||||||
+ Testing ForkData OK
|
+ Testing ForkData OK
|
||||||
+ Testing HistoricalBatch OK
|
+ Testing HistoricalBatch OK
|
||||||
|
@ -3249,7 +3251,7 @@ OK: 34/34 Fail: 0/34 Skip: 0/34
|
||||||
+ Testing Withdrawal OK
|
+ Testing Withdrawal OK
|
||||||
+ Testing WithdrawalRequest OK
|
+ Testing WithdrawalRequest OK
|
||||||
```
|
```
|
||||||
OK: 54/54 Fail: 0/54 Skip: 0/54
|
OK: 55/55 Fail: 0/55 Skip: 0/55
|
||||||
## EF - Electra - Sanity - Blocks [Preset: minimal]
|
## EF - Electra - Sanity - Blocks [Preset: minimal]
|
||||||
```diff
|
```diff
|
||||||
+ [Invalid] EF - Electra - Sanity - Blocks - deposit_transition__invalid_eth1_deposits_overl OK
|
+ [Invalid] EF - Electra - Sanity - Blocks - deposit_transition__invalid_eth1_deposits_overl OK
|
||||||
|
@ -4098,4 +4100,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: 3341/3364 Fail: 0/3364 Skip: 23/3364
|
OK: 3343/3366 Fail: 0/3366 Skip: 23/3366
|
||||||
|
|
|
@ -943,7 +943,7 @@ proc sendNewPayload*(
|
||||||
let
|
let
|
||||||
startTime = Moment.now()
|
startTime = Moment.now()
|
||||||
deadline = sleepAsync(NEWPAYLOAD_TIMEOUT)
|
deadline = sleepAsync(NEWPAYLOAD_TIMEOUT)
|
||||||
payload = blck.body.execution_payload.asEngineExecutionPayload
|
payload = blck.body.asEngineExecutionPayload
|
||||||
var
|
var
|
||||||
responseProcessor = ELConsensusViolationDetector.init()
|
responseProcessor = ELConsensusViolationDetector.init()
|
||||||
|
|
||||||
|
|
|
@ -197,18 +197,7 @@ func asConsensusType*(rpcExecutionPayload: ExecutionPayloadV4):
|
||||||
withdrawals: List[capella.Withdrawal, MAX_WITHDRAWALS_PER_PAYLOAD].init(
|
withdrawals: List[capella.Withdrawal, MAX_WITHDRAWALS_PER_PAYLOAD].init(
|
||||||
mapIt(rpcExecutionPayload.withdrawals, it.asConsensusWithdrawal)),
|
mapIt(rpcExecutionPayload.withdrawals, it.asConsensusWithdrawal)),
|
||||||
blob_gas_used: rpcExecutionPayload.blobGasUsed.uint64,
|
blob_gas_used: rpcExecutionPayload.blobGasUsed.uint64,
|
||||||
excess_blob_gas: rpcExecutionPayload.excessBlobGas.uint64,
|
excess_blob_gas: rpcExecutionPayload.excessBlobGas.uint64)
|
||||||
deposit_requests:
|
|
||||||
List[electra.DepositRequest, MAX_DEPOSIT_REQUESTS_PER_PAYLOAD].init(
|
|
||||||
mapIt(rpcExecutionPayload.depositRequests, it.getDepositRequest)),
|
|
||||||
withdrawal_requests: List[electra.WithdrawalRequest,
|
|
||||||
MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD].init(
|
|
||||||
mapIt(rpcExecutionPayload.withdrawalRequests,
|
|
||||||
it.getWithdrawalRequest)),
|
|
||||||
consolidation_requests: List[electra.ConsolidationRequest,
|
|
||||||
Limit MAX_CONSOLIDATION_REQUESTS_PER_PAYLOAD].init(
|
|
||||||
mapIt(rpcExecutionPayload.consolidationRequests,
|
|
||||||
it.getConsolidationRequest)))
|
|
||||||
|
|
||||||
func asConsensusType*(payload: engine_api.GetPayloadV4Response):
|
func asConsensusType*(payload: engine_api.GetPayloadV4Response):
|
||||||
electra.ExecutionPayloadForSigning =
|
electra.ExecutionPayloadForSigning =
|
||||||
|
@ -229,8 +218,10 @@ func asConsensusType*(payload: engine_api.GetPayloadV4Response):
|
||||||
blobs: Blobs.init(
|
blobs: Blobs.init(
|
||||||
payload.blobsBundle.blobs.mapIt(it.bytes))))
|
payload.blobsBundle.blobs.mapIt(it.bytes))))
|
||||||
|
|
||||||
func asEngineExecutionPayload*(executionPayload: bellatrix.ExecutionPayload):
|
func asEngineExecutionPayload*(blockBody: bellatrix.BeaconBlockBody):
|
||||||
ExecutionPayloadV1 =
|
ExecutionPayloadV1 =
|
||||||
|
template executionPayload(): untyped = blockBody.execution_payload
|
||||||
|
|
||||||
template getTypedTransaction(tt: bellatrix.Transaction): TypedTransaction =
|
template getTypedTransaction(tt: bellatrix.Transaction): TypedTransaction =
|
||||||
TypedTransaction(tt.distinctBase)
|
TypedTransaction(tt.distinctBase)
|
||||||
|
|
||||||
|
@ -258,8 +249,10 @@ template toEngineWithdrawal*(w: capella.Withdrawal): WithdrawalV1 =
|
||||||
address: Address(w.address.data),
|
address: Address(w.address.data),
|
||||||
amount: Quantity(w.amount))
|
amount: Quantity(w.amount))
|
||||||
|
|
||||||
func asEngineExecutionPayload*(executionPayload: capella.ExecutionPayload):
|
func asEngineExecutionPayload*(blockBody: capella.BeaconBlockBody):
|
||||||
ExecutionPayloadV2 =
|
ExecutionPayloadV2 =
|
||||||
|
template executionPayload(): untyped = blockBody.execution_payload
|
||||||
|
|
||||||
template getTypedTransaction(tt: bellatrix.Transaction): TypedTransaction =
|
template getTypedTransaction(tt: bellatrix.Transaction): TypedTransaction =
|
||||||
TypedTransaction(tt.distinctBase)
|
TypedTransaction(tt.distinctBase)
|
||||||
engine_api.ExecutionPayloadV2(
|
engine_api.ExecutionPayloadV2(
|
||||||
|
@ -280,8 +273,10 @@ func asEngineExecutionPayload*(executionPayload: capella.ExecutionPayload):
|
||||||
transactions: mapIt(executionPayload.transactions, it.getTypedTransaction),
|
transactions: mapIt(executionPayload.transactions, it.getTypedTransaction),
|
||||||
withdrawals: mapIt(executionPayload.withdrawals, it.toEngineWithdrawal))
|
withdrawals: mapIt(executionPayload.withdrawals, it.toEngineWithdrawal))
|
||||||
|
|
||||||
func asEngineExecutionPayload*(executionPayload: deneb.ExecutionPayload):
|
func asEngineExecutionPayload*(blockBody: deneb.BeaconBlockBody):
|
||||||
ExecutionPayloadV3 =
|
ExecutionPayloadV3 =
|
||||||
|
template executionPayload(): untyped = blockBody.execution_payload
|
||||||
|
|
||||||
template getTypedTransaction(tt: bellatrix.Transaction): TypedTransaction =
|
template getTypedTransaction(tt: bellatrix.Transaction): TypedTransaction =
|
||||||
TypedTransaction(tt.distinctBase)
|
TypedTransaction(tt.distinctBase)
|
||||||
|
|
||||||
|
@ -305,8 +300,10 @@ func asEngineExecutionPayload*(executionPayload: deneb.ExecutionPayload):
|
||||||
blobGasUsed: Quantity(executionPayload.blob_gas_used),
|
blobGasUsed: Quantity(executionPayload.blob_gas_used),
|
||||||
excessBlobGas: Quantity(executionPayload.excess_blob_gas))
|
excessBlobGas: Quantity(executionPayload.excess_blob_gas))
|
||||||
|
|
||||||
func asEngineExecutionPayload*(executionPayload: electra.ExecutionPayload):
|
func asEngineExecutionPayload*(blockBody: electra.BeaconBlockBody):
|
||||||
ExecutionPayloadV4 =
|
ExecutionPayloadV4 =
|
||||||
|
template executionPayload(): untyped = blockBody.execution_payload
|
||||||
|
|
||||||
template getTypedTransaction(tt: bellatrix.Transaction): TypedTransaction =
|
template getTypedTransaction(tt: bellatrix.Transaction): TypedTransaction =
|
||||||
TypedTransaction(tt.distinctBase)
|
TypedTransaction(tt.distinctBase)
|
||||||
|
|
||||||
|
@ -352,9 +349,9 @@ func asEngineExecutionPayload*(executionPayload: electra.ExecutionPayload):
|
||||||
withdrawals: mapIt(executionPayload.withdrawals, it.asEngineWithdrawal),
|
withdrawals: mapIt(executionPayload.withdrawals, it.asEngineWithdrawal),
|
||||||
blobGasUsed: Quantity(executionPayload.blob_gas_used),
|
blobGasUsed: Quantity(executionPayload.blob_gas_used),
|
||||||
excessBlobGas: Quantity(executionPayload.excess_blob_gas),
|
excessBlobGas: Quantity(executionPayload.excess_blob_gas),
|
||||||
depositRequests: mapIt(
|
depositRequests:
|
||||||
executionPayload.deposit_requests, it.getDepositRequest),
|
mapIt(blockBody.execution_requests.deposits, it.getDepositRequest),
|
||||||
withdrawalRequests: mapIt(
|
withdrawalRequests: mapIt(
|
||||||
executionPayload.withdrawal_requests, it.getWithdrawalRequest),
|
blockBody.execution_requests.withdrawals, it.getWithdrawalRequest),
|
||||||
consolidationRequests: mapIt(
|
consolidationRequests: mapIt(
|
||||||
executionPayload.consolidation_requests, it.getConsolidationRequest))
|
blockBody.execution_requests.consolidations, it.getConsolidationRequest))
|
||||||
|
|
|
@ -2038,10 +2038,7 @@ func upgrade_to_electra*(
|
||||||
transactions_root: pre.latest_execution_payload_header.transactions_root,
|
transactions_root: pre.latest_execution_payload_header.transactions_root,
|
||||||
withdrawals_root: pre.latest_execution_payload_header.withdrawals_root,
|
withdrawals_root: pre.latest_execution_payload_header.withdrawals_root,
|
||||||
blob_gas_used: 0,
|
blob_gas_used: 0,
|
||||||
excess_blob_gas: 0,
|
excess_blob_gas: 0
|
||||||
deposit_requests_root: ZERO_HASH, # [New in Electra:EIP6110]
|
|
||||||
withdrawal_requests_root: ZERO_HASH, # [New in Electra:EIP7002],
|
|
||||||
consolidation_requests_root: ZERO_HASH # [New in Electra:EIP7251]
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var max_exit_epoch = FAR_FUTURE_EPOCH
|
var max_exit_epoch = FAR_FUTURE_EPOCH
|
||||||
|
|
|
@ -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.5"
|
const SPEC_VERSION* = "1.5.0-alpha.6"
|
||||||
## Spec version we're aiming to be compatible with, right now
|
## Spec version we're aiming to be compatible with, right now
|
||||||
|
|
||||||
const
|
const
|
||||||
|
|
|
@ -58,9 +58,6 @@ const
|
||||||
# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.5/specs/capella/beacon-chain.md#domain-types
|
# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.5/specs/capella/beacon-chain.md#domain-types
|
||||||
DOMAIN_BLS_TO_EXECUTION_CHANGE* = DomainType([byte 0x0a, 0x00, 0x00, 0x00])
|
DOMAIN_BLS_TO_EXECUTION_CHANGE* = DomainType([byte 0x0a, 0x00, 0x00, 0x00])
|
||||||
|
|
||||||
# https://github.com/ethereum/consensus-specs/blob/82133085a1295e93394ebdf71df8f2f6e0962588/specs/electra/beacon-chain.md#domains
|
|
||||||
DOMAIN_CONSOLIDATION* = DomainType([byte 0x0b, 0x00, 0x00, 0x00])
|
|
||||||
|
|
||||||
# https://github.com/ethereum/consensus-specs/blob/v1.4.0-beta.5/specs/phase0/fork-choice.md#configuration
|
# https://github.com/ethereum/consensus-specs/blob/v1.4.0-beta.5/specs/phase0/fork-choice.md#configuration
|
||||||
PROPOSER_SCORE_BOOST*: uint64 = 40
|
PROPOSER_SCORE_BOOST*: uint64 = 40
|
||||||
REORG_HEAD_WEIGHT_THRESHOLD*: uint64 = 20
|
REORG_HEAD_WEIGHT_THRESHOLD*: uint64 = 20
|
||||||
|
|
|
@ -89,7 +89,7 @@ type
|
||||||
attestation_1*: TrustedIndexedAttestation # Modified in Electra:EIP7549]
|
attestation_1*: TrustedIndexedAttestation # Modified in Electra:EIP7549]
|
||||||
attestation_2*: TrustedIndexedAttestation # Modified in Electra:EIP7549]
|
attestation_2*: TrustedIndexedAttestation # Modified in Electra:EIP7549]
|
||||||
|
|
||||||
# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.3/specs/electra/beacon-chain.md#executionpayload
|
# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.6/specs/deneb/beacon-chain.md#executionpayload
|
||||||
ExecutionPayload* = object
|
ExecutionPayload* = object
|
||||||
# Execution block header fields
|
# Execution block header fields
|
||||||
parent_hash*: Eth2Digest
|
parent_hash*: Eth2Digest
|
||||||
|
@ -114,21 +114,13 @@ type
|
||||||
withdrawals*: List[Withdrawal, MAX_WITHDRAWALS_PER_PAYLOAD]
|
withdrawals*: List[Withdrawal, MAX_WITHDRAWALS_PER_PAYLOAD]
|
||||||
blob_gas_used*: uint64
|
blob_gas_used*: uint64
|
||||||
excess_blob_gas*: uint64
|
excess_blob_gas*: uint64
|
||||||
deposit_requests*: List[DepositRequest, MAX_DEPOSIT_REQUESTS_PER_PAYLOAD]
|
|
||||||
## [New in Electra:EIP6110]
|
|
||||||
withdrawal_requests*:
|
|
||||||
List[WithdrawalRequest, MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD]
|
|
||||||
## [New in Electra:EIP7002:EIP7251]
|
|
||||||
consolidation_requests*:
|
|
||||||
List[ConsolidationRequest, Limit MAX_CONSOLIDATION_REQUESTS_PER_PAYLOAD]
|
|
||||||
## [New in Electra:EIP7251]
|
|
||||||
|
|
||||||
ExecutionPayloadForSigning* = object
|
ExecutionPayloadForSigning* = object
|
||||||
executionPayload*: ExecutionPayload
|
executionPayload*: ExecutionPayload
|
||||||
blockValue*: Wei
|
blockValue*: Wei
|
||||||
blobsBundle*: BlobsBundle
|
blobsBundle*: BlobsBundle
|
||||||
|
|
||||||
# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.3/specs/electra/beacon-chain.md#executionpayloadheader
|
# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.6/specs/deneb/beacon-chain.md#executionpayloadheader
|
||||||
ExecutionPayloadHeader* = object
|
ExecutionPayloadHeader* = object
|
||||||
# Execution block header fields
|
# Execution block header fields
|
||||||
parent_hash*: Eth2Digest
|
parent_hash*: Eth2Digest
|
||||||
|
@ -151,9 +143,6 @@ type
|
||||||
withdrawals_root*: Eth2Digest
|
withdrawals_root*: Eth2Digest
|
||||||
blob_gas_used*: uint64
|
blob_gas_used*: uint64
|
||||||
excess_blob_gas*: uint64
|
excess_blob_gas*: uint64
|
||||||
deposit_requests_root*: Eth2Digest # [New in Electra:EIP6110]
|
|
||||||
withdrawal_requests_root*: Eth2Digest # [New in Electra:EIP7002:EIP7251]
|
|
||||||
consolidation_requests_root*: Eth2Digest # [New in Electra:EIP7251]
|
|
||||||
|
|
||||||
ExecutePayload* = proc(
|
ExecutePayload* = proc(
|
||||||
execution_payload: ExecutionPayload): bool {.gcsafe, raises: [].}
|
execution_payload: ExecutionPayload): bool {.gcsafe, raises: [].}
|
||||||
|
@ -304,6 +293,18 @@ type
|
||||||
## (used to compute safety threshold)
|
## (used to compute safety threshold)
|
||||||
current_max_active_participants*: uint64
|
current_max_active_participants*: uint64
|
||||||
|
|
||||||
|
# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.6/specs/electra/beacon-chain.md#executionrequests
|
||||||
|
ExecutionRequests* = object
|
||||||
|
deposits*:
|
||||||
|
List[DepositRequest,
|
||||||
|
Limit MAX_DEPOSIT_REQUESTS_PER_PAYLOAD] # [New in Electra:EIP6110]
|
||||||
|
withdrawals*:
|
||||||
|
List[WithdrawalRequest,
|
||||||
|
Limit MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD] # [New in Electra:EIP7002:EIP7251]
|
||||||
|
consolidations*:
|
||||||
|
List[ConsolidationRequest,
|
||||||
|
Limit MAX_CONSOLIDATION_REQUESTS_PER_PAYLOAD] # [New in Electra:EIP7251]
|
||||||
|
|
||||||
# https://github.com/ethereum/consensus-specs/blob/82133085a1295e93394ebdf71df8f2f6e0962588/specs/electra/beacon-chain.md#beaconstate
|
# https://github.com/ethereum/consensus-specs/blob/82133085a1295e93394ebdf71df8f2f6e0962588/specs/electra/beacon-chain.md#beaconstate
|
||||||
BeaconState* = object
|
BeaconState* = object
|
||||||
# Versioning
|
# Versioning
|
||||||
|
@ -456,7 +457,7 @@ type
|
||||||
state_root*: Eth2Digest
|
state_root*: Eth2Digest
|
||||||
body*: TrustedBeaconBlockBody
|
body*: TrustedBeaconBlockBody
|
||||||
|
|
||||||
# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.3/specs/electra/beacon-chain.md#beaconblockbody
|
# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.6/specs/electra/beacon-chain.md#beaconblockbody
|
||||||
BeaconBlockBody* = object
|
BeaconBlockBody* = object
|
||||||
randao_reveal*: ValidatorSig
|
randao_reveal*: ValidatorSig
|
||||||
eth1_data*: Eth1Data
|
eth1_data*: Eth1Data
|
||||||
|
@ -481,6 +482,7 @@ type
|
||||||
execution_payload*: electra.ExecutionPayload # [Modified in Electra:EIP6110:EIP7002]
|
execution_payload*: electra.ExecutionPayload # [Modified in Electra:EIP6110:EIP7002]
|
||||||
bls_to_execution_changes*: SignedBLSToExecutionChangeList
|
bls_to_execution_changes*: SignedBLSToExecutionChangeList
|
||||||
blob_kzg_commitments*: KzgCommitments
|
blob_kzg_commitments*: KzgCommitments
|
||||||
|
execution_requests*: ExecutionRequests # [New in Electra]
|
||||||
|
|
||||||
SigVerifiedBeaconBlockBody* = object
|
SigVerifiedBeaconBlockBody* = object
|
||||||
## A BeaconBlock body with signatures verified
|
## A BeaconBlock body with signatures verified
|
||||||
|
@ -520,6 +522,7 @@ type
|
||||||
execution_payload*: ExecutionPayload # [Modified in Electra:EIP6110:EIP7002]
|
execution_payload*: ExecutionPayload # [Modified in Electra:EIP6110:EIP7002]
|
||||||
bls_to_execution_changes*: SignedBLSToExecutionChangeList
|
bls_to_execution_changes*: SignedBLSToExecutionChangeList
|
||||||
blob_kzg_commitments*: KzgCommitments
|
blob_kzg_commitments*: KzgCommitments
|
||||||
|
execution_requests*: ExecutionRequests # [New in Electra]
|
||||||
|
|
||||||
TrustedBeaconBlockBody* = object
|
TrustedBeaconBlockBody* = object
|
||||||
## A full verified block
|
## A full verified block
|
||||||
|
@ -547,6 +550,7 @@ type
|
||||||
execution_payload*: ExecutionPayload # [Modified in Electra:EIP6110:EIP7002]
|
execution_payload*: ExecutionPayload # [Modified in Electra:EIP6110:EIP7002]
|
||||||
bls_to_execution_changes*: SignedBLSToExecutionChangeList
|
bls_to_execution_changes*: SignedBLSToExecutionChangeList
|
||||||
blob_kzg_commitments*: KzgCommitments
|
blob_kzg_commitments*: KzgCommitments
|
||||||
|
execution_requests*: ExecutionRequests # [New in Electra]
|
||||||
|
|
||||||
# https://github.com/ethereum/consensus-specs/blob/v1.4.0-beta.6/specs/phase0/beacon-chain.md#signedbeaconblock
|
# https://github.com/ethereum/consensus-specs/blob/v1.4.0-beta.6/specs/phase0/beacon-chain.md#signedbeaconblock
|
||||||
SignedBeaconBlock* = object
|
SignedBeaconBlock* = object
|
||||||
|
@ -731,18 +735,11 @@ func get_lc_execution_root*(
|
||||||
|
|
||||||
ZERO_HASH
|
ZERO_HASH
|
||||||
|
|
||||||
# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.3/specs/electra/light-client/sync-protocol.md#modified-is_valid_light_client_header
|
# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.6/specs/electra/light-client/sync-protocol.md#modified-is_valid_light_client_header
|
||||||
func is_valid_light_client_header*(
|
func is_valid_light_client_header*(
|
||||||
header: LightClientHeader, cfg: RuntimeConfig): bool =
|
header: LightClientHeader, cfg: RuntimeConfig): bool =
|
||||||
let epoch = header.beacon.slot.epoch
|
let epoch = header.beacon.slot.epoch
|
||||||
|
|
||||||
# [New in Electra:EIP6110:EIP7002:EIP7251]
|
|
||||||
if epoch < cfg.ELECTRA_FORK_EPOCH:
|
|
||||||
if not header.execution.deposit_requests_root.isZero or
|
|
||||||
not header.execution.withdrawal_requests_root.isZero or
|
|
||||||
not header.execution.consolidation_requests_root.isZero:
|
|
||||||
return false
|
|
||||||
|
|
||||||
if epoch < cfg.DENEB_FORK_EPOCH:
|
if epoch < cfg.DENEB_FORK_EPOCH:
|
||||||
if header.execution.blob_gas_used != 0 or
|
if header.execution.blob_gas_used != 0 or
|
||||||
header.execution.excess_blob_gas != 0:
|
header.execution.excess_blob_gas != 0:
|
||||||
|
@ -750,7 +747,7 @@ func is_valid_light_client_header*(
|
||||||
|
|
||||||
if epoch < cfg.CAPELLA_FORK_EPOCH:
|
if epoch < cfg.CAPELLA_FORK_EPOCH:
|
||||||
return
|
return
|
||||||
header.execution == static(default(ExecutionPayloadHeader)) and
|
header.execution == static(default(electra.ExecutionPayloadHeader)) and
|
||||||
header.execution_branch == static(default(ExecutionBranch))
|
header.execution_branch == static(default(ExecutionBranch))
|
||||||
|
|
||||||
is_valid_merkle_branch(
|
is_valid_merkle_branch(
|
||||||
|
@ -776,7 +773,7 @@ func normalize_merkle_branch*[N](
|
||||||
res[0 ..< depth] = branch[num_extra ..< branch.len]
|
res[0 ..< depth] = branch[num_extra ..< branch.len]
|
||||||
res
|
res
|
||||||
|
|
||||||
# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.3/specs/electra/light-client/fork.md#upgrading-light-client-data
|
# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.6/specs/electra/light-client/fork.md#upgrading-light-client-data
|
||||||
func upgrade_lc_header_to_electra*(
|
func upgrade_lc_header_to_electra*(
|
||||||
pre: deneb.LightClientHeader): LightClientHeader =
|
pre: deneb.LightClientHeader): LightClientHeader =
|
||||||
LightClientHeader(
|
LightClientHeader(
|
||||||
|
@ -798,10 +795,7 @@ func upgrade_lc_header_to_electra*(
|
||||||
transactions_root: pre.execution.transactions_root,
|
transactions_root: pre.execution.transactions_root,
|
||||||
withdrawals_root: pre.execution.withdrawals_root,
|
withdrawals_root: pre.execution.withdrawals_root,
|
||||||
blob_gas_used: pre.execution.blob_gas_used,
|
blob_gas_used: pre.execution.blob_gas_used,
|
||||||
excess_blob_gas: pre.execution.excess_blob_gas,
|
excess_blob_gas: pre.execution.excess_blob_gas),
|
||||||
deposit_requests_root: ZERO_HASH, # [New in Electra:EIP6110]
|
|
||||||
withdrawal_requests_root: ZERO_HASH, # [New in Electra:EIP7002:EIP7251]
|
|
||||||
consolidation_requests_root: ZERO_HASH), # [New in Electra:EIP7251]
|
|
||||||
execution_branch: pre.execution_branch)
|
execution_branch: pre.execution_branch)
|
||||||
|
|
||||||
# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.3/specs/electra/light-client/fork.md#upgrading-light-client-data
|
# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.3/specs/electra/light-client/fork.md#upgrading-light-client-data
|
||||||
|
|
|
@ -68,6 +68,7 @@ RestJson.useDefaultSerializationFor(
|
||||||
EmptyBody,
|
EmptyBody,
|
||||||
Eth1Data,
|
Eth1Data,
|
||||||
EventBeaconBlockObject,
|
EventBeaconBlockObject,
|
||||||
|
ExecutionRequests,
|
||||||
Fork,
|
Fork,
|
||||||
GetBlockAttestationsResponse,
|
GetBlockAttestationsResponse,
|
||||||
GetBlockHeaderResponse,
|
GetBlockHeaderResponse,
|
||||||
|
|
|
@ -1229,11 +1229,7 @@ func toElectraLightClientHeader(
|
||||||
transactions_root: hash_tree_root(payload.transactions),
|
transactions_root: hash_tree_root(payload.transactions),
|
||||||
withdrawals_root: hash_tree_root(payload.withdrawals),
|
withdrawals_root: hash_tree_root(payload.withdrawals),
|
||||||
blob_gas_used: payload.blob_gas_used,
|
blob_gas_used: payload.blob_gas_used,
|
||||||
excess_blob_gas: payload.excess_blob_gas,
|
excess_blob_gas: payload.excess_blob_gas),
|
||||||
deposit_requests_root: hash_tree_root(payload.deposit_requests),
|
|
||||||
withdrawal_requests_root: hash_tree_root(payload.withdrawal_requests),
|
|
||||||
consolidation_requests_root:
|
|
||||||
hash_tree_root(payload.consolidation_requests)),
|
|
||||||
execution_branch: blck.message.body.build_proof(
|
execution_branch: blck.message.body.build_proof(
|
||||||
capella.EXECUTION_PAYLOAD_GINDEX).get)
|
capella.EXECUTION_PAYLOAD_GINDEX).get)
|
||||||
|
|
||||||
|
|
|
@ -501,11 +501,11 @@ func toExecutionConsolidationRequest*(
|
||||||
targetPubkey: request.target_pubkey.blob)
|
targetPubkey: request.target_pubkey.blob)
|
||||||
|
|
||||||
# https://eips.ethereum.org/EIPS/eip-7685
|
# https://eips.ethereum.org/EIPS/eip-7685
|
||||||
proc computeRequestsTrieRoot*(
|
proc computeRequestsTrieRoot(
|
||||||
payload: electra.ExecutionPayload): ExecutionHash256 =
|
requests: electra.ExecutionRequests): ExecutionHash256 =
|
||||||
if payload.deposit_requests.len == 0 and
|
if requests.deposits.len == 0 and
|
||||||
payload.withdrawal_requests.len == 0 and
|
requests.withdrawals.len == 0 and
|
||||||
payload.consolidation_requests.len == 0:
|
requests.consolidations.len == 0:
|
||||||
return EMPTY_ROOT_HASH
|
return EMPTY_ROOT_HASH
|
||||||
|
|
||||||
var
|
var
|
||||||
|
@ -517,7 +517,7 @@ proc computeRequestsTrieRoot*(
|
||||||
doAssert WITHDRAWAL_REQUEST_TYPE < CONSOLIDATION_REQUEST_TYPE
|
doAssert WITHDRAWAL_REQUEST_TYPE < CONSOLIDATION_REQUEST_TYPE
|
||||||
|
|
||||||
# EIP-6110
|
# EIP-6110
|
||||||
for request in payload.deposit_requests:
|
for request in requests.deposits:
|
||||||
try:
|
try:
|
||||||
tr.put(rlp.encode(i.uint), rlp.encode(
|
tr.put(rlp.encode(i.uint), rlp.encode(
|
||||||
toExecutionDepositRequest(request)))
|
toExecutionDepositRequest(request)))
|
||||||
|
@ -526,7 +526,7 @@ proc computeRequestsTrieRoot*(
|
||||||
inc i
|
inc i
|
||||||
|
|
||||||
# EIP-7002
|
# EIP-7002
|
||||||
for request in payload.withdrawal_requests:
|
for request in requests.withdrawals:
|
||||||
try:
|
try:
|
||||||
tr.put(rlp.encode(i.uint), rlp.encode(
|
tr.put(rlp.encode(i.uint), rlp.encode(
|
||||||
toExecutionWithdrawalRequest(request)))
|
toExecutionWithdrawalRequest(request)))
|
||||||
|
@ -535,7 +535,7 @@ proc computeRequestsTrieRoot*(
|
||||||
inc i
|
inc i
|
||||||
|
|
||||||
# EIP-7251
|
# EIP-7251
|
||||||
for request in payload.consolidation_requests:
|
for request in requests.consolidations:
|
||||||
try:
|
try:
|
||||||
tr.put(rlp.encode(i.uint), rlp.encode(
|
tr.put(rlp.encode(i.uint), rlp.encode(
|
||||||
toExecutionConsolidationRequest(request)))
|
toExecutionConsolidationRequest(request)))
|
||||||
|
@ -576,7 +576,7 @@ proc blockToBlockHeader*(blck: ForkyBeaconBlock): ExecutionBlockHeader =
|
||||||
Opt.none(ExecutionHash256)
|
Opt.none(ExecutionHash256)
|
||||||
requestsRoot =
|
requestsRoot =
|
||||||
when typeof(payload).kind >= ConsensusFork.Electra:
|
when typeof(payload).kind >= ConsensusFork.Electra:
|
||||||
Opt.some payload.computeRequestsTrieRoot()
|
Opt.some blck.body.execution_requests.computeRequestsTrieRoot()
|
||||||
else:
|
else:
|
||||||
Opt.none(ExecutionHash256)
|
Opt.none(ExecutionHash256)
|
||||||
|
|
||||||
|
|
|
@ -44,6 +44,7 @@ type
|
||||||
List[SignedBLSToExecutionChange,
|
List[SignedBLSToExecutionChange,
|
||||||
Limit MAX_BLS_TO_EXECUTION_CHANGES]
|
Limit MAX_BLS_TO_EXECUTION_CHANGES]
|
||||||
blob_kzg_commitments*: KzgCommitments # [New in Deneb]
|
blob_kzg_commitments*: KzgCommitments # [New in Deneb]
|
||||||
|
execution_requests*: ExecutionRequests # [New in Electra]
|
||||||
|
|
||||||
# https://github.com/ethereum/builder-specs/blob/v0.4.0/specs/bellatrix/builder.md#blindedbeaconblock
|
# https://github.com/ethereum/builder-specs/blob/v0.4.0/specs/bellatrix/builder.md#blindedbeaconblock
|
||||||
BlindedBeaconBlock* = object
|
BlindedBeaconBlock* = object
|
||||||
|
@ -142,13 +143,8 @@ func toSignedBlindedBeaconBlock*(blck: electra.SignedBeaconBlock):
|
||||||
withdrawals_root:
|
withdrawals_root:
|
||||||
hash_tree_root(blck.message.body.execution_payload.withdrawals),
|
hash_tree_root(blck.message.body.execution_payload.withdrawals),
|
||||||
blob_gas_used: blck.message.body.execution_payload.blob_gas_used,
|
blob_gas_used: blck.message.body.execution_payload.blob_gas_used,
|
||||||
excess_blob_gas: blck.message.body.execution_payload.excess_blob_gas,
|
excess_blob_gas: blck.message.body.execution_payload.excess_blob_gas),
|
||||||
deposit_requests_root: hash_tree_root(
|
|
||||||
blck.message.body.execution_payload.deposit_requests),
|
|
||||||
withdrawal_requests_root: hash_tree_root(
|
|
||||||
blck.message.body.execution_payload.withdrawal_requests),
|
|
||||||
consolidation_requests_root: hash_tree_root(
|
|
||||||
blck.message.body.execution_payload.consolidation_requests)),
|
|
||||||
bls_to_execution_changes: blck.message.body.bls_to_execution_changes,
|
bls_to_execution_changes: blck.message.body.bls_to_execution_changes,
|
||||||
blob_kzg_commitments: blck.message.body.blob_kzg_commitments)),
|
blob_kzg_commitments: blck.message.body.blob_kzg_commitments,
|
||||||
|
execution_requests: blck.message.body.execution_requests)),
|
||||||
signature: blck.signature)
|
signature: blck.signature)
|
||||||
|
|
|
@ -686,9 +686,9 @@ proc process_operations(
|
||||||
default(ExitQueueInfo) # not used
|
default(ExitQueueInfo) # not used
|
||||||
bsv_use =
|
bsv_use =
|
||||||
when typeof(body).kind >= ConsensusFork.Electra:
|
when typeof(body).kind >= ConsensusFork.Electra:
|
||||||
body.deposits.len + body.execution_payload.deposit_requests.len +
|
body.deposits.len + body.execution_requests.deposits.len +
|
||||||
body.execution_payload.withdrawal_requests.len +
|
body.execution_requests.withdrawals.len +
|
||||||
body.execution_payload.consolidation_requests.len > 0
|
body.execution_requests.consolidations.len > 0
|
||||||
else:
|
else:
|
||||||
body.deposits.len > 0
|
body.deposits.len > 0
|
||||||
bsv =
|
bsv =
|
||||||
|
@ -720,12 +720,12 @@ proc process_operations(
|
||||||
? process_bls_to_execution_change(cfg, state, op)
|
? process_bls_to_execution_change(cfg, state, op)
|
||||||
|
|
||||||
when typeof(body).kind >= ConsensusFork.Electra:
|
when typeof(body).kind >= ConsensusFork.Electra:
|
||||||
for op in body.execution_payload.deposit_requests:
|
for op in body.execution_requests.deposits:
|
||||||
? process_deposit_request(cfg, state, bsv[], op, {})
|
? process_deposit_request(cfg, state, bsv[], op, {})
|
||||||
for op in body.execution_payload.withdrawal_requests:
|
for op in body.execution_requests.withdrawals:
|
||||||
# [New in Electra:EIP7002:7251]
|
# [New in Electra:EIP7002:7251]
|
||||||
process_withdrawal_request(cfg, state, bsv[], op, cache)
|
process_withdrawal_request(cfg, state, bsv[], op, cache)
|
||||||
for op in body.execution_payload.consolidation_requests:
|
for op in body.execution_requests.consolidations:
|
||||||
# [New in Electra:EIP7251]
|
# [New in Electra:EIP7251]
|
||||||
process_consolidation_request(cfg, state, bsv[], op, cache)
|
process_consolidation_request(cfg, state, bsv[], op, cache)
|
||||||
|
|
||||||
|
@ -1001,13 +1001,7 @@ proc process_execution_payload*(
|
||||||
transactions_root: hash_tree_root(payload.transactions),
|
transactions_root: hash_tree_root(payload.transactions),
|
||||||
withdrawals_root: hash_tree_root(payload.withdrawals),
|
withdrawals_root: hash_tree_root(payload.withdrawals),
|
||||||
blob_gas_used: payload.blob_gas_used,
|
blob_gas_used: payload.blob_gas_used,
|
||||||
excess_blob_gas: payload.excess_blob_gas,
|
excess_blob_gas: payload.excess_blob_gas)
|
||||||
deposit_requests_root:
|
|
||||||
hash_tree_root(payload.deposit_requests), # [New in Electra:EIP6110]
|
|
||||||
withdrawal_requests_root:
|
|
||||||
hash_tree_root(payload.withdrawal_requests), # [New in Electra:EIP7002:EIP7251]
|
|
||||||
consolidation_requests_root:
|
|
||||||
hash_tree_root(payload.consolidation_requests)) # [New in Electra:EIP7251]
|
|
||||||
|
|
||||||
ok()
|
ok()
|
||||||
|
|
||||||
|
|
|
@ -1019,6 +1019,7 @@ func get_adjusted_total_slashing_balance*(
|
||||||
# https://github.com/ethereum/consensus-specs/blob/v1.4.0-beta.7/specs/phase0/beacon-chain.md#slashings
|
# https://github.com/ethereum/consensus-specs/blob/v1.4.0-beta.7/specs/phase0/beacon-chain.md#slashings
|
||||||
# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.5/specs/altair/beacon-chain.md#slashings
|
# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.5/specs/altair/beacon-chain.md#slashings
|
||||||
# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.5/specs/bellatrix/beacon-chain.md#slashings
|
# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.5/specs/bellatrix/beacon-chain.md#slashings
|
||||||
|
# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.6/specs/electra/beacon-chain.md#modified-process_slashings
|
||||||
func slashing_penalty_applies*(validator: Validator, epoch: Epoch): bool =
|
func slashing_penalty_applies*(validator: Validator, epoch: Epoch): bool =
|
||||||
validator.slashed and
|
validator.slashed and
|
||||||
epoch + EPOCHS_PER_SLASHINGS_VECTOR div 2 == validator.withdrawable_epoch
|
epoch + EPOCHS_PER_SLASHINGS_VECTOR div 2 == validator.withdrawable_epoch
|
||||||
|
@ -1026,18 +1027,32 @@ func slashing_penalty_applies*(validator: Validator, epoch: Epoch): bool =
|
||||||
# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.5/specs/phase0/beacon-chain.md#slashings
|
# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.5/specs/phase0/beacon-chain.md#slashings
|
||||||
# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.5/specs/altair/beacon-chain.md#slashings
|
# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.5/specs/altair/beacon-chain.md#slashings
|
||||||
# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.5/specs/bellatrix/beacon-chain.md#slashings
|
# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.5/specs/bellatrix/beacon-chain.md#slashings
|
||||||
func get_slashing_penalty*(validator: Validator,
|
# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.6/specs/electra/beacon-chain.md#modified-process_slashings
|
||||||
adjusted_total_slashing_balance,
|
func get_slashing_penalty*(
|
||||||
total_balance: Gwei): Gwei =
|
consensusFork: static ConsensusFork, validator: Validator,
|
||||||
|
adjusted_total_slashing_balance, total_balance: Gwei): Gwei =
|
||||||
# Factored out from penalty numerator to avoid uint64 overflow
|
# Factored out from penalty numerator to avoid uint64 overflow
|
||||||
const increment = EFFECTIVE_BALANCE_INCREMENT.Gwei
|
const increment = EFFECTIVE_BALANCE_INCREMENT.Gwei
|
||||||
let penalty_numerator = validator.effective_balance div increment *
|
|
||||||
adjusted_total_slashing_balance
|
when consensusFork <= ConsensusFork.Deneb:
|
||||||
penalty_numerator div total_balance * increment
|
let penalty_numerator = validator.effective_balance div increment *
|
||||||
|
adjusted_total_slashing_balance
|
||||||
|
penalty_numerator div total_balance * increment
|
||||||
|
elif consensusFork == ConsensusFork.Electra:
|
||||||
|
let
|
||||||
|
effective_balance_increments = validator.effective_balance div increment
|
||||||
|
penalty_per_effective_balance_increment =
|
||||||
|
adjusted_total_slashing_balance div (total_balance div increment)
|
||||||
|
|
||||||
|
# [Modified in Electra:EIP7251]
|
||||||
|
penalty_per_effective_balance_increment * effective_balance_increments
|
||||||
|
else:
|
||||||
|
static: doAssert false
|
||||||
|
|
||||||
# https://github.com/ethereum/consensus-specs/blob/v1.4.0-beta.7/specs/phase0/beacon-chain.md#slashings
|
# https://github.com/ethereum/consensus-specs/blob/v1.4.0-beta.7/specs/phase0/beacon-chain.md#slashings
|
||||||
# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.5/specs/altair/beacon-chain.md#slashings
|
# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.5/specs/altair/beacon-chain.md#slashings
|
||||||
# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.5/specs/bellatrix/beacon-chain.md#slashings
|
# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.5/specs/bellatrix/beacon-chain.md#slashings
|
||||||
|
# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.6/specs/electra/beacon-chain.md#modified-process_slashings
|
||||||
func get_slashing(
|
func get_slashing(
|
||||||
state: ForkyBeaconState, total_balance: Gwei, vidx: ValidatorIndex): Gwei =
|
state: ForkyBeaconState, total_balance: Gwei, vidx: ValidatorIndex): Gwei =
|
||||||
# For efficiency reasons, it doesn't make sense to have process_slashings use
|
# For efficiency reasons, it doesn't make sense to have process_slashings use
|
||||||
|
@ -1050,7 +1065,8 @@ func get_slashing(
|
||||||
let validator = unsafeAddr state.validators.item(vidx)
|
let validator = unsafeAddr state.validators.item(vidx)
|
||||||
if slashing_penalty_applies(validator[], epoch):
|
if slashing_penalty_applies(validator[], epoch):
|
||||||
get_slashing_penalty(
|
get_slashing_penalty(
|
||||||
validator[], adjusted_total_slashing_balance, total_balance)
|
typeof(state).kind, validator[], adjusted_total_slashing_balance,
|
||||||
|
total_balance)
|
||||||
else:
|
else:
|
||||||
0.Gwei
|
0.Gwei
|
||||||
|
|
||||||
|
@ -1064,7 +1080,8 @@ func process_slashings*(state: var ForkyBeaconState, total_balance: Gwei) =
|
||||||
let validator = unsafeAddr state.validators.item(vidx)
|
let validator = unsafeAddr state.validators.item(vidx)
|
||||||
if slashing_penalty_applies(validator[], epoch):
|
if slashing_penalty_applies(validator[], epoch):
|
||||||
let penalty = get_slashing_penalty(
|
let penalty = get_slashing_penalty(
|
||||||
validator[], adjusted_total_slashing_balance, total_balance)
|
typeof(state).kind, validator[], adjusted_total_slashing_balance,
|
||||||
|
total_balance)
|
||||||
decrease_balance(state, vidx, penalty)
|
decrease_balance(state, vidx, penalty)
|
||||||
|
|
||||||
# https://github.com/ethereum/consensus-specs/blob/v1.4.0-beta.6/specs/phase0/beacon-chain.md#eth1-data-votes-updates
|
# https://github.com/ethereum/consensus-specs/blob/v1.4.0-beta.6/specs/phase0/beacon-chain.md#eth1-data-votes-updates
|
||||||
|
|
|
@ -201,8 +201,9 @@ func collectSlashings(
|
||||||
let validator = unsafeAddr state.validators[index]
|
let validator = unsafeAddr state.validators[index]
|
||||||
if slashing_penalty_applies(validator[], epoch):
|
if slashing_penalty_applies(validator[], epoch):
|
||||||
rewardsAndPenalties[index].slashing_outcome +=
|
rewardsAndPenalties[index].slashing_outcome +=
|
||||||
validator[].get_slashing_penalty(
|
get_slashing_penalty(
|
||||||
adjusted_total_slashing_balance, total_balance).int64
|
typeof(state).kind, validator[], adjusted_total_slashing_balance,
|
||||||
|
total_balance).int64
|
||||||
|
|
||||||
proc collectEpochRewardsAndPenalties*(
|
proc collectEpochRewardsAndPenalties*(
|
||||||
rewardsAndPenalties: var seq[RewardsAndPenalties],
|
rewardsAndPenalties: var seq[RewardsAndPenalties],
|
||||||
|
|
|
@ -140,6 +140,7 @@ suite "EF - Electra - SSZ consensus objects " & preset():
|
||||||
checkSSZ(electra.ExecutionPayload, path, hash)
|
checkSSZ(electra.ExecutionPayload, path, hash)
|
||||||
of "ExecutionPayloadHeader":
|
of "ExecutionPayloadHeader":
|
||||||
checkSSZ(electra.ExecutionPayloadHeader, path, hash)
|
checkSSZ(electra.ExecutionPayloadHeader, path, hash)
|
||||||
|
of "ExecutionRequests": checkSSZ(ExecutionRequests, path, hash)
|
||||||
of "Fork": checkSSZ(Fork, path, hash)
|
of "Fork": checkSSZ(Fork, path, hash)
|
||||||
of "ForkData": checkSSZ(ForkData, path, hash)
|
of "ForkData": checkSSZ(ForkData, path, hash)
|
||||||
of "HistoricalBatch": checkSSZ(HistoricalBatch, path, hash)
|
of "HistoricalBatch": checkSSZ(HistoricalBatch, path, hash)
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -119,6 +119,17 @@ template deneb_steps() =
|
||||||
check: b.message.body.blob_kzg_commitments.add(default(KzgCommitment))
|
check: b.message.body.blob_kzg_commitments.add(default(KzgCommitment))
|
||||||
do_check
|
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
|
||||||
|
|
||||||
suite "Blinded block conversions":
|
suite "Blinded block conversions":
|
||||||
withAll(ConsensusFork):
|
withAll(ConsensusFork):
|
||||||
when consensusFork >= ConsensusFork.Bellatrix:
|
when consensusFork >= ConsensusFork.Bellatrix:
|
||||||
|
@ -131,5 +142,5 @@ suite "Blinded block conversions":
|
||||||
when consensusFork >= ConsensusFork.Deneb:
|
when consensusFork >= ConsensusFork.Deneb:
|
||||||
deneb_steps
|
deneb_steps
|
||||||
when consensusFork >= ConsensusFork.Electra:
|
when consensusFork >= ConsensusFork.Electra:
|
||||||
debugComment "add electra_steps"
|
electra_steps
|
||||||
static: doAssert high(ConsensusFork) == ConsensusFork.Electra
|
static: doAssert high(ConsensusFork) == ConsensusFork.Electra
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit 4748d838797fd42bcb57c38f682adcb4522a152a
|
Subproject commit c55d6e94d7c5eefdf8312504d436b932b233ce1e
|
Loading…
Reference in New Issue