diff --git a/specs/core/0_beacon-chain.md b/specs/core/0_beacon-chain.md index f38545dda..9acc9625c 100644 --- a/specs/core/0_beacon-chain.md +++ b/specs/core/0_beacon-chain.md @@ -227,7 +227,7 @@ Unless otherwise indicated, code appearing in `this style` is to be interpreted ### Signature domains -| Name | Value | +| Name | Value | | - | - | | `DOMAIN_DEPOSIT` | `0` | | `DOMAIN_ATTESTATION` | `1` | @@ -1346,16 +1346,16 @@ Verify that `len(block.body.attestations) <= MAX_ATTESTATIONS`. For each `attestation` in `block.body.attestations`: -* Verify that `attestation.data.slot <= state.slot - MIN_ATTESTATION_INCLUSION_DELAY`. -* Verify that `attestation.data.slot >= max(state.slot - EPOCH_LENGTH, 0)`. +* Verify that `attestation.data.slot + MIN_ATTESTATION_INCLUSION_DELAY <= state.slot`. +* Verify that `attestation.data.slot + EPOCH_LENGTH >= state.slot`. * Verify that `attestation.data.justified_slot` is equal to `state.justified_slot if attestation.data.slot >= state.slot - (state.slot % EPOCH_LENGTH) else state.previous_justified_slot`. * Verify that `attestation.data.justified_block_hash` is equal to `get_block_hash(state, attestation.data.justified_slot)`. * Verify that either `attestation.data.latest_crosslink_hash` or `attestation.data.shard_block_hash` equals `state.latest_crosslinks[shard].shard_block_hash`. * `aggregate_signature` verification: * Let `participants = get_attestation_participants(state, attestation.data, attestation.participation_bitfield)`. * Let `group_public_key = BLSAddPubkeys([state.validator_registry[v].pubkey for v in participants])`. - * Verify that `BLSVerify(pubkey=group_public_key, msg=SSZTreeHash(attestation.data) + bytes1(0), sig=aggregate_signature, domain=get_domain(state.fork_data, slot, DOMAIN_ATTESTATION))`. -* [TO BE REMOVED IN PHASE 1] Verify that `shard_block_hash == ZERO_HASH`. + * Verify that `BLSVerify(pubkey=group_public_key, msg=SSZTreeHash(attestation.data) + bytes1(0), sig=attestation.aggregate_signature, domain=get_domain(state.fork_data, attestation.data.slot, DOMAIN_ATTESTATION))`. +* [TO BE REMOVED IN PHASE 1] Verify that `attestation.data.shard_block_hash == ZERO_HASH`. * Append `PendingAttestationRecord(data=attestation.data, participation_bitfield=attestation.participation_bitfield, custody_bitfield=attestation.custody_bitfield, slot_included=state.slot)` to `state.latest_attestations`. #### Deposits @@ -1460,7 +1460,7 @@ For every `shard_committee` in `state.shard_committees_at_slots`: * Let `total_balance(shard_committee) = sum([get_effective_balance(v) for v in shard_committee.committee])`. * Let `inclusion_slot(v) = a.slot_included` for the attestation `a` where `v` is in `get_attestation_participants(state, a.data, a.participation_bitfield)`. * Let `inclusion_distance(v) = a.slot_included - a.data.slot` where `a` is the above attestation. -* Let `adjust_for_inclusion_distance(magnitude, distance)` be the function below. +* Let `adjust_for_inclusion_distance(magnitude, distance)` be the function below. ```python def adjust_for_inclusion_distance(magnitude: int, distance: int) -> int: @@ -1543,7 +1543,7 @@ def update_validator_registry(state: BeaconState) -> None: active_validator_indices = get_active_validator_indices(state.validator_registry) # The total effective balance of active validators total_balance = sum([get_effective_balance(v) for i, v in enumerate(validator_registry) if i in active_validator_indices]) - + # The maximum balance churn in Gwei (for deposits and exits separately) max_balance_churn = max( MAX_DEPOSIT * GWEI_PER_ETH, @@ -1562,7 +1562,7 @@ def update_validator_registry(state: BeaconState) -> None: # Activate validator update_validator_status(index, state, new_status=ACTIVE) - # Exit validators within the allowable balance churn + # Exit validators within the allowable balance churn balance_churn = 0 for index, validator in enumerate(state.validator_registry): if validator.status == ACTIVE_PENDING_EXIT: @@ -1655,7 +1655,7 @@ This section is divided into Normative and Informative references. Normative re ## Normative ## Informative - _**python-poc**_ + _**python-poc**_   _Python proof-of-concept implementation_. Ethereum Foundation. URL: https://github.com/ethereum/beacon_chain # Copyright diff --git a/specs/simple-serialize.md b/specs/simple-serialize.md index 82d472ea4..46f73c045 100644 --- a/specs/simple-serialize.md +++ b/specs/simple-serialize.md @@ -392,7 +392,7 @@ return typ(**values), item_index The below `SSZTreeHash` algorithm is defined recursively in the case of lists and containers, and it outputs a value equal to or less than 32 bytes in size. For the final output only (ie. not intermediate outputs), if the output is less than 32 bytes, right-zero-pad it to 32 bytes. The goal is collision resistance *within* each type, not between types. -We define `hash(x)` as `BLAKE2b-512(x)[0:32]`. +Refer to [Appendix A](https://github.com/ethereum/eth2.0-specs/blob/master/specs/core/0_beacon-chain.md#appendix-a---hash-function) of Phase 0 of the [Eth2.0 specs](https://github.com/ethereum/eth2.0-specs) for a definition of the hash function used below, `hash(x)`. #### `uint8`..`uint256`, `bool`, `address`, `hash1`..`hash32`