mirror of
https://github.com/darkrenaissance/darkfi.git
synced 2026-04-28 03:00:18 -04:00
contract/dao: Replace incrementalmerkletree with bridgetree crate.
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
|
||||
@@ -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};
|
||||
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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 });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user