mirror of
https://github.com/logos-blockchain/lssa.git
synced 2026-04-12 06:03:08 +00:00
identifiers added to privacy circuit
This commit is contained in:
parent
e15b078640
commit
7b0eac6a3f
1
Cargo.lock
generated
1
Cargo.lock
generated
@ -5294,7 +5294,6 @@ dependencies = [
|
||||
"serde",
|
||||
"serde_json",
|
||||
"serde_with",
|
||||
"sha2",
|
||||
"thiserror 2.0.18",
|
||||
]
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -256,6 +256,7 @@ fn build_privacy_transaction() -> PrivacyPreservingTransaction {
|
||||
vec![1, 2],
|
||||
vec![(sender_npk, sender_ss), (recipient_npk, recipient_ss)],
|
||||
vec![sender_nsk],
|
||||
vec![], //TODO: marvin fix
|
||||
vec![Some(proof)],
|
||||
&program.into(),
|
||||
)
|
||||
|
||||
@ -12,7 +12,6 @@ risc0-zkvm.workspace = true
|
||||
borsh.workspace = true
|
||||
serde.workspace = true
|
||||
serde_with.workspace = true
|
||||
sha2.workspace = true
|
||||
rand.workspace = true
|
||||
thiserror.workspace = true
|
||||
bytemuck.workspace = true
|
||||
|
||||
@ -22,6 +22,8 @@ pub struct PrivacyPreservingCircuitInput {
|
||||
pub private_account_keys: Vec<(NullifierPublicKey, SharedSecretKey)>,
|
||||
/// Nullifier secret keys for authorized private accounts.
|
||||
pub private_account_nsks: Vec<NullifierSecretKey>,
|
||||
/// Identifiers used to generate `AccountId` (TODO: marvin double check logic).
|
||||
pub private_account_identifiers: Vec<u128>,
|
||||
/// Membership proofs for private accounts. Can be [`None`] for uninitialized accounts.
|
||||
pub private_account_membership_proofs: Vec<Option<MembershipProof>>,
|
||||
/// Program ID.
|
||||
|
||||
@ -63,13 +63,14 @@ impl From<Program> for ProgramWithDependencies {
|
||||
|
||||
/// Generates a proof of the execution of a NSSA program inside the privacy preserving execution
|
||||
/// circuit.
|
||||
/// TODO: too many parameters.
|
||||
#[expect(clippy::too_many_arguments, reason = "TODO: fix this later")]
|
||||
pub fn execute_and_prove(
|
||||
pre_states: Vec<AccountWithMetadata>,
|
||||
instruction_data: InstructionData,
|
||||
visibility_mask: Vec<u8>,
|
||||
private_account_keys: Vec<(NullifierPublicKey, SharedSecretKey)>,
|
||||
private_account_nsks: Vec<NullifierSecretKey>,
|
||||
private_account_identifiers: Vec<u128>,
|
||||
private_account_membership_proofs: Vec<Option<MembershipProof>>,
|
||||
program_with_dependencies: &ProgramWithDependencies,
|
||||
) -> Result<(PrivacyPreservingCircuitOutput, Proof), NssaError> {
|
||||
@ -128,6 +129,7 @@ pub fn execute_and_prove(
|
||||
visibility_mask,
|
||||
private_account_keys,
|
||||
private_account_nsks,
|
||||
private_account_identifiers,
|
||||
private_account_membership_proofs,
|
||||
program_id: program_with_dependencies.program.id(),
|
||||
};
|
||||
@ -236,6 +238,7 @@ mod tests {
|
||||
vec![0, 2],
|
||||
vec![(recipient_keys.npk(), shared_secret)],
|
||||
vec![],
|
||||
vec![], // TODO check (Marvin)
|
||||
vec![None],
|
||||
&Program::authenticated_transfer_program().into(),
|
||||
)
|
||||
@ -337,6 +340,7 @@ mod tests {
|
||||
(recipient_keys.npk(), shared_secret_2),
|
||||
],
|
||||
vec![sender_keys.nsk],
|
||||
vec![], // TODO check (Marvin)
|
||||
vec![commitment_set.get_proof_for(&commitment_sender), None],
|
||||
&program.into(),
|
||||
)
|
||||
@ -403,6 +407,7 @@ mod tests {
|
||||
vec![2],
|
||||
vec![(account_keys.npk(), shared_secret)],
|
||||
vec![],
|
||||
vec![], // TODO check (Marvin)
|
||||
vec![None],
|
||||
&program_with_deps,
|
||||
);
|
||||
|
||||
@ -978,6 +978,7 @@ pub mod tests {
|
||||
vec![0, 2],
|
||||
vec![(recipient_keys.npk(), shared_secret)],
|
||||
vec![],
|
||||
vec![], // TODO check (Marvin)
|
||||
vec![None],
|
||||
&Program::authenticated_transfer_program().into(),
|
||||
)
|
||||
@ -1026,6 +1027,7 @@ pub mod tests {
|
||||
(recipient_keys.npk(), shared_secret_2),
|
||||
],
|
||||
vec![sender_keys.nsk],
|
||||
vec![], // TODO check (Marvin)
|
||||
vec![state.get_proof_for_commitment(&sender_commitment), None],
|
||||
&program.into(),
|
||||
)
|
||||
@ -1074,6 +1076,7 @@ pub mod tests {
|
||||
vec![1, 0],
|
||||
vec![(sender_keys.npk(), shared_secret)],
|
||||
vec![sender_keys.nsk],
|
||||
vec![], // TODO check (Marvin)
|
||||
vec![state.get_proof_for_commitment(&sender_commitment)],
|
||||
&program.into(),
|
||||
)
|
||||
@ -1291,6 +1294,7 @@ pub mod tests {
|
||||
vec![0],
|
||||
vec![],
|
||||
vec![],
|
||||
vec![], // TODO check (Marvin)
|
||||
vec![],
|
||||
&program.into(),
|
||||
);
|
||||
@ -1317,6 +1321,7 @@ pub mod tests {
|
||||
vec![0],
|
||||
vec![],
|
||||
vec![],
|
||||
vec![], // TODO check (Marvin)
|
||||
vec![],
|
||||
&program.into(),
|
||||
);
|
||||
@ -1343,6 +1348,7 @@ pub mod tests {
|
||||
vec![0],
|
||||
vec![],
|
||||
vec![],
|
||||
vec![], // TODO check (Marvin)
|
||||
vec![],
|
||||
&program.into(),
|
||||
);
|
||||
@ -1369,6 +1375,7 @@ pub mod tests {
|
||||
vec![0],
|
||||
vec![],
|
||||
vec![],
|
||||
vec![], // TODO check (Marvin)
|
||||
vec![],
|
||||
&program.into(),
|
||||
);
|
||||
@ -1403,6 +1410,7 @@ pub mod tests {
|
||||
vec![0],
|
||||
vec![],
|
||||
vec![],
|
||||
vec![], // TODO check (Marvin)
|
||||
vec![],
|
||||
&program.into(),
|
||||
);
|
||||
@ -1429,6 +1437,7 @@ pub mod tests {
|
||||
vec![0],
|
||||
vec![],
|
||||
vec![],
|
||||
vec![], // TODO check (Marvin)
|
||||
vec![],
|
||||
&program.into(),
|
||||
);
|
||||
@ -1464,6 +1473,7 @@ pub mod tests {
|
||||
vec![0, 0],
|
||||
vec![],
|
||||
vec![],
|
||||
vec![], // TODO check (Marvin)
|
||||
vec![],
|
||||
&program.into(),
|
||||
);
|
||||
@ -1490,6 +1500,7 @@ pub mod tests {
|
||||
vec![0],
|
||||
vec![],
|
||||
vec![],
|
||||
vec![], // TODO check (Marvin)
|
||||
vec![],
|
||||
&program.into(),
|
||||
);
|
||||
@ -1526,6 +1537,7 @@ pub mod tests {
|
||||
vec![],
|
||||
vec![],
|
||||
vec![],
|
||||
vec![], // TODO check (Marvin)
|
||||
&program.into(),
|
||||
);
|
||||
|
||||
@ -1562,6 +1574,7 @@ pub mod tests {
|
||||
visibility_mask.to_vec(),
|
||||
vec![],
|
||||
vec![],
|
||||
vec![], // TODO check (Marvin)
|
||||
vec![],
|
||||
&program.into(),
|
||||
);
|
||||
@ -1603,6 +1616,7 @@ pub mod tests {
|
||||
),
|
||||
],
|
||||
vec![sender_keys.nsk],
|
||||
vec![], // TODO check (Marvin)
|
||||
vec![Some((0, vec![]))],
|
||||
&program.into(),
|
||||
);
|
||||
@ -1638,6 +1652,7 @@ pub mod tests {
|
||||
vec![1, 2],
|
||||
private_account_keys.to_vec(),
|
||||
vec![sender_keys.nsk],
|
||||
vec![], // TODO check (Marvin)
|
||||
vec![Some((0, vec![]))],
|
||||
&program.into(),
|
||||
);
|
||||
@ -1681,6 +1696,7 @@ pub mod tests {
|
||||
),
|
||||
],
|
||||
vec![sender_keys.nsk],
|
||||
vec![], // TODO check (Marvin)
|
||||
private_account_membership_proofs.to_vec(),
|
||||
&program.into(),
|
||||
);
|
||||
@ -1724,6 +1740,7 @@ pub mod tests {
|
||||
),
|
||||
],
|
||||
private_account_nsks.to_vec(),
|
||||
vec![], // TODO check (Marvin)
|
||||
vec![],
|
||||
&program.into(),
|
||||
);
|
||||
@ -1774,6 +1791,7 @@ pub mod tests {
|
||||
vec![1, 2],
|
||||
private_account_keys.to_vec(),
|
||||
private_account_nsks.to_vec(),
|
||||
vec![], // TODO check (Marvin)
|
||||
private_account_membership_proofs.to_vec(),
|
||||
&program.into(),
|
||||
);
|
||||
@ -1822,6 +1840,7 @@ pub mod tests {
|
||||
),
|
||||
],
|
||||
vec![sender_keys.nsk],
|
||||
vec![], // TODO check (Marvin)
|
||||
vec![Some((0, vec![]))],
|
||||
&program.into(),
|
||||
);
|
||||
@ -1870,6 +1889,7 @@ pub mod tests {
|
||||
),
|
||||
],
|
||||
vec![sender_keys.nsk],
|
||||
vec![], // TODO check (Marvin)
|
||||
vec![Some((0, vec![]))],
|
||||
&program.into(),
|
||||
);
|
||||
@ -1918,6 +1938,7 @@ pub mod tests {
|
||||
),
|
||||
],
|
||||
vec![sender_keys.nsk],
|
||||
vec![], // TODO check (Marvin)
|
||||
vec![Some((0, vec![]))],
|
||||
&program.into(),
|
||||
);
|
||||
@ -1966,6 +1987,7 @@ pub mod tests {
|
||||
),
|
||||
],
|
||||
vec![sender_keys.nsk],
|
||||
vec![], // TODO check (Marvin)
|
||||
vec![Some((0, vec![]))],
|
||||
&program.into(),
|
||||
);
|
||||
@ -2012,6 +2034,7 @@ pub mod tests {
|
||||
),
|
||||
],
|
||||
vec![sender_keys.nsk],
|
||||
vec![], // TODO check (Marvin)
|
||||
vec![Some((0, vec![]))],
|
||||
&program.into(),
|
||||
);
|
||||
@ -2042,6 +2065,7 @@ pub mod tests {
|
||||
vec![],
|
||||
vec![],
|
||||
vec![],
|
||||
vec![], // TODO check (Marvin)
|
||||
&program.into(),
|
||||
);
|
||||
|
||||
@ -2082,6 +2106,7 @@ pub mod tests {
|
||||
),
|
||||
],
|
||||
vec![sender_keys.nsk],
|
||||
vec![], // TODO check (Marvin)
|
||||
vec![Some((0, vec![]))],
|
||||
&program.into(),
|
||||
);
|
||||
@ -2130,6 +2155,7 @@ pub mod tests {
|
||||
vec![1, 2],
|
||||
private_account_keys.to_vec(),
|
||||
vec![sender_keys.nsk],
|
||||
vec![], // TODO check (Marvin)
|
||||
vec![Some((0, vec![]))],
|
||||
&program.into(),
|
||||
);
|
||||
@ -2176,6 +2202,7 @@ pub mod tests {
|
||||
),
|
||||
],
|
||||
private_account_nsks.to_vec(),
|
||||
vec![], // TODO check (Marvin)
|
||||
private_account_membership_proofs.to_vec(),
|
||||
&program.into(),
|
||||
);
|
||||
@ -2267,6 +2294,7 @@ pub mod tests {
|
||||
(sender_keys.npk(), shared_secret),
|
||||
],
|
||||
private_account_nsks.to_vec(),
|
||||
vec![], // TODO check (Marvin)
|
||||
private_account_membership_proofs.to_vec(),
|
||||
&program.into(),
|
||||
);
|
||||
@ -2563,6 +2591,7 @@ pub mod tests {
|
||||
vec![0],
|
||||
vec![],
|
||||
vec![],
|
||||
vec![], // TODO check (Marvin)
|
||||
vec![],
|
||||
&program.into(),
|
||||
);
|
||||
@ -2602,6 +2631,7 @@ pub mod tests {
|
||||
vec![1, 0],
|
||||
vec![(sender_keys.npk(), shared_secret)],
|
||||
vec![sender_keys.nsk],
|
||||
vec![], // TODO check (Marvin)
|
||||
vec![state.get_proof_for_commitment(&sender_commitment)],
|
||||
&program.into(),
|
||||
)
|
||||
@ -2966,6 +2996,7 @@ pub mod tests {
|
||||
vec![1],
|
||||
vec![(private_keys.npk(), shared_secret)],
|
||||
vec![private_keys.nsk],
|
||||
vec![], // TODO check (Marvin)
|
||||
vec![None],
|
||||
&program.into(),
|
||||
)
|
||||
@ -3013,6 +3044,7 @@ pub mod tests {
|
||||
vec![2],
|
||||
vec![(private_keys.npk(), shared_secret)],
|
||||
vec![],
|
||||
vec![], // TODO check (Marvin)
|
||||
vec![None],
|
||||
&program.into(),
|
||||
)
|
||||
@ -3064,6 +3096,7 @@ pub mod tests {
|
||||
vec![1],
|
||||
vec![(private_keys.npk(), shared_secret)],
|
||||
vec![private_keys.nsk],
|
||||
vec![], // TODO check (Marvin)
|
||||
vec![None],
|
||||
&claimer_program.into(),
|
||||
)
|
||||
@ -3109,6 +3142,7 @@ pub mod tests {
|
||||
vec![1],
|
||||
vec![(private_keys.npk(), shared_secret2)],
|
||||
vec![private_keys.nsk],
|
||||
vec![], // TODO check (Marvin)
|
||||
vec![None],
|
||||
&noop_program.into(),
|
||||
);
|
||||
@ -3181,6 +3215,7 @@ pub mod tests {
|
||||
SharedSecretKey::new(&[3; 32], &sender_keys.vpk()),
|
||||
)],
|
||||
vec![sender_keys.nsk],
|
||||
vec![], // TODO check (Marvin)
|
||||
vec![Some((0, vec![]))],
|
||||
&program.into(),
|
||||
);
|
||||
@ -3208,6 +3243,7 @@ pub mod tests {
|
||||
SharedSecretKey::new(&[3; 32], &sender_keys.vpk()),
|
||||
)],
|
||||
vec![sender_keys.nsk],
|
||||
vec![], // TODO check (Marvin)
|
||||
vec![Some((0, vec![]))],
|
||||
&program.into(),
|
||||
);
|
||||
@ -3261,6 +3297,7 @@ pub mod tests {
|
||||
vec![0, 1],
|
||||
vec![(recipient_keys.npk(), recipient)],
|
||||
vec![recipient_keys.nsk],
|
||||
vec![], // TODO check (Marvin)
|
||||
vec![state.get_proof_for_commitment(&recipient_commitment)],
|
||||
&program_with_deps,
|
||||
);
|
||||
|
||||
@ -295,6 +295,7 @@ fn compute_circuit_output(
|
||||
visibility_mask: &[u8],
|
||||
private_account_keys: &[(NullifierPublicKey, SharedSecretKey)],
|
||||
private_account_nsks: &[NullifierSecretKey],
|
||||
private_account_identifiers: &[u128],
|
||||
private_account_membership_proofs: &[Option<MembershipProof>],
|
||||
) -> PrivacyPreservingCircuitOutput {
|
||||
let mut output = PrivacyPreservingCircuitOutput {
|
||||
@ -317,6 +318,7 @@ fn compute_circuit_output(
|
||||
let mut private_keys_iter = private_account_keys.iter();
|
||||
let mut private_nsks_iter = private_account_nsks.iter();
|
||||
let mut private_membership_proofs_iter = private_account_membership_proofs.iter();
|
||||
let mut private_identifiers_iter = private_account_identifiers.iter();
|
||||
|
||||
let mut output_index = 0;
|
||||
for (account_visibility_mask, (pre_state, post_state)) in
|
||||
@ -333,10 +335,15 @@ fn compute_circuit_output(
|
||||
panic!("Missing private account key");
|
||||
};
|
||||
|
||||
// TODO: (Marvin) double check
|
||||
let Some(identifier) = private_identifiers_iter.next() else {
|
||||
panic!("Missing private account identifier");
|
||||
};
|
||||
|
||||
// TODO: (Marvin) identifier used here)
|
||||
// Relevant here as this applies for both cases (authenicated and not authenicated).
|
||||
assert_eq!(
|
||||
AccountId::private_account_id(npk, None),
|
||||
AccountId::private_account_id(npk, Some(*identifier)),
|
||||
pre_state.account_id,
|
||||
"AccountId mismatch"
|
||||
);
|
||||
@ -398,10 +405,9 @@ fn compute_circuit_output(
|
||||
"Membership proof must be None for unauthorized accounts"
|
||||
);
|
||||
|
||||
|
||||
// TODO: (Marvin) need to add a Vec<identifier> as input.
|
||||
// TODO: use here
|
||||
let account_id = AccountId::private_account_id(npk, None);
|
||||
let account_id = AccountId::private_account_id(npk, Some(*identifier));
|
||||
let nullifier = Nullifier::for_account_initialization(&account_id);
|
||||
|
||||
let new_nonce = Nonce::private_account_nonce_init(npk);
|
||||
@ -493,6 +499,7 @@ fn main() {
|
||||
visibility_mask,
|
||||
private_account_keys,
|
||||
private_account_nsks,
|
||||
private_account_identifiers,
|
||||
private_account_membership_proofs,
|
||||
program_id,
|
||||
} = env::read();
|
||||
@ -505,6 +512,7 @@ fn main() {
|
||||
&visibility_mask,
|
||||
&private_account_keys,
|
||||
&private_account_nsks,
|
||||
&private_account_identifiers,
|
||||
&private_account_membership_proofs,
|
||||
);
|
||||
|
||||
|
||||
@ -396,6 +396,7 @@ impl WalletCore {
|
||||
.map(|keys| (keys.npk.clone(), keys.ssk))
|
||||
.collect::<Vec<_>>(),
|
||||
acc_manager.private_account_auth(),
|
||||
vec![], // TODO check (Marvin)
|
||||
acc_manager.private_account_membership_proofs(),
|
||||
&program.to_owned(),
|
||||
)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user