From a85b306baac8cdfd85561eda808a14efce9ad630 Mon Sep 17 00:00:00 2001 From: David Rusu Date: Sat, 8 Mar 2025 21:30:40 +0400 Subject: [PATCH] ledger maintains append only bundle MMR as well --- emmarin/cl/cl/src/mantle/ledger.rs | 22 ++++++++++++++++--- .../cl/ledger_risc0_proof/src/bin/ledger.rs | 2 ++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/emmarin/cl/cl/src/mantle/ledger.rs b/emmarin/cl/cl/src/mantle/ledger.rs index 212f2ba..f0a358f 100644 --- a/emmarin/cl/cl/src/mantle/ledger.rs +++ b/emmarin/cl/cl/src/mantle/ledger.rs @@ -1,7 +1,9 @@ use crate::{ - crust::{NoteCommitment, Nullifier}, - ds::indexed::{BatchUpdateProof, NullifierTree}, - ds::mmr::{MMRProof, MMR}, + crust::{tx::LedgerUpdate, Bundle, NoteCommitment, Nullifier}, + ds::{ + indexed::{BatchUpdateProof, NullifierTree}, + mmr::{MMRProof, MMR}, + }, }; use serde::{Deserialize, Serialize}; @@ -9,12 +11,14 @@ use serde::{Deserialize, Serialize}; pub struct Ledger { cm_root: [u8; 32], nf_root: [u8; 32], + bundles_root: [u8; 32], } #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct LedgerWitness { pub commitments: MMR, pub nf_root: [u8; 32], + pub bundles: MMR, } impl LedgerWitness { @@ -22,6 +26,7 @@ impl LedgerWitness { Ledger { cm_root: self.commitments.commit(), nf_root: self.nf_root, + bundles_root: self.bundles.commit(), } } @@ -33,6 +38,10 @@ impl LedgerWitness { self.commitments.push(&cm.0); } + pub fn add_bundle(&mut self, bundle_root: [u8; 32]) { + self.bundles.push(&bundle_root); + } + pub fn assert_nfs_update(&mut self, nullifiers: &[Nullifier], proof: &BatchUpdateProof) { // update the nullifer root with the nullifier inserted into the tree self.nf_root = proof.verify(nullifiers, self.nf_root); @@ -43,6 +52,7 @@ impl LedgerWitness { pub struct LedgerState { pub commitments: MMR, pub nullifiers: NullifierTree, + pub bundles: MMR, } impl LedgerState { @@ -50,6 +60,7 @@ impl LedgerState { LedgerWitness { commitments: self.commitments.clone(), nf_root: self.nf_root(), + bundles: self.bundles.clone(), } } @@ -65,4 +76,9 @@ impl LedgerState { pub fn add_nullifiers(&mut self, nfs: Vec) -> BatchUpdateProof { self.nullifiers.insert_batch(nfs) } + + pub fn add_bundle(&mut self, bundle_root: [u8; 32]) -> (MMR, MMRProof) { + let proof = self.bundles.push(&bundle_root); + (self.bundles.clone(), proof) + } } diff --git a/emmarin/cl/ledger_risc0_proof/src/bin/ledger.rs b/emmarin/cl/ledger_risc0_proof/src/bin/ledger.rs index 83771bd..1ff387a 100644 --- a/emmarin/cl/ledger_risc0_proof/src/bin/ledger.rs +++ b/emmarin/cl/ledger_risc0_proof/src/bin/ledger.rs @@ -59,6 +59,8 @@ fn main() { nullifiers.extend(ledger_update.inputs); } + + ledger.add_bundle(bundle.root.0); } // TODO: sort outside and check