Merge pull request #617 from ethereum/hwwhww/fix_compute_commitment

Fix `compute_commitment`
This commit is contained in:
Danny Ryan 2019-02-13 11:54:03 -07:00 committed by GitHub
commit 83b67b6097
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 13 additions and 4 deletions

View File

@ -187,14 +187,15 @@ We define two helpers:
```python
def pad_to_power_of_2(values: List[bytes]) -> List[bytes]:
zero_shard_block = b'\x00' * SHARD_BLOCK_SIZE
while not is_power_of_two(len(values)):
values = values + [SHARD_BLOCK_SIZE]
values = values + [zero_shard_block]
return values
```
```python
def merkle_root_of_bytes(data: bytes) -> bytes:
return merkle_root([data[i:i+32] for i in range(0, len(data), 32)])
return merkle_root([data[i:i + 32] for i in range(0, len(data), 32)])
```
We define the function for computing the commitment as follows:
@ -202,8 +203,16 @@ We define the function for computing the commitment as follows:
```python
def compute_commitment(headers: List[ShardBlock], bodies: List[bytes]) -> Bytes32:
return hash(
merkle_root(pad_to_power_of_2([merkle_root_of_bytes(zpad(serialize(h), SHARD_BLOCK_SIZE)) for h in headers])),
merkle_root(pad_to_power_of_2([merkle_root_of_bytes(h) for h in bodies]))
merkle_root(
pad_to_power_of_2([
merkle_root_of_bytes(zpad(serialize(h), SHARD_BLOCK_SIZE)) for h in headers
])
) +
merkle_root(
pad_to_power_of_2([
merkle_root_of_bytes(h) for h in bodies
])
)
)
```