contract/dao: Replace incrementalmerkletree with bridgetree crate.

This commit is contained in:
parazyd
2023-04-19 19:36:49 +02:00
parent 402d0f3874
commit 326fa7e2d1
9 changed files with 55 additions and 40 deletions

View File

@@ -16,8 +16,9 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
use darkfi_sdk::crypto::{
pallas, pasta_prelude::*, pedersen_commitment_u64, poseidon_hash, SecretKey,
use darkfi_sdk::{
crypto::{pasta_prelude::*, pedersen_commitment_u64, poseidon_hash, SecretKey},
pasta::pallas,
};
use halo2_proofs::circuit::Value;

View File

@@ -21,7 +21,10 @@ use darkfi::{
zkas::ZkBinary,
Result,
};
use darkfi_sdk::crypto::{pallas, poseidon_hash, PublicKey, SecretKey, TokenId};
use darkfi_sdk::{
crypto::{poseidon_hash, PublicKey, SecretKey, TokenId},
pasta::pallas,
};
use log::debug;
use rand::rngs::OsRng;

View File

@@ -16,9 +16,14 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
use darkfi_sdk::crypto::{
merkle_prelude::*, pallas, pasta_prelude::*, pedersen::pedersen_commitment_u64, poseidon_hash,
MerkleNode, MerklePosition, PublicKey, SecretKey, TokenId,
use darkfi_sdk::{
bridgetree,
bridgetree::Hashable,
crypto::{
pasta_prelude::*, pedersen::pedersen_commitment_u64, poseidon_hash, MerkleNode, PublicKey,
SecretKey, TokenId,
},
pasta::pallas,
};
use darkfi_serial::{SerialDecodable, SerialEncodable};
use rand::rngs::OsRng;
@@ -52,7 +57,7 @@ pub struct DaoProposeNote {
pub struct DaoProposeStakeInput {
pub secret: SecretKey,
pub note: darkfi_money_contract::client::MoneyNote,
pub leaf_position: MerklePosition,
pub leaf_position: bridgetree::Position,
pub merkle_path: Vec<MerkleNode>,
pub signature_secret: SecretKey,
}
@@ -61,7 +66,7 @@ pub struct DaoProposeCall {
pub inputs: Vec<DaoProposeStakeInput>,
pub proposal: DaoProposalInfo,
pub dao: DaoInfo,
pub dao_leaf_position: MerklePosition,
pub dao_leaf_position: bridgetree::Position,
pub dao_merkle_path: Vec<MerkleNode>,
pub dao_merkle_root: MerkleNode,
}

View File

@@ -16,9 +16,14 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
use darkfi_sdk::crypto::{
merkle_prelude::*, pallas, pasta_prelude::*, pedersen_commitment_u64, poseidon_hash, Keypair,
MerkleNode, MerklePosition, Nullifier, PublicKey, SecretKey,
use darkfi_sdk::{
bridgetree,
bridgetree::Hashable,
crypto::{
pasta_prelude::*, pedersen_commitment_u64, poseidon_hash, Keypair, MerkleNode, Nullifier,
PublicKey, SecretKey,
},
pasta::pallas,
};
use darkfi_serial::{SerialDecodable, SerialEncodable};
use log::debug;
@@ -48,7 +53,7 @@ pub struct DaoVoteNote {
pub struct DaoVoteInput {
pub secret: SecretKey,
pub note: darkfi_money_contract::client::MoneyNote,
pub leaf_position: MerklePosition,
pub leaf_position: bridgetree::Position,
pub merkle_path: Vec<MerkleNode>,
pub signature_secret: SecretKey,
}

View File

@@ -17,8 +17,9 @@
*/
use darkfi_sdk::{
crypto::{pallas, pasta_prelude::*, MerkleNode, Nullifier, PublicKey},
crypto::{pasta_prelude::*, MerkleNode, Nullifier, PublicKey},
error::ContractError,
pasta::pallas,
};
use darkfi_serial::{SerialDecodable, SerialEncodable};

View File

@@ -20,12 +20,13 @@ use std::io::Cursor;
use darkfi_sdk::{
crypto::{
pallas, pasta_prelude::*, ContractId, MerkleNode, MerkleTree, PublicKey, DAO_CONTRACT_ID,
pasta_prelude::*, ContractId, MerkleNode, MerkleTree, PublicKey, DAO_CONTRACT_ID,
MONEY_CONTRACT_ID,
},
db::{db_contains_key, db_del, db_get, db_init, db_lookup, db_set, zkas_db_set},
error::{ContractError, ContractResult},
merkle_add, msg,
pasta::pallas,
util::set_return_data,
ContractCall,
};

View File

@@ -24,9 +24,13 @@ use darkfi::{
zkas::ZkBinary,
Result,
};
use darkfi_sdk::crypto::{
note::AeadEncryptedNote, pallas, pasta_prelude::*, MerkleNode, MerklePosition, PublicKey,
SecretKey, TokenId, ValueBlind,
use darkfi_sdk::{
bridgetree,
crypto::{
note::AeadEncryptedNote, pasta_prelude::*, MerkleNode, PublicKey, SecretKey, TokenId,
ValueBlind,
},
pasta::pallas,
};
use rand::rngs::OsRng;
@@ -55,7 +59,7 @@ pub struct TransferClearInput {
}
pub struct TransferInput {
pub leaf_position: MerklePosition,
pub leaf_position: bridgetree::Position,
pub merkle_path: Vec<MerkleNode>,
pub secret: SecretKey,
pub note: MoneyNote,

View File

@@ -16,8 +16,9 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
use darkfi_sdk::crypto::{
merkle_prelude::*, note::AeadEncryptedNote, MerkleNode, MerklePosition, MerkleTree, SecretKey,
use darkfi_sdk::{
bridgetree,
crypto::{note::AeadEncryptedNote, MerkleNode, MerkleTree, SecretKey},
};
use darkfi_money_contract::{client::MoneyNote, model::Coin};
@@ -25,7 +26,7 @@ use darkfi_money_contract::{client::MoneyNote, model::Coin};
pub struct OwnCoin {
pub coin: Coin,
pub note: MoneyNote,
pub leaf_position: MerklePosition,
pub leaf_position: bridgetree::Position,
}
pub struct WalletCache {
@@ -66,14 +67,13 @@ impl WalletCache {
pub fn try_decrypt_note(&mut self, coin: Coin, ciphertext: &AeadEncryptedNote) {
// Add the new coins to the Merkle tree
let node = MerkleNode::from(coin.inner());
self.tree.append(&node);
self.tree.append(MerkleNode::from(coin.inner()));
// Loop through all our secret keys...
for (secret, own_coins) in self.cache.iter_mut() {
// .. attempt to decrypt the note ...
if let Ok(note) = ciphertext.decrypt(secret) {
let leaf_position = self.tree.witness().expect("coin should be in tree");
let leaf_position = self.tree.mark().expect("coin should be in tree");
own_coins.push(OwnCoin { coin, note, leaf_position });
}
}

View File

@@ -21,10 +21,10 @@ use std::time::{Duration, Instant};
use darkfi::{tx::Transaction, Result};
use darkfi_sdk::{
crypto::{
merkle_prelude::*, pallas, pasta_prelude::*, pedersen_commitment_u64, poseidon_hash,
Keypair, MerkleNode, MerkleTree, SecretKey, TokenId, DAO_CONTRACT_ID, DARK_TOKEN_ID,
MONEY_CONTRACT_ID,
pasta_prelude::*, pedersen_commitment_u64, poseidon_hash, Keypair, MerkleNode, MerkleTree,
SecretKey, TokenId, DAO_CONTRACT_ID, DARK_TOKEN_ID, MONEY_CONTRACT_ID,
},
pasta::pallas,
ContractCall,
};
use darkfi_serial::{Decodable, Encodable};
@@ -129,8 +129,8 @@ async fn integration_test() -> Result<()> {
let mut dao_tree = MerkleTree::new(100);
let dao_leaf_position = {
let node = MerkleNode::from(params.dao_bulla.inner());
dao_tree.append(&node);
dao_tree.witness().unwrap()
dao_tree.append(node);
dao_tree.mark().unwrap()
};
let dao_bulla = params.dao_bulla;
debug!(target: "dao", "Created DAO bulla: {:?}", dao_bulla.inner());
@@ -392,8 +392,7 @@ async fn integration_test() -> Result<()> {
let (money_leaf_position, money_merkle_path) = {
let tree = &cache.tree;
let leaf_position = gov_recv[0].leaf_position;
let root = tree.root(0).unwrap();
let merkle_path = tree.authentication_path(leaf_position, &root).unwrap();
let merkle_path = tree.witness(leaf_position, 0).unwrap();
(leaf_position, merkle_path)
};
@@ -411,7 +410,7 @@ async fn integration_test() -> Result<()> {
let (dao_merkle_path, dao_merkle_root) = {
let tree = &dao_tree;
let root = tree.root(0).unwrap();
let merkle_path = tree.authentication_path(dao_leaf_position, &root).unwrap();
let merkle_path = tree.witness(dao_leaf_position, 0).unwrap();
(merkle_path, root)
};
@@ -514,8 +513,7 @@ async fn integration_test() -> Result<()> {
let (money_leaf_position, money_merkle_path) = {
let tree = &cache.tree;
let leaf_position = gov_recv[0].leaf_position;
let root = tree.root(0).unwrap();
let merkle_path = tree.authentication_path(leaf_position, &root).unwrap();
let merkle_path = tree.witness(leaf_position, 0).unwrap();
(leaf_position, merkle_path)
};
@@ -590,8 +588,7 @@ async fn integration_test() -> Result<()> {
let (money_leaf_position, money_merkle_path) = {
let tree = &cache.tree;
let leaf_position = gov_recv[1].leaf_position;
let root = tree.root(0).unwrap();
let merkle_path = tree.authentication_path(leaf_position, &root).unwrap();
let merkle_path = tree.witness(leaf_position, 0).unwrap();
(leaf_position, merkle_path)
};
@@ -663,8 +660,7 @@ async fn integration_test() -> Result<()> {
let (money_leaf_position, money_merkle_path) = {
let tree = &cache.tree;
let leaf_position = gov_recv[2].leaf_position;
let root = tree.root(0).unwrap();
let merkle_path = tree.authentication_path(leaf_position, &root).unwrap();
let merkle_path = tree.witness(leaf_position, 0).unwrap();
(leaf_position, merkle_path)
};
@@ -818,8 +814,7 @@ async fn integration_test() -> Result<()> {
let (treasury_leaf_position, treasury_merkle_path) = {
let tree = &cache.tree;
let leaf_position = dao_recv_coin.leaf_position;
let root = tree.root(0).unwrap();
let merkle_path = tree.authentication_path(leaf_position, &root).unwrap();
let merkle_path = tree.witness(leaf_position, 0).unwrap();
(leaf_position, merkle_path)
};