diff --git a/specs/light_client/merkle_proofs.md b/specs/light_client/merkle_proofs.md index 311a4aa5c..2e92488cb 100644 --- a/specs/light_client/merkle_proofs.md +++ b/specs/light_client/merkle_proofs.md @@ -158,26 +158,32 @@ def verify_multi_proof(root, indices, leaves, proof): We define: -#### `MerklePartialLeaf` - -```python -{ - "path": ["uint64"], - "value": "bytes32" -} -``` - #### `MerklePartial` ```python { "root": "bytes32", - "values": [MerklePartialLeaf], + "indices": ["uint64"], + "values": ["bytes32"], "proof": ["bytes32"] } ``` +#### `merkle_partial_from_paths` + +```python +def merkle_partial_from_paths(obj, paths): + indices = set() + for path in paths: + indices = indices.union(get_generalized_indices(obj, path)) + return MerklePartial( + root=hash_tree_root(obj), + indices=indices, + values= mk_multi_proof + ) +``` + #### Proofs for execution We define `MerklePartial(f, arg1, arg2..., focus=0)` as being a `MerklePartial` object wrapping a Merkle multiproof of the set of nodes in the hash tree of the SSZ object `arg[focus]` that is needed to authenticate the parts of the object needed to compute `f(arg1, arg2...)`.