Properties vs Primitives
This short post aims to address the confusion about the flavours of RM implementations.
Taxonomy
The ARM report aims to describe the common Anoma Resource Machine interface and some guidelines for instantiating it. The ARM report is a mathematical abstraction [wannabe] designed to be correct while achieving the goal of interoperability between different RM instantiations all of which operate in resource model (defined in the same document).
The ARM sections of the Anoma spec are based on the report but written for the engineers who:
- implement RM instantiations
- write applications compatible with the ARM
The difference between the two documents comes from the difference in the goals to achieve. Mathematically speaking: different goals + different audiences + same concepts = different expressions.
An ARM instantiation is an implementation of the resource machine interface with specific primitives used to instantiate it.
ARM Species
Different ARM instantiations differ in the primitives used, and the choice of primitives defines the properties the instantiation has. For example, a resource machine that uses succinct proving systems have the property of succinctness.
Some of the possible properties (some overlapping):
- succinctness
- data privacy
- function privacy
- flexible information flow control (think zcash-style key hierarchy)
- post-quantum security
- updateability (of proofs)
For many of the properties, the ability to achieve them implies the ability to achieve weaker properties as well: for example, a data-and-function-private RM can also produce transparent proofs.
So when we speak about a transparent resource machine, such an instantiation can only produce transparent proofs (because you can’t get less privacy than no privacy). A shielded resource machine can produce both.
Downsides of property-based language
- The properties from the list above are not universal - different information sources define them differently. Does a succinct resource machine produce succinct logic proofs or are all of the proofs succinct?
- The same resource machine can have many of the properties at once. Is Taiga succinct or data private? (Both). Does it mean every instantiation has to carry all of the properties in the name? What would be a comprehensive properties list?
- These properties do not uniquely define an instantiation. There may be multiple resource machine instantiations with the same properties. What happens if we swap Poseidon for Rescue?
Primitive-based ARM deifinition
For all of the reasons above, it makes more sense to specify instantiations by the primitives that are used to instantiate them. The ARM instantiation that instantiates RL and compliance proving system with Cairo is capable of producing both shielded and transparent proofs. In that sense, the property of being shielded or transparent is more relevant to the proofs/transactions, while the resource machine instantiation used to produce those can be the same.