module arch.system.state.resource_machine.data_structures.compliance_unit.compliance_proof;
Compliance proof¶
Compliance proofs are created by ComplianceProvingSystem and computed over compliance units. Compliance proofs ensure that the provided state transition complies with the resource machine definitions.
Compliance inputs¶
Instance¶
| Name | Type | Description |
|---|---|---|
consumed |
List (nf: Nullifier, root: CMTree.Value, logicVKOuter: LogicVKOuterHash) |
Each entry corresponds to a consumed resource and includes a hash of the resource's logicRef component |
created |
List (cm: Commitment, logicVKOuter: LogicVKOuterHash) |
Each entry corresponds to a created resource |
unitDelta |
DeltaHash |
Witness¶
-
for consumed resources:
1. resource object
r2.
nullifierKey3.
CMtreepath to the consumed resource commitment4. pre-image of
logicVKOuter5.
deltaExtraInputused to compute resource delta -
for created resources:
-
resource object
r -
pre-image of
logicVKOuter -
deltaExtraInputused to compute resource delta
-
Note
Instance and witness elements are expected to go in the same order: the first element of the instance corresponds to the first (4 for consumed and 2 for created) elements of the witness and so on.
Compliance constraints¶
Each resource machine compliance proof must check the following:
-
Merkle path validity:
CMTree::Verify(r.commitment(), path, root) = Truefor each resource associated with a nullifier from theconsumed. For ephemeral resources a "fake" relation is checked. -
For each consumed resource
r:- Nullifier integrity:
r.nullifier(nullifierKey) is in consumed - Logic integrity:
logicVKOuter = logicVKOuterHash(r.logicRef, ...)
- Nullifier integrity:
-
For each created resource
r:- Commitment integrity:
r.commitment() is in created - Logic integrity:
logicVKOuter = logicVKOuterHash(r.logicRef, ...)
- Commitment integrity:
-
Delta integrity:
unitDelta = sum(r.delta(deltaExtraInput(r)) for r in consumed) - sum(r.delta(deltaExtraInput(r)) for r in created)wheredeltaExtraInput(r)returnsdeltaExtraInputassociated with resourcer
Note
Kind integrity is checked implicitly in delta integrity
Note
[2.3, 3.2]: Combined with checking the logic proofs, logic integrity checks allow to ensure that the logics associated with the resources are satisfied
Note
[2.1, 3.1]: To ensure correct binding between the instance and the witness, resource tags have to be recomputed from the witness and compared to what is provided in the instance.