Renames:
1. `Deposit` log -> `DepositEvent` log 2. `get_deposit_root` -> `get_hash_tree_root`
This commit is contained in:
parent
56caa48314
commit
12dff5349d
File diff suppressed because one or more lines are too long
|
@ -6,7 +6,7 @@ WITHDRAWAL_CREDENTIALS_LENGTH: constant(uint256) = 32 # bytes
|
||||||
AMOUNT_LENGTH: constant(uint256) = 8 # bytes
|
AMOUNT_LENGTH: constant(uint256) = 8 # bytes
|
||||||
SIGNATURE_LENGTH: constant(uint256) = 96 # bytes
|
SIGNATURE_LENGTH: constant(uint256) = 96 # bytes
|
||||||
|
|
||||||
Deposit: event({
|
DepositEvent: event({
|
||||||
pubkey: bytes[48],
|
pubkey: bytes[48],
|
||||||
withdrawal_credentials: bytes[32],
|
withdrawal_credentials: bytes[32],
|
||||||
amount: bytes[8],
|
amount: bytes[8],
|
||||||
|
@ -42,7 +42,7 @@ def to_little_endian_64(value: uint256) -> bytes[8]:
|
||||||
|
|
||||||
@public
|
@public
|
||||||
@constant
|
@constant
|
||||||
def get_deposit_root() -> bytes32:
|
def get_hash_tree_root() -> bytes32:
|
||||||
zero_bytes32: bytes32 = 0x0000000000000000000000000000000000000000000000000000000000000000
|
zero_bytes32: bytes32 = 0x0000000000000000000000000000000000000000000000000000000000000000
|
||||||
node: bytes32 = zero_bytes32
|
node: bytes32 = zero_bytes32
|
||||||
size: uint256 = self.deposit_count
|
size: uint256 = self.deposit_count
|
||||||
|
@ -76,11 +76,11 @@ def deposit(pubkey: bytes[PUBKEY_LENGTH],
|
||||||
assert len(withdrawal_credentials) == WITHDRAWAL_CREDENTIALS_LENGTH
|
assert len(withdrawal_credentials) == WITHDRAWAL_CREDENTIALS_LENGTH
|
||||||
assert len(signature) == SIGNATURE_LENGTH
|
assert len(signature) == SIGNATURE_LENGTH
|
||||||
|
|
||||||
# Emit `Deposit` log
|
# Emit `DepositEvent` log
|
||||||
amount: bytes[8] = self.to_little_endian_64(deposit_amount)
|
amount: bytes[8] = self.to_little_endian_64(deposit_amount)
|
||||||
log.Deposit(pubkey, withdrawal_credentials, amount, signature, self.to_little_endian_64(self.deposit_count))
|
log.DepositEvent(pubkey, withdrawal_credentials, amount, signature, self.to_little_endian_64(self.deposit_count))
|
||||||
|
|
||||||
# Compute `DepositData` root
|
# Compute `DepositData` hash tree root
|
||||||
zero_bytes32: bytes32 = 0x0000000000000000000000000000000000000000000000000000000000000000
|
zero_bytes32: bytes32 = 0x0000000000000000000000000000000000000000000000000000000000000000
|
||||||
pubkey_root: bytes32 = sha256(concat(pubkey, slice(zero_bytes32, start=0, len=64 - PUBKEY_LENGTH)))
|
pubkey_root: bytes32 = sha256(concat(pubkey, slice(zero_bytes32, start=0, len=64 - PUBKEY_LENGTH)))
|
||||||
signature_root: bytes32 = sha256(concat(
|
signature_root: bytes32 = sha256(concat(
|
||||||
|
@ -92,7 +92,7 @@ def deposit(pubkey: bytes[PUBKEY_LENGTH],
|
||||||
sha256(concat(amount, slice(zero_bytes32, start=0, len=32 - AMOUNT_LENGTH), signature_root)),
|
sha256(concat(amount, slice(zero_bytes32, start=0, len=32 - AMOUNT_LENGTH), signature_root)),
|
||||||
))
|
))
|
||||||
|
|
||||||
# Add `DepositData` root to Merkle tree (update a single `branch` node)
|
# Add `DepositData` hash tree root to Merkle tree (update a single `branch` node)
|
||||||
self.deposit_count += 1
|
self.deposit_count += 1
|
||||||
size: uint256 = self.deposit_count
|
size: uint256 = self.deposit_count
|
||||||
for height in range(DEPOSIT_CONTRACT_TREE_DEPTH):
|
for height in range(DEPOSIT_CONTRACT_TREE_DEPTH):
|
||||||
|
|
|
@ -96,8 +96,8 @@ def test_deposit_inputs(registration_contract,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def test_deposit_log(registration_contract, a0, w3, deposit_input):
|
def test_deposit_event_log(registration_contract, a0, w3, deposit_input):
|
||||||
log_filter = registration_contract.events.Deposit.createFilter(
|
log_filter = registration_contract.events.DepositEvent.createFilter(
|
||||||
fromBlock='latest',
|
fromBlock='latest',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -119,7 +119,7 @@ def test_deposit_log(registration_contract, a0, w3, deposit_input):
|
||||||
|
|
||||||
|
|
||||||
def test_deposit_tree(registration_contract, w3, assert_tx_failed, deposit_input):
|
def test_deposit_tree(registration_contract, w3, assert_tx_failed, deposit_input):
|
||||||
log_filter = registration_contract.events.Deposit.createFilter(
|
log_filter = registration_contract.events.DepositEvent.createFilter(
|
||||||
fromBlock='latest',
|
fromBlock='latest',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -146,4 +146,4 @@ def test_deposit_tree(registration_contract, w3, assert_tx_failed, deposit_input
|
||||||
))
|
))
|
||||||
|
|
||||||
root = hash_tree_root(List[DepositData, 2**32](*deposit_data_list))
|
root = hash_tree_root(List[DepositData, 2**32](*deposit_data_list))
|
||||||
assert root == registration_contract.functions.get_deposit_root().call()
|
assert root == registration_contract.functions.get_hash_tree_root().call()
|
||||||
|
|
|
@ -438,7 +438,7 @@ class Attestation(Container):
|
||||||
|
|
||||||
```python
|
```python
|
||||||
class Deposit(Container):
|
class Deposit(Container):
|
||||||
proof: Vector[Hash, DEPOSIT_CONTRACT_TREE_DEPTH + 1] # Merkle path to deposit root
|
proof: Vector[Hash, DEPOSIT_CONTRACT_TREE_DEPTH + 1] # Merkle path to SSZ deposit data list hash tree root
|
||||||
data: DepositData
|
data: DepositData
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
- [`deposit` function](#deposit-function)
|
- [`deposit` function](#deposit-function)
|
||||||
- [Deposit amount](#deposit-amount)
|
- [Deposit amount](#deposit-amount)
|
||||||
- [Withdrawal credentials](#withdrawal-credentials)
|
- [Withdrawal credentials](#withdrawal-credentials)
|
||||||
- [`Deposit` log](#deposit-log)
|
- [`DepositEvent` log](#depositevent-log)
|
||||||
- [Vyper code](#vyper-code)
|
- [Vyper code](#vyper-code)
|
||||||
|
|
||||||
<!-- /TOC -->
|
<!-- /TOC -->
|
||||||
|
@ -53,9 +53,9 @@ One of the `DepositData` fields is `withdrawal_credentials`. It is a commitment
|
||||||
|
|
||||||
The private key corresponding to `withdrawal_pubkey` will be required to initiate a withdrawal. It can be stored separately until a withdrawal is required, e.g. in cold storage.
|
The private key corresponding to `withdrawal_pubkey` will be required to initiate a withdrawal. It can be stored separately until a withdrawal is required, e.g. in cold storage.
|
||||||
|
|
||||||
#### `Deposit` log
|
#### `DepositEvent` log
|
||||||
|
|
||||||
Every Ethereum 1.0 deposit emits a `Deposit` log for consumption by the beacon chain. The deposit contract does little validation, pushing most of the validator onboarding logic to the beacon chain. In particular, the proof of possession (a BLS12-381 signature) is not verified by the deposit contract.
|
Every Ethereum 1.0 deposit emits a `DepositEvent` log for consumption by the beacon chain. The deposit contract does little validation, pushing most of the validator onboarding logic to the beacon chain. In particular, the proof of possession (a BLS12-381 signature) is not verified by the deposit contract.
|
||||||
|
|
||||||
## Vyper code
|
## Vyper code
|
||||||
|
|
||||||
|
|
|
@ -221,7 +221,7 @@ epoch_signature = bls_sign(
|
||||||
|
|
||||||
##### Eth1 Data
|
##### Eth1 Data
|
||||||
|
|
||||||
The `block.eth1_data` field is for block proposers to vote on recent Eth 1.0 data. This recent data contains an Eth 1.0 block hash as well as the associated deposit root (as calculated by the `get_deposit_root()` method of the deposit contract) and deposit count after execution of the corresponding Eth 1.0 block. If over half of the block proposers in the current Eth 1.0 voting period vote for the same `eth1_data` then `state.eth1_data` updates at the end of the voting period. Each deposit in `block.body.deposits` must verify against `state.eth1_data.eth1_deposit_root`.
|
The `block.eth1_data` field is for block proposers to vote on recent Eth 1.0 data. This recent data contains an Eth 1.0 block hash as well as the associated deposit root (as calculated by the `get_hash_tree_root()` method of the deposit contract) and deposit count after execution of the corresponding Eth 1.0 block. If over half of the block proposers in the current Eth 1.0 voting period vote for the same `eth1_data` then `state.eth1_data` updates at the end of the voting period. Each deposit in `block.body.deposits` must verify against `state.eth1_data.eth1_deposit_root`.
|
||||||
|
|
||||||
Let `get_eth1_data(distance: int) -> Eth1Data` be the (subjective) function that returns the Eth 1.0 data at distance `distance` relative to the Eth 1.0 head at the start of the current Eth 1.0 voting period. Let `previous_eth1_distance` be the distance relative to the Eth 1.0 block corresponding to `state.eth1_data.block_hash` at the start of the current Eth 1.0 voting period. An honest block proposer sets `block.eth1_data = get_eth1_vote(state, previous_eth1_distance)` where:
|
Let `get_eth1_data(distance: int) -> Eth1Data` be the (subjective) function that returns the Eth 1.0 data at distance `distance` relative to the Eth 1.0 head at the start of the current Eth 1.0 voting period. Let `previous_eth1_distance` be the distance relative to the Eth 1.0 block corresponding to `state.eth1_data.block_hash` at the start of the current Eth 1.0 voting period. An honest block proposer sets `block.eth1_data = get_eth1_vote(state, previous_eth1_distance)` where:
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue