Update specs/core/1_shard-data-chains.md
Co-Authored-By: vbuterin <v@buterin.com>
This commit is contained in:
parent
ad0ff80be2
commit
8dd111b7e6
|
@ -124,7 +124,7 @@ To validate a block header on shard `shard_block.shard_id`, compute as follows:
|
||||||
* Let `state` be the state of the beacon chain block referred to by `shard_block.beacon_chain_ref`.
|
* Let `state` be the state of the beacon chain block referred to by `shard_block.beacon_chain_ref`.
|
||||||
* Let `persistent_committee = get_persistent_committee(state, shard_block.slot, shard_block.shard_id)`.
|
* Let `persistent_committee = get_persistent_committee(state, shard_block.slot, shard_block.shard_id)`.
|
||||||
* Assert `verify_bitfield(shard_block.participation_bitfield, len(persistent_committee))`
|
* Assert `verify_bitfield(shard_block.participation_bitfield, len(persistent_committee))`
|
||||||
* Let `proposer_index = hash(state.randao_mix + int_to_bytes8(shard_block.shard_id) + int_to_bytes8(shard_block.slot)) % len(validators)`. Let `msg` be the `shard_block` but with `shard_block.signature` set to `[0, 0]`. Verify that `bls_verify(pubkey=validators[proposer_index].pubkey, message_hash=hash(msg), signature=shard_block.signature, domain=get_domain(state, shard_block.slot, SHARD_PROPOSER_DOMAIN))` passes.
|
* Let `proposer_index = bytes_to_int(hash(state.current_epoch_seed + int_to_bytes8(shard_block.shard_id) + int_to_bytes8(shard_block.slot))[0:8]) % len(validators)`. Let `msg` be the `shard_block` but with `shard_block.signature` set to `[0, 0]`. Verify that `bls_verify(pubkey=validators[proposer_index].pubkey, message_hash=hash(msg), signature=shard_block.signature, domain=get_domain(state, slot_to_epoch(shard_block.slot), SHARD_PROPOSER_DOMAIN))` passes.
|
||||||
* Let `group_public_key = bls_aggregate_pubkeys([state.validators[index].pubkey for i, index in enumerate(persistent_committee) if get_bitfield_bit(shard_block.participation_bitfield, i) is True])`. Verify that `bls_verify(pubkey=group_public_key, message_hash=shard_block.parent_root, sig=shard_block.aggregate_signature, domain=get_domain(state, slot, SHARD_ATTESTER_DOMAIN))` passes.
|
* Let `group_public_key = bls_aggregate_pubkeys([state.validators[index].pubkey for i, index in enumerate(persistent_committee) if get_bitfield_bit(shard_block.participation_bitfield, i) is True])`. Verify that `bls_verify(pubkey=group_public_key, message_hash=shard_block.parent_root, sig=shard_block.aggregate_signature, domain=get_domain(state, slot, SHARD_ATTESTER_DOMAIN))` passes.
|
||||||
|
|
||||||
### Verifying shard block data
|
### Verifying shard block data
|
||||||
|
|
Loading…
Reference in New Issue