Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
123 changes: 65 additions & 58 deletions ledger/src/account/account.rs
Original file line number Diff line number Diff line change
Expand Up @@ -392,7 +392,7 @@ impl ToFieldElements<Fp> for ProofVerified {
pub struct VerificationKey {
pub max_proofs_verified: ProofVerified,
pub actual_wrap_domain_size: ProofVerified,
pub wrap_index: PlonkVerificationKeyEvals<Fp>,
pub wrap_index: Box<PlonkVerificationKeyEvals<Fp>>,
// `wrap_vk` is not used for hash inputs
pub wrap_vk: Option<()>,
}
Expand All @@ -415,20 +415,21 @@ impl ToFieldElements<Fp> for VerificationKey {
let Self {
max_proofs_verified,
actual_wrap_domain_size,
wrap_index:
PlonkVerificationKeyEvals {
sigma,
coefficients,
generic,
psm,
complete_add,
mul,
emul,
endomul_scalar,
},
wrap_index,
wrap_vk: _,
} = self;

let PlonkVerificationKeyEvals {
sigma,
coefficients,
generic,
psm,
complete_add,
mul,
emul,
endomul_scalar,
} = wrap_index.as_ref();

max_proofs_verified.to_field_elements(fields);
actual_wrap_domain_size.to_field_elements(fields);

Expand All @@ -448,20 +449,21 @@ impl ToInputs for VerificationKey {
let Self {
max_proofs_verified,
actual_wrap_domain_size,
wrap_index:
PlonkVerificationKeyEvals {
sigma,
coefficients,
generic,
psm,
complete_add,
mul,
emul,
endomul_scalar,
},
wrap_index,
wrap_vk: _,
} = self;

let PlonkVerificationKeyEvals {
sigma,
coefficients,
generic,
psm,
complete_add,
mul,
emul,
endomul_scalar,
} = wrap_index.as_ref();

inputs.append(max_proofs_verified);
inputs.append(actual_wrap_domain_size);

Expand Down Expand Up @@ -504,7 +506,8 @@ impl VerificationKey {
mul: g.clone(),
emul: g.clone(),
endomul_scalar: g,
},
}
.into(),
wrap_vk: None,
}
}
Expand Down Expand Up @@ -532,7 +535,7 @@ impl VerificationKey {
ProofVerified::N0
}
},
wrap_index: PlonkVerificationKeyEvals::rand(),
wrap_index: PlonkVerificationKeyEvals::rand().into(),
wrap_vk: None,
actual_wrap_domain_size: {
let n: u64 = rng.gen();
Expand Down Expand Up @@ -1031,7 +1034,7 @@ pub struct Account {
pub voting_for: VotingFor, // State_hash.t
pub timing: Timing, // Timing.t
pub permissions: Permissions<AuthRequired>, // Permissions.t
pub zkapp: Option<ZkAppAccount>, // Zkapp_account.t
pub zkapp: Option<Box<ZkAppAccount>>, // Zkapp_account.t
}

impl Account {
Expand Down Expand Up @@ -1084,8 +1087,8 @@ impl Account {
MyCow::borrow_or_else(&self.delegate, CompressedPubKey::empty)
}

pub fn zkapp_or_empty(&self) -> MyCow<ZkAppAccount> {
MyCow::borrow_or_else(&self.zkapp, ZkAppAccount::default)
pub fn zkapp_or_empty(&self) -> MyCow<Box<ZkAppAccount>> {
MyCow::borrow_or_else(&self.zkapp, Box::<ZkAppAccount>::default)
}

pub fn initialize(account_id: &AccountId) -> Self {
Expand Down Expand Up @@ -1338,34 +1341,37 @@ impl Account {
set_timing: gen_perm(rng),
},
zkapp: if rng.gen() {
Some(ZkAppAccount {
app_state: [
Fp::rand(rng),
Fp::rand(rng),
Fp::rand(rng),
Fp::rand(rng),
Fp::rand(rng),
Fp::rand(rng),
Fp::rand(rng),
Fp::rand(rng),
],
verification_key: if rng.gen() {
Some(VerificationKey::gen())
} else {
None
},
zkapp_version: rng.gen(),
action_state: [
Fp::rand(rng),
Fp::rand(rng),
Fp::rand(rng),
Fp::rand(rng),
Fp::rand(rng),
],
last_action_slot: rng.gen(),
proved_state: rng.gen(),
zkapp_uri: ZkAppUri(zkapp_uri),
})
Some(
ZkAppAccount {
app_state: [
Fp::rand(rng),
Fp::rand(rng),
Fp::rand(rng),
Fp::rand(rng),
Fp::rand(rng),
Fp::rand(rng),
Fp::rand(rng),
Fp::rand(rng),
],
verification_key: if rng.gen() {
Some(VerificationKey::gen())
} else {
None
},
zkapp_version: rng.gen(),
action_state: [
Fp::rand(rng),
Fp::rand(rng),
Fp::rand(rng),
Fp::rand(rng),
Fp::rand(rng),
],
last_action_slot: rng.gen(),
proved_state: rng.gen(),
zkapp_uri: ZkAppUri(zkapp_uri),
}
.into(),
)
} else {
None
},
Expand Down Expand Up @@ -1498,10 +1504,11 @@ mod tests {
#[test]
fn test_size_account() {
#[cfg(not(target_family = "wasm"))]
const SIZE: usize = 3424;
const SIZE: usize = 280;

// FIXME: was 2496bytes before zkapp got boxed, what should be the size now?
#[cfg(target_family = "wasm")]
const SIZE: usize = 2496;
const SIZE: usize = 280;

assert_eq!(std::mem::size_of::<Account>(), SIZE);
}
Expand Down
6 changes: 4 additions & 2 deletions ledger/src/account/conv.rs
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,8 @@ impl From<&MinaBaseVerificationKeyWireStableV1> for VerificationKey {
mul: mul_comm.into(),
emul: emul_comm.into(),
endomul_scalar: endomul_scalar_comm.into(),
},
}
.into(),
wrap_vk: None,
}
}
Expand All @@ -193,7 +194,7 @@ impl From<&VerificationKey> for MinaBaseVerificationKeyWireStableV1 {
super::ProofVerified::N1 => PicklesBaseProofsVerifiedStableV1::N1,
super::ProofVerified::N2 => PicklesBaseProofsVerifiedStableV1::N2,
},
wrap_index: wrap_index.into(),
wrap_index: wrap_index.as_ref().into(),
}
}
}
Expand Down Expand Up @@ -528,6 +529,7 @@ impl From<&MinaBaseAccountBinableArgStableV2> for Account {
proved_state: *proved_state,
zkapp_uri: zkapp_uri.try_into().unwrap(),
}
.into()
}),
}
}
Expand Down
11 changes: 7 additions & 4 deletions ledger/src/generators/user_command.rs
Original file line number Diff line number Diff line change
Expand Up @@ -128,10 +128,13 @@ fn zkapp_command_with_ledger(
};

let verification_key = Some(verification_key.data.clone());
let zkapp = Some(ZkAppAccount {
verification_key,
..ZkAppAccount::default()
});
let zkapp = Some(
ZkAppAccount {
verification_key,
..ZkAppAccount::default()
}
.into(),
);

account.zkapp = zkapp;
account.permissions = permissions;
Expand Down
39 changes: 23 additions & 16 deletions ledger/src/generators/zkapp_command.rs
Original file line number Diff line number Diff line change
Expand Up @@ -366,12 +366,13 @@ fn gen_account_precondition_from_account(

(state, action_state, proved_state, is_new)
}
Some(ZkAppAccount {
app_state,
action_state,
proved_state,
..
}) => {
Some(zkapp_account) => {
let ZkAppAccount {
app_state,
action_state,
proved_state,
..
} = zkapp_account.as_ref();
let state = std::array::from_fn(|i| OrIgnore::gen(|| app_state[i]));

let action_state = {
Expand Down Expand Up @@ -687,10 +688,13 @@ fn gen_account_update_body_components<A, B, C, D>(
let mut account_with_pk = Account::create_with(account_id, Balance::zero());

if zkapp_account {
account_with_pk.zkapp = Some(ZkAppAccount {
verification_key: Some(verification_key.data.clone()),
..ZkAppAccount::default()
});
account_with_pk.zkapp = Some(
ZkAppAccount {
verification_key: Some(verification_key.data.clone()),
..ZkAppAccount::default()
}
.into(),
);
}

account_with_pk
Expand Down Expand Up @@ -937,12 +941,15 @@ fn gen_account_update_body_components<A, B, C, D>(
}
};

Some(ZkAppAccount {
app_state,
action_state,
proved_state,
..zk.clone()
})
Some(
ZkAppAccount {
app_state,
action_state,
proved_state,
..*zk.clone()
}
.into(),
)
};

match account_state_tbl.entry(account.id()) {
Expand Down
2 changes: 1 addition & 1 deletion ledger/src/proofs/verification.rs
Original file line number Diff line number Diff line change
Expand Up @@ -643,7 +643,7 @@ pub fn verify_zkapp(
let verifier_index = make_zkapp_verifier_index(verification_key);
// https://github.com/MinaProtocol/mina/blob/4e0b324912017c3ff576704ee397ade3d9bda412/src/lib/pickles/pickles.ml#LL260C1-L274C18
let vk = VK {
commitments: verification_key.wrap_index.clone(),
commitments: *verification_key.wrap_index.clone(),
index: &verifier_index,
data: (),
};
Expand Down
15 changes: 9 additions & 6 deletions ledger/src/scan_state/transaction_logic.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5261,7 +5261,7 @@ pub mod local_state {
pub enum Eff<L: LedgerIntf + Clone> {
CheckValidWhilePrecondition(Numeric<Slot>, GlobalState<L>),
CheckAccountPrecondition(AccountUpdate, Account, bool, LocalStateEnv<L>),
CheckProtocolStatePrecondition(ZkAppPreconditions, GlobalState<L>),
CheckProtocolStatePrecondition(Box<ZkAppPreconditions>, GlobalState<L>),
InitAccount(AccountUpdate, Account),
}

Expand Down Expand Up @@ -7717,7 +7717,7 @@ pub mod for_tests {
..Default::default()
};

Some(zkapp)
Some(zkapp.into())
} else {
None
};
Expand Down Expand Up @@ -7860,10 +7860,13 @@ pub mod for_tests {
let id = AccountId::new(pk, TokenId::default());
let mut account = Account::create_with(id, Balance::from_u64(1_000_000_000_000_000));
account.permissions = permissions.unwrap_or_else(Permissions::user_default);
account.zkapp = Some(ZkAppAccount {
verification_key: Some(vk),
..Default::default()
});
account.zkapp = Some(
ZkAppAccount {
verification_key: Some(vk),
..Default::default()
}
.into(),
);
account
}

Expand Down
Loading