Merge pull request #924 from ethereum/JustinDrake-patch-11
Remove serialization from consensus
This commit is contained in:
commit
0079c635b6
|
@ -1276,7 +1276,7 @@ The initial deployment phases of Ethereum 2.0 are implemented without consensus
|
||||||
|
|
||||||
### Deposit arguments
|
### Deposit arguments
|
||||||
|
|
||||||
The deposit contract has a single `deposit` function which takes as argument a SimpleSerialize'd `DepositData`.
|
The deposit contract has a single `deposit` function which takes as argument the `DepositData` elements.
|
||||||
|
|
||||||
### Withdrawal credentials
|
### Withdrawal credentials
|
||||||
|
|
||||||
|
@ -1311,7 +1311,7 @@ For convenience, we provide the interface to the contract here:
|
||||||
|
|
||||||
* `__init__()`: initializes the contract
|
* `__init__()`: initializes the contract
|
||||||
* `get_deposit_root() -> bytes32`: returns the current root of the deposit tree
|
* `get_deposit_root() -> bytes32`: returns the current root of the deposit tree
|
||||||
* `deposit(bytes[512])`: adds a deposit instance to the deposit tree, incorporating the input argument and the value transferred in the given call. Note: the amount of value transferred *must* be within `MIN_DEPOSIT_AMOUNT` and `MAX_DEPOSIT_AMOUNT`, inclusive. Each of these constants are specified in units of Gwei.
|
* `deposit(pubkey: bytes[48], withdrawal_credentials: bytes[32], signature: bytes[96])`: adds a deposit instance to the deposit tree, incorporating the input arguments and the value transferred in the given call. Note: the amount of value transferred *must* be within `MIN_DEPOSIT_AMOUNT` and `MAX_DEPOSIT_AMOUNT`, inclusive. Each of these constants are specified in units of Gwei.
|
||||||
|
|
||||||
## On genesis
|
## On genesis
|
||||||
|
|
||||||
|
@ -2013,7 +2013,7 @@ def process_deposit(state: BeaconState, deposit: Deposit) -> None:
|
||||||
|
|
||||||
# Verify the Merkle branch
|
# Verify the Merkle branch
|
||||||
merkle_branch_is_valid = verify_merkle_branch(
|
merkle_branch_is_valid = verify_merkle_branch(
|
||||||
leaf=hash(serialize(deposit.data)), # 48 + 32 + 8 + 96 = 184 bytes serialization
|
leaf=hash_tree_root(deposit.data),
|
||||||
proof=deposit.proof,
|
proof=deposit.proof,
|
||||||
depth=DEPOSIT_CONTRACT_TREE_DEPTH,
|
depth=DEPOSIT_CONTRACT_TREE_DEPTH,
|
||||||
index=deposit.index,
|
index=deposit.index,
|
||||||
|
|
|
@ -101,11 +101,10 @@ In phase 0, all incoming validator deposits originate from the Ethereum 1.0 PoW
|
||||||
To submit a deposit:
|
To submit a deposit:
|
||||||
|
|
||||||
* Pack the validator's [initialization parameters](#initialization) into `deposit_data`, a [`DepositData`](../core/0_beacon-chain.md#depositdata) SSZ object.
|
* Pack the validator's [initialization parameters](#initialization) into `deposit_data`, a [`DepositData`](../core/0_beacon-chain.md#depositdata) SSZ object.
|
||||||
* Let `proof_of_possession` be the result of `bls_sign` of the `signing_root(deposit_data)` with `domain=DOMAIN_DEPOSIT`.
|
|
||||||
* Set `deposit_data.proof_of_possession = proof_of_possession`.
|
|
||||||
* Let `amount` be the amount in Gwei to be deposited by the validator where `MIN_DEPOSIT_AMOUNT <= amount <= MAX_DEPOSIT_AMOUNT`.
|
* Let `amount` be the amount in Gwei to be deposited by the validator where `MIN_DEPOSIT_AMOUNT <= amount <= MAX_DEPOSIT_AMOUNT`.
|
||||||
* Set `deposit_data.amount = amount`.
|
* Set `deposit_data.amount = amount`.
|
||||||
* Send a transaction on the Ethereum 1.0 chain to `DEPOSIT_CONTRACT_ADDRESS` executing `deposit(deposit_input: bytes[512])` along with `serialize(deposit_data)` as the singular `bytes` input along with a deposit of `amount` Gwei.
|
* Let `signature` be the result of `bls_sign` of the `signing_root(deposit_data)` with `domain=DOMAIN_DEPOSIT`.
|
||||||
|
* Send a transaction on the Ethereum 1.0 chain to `DEPOSIT_CONTRACT_ADDRESS` executing `def deposit(pubkey: bytes[48], withdrawal_credentials: bytes[32], signature: bytes[96])` along with a deposit of `amount` Gwei.
|
||||||
|
|
||||||
_Note_: Deposits made for the same `pubkey` are treated as for the same validator. A singular `Validator` will be added to `state.validator_registry` with each additional deposit amount added to the validator's balance. A validator can only be activated when total deposits for the validator pubkey meet or exceed `MAX_DEPOSIT_AMOUNT`.
|
_Note_: Deposits made for the same `pubkey` are treated as for the same validator. A singular `Validator` will be added to `state.validator_registry` with each additional deposit amount added to the validator's balance. A validator can only be activated when total deposits for the validator pubkey meet or exceed `MAX_DEPOSIT_AMOUNT`.
|
||||||
|
|
||||||
|
|
|
@ -79,7 +79,7 @@ def create_mock_genesis_validator_deposits(num_validators, deposit_data_leaves=N
|
||||||
amount=spec.MAX_DEPOSIT_AMOUNT,
|
amount=spec.MAX_DEPOSIT_AMOUNT,
|
||||||
signature=signature,
|
signature=signature,
|
||||||
)
|
)
|
||||||
item = hash(deposit_data.serialize())
|
item = deposit_data.hash_tree_root()
|
||||||
deposit_data_leaves.append(item)
|
deposit_data_leaves.append(item)
|
||||||
tree = calc_merkle_tree_from_leaves(tuple(deposit_data_leaves))
|
tree = calc_merkle_tree_from_leaves(tuple(deposit_data_leaves))
|
||||||
root = get_merkle_root((tuple(deposit_data_leaves)))
|
root = get_merkle_root((tuple(deposit_data_leaves)))
|
||||||
|
@ -204,7 +204,7 @@ def build_deposit(state,
|
||||||
amount):
|
amount):
|
||||||
deposit_data = build_deposit_data(state, pubkey, privkey, amount)
|
deposit_data = build_deposit_data(state, pubkey, privkey, amount)
|
||||||
|
|
||||||
item = hash(deposit_data.serialize())
|
item = deposit_data.hash_tree_root()
|
||||||
index = len(deposit_data_leaves)
|
index = len(deposit_data_leaves)
|
||||||
deposit_data_leaves.append(item)
|
deposit_data_leaves.append(item)
|
||||||
tree = calc_merkle_tree_from_leaves(tuple(deposit_data_leaves))
|
tree = calc_merkle_tree_from_leaves(tuple(deposit_data_leaves))
|
||||||
|
|
|
@ -235,7 +235,7 @@ def test_deposit_in_block(state):
|
||||||
privkey = privkeys[index]
|
privkey = privkeys[index]
|
||||||
deposit_data = build_deposit_data(pre_state, pubkey, privkey, spec.MAX_DEPOSIT_AMOUNT)
|
deposit_data = build_deposit_data(pre_state, pubkey, privkey, spec.MAX_DEPOSIT_AMOUNT)
|
||||||
|
|
||||||
item = hash(deposit_data.serialize())
|
item = deposit_data.hash_tree_root()
|
||||||
test_deposit_data_leaves.append(item)
|
test_deposit_data_leaves.append(item)
|
||||||
tree = calc_merkle_tree_from_leaves(tuple(test_deposit_data_leaves))
|
tree = calc_merkle_tree_from_leaves(tuple(test_deposit_data_leaves))
|
||||||
root = get_merkle_root((tuple(test_deposit_data_leaves)))
|
root = get_merkle_root((tuple(test_deposit_data_leaves)))
|
||||||
|
@ -274,7 +274,7 @@ def test_deposit_top_up(state):
|
||||||
deposit_data = build_deposit_data(pre_state, pubkey, privkey, amount)
|
deposit_data = build_deposit_data(pre_state, pubkey, privkey, amount)
|
||||||
|
|
||||||
merkle_index = len(test_deposit_data_leaves)
|
merkle_index = len(test_deposit_data_leaves)
|
||||||
item = hash(deposit_data.serialize())
|
item = deposit_data.hash_tree_root()
|
||||||
test_deposit_data_leaves.append(item)
|
test_deposit_data_leaves.append(item)
|
||||||
tree = calc_merkle_tree_from_leaves(tuple(test_deposit_data_leaves))
|
tree = calc_merkle_tree_from_leaves(tuple(test_deposit_data_leaves))
|
||||||
root = get_merkle_root((tuple(test_deposit_data_leaves)))
|
root = get_merkle_root((tuple(test_deposit_data_leaves)))
|
||||||
|
|
Loading…
Reference in New Issue