mina_tree/scan_state/transaction_logic/zkapp_command/
valid.rs

1use mina_curves::pasta::Fp;
2
3use super::{
4    verifiable::{self, create},
5    AccountId, TransactionStatus, VerificationKeyWire,
6};
7
8#[derive(Clone, Debug, PartialEq)]
9pub struct ZkAppCommand {
10    pub zkapp_command: super::ZkAppCommand,
11}
12
13impl ZkAppCommand {
14    pub fn forget(self) -> super::ZkAppCommand {
15        self.zkapp_command
16    }
17    pub fn forget_ref(&self) -> &super::ZkAppCommand {
18        &self.zkapp_command
19    }
20}
21
22/// <https://github.com/MinaProtocol/mina/blob/2ff0292b637684ce0372e7b8e23ec85404dc5091/src/lib/mina_base/zkapp_command.ml#L1499>
23pub fn of_verifiable(cmd: verifiable::ZkAppCommand) -> ZkAppCommand {
24    ZkAppCommand {
25        zkapp_command: super::ZkAppCommand::of_verifiable(cmd),
26    }
27}
28
29/// <https://github.com/MinaProtocol/mina/blob/2ff0292b637684ce0372e7b8e23ec85404dc5091/src/lib/mina_base/zkapp_command.ml#L1507>
30pub fn to_valid(
31    zkapp_command: super::ZkAppCommand,
32    status: &TransactionStatus,
33    find_vk: impl Fn(Fp, &AccountId) -> Result<VerificationKeyWire, String>,
34) -> Result<ZkAppCommand, String> {
35    create(&zkapp_command, status.is_failed(), find_vk).map(of_verifiable)
36}