-
Notifications
You must be signed in to change notification settings - Fork 409
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ICS 23: Standard accumulator #57
Comments
I would be happy to help out with this / work on this. Feel free to assign me. |
Thanks @liamsi! My thoughts so far:
Arguably key and value shouldn't be separated here, but instead be a tuple, and the accumulator can just verify inclusion of an arbitrary We do need some sort of lexicographic sorting, though, since we need range proofs / exclusion proofs. |
The paper on RSA accumulators here might provide solid primitive definitions. edit: Maybe better is this, page 6. We should include optional |
|
Thanks for the input @cwgoes @mossid! Especially
looks valuable!
Yes, I do not think it is common to separate those. I think that is because not every merkle tree is thought of as a key-value store (e.g. CT logs are more "list/array-like" than "map-like").
Are range proofs an explicit requirement here? Or do we only need exclusion/non-membership proofs? In sparse merkle trees for instance, exclusion proofs are just an inclusion proof, which proves the included leaf or value is empty. In other words, does it make sense to have two functions instead?
|
Let's avoid doing it here then.
No. They can enable certain batching downstream (e.g. in packet verification), so we should include them as an optional function, and the packet verification algorithm can use batch verification if the accumulator for that IBC connection supports it. |
Are you sure that accumulators suffice for light client proofs? I think light client proofs ought to be standardized on vector commitment schemes? Namely, I think light clients desire a map, not a set. (In this sense, something list/array like is a map from integers to values) |
Often that may be useful, but I don't think it needs to be a requirement, since the IBC handler can insert values in a certain known order. Is there a particular verification case you're thinking of? |
There is no order guaranteed on accumulators. For example, accumulator(x_1, x_2) can equal accumulator(x_2, x_1). In fact, this is the case for an RSA accumulator. |
That's right, but the IBC handler can decide to only ever insert in the order (we're assuming correct IBC handler behaviour anyways) |
I'm confused. Is the scenario your proposing that a verifier is given a commitment, and then a proof that |
Yes, because the verifier can assume (does already assume) correctness of the IBC handler on the sending chain, so the accumulator itself doesn't need to provide the ordering guarantee. (although vector commitments could still be more efficient etc.) |
How is |
You could state that, if the IBC handler only ever inserted bytestrings in lexicographically increasing order. We're concerned about specific bytestrings, of course, with e.g. a packet sequence number included in the first part of the value. |
This isn't true, unless you assert that IBC inserts every bytestring in lexicographic order. (There is no bytestring less than a certain bound omitted) This is the reason why: Consider an accumulator of |
Ah sure, bad example. In the case of IBC we can expect every sequence number to be inserted in lexicographical order. |
Cool, glad we sorted that out. I still don't think accumulators suffice.
|
The ordering property does not apply, but we don't need vector commitments to prove inclusion of a particular (key, value) pair, a regular inclusion proof will do that. What case do you mean?
Agreed. (to be clear - I think vector commitments are great and will write a version of the verification algorithm that uses them - I just don't think they should be required) |
There aren't key value pairs in an accumulator. An inclusion proof on an accumulator only checks if a value is in a set, there is no key. |
You can insert a |
A merkle tree is a vector commitment, its not in the set of accumulators that aren't vector commitments! Consider the following accumulator: Let tuples be Accumulators don't have key value pairs, they only have distinct values. I think you want these vector commitment properties onto them (key-binding), hence why I think it ought to actually be vector commitments. |
Yes, but the trusted process (IBC handler) can remove old key-value pairs, so only either You're right that the key exclusion proof doesn't work though. It might be possible to formulate timeout logic without exclusion proofs by proving the existence of a different value at that key (and the handler process guaranteeing that the key will only be written to once) but that seems disadvantageous.
Ok I see now, thanks for the patience. For the exclusion proofs we do indeed need key-binding. |
Define required functions and their properties for the kind of cryptographic accumulator which IBC state inclusion proofs will require. Any accumulator which instantiates these properties (e.g. Merkle tree proofs) could be used with IBC and provide the usual safety guarantees. Different accumulators will have different performance characteristics, proof sizes, verification times, and possibly trusted setup assumptions (e.g. an RSA accumulator).
The text was updated successfully, but these errors were encountered: