Use efficient comm for balances (#38)
* Use efficient comm for balances At the moment we're using merkle trees even though we don't need inclusion proofs, which means we're calculating more hashes than necessary and limiting the account set size to 256. This change is a temporary solution that chooses a more efficient way to calculate a commitment to the account balances, while we wait for something more scalable like a Verkle Tree. * remove leftover constants
This commit is contained in:
parent
da18cef987
commit
23df7331c8
|
@ -1,6 +1,6 @@
|
||||||
pub mod mmr;
|
pub mod mmr;
|
||||||
|
|
||||||
use cl::{balance::Unit, merkle, NoteCommitment};
|
use cl::{balance::Unit, NoteCommitment};
|
||||||
use ed25519_dalek::{
|
use ed25519_dalek::{
|
||||||
ed25519::{signature::SignerMut, SignatureBytes},
|
ed25519::{signature::SignerMut, SignatureBytes},
|
||||||
Signature, SigningKey, VerifyingKey, PUBLIC_KEY_LENGTH,
|
Signature, SigningKey, VerifyingKey, PUBLIC_KEY_LENGTH,
|
||||||
|
@ -12,11 +12,6 @@ use serde::{Deserialize, Serialize};
|
||||||
use sha2::{Digest, Sha256};
|
use sha2::{Digest, Sha256};
|
||||||
use std::collections::BTreeMap;
|
use std::collections::BTreeMap;
|
||||||
|
|
||||||
// TODO: sparse merkle tree
|
|
||||||
pub const MAX_BALANCES: usize = 1 << 8;
|
|
||||||
pub const MAX_TXS: usize = 1 << 8;
|
|
||||||
pub const MAX_EVENTS: usize = 1 << 8;
|
|
||||||
|
|
||||||
// state of the zone
|
// state of the zone
|
||||||
#[derive(Debug, PartialEq, Eq, Clone, Copy, Serialize, Deserialize)]
|
#[derive(Debug, PartialEq, Eq, Clone, Copy, Serialize, Deserialize)]
|
||||||
pub struct StateCommitment(pub [u8; 32]);
|
pub struct StateCommitment(pub [u8; 32]);
|
||||||
|
@ -105,14 +100,15 @@ impl StateWitness {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn balances_root(&self) -> [u8; 32] {
|
pub fn balances_root(&self) -> [u8; 32] {
|
||||||
let balance_bytes = Vec::from_iter(self.balances.iter().map(|(owner, balance)| {
|
let mut hasher = Sha256::new();
|
||||||
let mut bytes: Vec<u8> = vec![];
|
hasher.update(b"NOMOS_BALANCES_ROOT");
|
||||||
bytes.extend(owner);
|
|
||||||
bytes.extend(balance.to_le_bytes());
|
for (k, v) in self.balances.iter() {
|
||||||
bytes
|
hasher.update(k);
|
||||||
}));
|
hasher.update(&v.to_le_bytes());
|
||||||
let balance_merkle_leaves = cl::merkle::padded_leaves(&balance_bytes);
|
}
|
||||||
merkle::root::<MAX_BALANCES>(balance_merkle_leaves)
|
|
||||||
|
hasher.finalize().into()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn total_balance(&self) -> u64 {
|
pub fn total_balance(&self) -> u64 {
|
||||||
|
|
Loading…
Reference in New Issue