Skip to main content

TIP-14 / Merkle Proofs

Status: Placeholder

There is currently no way to proof that an archive is actually stored in the current state of the DART. A new type of request could be added to the system which would allow clients to ask for a merkle-proof that the dartindex is actually located in the DART with the bullseye. The proof could be made with a simple merkle-path to the root from the archive which would give actual proof of membership or non-membership. The algorithm for calculating a merkle-proof / path is O(log n), which is acceptable for a node to do. Though is should be noted that it is not a "cheap" request to perform, and would be great for the mirror-nodes to do.

Example of merkle proof request:

{
"$@": "HiRPC",
"$msg": {
"method": "dartProof",
"params": {
"dart_indices": [
[
"*",
"@4c2LxGMUI7o7AnNQfKxgAEdjwizVRvdtV3j2ItiBwQM="
]
]
}
},
}

It would make sense to keep the same structure as for the other requests such as dartRead etc though there should be a very well-defined limit as to how many archives can be requested proofs on.

The response would need to include all branches going up to the bullseye from the archive. A minimum proof of an archive in an empty rim 3. would therefore require (1 + 256) hashes. It should also include the epoch in which the proof was created in order for validators of the proof to verify that the epoch archive matches the same eye.