Add domain_type to get_seed
This commit is contained in:
parent
114ffe3d6d
commit
47a818c705
|
@ -123,8 +123,8 @@ MAX_TRANSFERS: 0
|
||||||
# Signature domains
|
# Signature domains
|
||||||
# ---------------------------------------------------------------
|
# ---------------------------------------------------------------
|
||||||
DOMAIN_BEACON_PROPOSER: 0x00000000
|
DOMAIN_BEACON_PROPOSER: 0x00000000
|
||||||
DOMAIN_RANDAO: 0x01000000
|
DOMAIN_BEACON_ATTESTER: 0x01000000
|
||||||
DOMAIN_ATTESTATION: 0x02000000
|
DOMAIN_RANDAO: 0x02000000
|
||||||
DOMAIN_DEPOSIT: 0x03000000
|
DOMAIN_DEPOSIT: 0x03000000
|
||||||
DOMAIN_VOLUNTARY_EXIT: 0x04000000
|
DOMAIN_VOLUNTARY_EXIT: 0x04000000
|
||||||
DOMAIN_TRANSFER: 0x05000000
|
DOMAIN_TRANSFER: 0x05000000
|
||||||
|
|
|
@ -125,8 +125,8 @@ MAX_TRANSFERS: 0
|
||||||
# Signature domains
|
# Signature domains
|
||||||
# ---------------------------------------------------------------
|
# ---------------------------------------------------------------
|
||||||
DOMAIN_BEACON_PROPOSER: 0x00000000
|
DOMAIN_BEACON_PROPOSER: 0x00000000
|
||||||
DOMAIN_RANDAO: 0x01000000
|
DOMAIN_BEACON_ATTESTER: 0x01000000
|
||||||
DOMAIN_ATTESTATION: 0x02000000
|
DOMAIN_RANDAO: 0x02000000
|
||||||
DOMAIN_DEPOSIT: 0x03000000
|
DOMAIN_DEPOSIT: 0x03000000
|
||||||
DOMAIN_VOLUNTARY_EXIT: 0x04000000
|
DOMAIN_VOLUNTARY_EXIT: 0x04000000
|
||||||
DOMAIN_TRANSFER: 0x05000000
|
DOMAIN_TRANSFER: 0x05000000
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
- [State list lengths](#state-list-lengths)
|
- [State list lengths](#state-list-lengths)
|
||||||
- [Rewards and penalties](#rewards-and-penalties)
|
- [Rewards and penalties](#rewards-and-penalties)
|
||||||
- [Max operations per block](#max-operations-per-block)
|
- [Max operations per block](#max-operations-per-block)
|
||||||
- [Signature domain types](#signature-domain-types)
|
- [Domain types](#domain-types)
|
||||||
- [Containers](#containers)
|
- [Containers](#containers)
|
||||||
- [Misc dependencies](#misc-dependencies)
|
- [Misc dependencies](#misc-dependencies)
|
||||||
- [`Fork`](#fork)
|
- [`Fork`](#fork)
|
||||||
|
@ -148,7 +148,7 @@ We define the following Python custom types for type hinting and readability:
|
||||||
| `Gwei` | `uint64` | an amount in Gwei |
|
| `Gwei` | `uint64` | an amount in Gwei |
|
||||||
| `Hash` | `Bytes32` | a hash |
|
| `Hash` | `Bytes32` | a hash |
|
||||||
| `Version` | `Bytes4` | a fork version number |
|
| `Version` | `Bytes4` | a fork version number |
|
||||||
| `DomainType` | `Bytes4` | a signature domain type |
|
| `DomainType` | `Bytes4` | a domain type |
|
||||||
| `Domain` | `Bytes8` | a signature domain |
|
| `Domain` | `Bytes8` | a signature domain |
|
||||||
| `BLSPubkey` | `Bytes48` | a BLS12-381 public key |
|
| `BLSPubkey` | `Bytes48` | a BLS12-381 public key |
|
||||||
| `BLSSignature` | `Bytes96` | a BLS12-381 signature |
|
| `BLSSignature` | `Bytes96` | a BLS12-381 signature |
|
||||||
|
@ -250,15 +250,15 @@ The following values are (non-configurable) constants used throughout the specif
|
||||||
| `MAX_VOLUNTARY_EXITS` | `2**4` (= 16) |
|
| `MAX_VOLUNTARY_EXITS` | `2**4` (= 16) |
|
||||||
| `MAX_TRANSFERS` | `0` |
|
| `MAX_TRANSFERS` | `0` |
|
||||||
|
|
||||||
### Signature domain types
|
### Domain types
|
||||||
|
|
||||||
The following types are defined, mapping into `DomainType` (little endian):
|
The following types are defined, mapping into `DomainType` (little endian):
|
||||||
|
|
||||||
| Name | Value |
|
| Name | Value |
|
||||||
| - | - |
|
| - | - |
|
||||||
| `DOMAIN_BEACON_PROPOSER` | `0` |
|
| `DOMAIN_BEACON_PROPOSER` | `0` |
|
||||||
| `DOMAIN_RANDAO` | `1` |
|
| `DOMAIN_BEACON_ATTESTER` | `1` |
|
||||||
| `DOMAIN_ATTESTATION` | `2` |
|
| `DOMAIN_RANDAO` | `2` |
|
||||||
| `DOMAIN_DEPOSIT` | `3` |
|
| `DOMAIN_DEPOSIT` | `3` |
|
||||||
| `DOMAIN_VOLUNTARY_EXIT` | `4` |
|
| `DOMAIN_VOLUNTARY_EXIT` | `4` |
|
||||||
| `DOMAIN_TRANSFER` | `5` |
|
| `DOMAIN_TRANSFER` | `5` |
|
||||||
|
@ -671,7 +671,7 @@ def is_valid_indexed_attestation(state: BeaconState, indexed_attestation: Indexe
|
||||||
hash_tree_root(AttestationDataAndCustodyBit(data=indexed_attestation.data, custody_bit=0b1)),
|
hash_tree_root(AttestationDataAndCustodyBit(data=indexed_attestation.data, custody_bit=0b1)),
|
||||||
],
|
],
|
||||||
signature=indexed_attestation.signature,
|
signature=indexed_attestation.signature,
|
||||||
domain=get_domain(state, DOMAIN_ATTESTATION, indexed_attestation.data.target.epoch),
|
domain=get_domain(state, DOMAIN_BEACON_ATTESTER, indexed_attestation.data.target.epoch),
|
||||||
):
|
):
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
@ -870,12 +870,12 @@ def get_validator_churn_limit(state: BeaconState) -> uint64:
|
||||||
#### `get_seed`
|
#### `get_seed`
|
||||||
|
|
||||||
```python
|
```python
|
||||||
def get_seed(state: BeaconState, epoch: Epoch) -> Hash:
|
def get_seed(state: BeaconState, epoch: Epoch, domain_type: DomainType) -> Hash:
|
||||||
"""
|
"""
|
||||||
Return the seed at ``epoch``.
|
Return the seed at ``epoch``.
|
||||||
"""
|
"""
|
||||||
mix = get_randao_mix(state, Epoch(epoch + EPOCHS_PER_HISTORICAL_VECTOR - MIN_SEED_LOOKAHEAD - 1)) # Avoid underflow
|
mix = get_randao_mix(state, Epoch(epoch + EPOCHS_PER_HISTORICAL_VECTOR - MIN_SEED_LOOKAHEAD - 1)) # Avoid underflow
|
||||||
return hash(mix + int_to_bytes(epoch, length=32))
|
return hash(domain_type + mix + int_to_bytes(epoch, length=32))
|
||||||
```
|
```
|
||||||
|
|
||||||
#### `get_committee_count`
|
#### `get_committee_count`
|
||||||
|
@ -901,7 +901,7 @@ def get_crosslink_committee(state: BeaconState, epoch: Epoch, shard: Shard) -> S
|
||||||
"""
|
"""
|
||||||
return compute_committee(
|
return compute_committee(
|
||||||
indices=get_active_validator_indices(state, epoch),
|
indices=get_active_validator_indices(state, epoch),
|
||||||
seed=get_seed(state, epoch),
|
seed=get_seed(state, epoch, DOMAIN_BEACON_ATTESTER),
|
||||||
index=(shard + SHARD_COUNT - get_start_shard(state, epoch)) % SHARD_COUNT,
|
index=(shard + SHARD_COUNT - get_start_shard(state, epoch)) % SHARD_COUNT,
|
||||||
count=get_committee_count(state, epoch),
|
count=get_committee_count(state, epoch),
|
||||||
)
|
)
|
||||||
|
@ -941,7 +941,7 @@ def get_beacon_proposer_index(state: BeaconState) -> ValidatorIndex:
|
||||||
Return the beacon proposer index at the current slot.
|
Return the beacon proposer index at the current slot.
|
||||||
"""
|
"""
|
||||||
epoch = get_current_epoch(state)
|
epoch = get_current_epoch(state)
|
||||||
seed = hash(get_seed(state, epoch) + int_to_bytes(state.slot, length=8))
|
seed = hash(get_seed(state, epoch, DOMAIN_BEACON_PROPOSER) + int_to_bytes(state.slot, length=8))
|
||||||
indices = get_active_validator_indices(state, epoch)
|
indices = get_active_validator_indices(state, epoch)
|
||||||
return compute_proposer_index(state, indices, seed)
|
return compute_proposer_index(state, indices, seed)
|
||||||
```
|
```
|
||||||
|
|
|
@ -225,7 +225,7 @@ def get_period_committee(state: BeaconState, epoch: Epoch, shard: Shard) -> Sequ
|
||||||
"""
|
"""
|
||||||
full_committee = compute_committee(
|
full_committee = compute_committee(
|
||||||
indices=get_active_validator_indices(state, epoch),
|
indices=get_active_validator_indices(state, epoch),
|
||||||
seed=get_seed(state, epoch),
|
seed=get_seed(state, epoch, DOMAIN_SHARD_ATTESTER),
|
||||||
index=shard,
|
index=shard,
|
||||||
count=SHARD_COUNT,
|
count=SHARD_COUNT,
|
||||||
)
|
)
|
||||||
|
@ -270,7 +270,8 @@ def get_shard_block_proposer_index(state: BeaconState,
|
||||||
return None
|
return None
|
||||||
|
|
||||||
MAX_RANDOM_BYTE = 2**8 - 1
|
MAX_RANDOM_BYTE = 2**8 - 1
|
||||||
seed = hash(get_seed(state, current_epoch) + int_to_bytes(shard, length=8) + int_to_bytes(slot, length=8))
|
seed = get_seed(state, current_epoch, DOMAIN_SHARD_PROPOSER)
|
||||||
|
seed = hash(seed + int_to_bytes(shard, length=8) + int_to_bytes(slot, length=8))
|
||||||
i = 0
|
i = 0
|
||||||
while True:
|
while True:
|
||||||
candidate_index = active_indices[(slot + i) % len(active_indices)]
|
candidate_index = active_indices[(slot + i) % len(active_indices)]
|
||||||
|
|
|
@ -345,7 +345,7 @@ def get_signed_attestation_data(state: BeaconState, attestation: IndexedAttestat
|
||||||
custody_bit=0b0,
|
custody_bit=0b0,
|
||||||
)
|
)
|
||||||
|
|
||||||
domain = get_domain(state, DOMAIN_ATTESTATION, attestation.data.target.epoch)
|
domain = get_domain(state, DOMAIN_BEACON_ATTESTER, attestation.data.target.epoch)
|
||||||
return bls_sign(privkey, hash_tree_root(attestation_data_and_custody_bit), domain)
|
return bls_sign(privkey, hash_tree_root(attestation_data_and_custody_bit), domain)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -122,7 +122,7 @@ def get_attestation_signature(spec, state, attestation_data, privkey, custody_bi
|
||||||
privkey=privkey,
|
privkey=privkey,
|
||||||
domain=spec.get_domain(
|
domain=spec.get_domain(
|
||||||
state=state,
|
state=state,
|
||||||
domain_type=spec.DOMAIN_ATTESTATION,
|
domain_type=spec.DOMAIN_BEACON_ATTESTER,
|
||||||
message_epoch=attestation_data.target.epoch,
|
message_epoch=attestation_data.target.epoch,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in New Issue