rm cl::bundle
This commit is contained in:
parent
29cd911654
commit
0c312bdd35
|
@ -1,133 +0,0 @@
|
||||||
use serde::{Deserialize, Serialize};
|
|
||||||
|
|
||||||
use crate::cl::partial_tx::PartialTx;
|
|
||||||
|
|
||||||
/// The transaction bundle is a collection of partial transactions.
|
|
||||||
/// The goal in bundling transactions is to produce a set of partial transactions
|
|
||||||
/// that balance each other.
|
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
|
||||||
pub struct Bundle {
|
|
||||||
pub partials: Vec<PartialTx>,
|
|
||||||
}
|
|
||||||
|
|
||||||
// impl Bundle {
|
|
||||||
// pub fn zones(&self) -> BTreeSet<ZoneId> {
|
|
||||||
// self.partials
|
|
||||||
// .iter()
|
|
||||||
// .flat_map(|ptx| {
|
|
||||||
// ptx.inputs
|
|
||||||
// .iter()
|
|
||||||
// .map(|i| i.zone_id)
|
|
||||||
// .chain(ptx.outputs.iter().map(|o| o.zone_id))
|
|
||||||
// })
|
|
||||||
// .collect()
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // TODO: remove this
|
|
||||||
// pub fn id(&self) -> BundleId {
|
|
||||||
// // TODO: change to merkle root
|
|
||||||
// let mut hasher = Sha256::new();
|
|
||||||
// hasher.update(b"NOMOS_CL_BUNDLE_ID");
|
|
||||||
// for ptx in &self.partials {
|
|
||||||
// hasher.update(ptx.root().0);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// BundleId(hasher.finalize().into())
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
mod test {
|
|
||||||
use crate::cl::{
|
|
||||||
balance::{BalanceWitness, UnitBalance},
|
|
||||||
input::InputWitness,
|
|
||||||
note::{derive_unit, NoteWitness},
|
|
||||||
nullifier::NullifierSecret,
|
|
||||||
output::OutputWitness,
|
|
||||||
partial_tx::PartialTxWitness,
|
|
||||||
};
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_bundle_balance() {
|
|
||||||
let mut rng = rand::thread_rng();
|
|
||||||
let zone_id = [0; 32];
|
|
||||||
let (nmo, eth, crv) = (derive_unit("NMO"), derive_unit("ETH"), derive_unit("CRV"));
|
|
||||||
|
|
||||||
let nf_a = NullifierSecret::random(&mut rng);
|
|
||||||
let nf_b = NullifierSecret::random(&mut rng);
|
|
||||||
let nf_c = NullifierSecret::random(&mut rng);
|
|
||||||
|
|
||||||
let nmo_10_utxo = OutputWitness::new(
|
|
||||||
NoteWitness::basic(10, nmo, &mut rng),
|
|
||||||
nf_a.commit(),
|
|
||||||
zone_id,
|
|
||||||
);
|
|
||||||
let nmo_10_in = InputWitness::from_output(nmo_10_utxo, nf_a);
|
|
||||||
|
|
||||||
let eth_23_utxo = OutputWitness::new(
|
|
||||||
NoteWitness::basic(23, eth, &mut rng),
|
|
||||||
nf_b.commit(),
|
|
||||||
zone_id,
|
|
||||||
);
|
|
||||||
let eth_23_in = InputWitness::from_output(eth_23_utxo, nf_b);
|
|
||||||
|
|
||||||
let crv_4840_out = OutputWitness::new(
|
|
||||||
NoteWitness::basic(4840, crv, &mut rng),
|
|
||||||
nf_c.commit(),
|
|
||||||
zone_id,
|
|
||||||
);
|
|
||||||
|
|
||||||
let ptx_unbalanced = PartialTxWitness {
|
|
||||||
inputs: vec![nmo_10_in, eth_23_in],
|
|
||||||
outputs: vec![crv_4840_out],
|
|
||||||
balance_blinding: BalanceWitness::random_blinding(&mut rng),
|
|
||||||
};
|
|
||||||
|
|
||||||
assert!(!ptx_unbalanced.balance().is_zero());
|
|
||||||
assert_eq!(
|
|
||||||
ptx_unbalanced.balance().balances,
|
|
||||||
vec![
|
|
||||||
UnitBalance {
|
|
||||||
unit: nmo,
|
|
||||||
pos: 0,
|
|
||||||
neg: 10
|
|
||||||
},
|
|
||||||
UnitBalance {
|
|
||||||
unit: eth,
|
|
||||||
pos: 0,
|
|
||||||
neg: 23
|
|
||||||
},
|
|
||||||
UnitBalance {
|
|
||||||
unit: crv,
|
|
||||||
pos: 4840,
|
|
||||||
neg: 0
|
|
||||||
},
|
|
||||||
]
|
|
||||||
);
|
|
||||||
|
|
||||||
let crv_4840_in = InputWitness::from_output(crv_4840_out, nf_c);
|
|
||||||
let nmo_10_out = OutputWitness::new(
|
|
||||||
NoteWitness::basic(10, nmo, &mut rng),
|
|
||||||
NullifierSecret::random(&mut rng).commit(), // transferring to a random owner
|
|
||||||
zone_id,
|
|
||||||
);
|
|
||||||
let eth_23_out = OutputWitness::new(
|
|
||||||
NoteWitness::basic(23, eth, &mut rng),
|
|
||||||
NullifierSecret::random(&mut rng).commit(), // transferring to a random owner
|
|
||||||
zone_id,
|
|
||||||
);
|
|
||||||
|
|
||||||
let ptx_solved = PartialTxWitness {
|
|
||||||
inputs: vec![crv_4840_in],
|
|
||||||
outputs: vec![nmo_10_out, eth_23_out],
|
|
||||||
balance_blinding: BalanceWitness::random_blinding(&mut rng),
|
|
||||||
};
|
|
||||||
|
|
||||||
let bundle_balance =
|
|
||||||
BalanceWitness::combine([ptx_unbalanced.balance(), ptx_solved.balance()], [0; 16]);
|
|
||||||
|
|
||||||
assert!(bundle_balance.is_zero());
|
|
||||||
assert_eq!(bundle_balance.balances, vec![]);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,5 +1,4 @@
|
||||||
pub mod balance;
|
pub mod balance;
|
||||||
pub mod bundle;
|
|
||||||
pub mod crypto;
|
pub mod crypto;
|
||||||
pub mod error;
|
pub mod error;
|
||||||
pub mod input;
|
pub mod input;
|
||||||
|
@ -12,7 +11,6 @@ pub mod partial_tx;
|
||||||
pub mod sparse_merkle;
|
pub mod sparse_merkle;
|
||||||
|
|
||||||
pub use balance::{Balance, BalanceWitness};
|
pub use balance::{Balance, BalanceWitness};
|
||||||
pub use bundle::Bundle;
|
|
||||||
pub use input::{Input, InputWitness};
|
pub use input::{Input, InputWitness};
|
||||||
pub use note::{Constraint, Nonce, NoteCommitment, NoteWitness};
|
pub use note::{Constraint, Nonce, NoteCommitment, NoteWitness};
|
||||||
pub use nullifier::{Nullifier, NullifierCommitment, NullifierSecret};
|
pub use nullifier::{Nullifier, NullifierCommitment, NullifierSecret};
|
||||||
|
|
Loading…
Reference in New Issue