Hello guys,
I'm currently investigating how Mina's blockchain sate can be verified for validity off-chain, or at least without an active connection to the internet or RCP endpoint.
That proof can come in various forms, such as:
-
Proof that a particular transaction was submitted and acceptedon chain, what time/block that transaction was performed and, and what are the public outputs/account updates.
-
A proof generated by a smart contract that a certain action has been performed, and included on-chain
-
A proof of an included transaction in the history (e.g. past included blocks).
Ideally, it would be sufficient for the verifier to have knowledge of a historical state/snapshot at a certain time in the past, and be able to use that knowledge to assert the validity of future transactions/state changes.
All of this logic could be isolated in the context of a particular smart contract, and have the verification key of that smart contract assumed known knowledge. In this sense, the Mina blockchain would be used as a trusted source for application code storage, and it's associated functions.
One way of doing this would be to perhaps submit a transaction, wait for X blocks of confirmation, and then provide a historical proof of includsion of a previous transaction.
For a practial way, you can think of a "proof of deposit". For example, "here is a nullifer that allows you to withdraw 10 MINA from a particular smart contract once a proof with a particular ID is submitted into this smart contract".
How such a feat can be achieved in practice, and what limitations/hard requirements should be kept in mind?
Thank you in advance.