Fix `compute_commitment`

1. Use `+` to concatenate the merkle roots in `hash` function.
2. Fix `pad_to_power_of_2`: padding with `[b'\x00' * SHARD_BLOCK_SIZE]`,
not `[SHARD_BLOCK_SIZE]`.
This commit is contained in:
Hsiao-Wei Wang 2019-02-14 00:30:00 +08:00
parent 3d5aa352be
commit f7320ec25b
No known key found for this signature in database
GPG Key ID: 95B070122902DEA4
1 changed files with 13 additions and 4 deletions

View File

@ -187,14 +187,15 @@ We define two helpers:
```python ```python
def pad_to_power_of_2(values: List[bytes]) -> List[bytes]: 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)): while not is_power_of_two(len(values)):
values = values + [SHARD_BLOCK_SIZE] values = values + [zero_shard_block]
return values return values
``` ```
```python ```python
def merkle_root_of_bytes(data: bytes) -> bytes: 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: 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 ```python
def compute_commitment(headers: List[ShardBlock], bodies: List[bytes]) -> Bytes32: def compute_commitment(headers: List[ShardBlock], bodies: List[bytes]) -> Bytes32:
return hash( 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(
merkle_root(pad_to_power_of_2([merkle_root_of_bytes(h) for h in bodies])) 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
])
)
) )
``` ```