Merge pull request #731 from ethereum/top-order

reorder ssz types topologically
This commit is contained in:
Danny Ryan 2019-03-07 13:28:51 -07:00 committed by GitHub
commit 8e08e742dc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 190 additions and 205 deletions

View File

@ -21,36 +21,31 @@
- [Max transactions per block](#max-transactions-per-block)
- [Signature domains](#signature-domains)
- [Data structures](#data-structures)
- [Beacon chain transactions](#beacon-chain-transactions)
- [Proposer slashings](#proposer-slashings)
- [`ProposerSlashing`](#proposerslashing)
- [Attester slashings](#attester-slashings)
- [`AttesterSlashing`](#attesterslashing)
- [`SlashableAttestation`](#slashableattestation)
- [Attestations](#attestations)
- [`Attestation`](#attestation)
- [`AttestationData`](#attestationdata)
- [`AttestationDataAndCustodyBit`](#attestationdataandcustodybit)
- [Deposits](#deposits)
- [`Deposit`](#deposit)
- [`DepositData`](#depositdata)
- [`DepositInput`](#depositinput)
- [Voluntary exits](#voluntary-exits)
- [`VoluntaryExit`](#voluntaryexit)
- [Transfers](#transfers)
- [`Transfer`](#transfer)
- [Beacon chain blocks](#beacon-chain-blocks)
- [`BeaconBlock`](#beaconblock)
- [`BeaconBlockHeader`](#beaconblockheader)
- [`BeaconBlockBody`](#beaconblockbody)
- [Beacon chain state](#beacon-chain-state)
- [`BeaconState`](#beaconstate)
- [`Validator`](#validator)
- [`Crosslink`](#crosslink)
- [`PendingAttestation`](#pendingattestation)
- [Misc dependencies](#misc-dependencies)
- [`Fork`](#fork)
- [`Crosslink`](#crosslink)
- [`Eth1Data`](#eth1data)
- [`Eth1DataVote`](#eth1datavote)
- [`AttestationData`](#attestationdata)
- [`AttestationDataAndCustodyBit`](#attestationdataandcustodybit)
- [`SlashableAttestation`](#slashableattestation)
- [`DepositInput`](#depositinput)
- [`DepositData`](#depositdata)
- [`BeaconBlockHeader`](#beaconblockheader)
- [`Validator`](#validator)
- [`PendingAttestation`](#pendingattestation)
- [Beacon transactions](#beacon-transactions)
- [`ProposerSlashing`](#proposerslashing)
- [`AttesterSlashing`](#attesterslashing)
- [`Attestation`](#attestation)
- [`Deposit`](#deposit)
- [`VoluntaryExit`](#voluntaryexit)
- [`Transfer`](#transfer)
- [Beacon blocks](#beacon-blocks)
- [`BeaconBlockBody`](#beaconblockbody)
- [`BeaconBlock`](#beaconblock)
- [Beacon state](#beacon-state)
- [`BeaconState`](#beaconstate)
- [Custom Types](#custom-types)
- [Helper functions](#helper-functions)
- [`xor`](#xor)
@ -116,8 +111,6 @@
- [Beacon chain fork choice rule](#beacon-chain-fork-choice-rule)
- [Beacon chain state transition function](#beacon-chain-state-transition-function)
- [Per-slot processing](#per-slot-processing)
- [Slot](#slot)
- [Block roots](#block-roots)
- [Per-block processing](#per-block-processing)
- [Block header](#block-header)
- [RANDAO](#randao)
@ -136,8 +129,8 @@
- [Eth1 data](#eth1-data-1)
- [Rewards and penalties](#rewards-and-penalties)
- [Justification and finalization](#justification-and-finalization)
- [Attestation inclusion](#attestation-inclusion)
- [Crosslinks](#crosslinks-1)
- [Apply rewards](#apply-rewards)
- [Ejections](#ejections)
- [Validator registry and shuffling seed data](#validator-registry-and-shuffling-seed-data)
- [Slashings and exit queue](#slashings-and-exit-queue)
@ -286,69 +279,57 @@ Code snippets appearing in `this style` are to be interpreted as Python code.
The following data structures are defined as [SimpleSerialize (SSZ)](https://github.com/ethereum/eth2.0-specs/blob/master/specs/simple-serialize.md) objects.
### Beacon chain transactions
The types are defined topologically to aid in facilitating an executable version of the spec.
#### Proposer slashings
### Misc dependencies
##### `ProposerSlashing`
#### `Fork`
```python
{
# Proposer index
'proposer_index': 'uint64',
# First block header
'header_1': BeaconBlockHeader,
# Second block header
'header_2': BeaconBlockHeader,
# Previous fork version
'previous_version': 'uint64',
# Current fork version
'current_version': 'uint64',
# Fork epoch number
'epoch': 'uint64',
}
```
#### Attester slashings
##### `AttesterSlashing`
#### `Crosslink`
```python
{
# First slashable attestation
'slashable_attestation_1': SlashableAttestation,
# Second slashable attestation
'slashable_attestation_2': SlashableAttestation,
# Epoch number
'epoch': 'uint64',
# Shard data since the previous crosslink
'crosslink_data_root': 'bytes32',
}
```
##### `SlashableAttestation`
#### `Eth1Data`
```python
{
# Validator indices
'validator_indices': ['uint64'],
# Attestation data
'data': AttestationData,
# Custody bitfield
'custody_bitfield': 'bytes',
# Aggregate signature
'aggregate_signature': 'bytes96',
# Root of the deposit tree
'deposit_root': 'bytes32',
# Block hash
'block_hash': 'bytes32',
}
```
#### Attestations
##### `Attestation`
#### `Eth1DataVote`
```python
{
# Attester aggregation bitfield
'aggregation_bitfield': 'bytes',
# Attestation data
'data': AttestationData,
# Custody bitfield
'custody_bitfield': 'bytes',
# BLS aggregate signature
'aggregate_signature': 'bytes96',
# Data being voted for
'eth1_data': Eth1Data,
# Vote count
'vote_count': 'uint64',
}
```
##### `AttestationData`
#### `AttestationData`
```python
{
@ -371,7 +352,7 @@ The following data structures are defined as [SimpleSerialize (SSZ)](https://git
}
```
##### `AttestationDataAndCustodyBit`
#### `AttestationDataAndCustodyBit`
```python
{
@ -382,35 +363,22 @@ The following data structures are defined as [SimpleSerialize (SSZ)](https://git
}
```
#### Deposits
##### `Deposit`
#### `SlashableAttestation`
```python
{
# Branch in the deposit tree
'proof': ['bytes32', DEPOSIT_CONTRACT_TREE_DEPTH],
# Index in the deposit tree
'index': 'uint64',
# Data
'deposit_data': DepositData,
# Validator indices
'validator_indices': ['uint64'],
# Attestation data
'data': AttestationData,
# Custody bitfield
'custody_bitfield': 'bytes',
# Aggregate signature
'aggregate_signature': 'bytes96',
}
```
##### `DepositData`
```python
{
# Amount in Gwei
'amount': 'uint64',
# Timestamp from deposit contract
'timestamp': 'uint64',
# Deposit input
'deposit_input': DepositInput,
}
```
##### `DepositInput`
#### `DepositInput`
```python
{
@ -423,9 +391,122 @@ The following data structures are defined as [SimpleSerialize (SSZ)](https://git
}
```
#### Voluntary exits
#### `DepositData`
##### `VoluntaryExit`
```python
{
# Amount in Gwei
'amount': 'uint64',
# Timestamp from deposit contract
'timestamp': 'uint64',
# Deposit input
'deposit_input': DepositInput,
}
```
#### `BeaconBlockHeader`
```python
{
'slot': 'uint64',
'previous_block_root': 'bytes32',
'state_root': 'bytes32',
'block_body_root': 'bytes32',
'signature': 'bytes96',
}
```
#### `Validator`
```python
{
# BLS public key
'pubkey': 'bytes48',
# Withdrawal credentials
'withdrawal_credentials': 'bytes32',
# Epoch when validator activated
'activation_epoch': 'uint64',
# Epoch when validator exited
'exit_epoch': 'uint64',
# Epoch when validator is eligible to withdraw
'withdrawable_epoch': 'uint64',
# Did the validator initiate an exit
'initiated_exit': 'bool',
# Was the validator slashed
'slashed': 'bool',
}
```
#### `PendingAttestation`
```python
{
# Attester aggregation bitfield
'aggregation_bitfield': 'bytes',
# Attestation data
'data': AttestationData,
# Custody bitfield
'custody_bitfield': 'bytes',
# Inclusion slot
'inclusion_slot': 'uint64',
}
```
### Beacon transactions
#### `ProposerSlashing`
```python
{
# Proposer index
'proposer_index': 'uint64',
# First block header
'header_1': BeaconBlockHeader,
# Second block header
'header_2': BeaconBlockHeader,
}
```
#### `AttesterSlashing`
```python
{
# First slashable attestation
'slashable_attestation_1': SlashableAttestation,
# Second slashable attestation
'slashable_attestation_2': SlashableAttestation,
}
```
#### `Attestation`
```python
{
# Attester aggregation bitfield
'aggregation_bitfield': 'bytes',
# Attestation data
'data': AttestationData,
# Custody bitfield
'custody_bitfield': 'bytes',
# BLS aggregate signature
'aggregate_signature': 'bytes96',
}
```
#### `Deposit`
```python
{
# Branch in the deposit tree
'proof': ['bytes32', DEPOSIT_CONTRACT_TREE_DEPTH],
# Index in the deposit tree
'index': 'uint64',
# Data
'deposit_data': DepositData,
}
```
#### `VoluntaryExit`
```python
{
@ -438,9 +519,7 @@ The following data structures are defined as [SimpleSerialize (SSZ)](https://git
}
```
#### Transfers
##### `Transfer`
#### `Transfer`
```python
{
@ -461,32 +540,7 @@ The following data structures are defined as [SimpleSerialize (SSZ)](https://git
}
```
### Beacon chain blocks
#### `BeaconBlock`
```python
{
# Header
'slot': 'uint64',
'previous_block_root': 'bytes32',
'state_root': 'bytes32',
'body': BeaconBlockBody,
'signature': 'bytes96',
}
```
#### `BeaconBlockHeader`
```python
{
'slot': 'uint64',
'previous_block_root': 'bytes32',
'state_root': 'bytes32',
'block_body_root': 'bytes32',
'signature': 'bytes96',
}
```
### Beacon blocks
#### `BeaconBlockBody`
@ -503,7 +557,20 @@ The following data structures are defined as [SimpleSerialize (SSZ)](https://git
}
```
### Beacon chain state
#### `BeaconBlock`
```python
{
# Header
'slot': 'uint64',
'previous_block_root': 'bytes32',
'state_root': 'bytes32',
'body': BeaconBlockBody,
'signature': 'bytes96',
}
```
### Beacon state
#### `BeaconState`
@ -552,88 +619,6 @@ The following data structures are defined as [SimpleSerialize (SSZ)](https://git
}
```
#### `Validator`
```python
{
# BLS public key
'pubkey': 'bytes48',
# Withdrawal credentials
'withdrawal_credentials': 'bytes32',
# Epoch when validator activated
'activation_epoch': 'uint64',
# Epoch when validator exited
'exit_epoch': 'uint64',
# Epoch when validator is eligible to withdraw
'withdrawable_epoch': 'uint64',
# Did the validator initiate an exit
'initiated_exit': 'bool',
# Was the validator slashed
'slashed': 'bool',
}
```
#### `Crosslink`
```python
{
# Epoch number
'epoch': 'uint64',
# Shard data since the previous crosslink
'crosslink_data_root': 'bytes32',
}
```
#### `PendingAttestation`
```python
{
# Attester aggregation bitfield
'aggregation_bitfield': 'bytes',
# Attestation data
'data': AttestationData,
# Custody bitfield
'custody_bitfield': 'bytes',
# Inclusion slot
'inclusion_slot': 'uint64',
}
```
#### `Fork`
```python
{
# Previous fork version
'previous_version': 'uint64',
# Current fork version
'current_version': 'uint64',
# Fork epoch number
'epoch': 'uint64',
}
```
#### `Eth1Data`
```python
{
# Root of the deposit tree
'deposit_root': 'bytes32',
# Block hash
'block_hash': 'bytes32',
}
```
#### `Eth1DataVote`
```python
{
# Data being voted for
'eth1_data': Eth1Data,
# Vote count
'vote_count': 'uint64',
}
```
## Custom Types
We define the following Python custom types for type hinting and readability: