[TASK] Add method for querying a relayer's merkle tree for a merkle path proof
Overview
In an ideal world where a relayer can be trusted (wink wink SGX), it would be a huge performance improvement to be able to get a user's merkle path for a record/note commitment from the node storing all the leaves. This would eliminate the need for the client to download and cache all leaves locally, since they can just query this relayer for their proofs.
Description
Extend the leaf caching relayer with an API that fetches the Merkle path for a given leaf / set of leaves.
Acceptance Criteria
- The API should have a
get_merkle_pathmethod which takes a leaf (or set of leaves) and returns the Merkle path for the leaf(s). - The method should return an error if the leaf is not present in the Merkle tree.
- Implement tests to ensure that the
get_merkle_pathfunction works as expected, returning the correct Merkle path for existing leaves and returning an error for non-existing leaves.
The eventual goal is to run part of this inside SGX. We can also consider adding a method for doing the entire proof generation in the relayer as well, which we will also only consider in a trusted environment like SGX.