Skip to main content

Overview

The proof aggregation engine is a way to define different aggregation contexts that could be sent to different chains. Moreover, this engine provides a way to make profitable generating these aggregations for any user of the chain

The base concept defined by the engine is Domain. A Domain has its own identification number id and some properties like:

  • The aggregation size: the maximum number of proofs that are contained in any aggregation generated by this domain. A smaller size means a lower price to verify the statement in the destination chain and, hopefully, a more frequent publication for the aggregations; on the other side a smaller size also means a higher bridging cost because it will be amortized by fewer proofs in the same attestation.
  • Publish queue size: how many aggregations can stay on hold till somebody will publish them; when the queue is complete nobody can publish on this queue till at least one aggregation is published. A higher value means that you are reducing the probabilities that your valid proof will be discarded by this domain, on the other side a higher value means that the domain owner should hold more money to take the domain live and cover the storage costs.

The Domain owner should bind enough funds to cover the storage cost of his domain: the founds will be released when the owner removes the domain. The total amount of funds held by the chain to cover the storage use is proportional to both aggregation size AA and publish queue size QQ.

Hold=2.64+0.1StorageBytes=2.64+0.1(62+56A+22Q+56AQ)Hold = 2.64 + 0.1 \cdot StorageBytes = 2.64 + 0.1 \cdot (62 + 56 \cdot A + 22 \cdot Q + 56 \cdot A \cdot Q)

Where 2.642.64 is the base deposit and the rest depends on used storage size.

The other important concept in this engine is the Permissionless publication: anyone can publish an aggregation in any domain and the publisher will be rewarded by the accounts whose proof is part of the aggregation.

Finally, is important to know the published aggregations have a limited lifetime: a published aggregation remains in published state just for the block where it was published: who computes the ownership proof needs to do it by indicating exactly the block where the NewAggregationReceipt event was emitted.