`message` to `message_hash` in the rest of the spec (followup https://github.com/ethereum/eth2.0-specs/pull/580)
This commit is contained in:
parent
cc2df634cd
commit
cf7ebe9ad3
|
@ -6,139 +6,139 @@
|
||||||
<!-- TOC -->
|
<!-- TOC -->
|
||||||
|
|
||||||
- [Ethereum 2.0 Phase 0 -- The Beacon Chain](#ethereum-20-phase-0----the-beacon-chain)
|
- [Ethereum 2.0 Phase 0 -- The Beacon Chain](#ethereum-20-phase-0----the-beacon-chain)
|
||||||
- [Table of contents](#table-of-contents)
|
- [Table of contents](#table-of-contents)
|
||||||
- [Introduction](#introduction)
|
- [Introduction](#introduction)
|
||||||
- [Notation](#notation)
|
- [Notation](#notation)
|
||||||
- [Terminology](#terminology)
|
- [Terminology](#terminology)
|
||||||
- [Constants](#constants)
|
- [Constants](#constants)
|
||||||
- [Misc](#misc)
|
- [Misc](#misc)
|
||||||
- [Deposit contract](#deposit-contract)
|
- [Deposit contract](#deposit-contract)
|
||||||
- [Gwei values](#gwei-values)
|
- [Gwei values](#gwei-values)
|
||||||
- [Initial values](#initial-values)
|
- [Initial values](#initial-values)
|
||||||
- [Time parameters](#time-parameters)
|
- [Time parameters](#time-parameters)
|
||||||
- [State list lengths](#state-list-lengths)
|
- [State list lengths](#state-list-lengths)
|
||||||
- [Reward and penalty quotients](#reward-and-penalty-quotients)
|
- [Reward and penalty quotients](#reward-and-penalty-quotients)
|
||||||
- [Status flags](#status-flags)
|
- [Status flags](#status-flags)
|
||||||
- [Max operations per block](#max-operations-per-block)
|
- [Max operations per block](#max-operations-per-block)
|
||||||
- [Signature domains](#signature-domains)
|
- [Signature domains](#signature-domains)
|
||||||
- [Data structures](#data-structures)
|
- [Data structures](#data-structures)
|
||||||
- [Beacon chain operations](#beacon-chain-operations)
|
- [Beacon chain operations](#beacon-chain-operations)
|
||||||
- [Proposer slashings](#proposer-slashings)
|
- [Proposer slashings](#proposer-slashings)
|
||||||
- [`ProposerSlashing`](#proposerslashing)
|
- [`ProposerSlashing`](#proposerslashing)
|
||||||
- [Attester slashings](#attester-slashings)
|
- [Attester slashings](#attester-slashings)
|
||||||
- [`AttesterSlashing`](#attesterslashing)
|
- [`AttesterSlashing`](#attesterslashing)
|
||||||
- [`SlashableAttestation`](#slashableattestation)
|
- [`SlashableAttestation`](#slashableattestation)
|
||||||
- [Attestations](#attestations)
|
- [Attestations](#attestations)
|
||||||
- [`Attestation`](#attestation)
|
- [`Attestation`](#attestation)
|
||||||
- [`AttestationData`](#attestationdata)
|
- [`AttestationData`](#attestationdata)
|
||||||
- [`AttestationDataAndCustodyBit`](#attestationdataandcustodybit)
|
- [`AttestationDataAndCustodyBit`](#attestationdataandcustodybit)
|
||||||
- [Deposits](#deposits)
|
- [Deposits](#deposits)
|
||||||
- [`Deposit`](#deposit)
|
- [`Deposit`](#deposit)
|
||||||
- [`DepositData`](#depositdata)
|
- [`DepositData`](#depositdata)
|
||||||
- [`DepositInput`](#depositinput)
|
- [`DepositInput`](#depositinput)
|
||||||
- [Exits](#exits)
|
- [Exits](#exits)
|
||||||
- [`Exit`](#exit)
|
- [`Exit`](#exit)
|
||||||
- [Beacon chain blocks](#beacon-chain-blocks)
|
- [Beacon chain blocks](#beacon-chain-blocks)
|
||||||
- [`BeaconBlock`](#beaconblock)
|
- [`BeaconBlock`](#beaconblock)
|
||||||
- [`BeaconBlockBody`](#beaconblockbody)
|
- [`BeaconBlockBody`](#beaconblockbody)
|
||||||
- [`ProposalSignedData`](#proposalsigneddata)
|
- [`ProposalSignedData`](#proposalsigneddata)
|
||||||
- [Beacon chain state](#beacon-chain-state)
|
- [Beacon chain state](#beacon-chain-state)
|
||||||
- [`BeaconState`](#beaconstate)
|
- [`BeaconState`](#beaconstate)
|
||||||
- [`Validator`](#validator)
|
- [`Validator`](#validator)
|
||||||
- [`Crosslink`](#crosslink)
|
- [`Crosslink`](#crosslink)
|
||||||
- [`PendingAttestation`](#pendingattestation)
|
- [`PendingAttestation`](#pendingattestation)
|
||||||
- [`Fork`](#fork)
|
- [`Fork`](#fork)
|
||||||
- [`Eth1Data`](#eth1data)
|
- [`Eth1Data`](#eth1data)
|
||||||
- [`Eth1DataVote`](#eth1datavote)
|
- [`Eth1DataVote`](#eth1datavote)
|
||||||
- [Custom Types](#custom-types)
|
- [Custom Types](#custom-types)
|
||||||
- [Helper functions](#helper-functions)
|
- [Helper functions](#helper-functions)
|
||||||
- [`hash`](#hash)
|
- [`hash`](#hash)
|
||||||
- [`hash_tree_root`](#hash_tree_root)
|
- [`hash_tree_root`](#hashtreeroot)
|
||||||
- [`slot_to_epoch`](#slot_to_epoch)
|
- [`slot_to_epoch`](#slottoepoch)
|
||||||
- [`get_previous_epoch`](#get_previous_epoch)
|
- [`get_previous_epoch`](#getpreviousepoch)
|
||||||
- [`get_current_epoch`](#get_current_epoch)
|
- [`get_current_epoch`](#getcurrentepoch)
|
||||||
- [`get_epoch_start_slot`](#get_epoch_start_slot)
|
- [`get_epoch_start_slot`](#getepochstartslot)
|
||||||
- [`is_active_validator`](#is_active_validator)
|
- [`is_active_validator`](#isactivevalidator)
|
||||||
- [`get_active_validator_indices`](#get_active_validator_indices)
|
- [`get_active_validator_indices`](#getactivevalidatorindices)
|
||||||
- [`shuffle`](#shuffle)
|
- [`shuffle`](#shuffle)
|
||||||
- [`split`](#split)
|
- [`split`](#split)
|
||||||
- [`get_epoch_committee_count`](#get_epoch_committee_count)
|
- [`get_epoch_committee_count`](#getepochcommitteecount)
|
||||||
- [`get_shuffling`](#get_shuffling)
|
- [`get_shuffling`](#getshuffling)
|
||||||
- [`get_previous_epoch_committee_count`](#get_previous_epoch_committee_count)
|
- [`get_previous_epoch_committee_count`](#getpreviousepochcommitteecount)
|
||||||
- [`get_current_epoch_committee_count`](#get_current_epoch_committee_count)
|
- [`get_current_epoch_committee_count`](#getcurrentepochcommitteecount)
|
||||||
- [`get_next_epoch_committee_count`](#get_next_epoch_committee_count)
|
- [`get_next_epoch_committee_count`](#getnextepochcommitteecount)
|
||||||
- [`get_crosslink_committees_at_slot`](#get_crosslink_committees_at_slot)
|
- [`get_crosslink_committees_at_slot`](#getcrosslinkcommitteesatslot)
|
||||||
- [`get_block_root`](#get_block_root)
|
- [`get_block_root`](#getblockroot)
|
||||||
- [`get_randao_mix`](#get_randao_mix)
|
- [`get_randao_mix`](#getrandaomix)
|
||||||
- [`get_active_index_root`](#get_active_index_root)
|
- [`get_active_index_root`](#getactiveindexroot)
|
||||||
- [`generate_seed`](#generate_seed)
|
- [`generate_seed`](#generateseed)
|
||||||
- [`get_beacon_proposer_index`](#get_beacon_proposer_index)
|
- [`get_beacon_proposer_index`](#getbeaconproposerindex)
|
||||||
- [`merkle_root`](#merkle_root)
|
- [`merkle_root`](#merkleroot)
|
||||||
- [`get_attestation_participants`](#get_attestation_participants)
|
- [`get_attestation_participants`](#getattestationparticipants)
|
||||||
- [`is_power_of_two`](#is_power_of_two)
|
- [`is_power_of_two`](#ispoweroftwo)
|
||||||
- [`int_to_bytes1`, `int_to_bytes2`, ...](#int_to_bytes1-int_to_bytes2-)
|
- [`int_to_bytes1`, `int_to_bytes2`, ...](#inttobytes1-inttobytes2)
|
||||||
- [`get_effective_balance`](#get_effective_balance)
|
- [`get_effective_balance`](#geteffectivebalance)
|
||||||
- [`get_total_balance`](#get_total_balance)
|
- [`get_total_balance`](#gettotalbalance)
|
||||||
- [`get_fork_version`](#get_fork_version)
|
- [`get_fork_version`](#getforkversion)
|
||||||
- [`get_domain`](#get_domain)
|
- [`get_domain`](#getdomain)
|
||||||
- [`get_bitfield_bit`](#get_bitfield_bit)
|
- [`get_bitfield_bit`](#getbitfieldbit)
|
||||||
- [`verify_bitfield`](#verify_bitfield)
|
- [`verify_bitfield`](#verifybitfield)
|
||||||
- [`verify_slashable_attestation`](#verify_slashable_attestation)
|
- [`verify_slashable_attestation`](#verifyslashableattestation)
|
||||||
- [`is_double_vote`](#is_double_vote)
|
- [`is_double_vote`](#isdoublevote)
|
||||||
- [`is_surround_vote`](#is_surround_vote)
|
- [`is_surround_vote`](#issurroundvote)
|
||||||
- [`integer_squareroot`](#integer_squareroot)
|
- [`integer_squareroot`](#integersquareroot)
|
||||||
- [`get_entry_exit_effect_epoch`](#get_entry_exit_effect_epoch)
|
- [`get_entry_exit_effect_epoch`](#getentryexiteffectepoch)
|
||||||
- [`bls_verify`](#bls_verify)
|
- [`bls_verify`](#blsverify)
|
||||||
- [`bls_verify_multiple`](#bls_verify_multiple)
|
- [`bls_verify_multiple`](#blsverifymultiple)
|
||||||
- [`bls_aggregate_pubkeys`](#bls_aggregate_pubkeys)
|
- [`bls_aggregate_pubkeys`](#blsaggregatepubkeys)
|
||||||
- [`validate_proof_of_possession`](#validate_proof_of_possession)
|
- [`validate_proof_of_possession`](#validateproofofpossession)
|
||||||
- [`process_deposit`](#process_deposit)
|
- [`process_deposit`](#processdeposit)
|
||||||
- [Routines for updating validator status](#routines-for-updating-validator-status)
|
- [Routines for updating validator status](#routines-for-updating-validator-status)
|
||||||
- [`activate_validator`](#activate_validator)
|
- [`activate_validator`](#activatevalidator)
|
||||||
- [`initiate_validator_exit`](#initiate_validator_exit)
|
- [`initiate_validator_exit`](#initiatevalidatorexit)
|
||||||
- [`exit_validator`](#exit_validator)
|
- [`exit_validator`](#exitvalidator)
|
||||||
- [`penalize_validator`](#penalize_validator)
|
- [`penalize_validator`](#penalizevalidator)
|
||||||
- [`prepare_validator_for_withdrawal`](#prepare_validator_for_withdrawal)
|
- [`prepare_validator_for_withdrawal`](#preparevalidatorforwithdrawal)
|
||||||
- [Ethereum 1.0 deposit contract](#ethereum-10-deposit-contract)
|
- [Ethereum 1.0 deposit contract](#ethereum-10-deposit-contract)
|
||||||
- [Deposit arguments](#deposit-arguments)
|
- [Deposit arguments](#deposit-arguments)
|
||||||
- [Withdrawal credentials](#withdrawal-credentials)
|
- [Withdrawal credentials](#withdrawal-credentials)
|
||||||
- [`Deposit` logs](#deposit-logs)
|
- [`Deposit` logs](#deposit-logs)
|
||||||
- [`ChainStart` log](#chainstart-log)
|
- [`ChainStart` log](#chainstart-log)
|
||||||
- [Vyper code](#vyper-code)
|
- [Vyper code](#vyper-code)
|
||||||
- [On startup](#on-startup)
|
- [On startup](#on-startup)
|
||||||
- [Beacon chain processing](#beacon-chain-processing)
|
- [Beacon chain processing](#beacon-chain-processing)
|
||||||
- [Beacon chain fork choice rule](#beacon-chain-fork-choice-rule)
|
- [Beacon chain fork choice rule](#beacon-chain-fork-choice-rule)
|
||||||
- [Beacon chain state transition function](#beacon-chain-state-transition-function)
|
- [Beacon chain state transition function](#beacon-chain-state-transition-function)
|
||||||
- [Per-slot processing](#per-slot-processing)
|
- [Per-slot processing](#per-slot-processing)
|
||||||
- [Slot](#slot)
|
- [Slot](#slot)
|
||||||
- [Block roots](#block-roots)
|
- [Block roots](#block-roots)
|
||||||
- [Per-block processing](#per-block-processing)
|
- [Per-block processing](#per-block-processing)
|
||||||
- [Slot](#slot-1)
|
- [Slot](#slot-1)
|
||||||
- [Proposer signature](#proposer-signature)
|
- [Proposer signature](#proposer-signature)
|
||||||
- [RANDAO](#randao)
|
- [RANDAO](#randao)
|
||||||
- [Eth1 data](#eth1-data)
|
- [Eth1 data](#eth1-data)
|
||||||
- [Operations](#operations)
|
- [Operations](#operations)
|
||||||
- [Proposer slashings](#proposer-slashings-1)
|
- [Proposer slashings](#proposer-slashings-1)
|
||||||
- [Attester slashings](#attester-slashings-1)
|
- [Attester slashings](#attester-slashings-1)
|
||||||
- [Attestations](#attestations-1)
|
- [Attestations](#attestations-1)
|
||||||
- [Deposits](#deposits-1)
|
- [Deposits](#deposits-1)
|
||||||
- [Exits](#exits-1)
|
- [Exits](#exits-1)
|
||||||
- [Per-epoch processing](#per-epoch-processing)
|
- [Per-epoch processing](#per-epoch-processing)
|
||||||
- [Helpers](#helpers)
|
- [Helpers](#helpers)
|
||||||
- [Eth1 data](#eth1-data-1)
|
- [Eth1 data](#eth1-data-1)
|
||||||
- [Justification](#justification)
|
- [Justification](#justification)
|
||||||
- [Crosslinks](#crosslinks)
|
- [Crosslinks](#crosslinks)
|
||||||
- [Rewards and penalties](#rewards-and-penalties)
|
- [Rewards and penalties](#rewards-and-penalties)
|
||||||
- [Justification and finalization](#justification-and-finalization)
|
- [Justification and finalization](#justification-and-finalization)
|
||||||
- [Attestation inclusion](#attestation-inclusion)
|
- [Attestation inclusion](#attestation-inclusion)
|
||||||
- [Crosslinks](#crosslinks-1)
|
- [Crosslinks](#crosslinks-1)
|
||||||
- [Ejections](#ejections)
|
- [Ejections](#ejections)
|
||||||
- [Validator registry and shuffling seed data](#validator-registry-and-shuffling-seed-data)
|
- [Validator registry and shuffling seed data](#validator-registry-and-shuffling-seed-data)
|
||||||
- [Final updates](#final-updates)
|
- [Final updates](#final-updates)
|
||||||
- [State root verification](#state-root-verification)
|
- [State root verification](#state-root-verification)
|
||||||
- [References](#references)
|
- [References](#references)
|
||||||
- [Normative](#normative)
|
- [Normative](#normative)
|
||||||
- [Informative](#informative)
|
- [Informative](#informative)
|
||||||
- [Copyright](#copyright)
|
- [Copyright](#copyright)
|
||||||
|
|
||||||
<!-- /TOC -->
|
<!-- /TOC -->
|
||||||
|
@ -1052,7 +1052,7 @@ def get_effective_balance(state: State, index: ValidatorIndex) -> Gwei:
|
||||||
### `get_total_balance`
|
### `get_total_balance`
|
||||||
|
|
||||||
```python
|
```python
|
||||||
def get_total_balance(state: BeaconState, validators: List[ValidatorIndex]) -> Gwei:
|
def get_total_balance(state: BeaconState, validators: List[ValidatorIndex]) -> Gwei:
|
||||||
"""
|
"""
|
||||||
Return the combined effective balance of an array of validators.
|
Return the combined effective balance of an array of validators.
|
||||||
"""
|
"""
|
||||||
|
@ -1150,7 +1150,7 @@ def verify_slashable_attestation(state: BeaconState, slashable_attestation: Slas
|
||||||
bls_aggregate_pubkeys([state.validator_registry[i].pubkey for i in custody_bit_0_indices]),
|
bls_aggregate_pubkeys([state.validator_registry[i].pubkey for i in custody_bit_0_indices]),
|
||||||
bls_aggregate_pubkeys([state.validator_registry[i].pubkey for i in custody_bit_1_indices]),
|
bls_aggregate_pubkeys([state.validator_registry[i].pubkey for i in custody_bit_1_indices]),
|
||||||
],
|
],
|
||||||
messages=[
|
message_hashes=[
|
||||||
hash_tree_root(AttestationDataAndCustodyBit(data=slashable_attestation.data, custody_bit=0b0)),
|
hash_tree_root(AttestationDataAndCustodyBit(data=slashable_attestation.data, custody_bit=0b0)),
|
||||||
hash_tree_root(AttestationDataAndCustodyBit(data=slashable_attestation.data, custody_bit=0b1)),
|
hash_tree_root(AttestationDataAndCustodyBit(data=slashable_attestation.data, custody_bit=0b1)),
|
||||||
],
|
],
|
||||||
|
@ -1245,7 +1245,7 @@ def validate_proof_of_possession(state: BeaconState,
|
||||||
|
|
||||||
return bls_verify(
|
return bls_verify(
|
||||||
pubkey=pubkey,
|
pubkey=pubkey,
|
||||||
message=hash_tree_root(proof_of_possession_data),
|
message_hash=hash_tree_root(proof_of_possession_data),
|
||||||
signature=proof_of_possession,
|
signature=proof_of_possession,
|
||||||
domain=get_domain(
|
domain=get_domain(
|
||||||
state.fork,
|
state.fork,
|
||||||
|
@ -1633,12 +1633,12 @@ Below are the processing steps that happen at every `block`.
|
||||||
|
|
||||||
* Let `block_without_signature_root` be the `hash_tree_root` of `block` where `block.signature` is set to `EMPTY_SIGNATURE`.
|
* Let `block_without_signature_root` be the `hash_tree_root` of `block` where `block.signature` is set to `EMPTY_SIGNATURE`.
|
||||||
* Let `proposal_root = hash_tree_root(ProposalSignedData(state.slot, BEACON_CHAIN_SHARD_NUMBER, block_without_signature_root))`.
|
* Let `proposal_root = hash_tree_root(ProposalSignedData(state.slot, BEACON_CHAIN_SHARD_NUMBER, block_without_signature_root))`.
|
||||||
* Verify that `bls_verify(pubkey=state.validator_registry[get_beacon_proposer_index(state, state.slot)].pubkey, message=proposal_root, signature=block.signature, domain=get_domain(state.fork, get_current_epoch(state), DOMAIN_PROPOSAL))`.
|
* Verify that `bls_verify(pubkey=state.validator_registry[get_beacon_proposer_index(state, state.slot)].pubkey, message_hash=proposal_root, signature=block.signature, domain=get_domain(state.fork, get_current_epoch(state), DOMAIN_PROPOSAL))`.
|
||||||
|
|
||||||
#### RANDAO
|
#### RANDAO
|
||||||
|
|
||||||
* Let `proposer = state.validator_registry[get_beacon_proposer_index(state, state.slot)]`.
|
* Let `proposer = state.validator_registry[get_beacon_proposer_index(state, state.slot)]`.
|
||||||
* Verify that `bls_verify(pubkey=proposer.pubkey, message=int_to_bytes32(get_current_epoch(state)), signature=block.randao_reveal, domain=get_domain(state.fork, get_current_epoch(state), DOMAIN_RANDAO))`.
|
* Verify that `bls_verify(pubkey=proposer.pubkey, message_hash=int_to_bytes32(get_current_epoch(state)), signature=block.randao_reveal, domain=get_domain(state.fork, get_current_epoch(state), DOMAIN_RANDAO))`.
|
||||||
* Set `state.latest_randao_mixes[get_current_epoch(state) % LATEST_RANDAO_MIXES_LENGTH] = xor(get_randao_mix(state, get_current_epoch(state)), hash(block.randao_reveal))`.
|
* Set `state.latest_randao_mixes[get_current_epoch(state) % LATEST_RANDAO_MIXES_LENGTH] = xor(get_randao_mix(state, get_current_epoch(state)), hash(block.randao_reveal))`.
|
||||||
|
|
||||||
#### Eth1 data
|
#### Eth1 data
|
||||||
|
@ -1659,8 +1659,8 @@ For each `proposer_slashing` in `block.body.proposer_slashings`:
|
||||||
* Verify that `proposer_slashing.proposal_data_1.shard == proposer_slashing.proposal_data_2.shard`.
|
* Verify that `proposer_slashing.proposal_data_1.shard == proposer_slashing.proposal_data_2.shard`.
|
||||||
* Verify that `proposer_slashing.proposal_data_1.block_root != proposer_slashing.proposal_data_2.block_root`.
|
* Verify that `proposer_slashing.proposal_data_1.block_root != proposer_slashing.proposal_data_2.block_root`.
|
||||||
* Verify that `proposer.penalized_epoch > get_current_epoch(state)`.
|
* Verify that `proposer.penalized_epoch > get_current_epoch(state)`.
|
||||||
* Verify that `bls_verify(pubkey=proposer.pubkey, message=hash_tree_root(proposer_slashing.proposal_data_1), signature=proposer_slashing.proposal_signature_1, domain=get_domain(state.fork, slot_to_epoch(proposer_slashing.proposal_data_1.slot), DOMAIN_PROPOSAL))`.
|
* Verify that `bls_verify(pubkey=proposer.pubkey, message_hash=hash_tree_root(proposer_slashing.proposal_data_1), signature=proposer_slashing.proposal_signature_1, domain=get_domain(state.fork, slot_to_epoch(proposer_slashing.proposal_data_1.slot), DOMAIN_PROPOSAL))`.
|
||||||
* Verify that `bls_verify(pubkey=proposer.pubkey, message=hash_tree_root(proposer_slashing.proposal_data_2), signature=proposer_slashing.proposal_signature_2, domain=get_domain(state.fork, slot_to_epoch(proposer_slashing.proposal_data_2.slot), DOMAIN_PROPOSAL))`.
|
* Verify that `bls_verify(pubkey=proposer.pubkey, message_hash=hash_tree_root(proposer_slashing.proposal_data_2), signature=proposer_slashing.proposal_signature_2, domain=get_domain(state.fork, slot_to_epoch(proposer_slashing.proposal_data_2.slot), DOMAIN_PROPOSAL))`.
|
||||||
* Run `penalize_validator(state, proposer_slashing.proposer_index)`.
|
* Run `penalize_validator(state, proposer_slashing.proposer_index)`.
|
||||||
|
|
||||||
##### Attester slashings
|
##### Attester slashings
|
||||||
|
@ -1772,7 +1772,7 @@ For each `exit` in `block.body.exits`:
|
||||||
* Verify that `validator.exit_epoch > get_entry_exit_effect_epoch(get_current_epoch(state))`.
|
* Verify that `validator.exit_epoch > get_entry_exit_effect_epoch(get_current_epoch(state))`.
|
||||||
* Verify that `get_current_epoch(state) >= exit.epoch`.
|
* Verify that `get_current_epoch(state) >= exit.epoch`.
|
||||||
* Let `exit_message = hash_tree_root(Exit(epoch=exit.epoch, validator_index=exit.validator_index, signature=EMPTY_SIGNATURE))`.
|
* Let `exit_message = hash_tree_root(Exit(epoch=exit.epoch, validator_index=exit.validator_index, signature=EMPTY_SIGNATURE))`.
|
||||||
* Verify that `bls_verify(pubkey=validator.pubkey, message=exit_message, signature=exit.signature, domain=get_domain(state.fork, exit.epoch, DOMAIN_EXIT))`.
|
* Verify that `bls_verify(pubkey=validator.pubkey, message_hash=exit_message, signature=exit.signature, domain=get_domain(state.fork, exit.epoch, DOMAIN_EXIT))`.
|
||||||
* Run `initiate_validator_exit(state, exit.validator_index)`.
|
* Run `initiate_validator_exit(state, exit.validator_index)`.
|
||||||
|
|
||||||
### Per-epoch processing
|
### Per-epoch processing
|
||||||
|
|
|
@ -7,53 +7,53 @@ __NOTICE__: This document is a work-in-progress for researchers and implementers
|
||||||
<!-- TOC -->
|
<!-- TOC -->
|
||||||
|
|
||||||
- [Ethereum 2.0 Phase 0 -- Honest Validator](#ethereum-20-phase-0----honest-validator)
|
- [Ethereum 2.0 Phase 0 -- Honest Validator](#ethereum-20-phase-0----honest-validator)
|
||||||
- [Table of Contents](#table-of-contents)
|
- [Table of Contents](#table-of-contents)
|
||||||
- [Introduction](#introduction)
|
- [Introduction](#introduction)
|
||||||
- [Prerequisites](#prerequisites)
|
- [Prerequisites](#prerequisites)
|
||||||
- [Constants](#constants)
|
- [Constants](#constants)
|
||||||
- [Misc](#misc)
|
- [Misc](#misc)
|
||||||
- [Becoming a validator](#becoming-a-validator)
|
- [Becoming a validator](#becoming-a-validator)
|
||||||
- [Initialization](#initialization)
|
- [Initialization](#initialization)
|
||||||
- [BLS public key](#bls-public-key)
|
- [BLS public key](#bls-public-key)
|
||||||
- [BLS withdrawal key](#bls-withdrawal-key)
|
- [BLS withdrawal key](#bls-withdrawal-key)
|
||||||
- [Submit deposit](#submit-deposit)
|
- [Submit deposit](#submit-deposit)
|
||||||
- [Process deposit](#process-deposit)
|
- [Process deposit](#process-deposit)
|
||||||
- [Validator index](#validator-index)
|
- [Validator index](#validator-index)
|
||||||
- [Activation](#activation)
|
- [Activation](#activation)
|
||||||
- [Beacon chain responsibilities](#beacon-chain-responsibilities)
|
- [Beacon chain responsibilities](#beacon-chain-responsibilities)
|
||||||
- [Block proposal](#block-proposal)
|
- [Block proposal](#block-proposal)
|
||||||
- [Block header](#block-header)
|
- [Block header](#block-header)
|
||||||
- [Slot](#slot)
|
- [Slot](#slot)
|
||||||
- [Parent root](#parent-root)
|
- [Parent root](#parent-root)
|
||||||
- [State root](#state-root)
|
- [State root](#state-root)
|
||||||
- [Randao reveal](#randao-reveal)
|
- [Randao reveal](#randao-reveal)
|
||||||
- [Eth1 Data](#eth1-data)
|
- [Eth1 Data](#eth1-data)
|
||||||
- [Signature](#signature)
|
- [Signature](#signature)
|
||||||
- [Block body](#block-body)
|
- [Block body](#block-body)
|
||||||
- [Proposer slashings](#proposer-slashings)
|
- [Proposer slashings](#proposer-slashings)
|
||||||
- [Attester slashings](#attester-slashings)
|
- [Attester slashings](#attester-slashings)
|
||||||
- [Attestations](#attestations)
|
- [Attestations](#attestations)
|
||||||
- [Deposits](#deposits)
|
- [Deposits](#deposits)
|
||||||
- [Exits](#exits)
|
- [Exits](#exits)
|
||||||
- [Attestations](#attestations-1)
|
- [Attestations](#attestations-1)
|
||||||
- [Attestation data](#attestation-data)
|
- [Attestation data](#attestation-data)
|
||||||
- [Slot](#slot-1)
|
- [Slot](#slot-1)
|
||||||
- [Shard](#shard)
|
- [Shard](#shard)
|
||||||
- [Beacon block root](#beacon-block-root)
|
- [Beacon block root](#beacon-block-root)
|
||||||
- [Epoch boundary root](#epoch-boundary-root)
|
- [Epoch boundary root](#epoch-boundary-root)
|
||||||
- [Shard block root](#shard-block-root)
|
- [Shard block root](#shard-block-root)
|
||||||
- [Latest crosslink root](#latest-crosslink-root)
|
- [Latest crosslink root](#latest-crosslink-root)
|
||||||
- [Justified epoch](#justified-epoch)
|
- [Justified epoch](#justified-epoch)
|
||||||
- [Justified block root](#justified-block-root)
|
- [Justified block root](#justified-block-root)
|
||||||
- [Construct attestation](#construct-attestation)
|
- [Construct attestation](#construct-attestation)
|
||||||
- [Data](#data)
|
- [Data](#data)
|
||||||
- [Aggregation bitfield](#aggregation-bitfield)
|
- [Aggregation bitfield](#aggregation-bitfield)
|
||||||
- [Custody bitfield](#custody-bitfield)
|
- [Custody bitfield](#custody-bitfield)
|
||||||
- [Aggregate signature](#aggregate-signature)
|
- [Aggregate signature](#aggregate-signature)
|
||||||
- [Responsibility lookahead](#responsibility-lookahead)
|
- [Responsibility lookahead](#responsibility-lookahead)
|
||||||
- [How to avoid slashing](#how-to-avoid-slashing)
|
- [How to avoid slashing](#how-to-avoid-slashing)
|
||||||
- [Proposer slashing](#proposer-slashing)
|
- [Proposer slashing](#proposer-slashing)
|
||||||
- [Attester slashing](#attester-slashing)
|
- [Attester slashing](#attester-slashing)
|
||||||
|
|
||||||
<!-- /TOC -->
|
<!-- /TOC -->
|
||||||
|
|
||||||
|
@ -95,7 +95,7 @@ The validator constructs their `withdrawal_credentials` via the following:
|
||||||
|
|
||||||
### Submit deposit
|
### Submit deposit
|
||||||
|
|
||||||
In phase 0, all incoming validator deposits originate from the Ethereum 1.0 PoW chain. Deposits are made to the [deposit contract](https://github.com/ethereum/eth2.0-specs/blob/master/specs/core/0_beacon-chain.md#ethereum-10-deposit-contract) located at `DEPOSIT_CONTRACT_ADDRESS`.
|
In phase 0, all incoming validator deposits originate from the Ethereum 1.0 PoW chain. Deposits are made to the [deposit contract](https://github.com/ethereum/eth2.0-specs/blob/master/specs/core/0_beacon-chain.md#ethereum-10-deposit-contract) located at `DEPOSIT_CONTRACT_ADDRESS`.
|
||||||
|
|
||||||
To submit a deposit:
|
To submit a deposit:
|
||||||
|
|
||||||
|
@ -166,7 +166,7 @@ Set `block.randao_reveal = epoch_signature` where `epoch_signature` is defined a
|
||||||
```python
|
```python
|
||||||
epoch_signature = bls_sign(
|
epoch_signature = bls_sign(
|
||||||
privkey=validator.privkey, # privkey store locally, not in state
|
privkey=validator.privkey, # privkey store locally, not in state
|
||||||
message=int_to_bytes32(slot_to_epoch(block.slot)),
|
message_hash=int_to_bytes32(slot_to_epoch(block.slot)),
|
||||||
domain=get_domain(
|
domain=get_domain(
|
||||||
fork=fork, # `fork` is the fork object at the slot `block.slot`
|
fork=fork, # `fork` is the fork object at the slot `block.slot`
|
||||||
epoch=slot_to_epoch(block.slot),
|
epoch=slot_to_epoch(block.slot),
|
||||||
|
@ -205,7 +205,7 @@ proposal_root = hash_tree_root(proposal_data)
|
||||||
|
|
||||||
signed_proposal_data = bls_sign(
|
signed_proposal_data = bls_sign(
|
||||||
privkey=validator.privkey, # privkey store locally, not in state
|
privkey=validator.privkey, # privkey store locally, not in state
|
||||||
message=proposal_root,
|
message_hash=proposal_root,
|
||||||
domain=get_domain(
|
domain=get_domain(
|
||||||
fork=fork, # `fork` is the fork object at the slot `block.slot`
|
fork=fork, # `fork` is the fork object at the slot `block.slot`
|
||||||
epoch=slot_to_epoch(block.slot),
|
epoch=slot_to_epoch(block.slot),
|
||||||
|
@ -321,7 +321,7 @@ attestation_message_to_sign = hash_tree_root(attestation_data_and_custody_bit)
|
||||||
|
|
||||||
signed_attestation_data = bls_sign(
|
signed_attestation_data = bls_sign(
|
||||||
privkey=validator.privkey, # privkey store locally, not in state
|
privkey=validator.privkey, # privkey store locally, not in state
|
||||||
message=attestation_message_to_sign,
|
message_hash=attestation_message_to_sign,
|
||||||
domain=get_domain(
|
domain=get_domain(
|
||||||
fork=fork, # `fork` is the fork object at the slot, `attestation_data.slot`
|
fork=fork, # `fork` is the fork object at the slot, `attestation_data.slot`
|
||||||
epoch=slot_to_epoch(attestation_data.slot),
|
epoch=slot_to_epoch(attestation_data.slot),
|
||||||
|
|
Loading…
Reference in New Issue