Skip to content

Commit 051d5ad

Browse files
authored
Merge pull request #25 from anoma/xuyang/complete_the_tx
add the transaction verification and tests
2 parents bf7a5a3 + f4af971 commit 051d5ad

File tree

4 files changed

+93
-21
lines changed

4 files changed

+93
-21
lines changed

native/aarm/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ risc0-zkvm = { version = "1.1.2" }
1111
serde = { version = "1.0.197", default-features = false }
1212
compliance_circuit = { path = "../examples/compliance_circuit/methods", package = 'methods'}
1313
aarm_core = { path = "../aarm_core" }
14+
k256 = { version = "=0.13.1", features = ["arithmetic", "serde", "expose-field", "std", "ecdsa", "hash2curve"], default-features = false }
15+
1416

1517
[dev-dependencies]
1618
bincode = "1.3"

native/aarm/src/action.rs

Lines changed: 53 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1+
use aarm_core::compliance::ComplianceInstance;
12
use compliance_circuit::COMPLIANCE_GUEST_ID;
3+
use k256::ProjectivePoint;
24
use risc0_zkvm::Receipt;
35
use serde::{Deserialize, Serialize};
46

@@ -43,36 +45,68 @@ impl Action {
4345

4446
true
4547
}
48+
49+
pub fn get_delta(&self) -> Vec<ProjectivePoint> {
50+
self.compliance_units
51+
.iter()
52+
.map(|receipt| {
53+
let instance: ComplianceInstance = receipt.journal.decode().unwrap();
54+
instance.delta_projective()
55+
})
56+
.collect()
57+
}
58+
59+
pub fn get_delta_msg(&self) -> Vec<u8> {
60+
let mut msg = Vec::new();
61+
for receipt in &self.compliance_units {
62+
let instance: ComplianceInstance = receipt.journal.decode().unwrap();
63+
msg.extend_from_slice(&instance.delta_msg());
64+
}
65+
msg
66+
}
4667
}
4768

48-
#[test]
49-
fn test_action() {
50-
use aarm_core::{compliance::ComplianceWitness, constants::TREE_DEPTH, utils::GenericEnv};
69+
#[cfg(test)]
70+
pub mod tests {
71+
use super::*;
72+
use aarm_core::{
73+
compliance::ComplianceWitness, constants::TREE_DEPTH, delta_proof::DeltaWitness,
74+
utils::GenericEnv,
75+
};
5176
use bincode;
5277
use compliance_circuit::COMPLIANCE_GUEST_ELF;
5378
use risc0_zkvm::{default_prover, ExecutorEnv};
5479
use serde_bytes::ByteBuf;
5580

56-
let compliance_witness: ComplianceWitness<TREE_DEPTH> =
57-
ComplianceWitness::<TREE_DEPTH>::default();
58-
let generic_env = GenericEnv {
59-
data: ByteBuf::from(bincode::serialize(&compliance_witness).unwrap()),
60-
};
81+
pub fn create_an_action() -> (Action, DeltaWitness) {
82+
let compliance_witness: ComplianceWitness<TREE_DEPTH> =
83+
ComplianceWitness::<TREE_DEPTH>::default();
84+
let generic_env = GenericEnv {
85+
data: ByteBuf::from(bincode::serialize(&compliance_witness).unwrap()),
86+
};
6187

62-
let env = ExecutorEnv::builder()
63-
.write(&generic_env)
64-
.unwrap()
65-
.build()
66-
.unwrap();
88+
let env = ExecutorEnv::builder()
89+
.write(&generic_env)
90+
.unwrap()
91+
.build()
92+
.unwrap();
6793

68-
let prover = default_prover();
94+
let prover = default_prover();
6995

70-
let receipt = prover.prove(env, COMPLIANCE_GUEST_ELF).unwrap().receipt;
96+
let receipt = prover.prove(env, COMPLIANCE_GUEST_ELF).unwrap().receipt;
7197

72-
let compliance_units = vec![receipt.clone()];
73-
let logic_proofs = vec![receipt];
98+
let compliance_units = vec![receipt.clone()];
99+
let logic_proofs = vec![receipt];
74100

75-
let action = Action::new(compliance_units, logic_proofs);
101+
let action = Action::new(compliance_units, logic_proofs);
102+
assert!(action.verify());
76103

77-
assert!(action.verify());
104+
let delta_witness = DeltaWitness::from_scalars(&[compliance_witness.rcv]);
105+
(action, delta_witness)
106+
}
107+
108+
#[test]
109+
fn test_action() {
110+
let _ = create_an_action();
111+
}
78112
}

native/aarm/src/transaction.rs

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,39 @@ impl Transaction {
5353
}
5454

5555
pub fn get_delta_instance(&self) -> DeltaInstance {
56-
unimplemented!()
56+
let deltas = self
57+
.action
58+
.iter()
59+
.flat_map(|action| action.get_delta())
60+
.collect::<Vec<_>>();
61+
DeltaInstance::from_deltas(&deltas).unwrap()
5762
}
5863

5964
pub fn get_delta_msg(&self) -> Vec<u8> {
60-
unimplemented!()
65+
let mut msg = Vec::new();
66+
for action in &self.action {
67+
msg.extend(action.get_delta_msg());
68+
}
69+
msg
70+
}
71+
}
72+
73+
#[cfg(test)]
74+
mod tests {
75+
use super::*;
76+
use crate::action::tests::create_an_action;
77+
78+
pub fn generate_test_transaction() -> Transaction {
79+
let (action, delta_witness) = create_an_action();
80+
let mut tx = Transaction::new(vec![action], Delta::Witness(delta_witness));
81+
tx.generate_delta_proof();
82+
assert!(tx.verify());
83+
84+
tx
85+
}
86+
87+
#[test]
88+
fn test_transaction() {
89+
let _ = generate_test_transaction();
6190
}
6291
}

native/aarm_core/src/compliance.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,4 +140,11 @@ impl ComplianceInstance {
140140
pub fn delta_projective(&self) -> ProjectivePoint {
141141
ProjectivePoint::from_encoded_point(&self.delta).unwrap()
142142
}
143+
144+
pub fn delta_msg(&self) -> Vec<u8> {
145+
let mut msg = Vec::new();
146+
msg.extend_from_slice(self.nullifier.as_bytes());
147+
msg.extend_from_slice(self.commitment.as_bytes());
148+
msg
149+
}
143150
}

0 commit comments

Comments
 (0)