# Proof of Existence

Name | Value |
---|---|

Repository | https://github.com/anagolay/anagolay-chain/tree/main/pallets/poe |

Pallet | Yes |

# Proof of Existence

The proof is sufficient evidence or a sufficient argument for the truth of a proposition.

## Overviewā

Is a structured final output of the Workflow. Each proof is different in a few aspects and similar in others.

Proof params is the collection of the operation outputs mapped via operation name. A `proofId`

will always be different for different data, but not the proof params. That's because the proof params are controlled completely by the rule definition and its operations.

## Invalidations / Replacing / Updatesā

We can invalidate the proof by generating a new one and setting the `prev`

field to the previous `proofId`

we want to invalidate. In order to get the last proof which is also the valid one we must look for the proof that is not linked to any other proof, in other words where `current.proofId`

does not exist in the `anyProof.prev`

field.

Generic structure:

`// Generic Proof`

interface Proof {

id: GenericId;

data: {

workflowId: GenericId;

prev: GenericId;

creator: CreatorId;

forWhat: ForWhat;

params: string[];

context: VerificationContext;

};

}

## Integration with verification palletā

The verification pallet is intended to be used by the substrate community; however, the statements and poe pallets are modified to integrate these previous verification steps and to allow the holder of a successful verification request to produce a Statement of ownership out of the verification result.

At the moment the verification key is produced, a `PoeVerificationKeyGenerator`

is called. This is loosely coupled with the proofs pallet to allow the creation of proofs associated to the `VerificationContext`

.

Infact the proof contains a `VerificationContext`

that tells how the proof was generated; in case it was generated off-chain and no context is verifiable, the `context`

field contains the value `Unbounded`

.

**Proof generation**

`PoeVerificationKeyGenerator`

is implementing verification pallet `VerificationKeyGenerator`

and uses an Anagolay workflow to produce a CID out of the identifier given as input. Then, it stores a Proof containing the Verification key in `ProofByProofIdAndAccountId`

and `ProofIdsByVerificationContext`

.

`ProofIdsByVerificationContext`

storage indexes `Vec<ProofId>`

values by `VerificationContext`

keys: this can be performantly queried. The values are collections coherently with the fact that an Anagolay Workflow can generate multiple proofs for a subject.