Просмотр исходного кода

contract/consensus: Replace incrementalmerkletree with bridgetree

parazyd 3 лет назад
Родитель
Сommit
7cc0f78159

+ 2 - 2
src/contract/consensus/Cargo.toml

@@ -9,7 +9,7 @@ edition = "2021"
 crate-type = ["cdylib", "rlib"]
 crate-type = ["cdylib", "rlib"]
 
 
 [dependencies]
 [dependencies]
-blake3 = "1.3.3"
+blake3 = "1.4.0"
 darkfi-sdk = { path = "../../sdk" }
 darkfi-sdk = { path = "../../sdk" }
 darkfi-serial = { path = "../../serial", features = ["derive", "crypto"] }
 darkfi-serial = { path = "../../serial", features = ["derive", "crypto"] }
 darkfi-money-contract = { path = "../money", features = ["no-entrypoint"] }
 darkfi-money-contract = { path = "../money", features = ["no-entrypoint"] }
@@ -20,7 +20,7 @@ thiserror = "1.0.40"
 chacha20poly1305 = { version = "0.10.1", optional = true }
 chacha20poly1305 = { version = "0.10.1", optional = true }
 darkfi = { path = "../../../", features = ["zk", "rpc", "blockchain"], optional = true }
 darkfi = { path = "../../../", features = ["zk", "rpc", "blockchain"], optional = true }
 halo2_proofs = { version = "0.3.0", optional = true }
 halo2_proofs = { version = "0.3.0", optional = true }
-log = { version = "0.4.18", optional = true }
+log = { version = "0.4.19", optional = true }
 rand = { version = "0.8.5", optional = true }
 rand = { version = "0.8.5", optional = true }
 
 
 # These are used just for the integration tests
 # These are used just for the integration tests

+ 0 - 1
src/contract/consensus/src/client/common.rs

@@ -29,7 +29,6 @@ use darkfi_sdk::{
         pasta_prelude::*, pedersen_commitment_u64, poseidon_hash, MerkleNode, MerklePosition,
         pasta_prelude::*, pedersen_commitment_u64, poseidon_hash, MerkleNode, MerklePosition,
         Nullifier, PublicKey, SecretKey,
         Nullifier, PublicKey, SecretKey,
     },
     },
-    incrementalmerkletree::Hashable,
     pasta::pallas,
     pasta::pallas,
 };
 };
 use rand::rngs::OsRng;
 use rand::rngs::OsRng;

+ 0 - 1
src/contract/consensus/src/client/proposal_v1.rs

@@ -33,7 +33,6 @@ use darkfi_sdk::{
         ecvrf::VrfProof, note::AeadEncryptedNote, pasta_prelude::*, pedersen_commitment_u64,
         ecvrf::VrfProof, note::AeadEncryptedNote, pasta_prelude::*, pedersen_commitment_u64,
         poseidon_hash, Keypair, MerkleNode, MerkleTree, Nullifier, PublicKey, SecretKey,
         poseidon_hash, Keypair, MerkleNode, MerkleTree, Nullifier, PublicKey, SecretKey,
     },
     },
-    incrementalmerkletree::{Hashable, Tree},
     pasta::{group::ff::FromUniformBytes, pallas},
     pasta::{group::ff::FromUniformBytes, pallas},
 };
 };
 use log::{debug, info};
 use log::{debug, info};

+ 0 - 1
src/contract/consensus/src/client/unstake_request_v1.rs

@@ -29,7 +29,6 @@ use darkfi_money_contract::{
 };
 };
 use darkfi_sdk::{
 use darkfi_sdk::{
     crypto::{note::AeadEncryptedNote, pasta_prelude::*, Keypair, MerkleTree, SecretKey},
     crypto::{note::AeadEncryptedNote, pasta_prelude::*, Keypair, MerkleTree, SecretKey},
-    incrementalmerkletree::Tree,
     pasta::pallas,
     pasta::pallas,
 };
 };
 use log::{debug, info};
 use log::{debug, info};

+ 0 - 1
src/contract/consensus/src/client/unstake_v1.rs

@@ -29,7 +29,6 @@ use darkfi_money_contract::{
 };
 };
 use darkfi_sdk::{
 use darkfi_sdk::{
     crypto::{pasta_prelude::*, MerkleTree, SecretKey},
     crypto::{pasta_prelude::*, MerkleTree, SecretKey},
-    incrementalmerkletree::Tree,
     pasta::pallas,
     pasta::pallas,
 };
 };
 use log::{debug, info};
 use log::{debug, info};

+ 1 - 1
src/contract/consensus/src/entrypoint.rs

@@ -131,7 +131,7 @@ fn init_contract(cid: ContractId, _ix: &[u8]) -> ContractResult {
         Err(_) => {
         Err(_) => {
             let info_db = db_init(cid, CONSENSUS_CONTRACT_INFO_TREE)?;
             let info_db = db_init(cid, CONSENSUS_CONTRACT_INFO_TREE)?;
 
 
-            // Create the incrementalmerkletree for staked and unstaked coins.
+            // Create the Merkle tree for staked and unstaked coins.
             // We can simply reuse the same empty tree twice.
             // We can simply reuse the same empty tree twice.
             let coin_tree = MerkleTree::new(100);
             let coin_tree = MerkleTree::new(100);
             let mut coin_tree_data = vec![];
             let mut coin_tree_data = vec![];

+ 11 - 11
src/contract/consensus/tests/harness.rs

@@ -34,8 +34,8 @@ use darkfi::{
 };
 };
 use darkfi_sdk::{
 use darkfi_sdk::{
     crypto::{
     crypto::{
-        merkle_prelude::*, poseidon_hash, Keypair, MerkleNode, MerkleTree, Nullifier, PublicKey,
-        SecretKey, CONSENSUS_CONTRACT_ID, DARK_TOKEN_ID, MONEY_CONTRACT_ID,
+        poseidon_hash, Keypair, MerkleNode, MerkleTree, Nullifier, PublicKey, SecretKey,
+        CONSENSUS_CONTRACT_ID, DARK_TOKEN_ID, MONEY_CONTRACT_ID,
     },
     },
     pasta::pallas,
     pasta::pallas,
     ContractCall,
     ContractCall,
@@ -331,7 +331,7 @@ impl ConsensusTestHarness {
         let erroneous_txs =
         let erroneous_txs =
             wallet.state.read().await.verify_transactions(&[tx], slot, true).await?;
             wallet.state.read().await.verify_transactions(&[tx], slot, true).await?;
         assert!(erroneous_txs.is_empty());
         assert!(erroneous_txs.is_empty());
-        wallet.money_merkle_tree.append(&MerkleNode::from(params.outputs[0].coin.inner()));
+        wallet.money_merkle_tree.append(MerkleNode::from(params.outputs[0].coin.inner()));
         tx_action_benchmark.verify_times.push(timer.elapsed());
         tx_action_benchmark.verify_times.push(timer.elapsed());
 
 
         Ok(())
         Ok(())
@@ -398,7 +398,7 @@ impl ConsensusTestHarness {
         let erroneous_txs =
         let erroneous_txs =
             wallet.state.read().await.verify_transactions(&[tx], slot, true).await?;
             wallet.state.read().await.verify_transactions(&[tx], slot, true).await?;
         assert!(erroneous_txs.is_empty());
         assert!(erroneous_txs.is_empty());
-        wallet.consensus_staked_merkle_tree.append(&MerkleNode::from(params.output.coin.inner()));
+        wallet.consensus_staked_merkle_tree.append(MerkleNode::from(params.output.coin.inner()));
         tx_action_benchmark.verify_times.push(timer.elapsed());
         tx_action_benchmark.verify_times.push(timer.elapsed());
 
 
         Ok(())
         Ok(())
@@ -518,7 +518,7 @@ impl ConsensusTestHarness {
         let erroneous_txs =
         let erroneous_txs =
             wallet.state.read().await.verify_transactions(&[tx], slot, true).await?;
             wallet.state.read().await.verify_transactions(&[tx], slot, true).await?;
         assert!(erroneous_txs.is_empty());
         assert!(erroneous_txs.is_empty());
-        wallet.consensus_staked_merkle_tree.append(&MerkleNode::from(params.output.coin.inner()));
+        wallet.consensus_staked_merkle_tree.append(MerkleNode::from(params.output.coin.inner()));
         tx_action_benchmark.verify_times.push(timer.elapsed());
         tx_action_benchmark.verify_times.push(timer.elapsed());
 
 
         Ok(())
         Ok(())
@@ -594,7 +594,7 @@ impl ConsensusTestHarness {
         let erroneous_txs =
         let erroneous_txs =
             wallet.state.read().await.verify_transactions(&[tx], slot, true).await?;
             wallet.state.read().await.verify_transactions(&[tx], slot, true).await?;
         assert!(erroneous_txs.is_empty());
         assert!(erroneous_txs.is_empty());
-        wallet.consensus_staked_merkle_tree.append(&MerkleNode::from(params.output.coin.inner()));
+        wallet.consensus_staked_merkle_tree.append(MerkleNode::from(params.output.coin.inner()));
         tx_action_benchmark.verify_times.push(timer.elapsed());
         tx_action_benchmark.verify_times.push(timer.elapsed());
 
 
         Ok(())
         Ok(())
@@ -702,7 +702,7 @@ impl ConsensusTestHarness {
         let erroneous_txs =
         let erroneous_txs =
             wallet.state.read().await.verify_transactions(&[tx], slot, true).await?;
             wallet.state.read().await.verify_transactions(&[tx], slot, true).await?;
         assert!(erroneous_txs.is_empty());
         assert!(erroneous_txs.is_empty());
-        wallet.consensus_unstaked_merkle_tree.append(&MerkleNode::from(params.output.coin.inner()));
+        wallet.consensus_unstaked_merkle_tree.append(MerkleNode::from(params.output.coin.inner()));
         tx_action_benchmark.verify_times.push(timer.elapsed());
         tx_action_benchmark.verify_times.push(timer.elapsed());
 
 
         Ok(())
         Ok(())
@@ -817,7 +817,7 @@ impl ConsensusTestHarness {
         let erroneous_txs =
         let erroneous_txs =
             wallet.state.read().await.verify_transactions(&[tx], slot, true).await?;
             wallet.state.read().await.verify_transactions(&[tx], slot, true).await?;
         assert!(erroneous_txs.is_empty());
         assert!(erroneous_txs.is_empty());
-        wallet.money_merkle_tree.append(&MerkleNode::from(params.output.coin.inner()));
+        wallet.money_merkle_tree.append(MerkleNode::from(params.output.coin.inner()));
         tx_action_benchmark.verify_times.push(timer.elapsed());
         tx_action_benchmark.verify_times.push(timer.elapsed());
 
 
         Ok(())
         Ok(())
@@ -830,7 +830,7 @@ impl ConsensusTestHarness {
         secret_key: Option<SecretKey>,
         secret_key: Option<SecretKey>,
     ) -> Result<OwnCoin> {
     ) -> Result<OwnCoin> {
         let wallet = self.holders.get_mut(&holder).unwrap();
         let wallet = self.holders.get_mut(&holder).unwrap();
-        let leaf_position = wallet.money_merkle_tree.witness().unwrap();
+        let leaf_position = wallet.money_merkle_tree.mark().unwrap();
         let secret_key = match secret_key {
         let secret_key = match secret_key {
             Some(key) => key,
             Some(key) => key,
             None => wallet.keypair.secret,
             None => wallet.keypair.secret,
@@ -854,7 +854,7 @@ impl ConsensusTestHarness {
         secret_key: Option<SecretKey>,
         secret_key: Option<SecretKey>,
     ) -> Result<ConsensusOwnCoin> {
     ) -> Result<ConsensusOwnCoin> {
         let wallet = self.holders.get_mut(&holder).unwrap();
         let wallet = self.holders.get_mut(&holder).unwrap();
-        let leaf_position = wallet.consensus_staked_merkle_tree.witness().unwrap();
+        let leaf_position = wallet.consensus_staked_merkle_tree.mark().unwrap();
         let secret_key = match secret_key {
         let secret_key = match secret_key {
             Some(key) => key,
             Some(key) => key,
             None => wallet.keypair.secret,
             None => wallet.keypair.secret,
@@ -878,7 +878,7 @@ impl ConsensusTestHarness {
         secret_key: Option<SecretKey>,
         secret_key: Option<SecretKey>,
     ) -> Result<ConsensusOwnCoin> {
     ) -> Result<ConsensusOwnCoin> {
         let wallet = self.holders.get_mut(&holder).unwrap();
         let wallet = self.holders.get_mut(&holder).unwrap();
-        let leaf_position = wallet.consensus_unstaked_merkle_tree.witness().unwrap();
+        let leaf_position = wallet.consensus_unstaked_merkle_tree.mark().unwrap();
         let secret_key = match secret_key {
         let secret_key = match secret_key {
             Some(key) => key,
             Some(key) => key,
             None => wallet.keypair.secret,
             None => wallet.keypair.secret,

+ 1 - 1
src/contract/consensus/tests/stake_unstake.rs

@@ -228,7 +228,7 @@ async fn consensus_contract_stake_unstake() -> Result<()> {
     info!(target: "consensus", "[Alice] ===================");
     info!(target: "consensus", "[Alice] ===================");
     info!(target: "consensus", "[Alice] Building unstake tx");
     info!(target: "consensus", "[Alice] Building unstake tx");
     info!(target: "consensus", "[Alice] ===================");
     info!(target: "consensus", "[Alice] ===================");
-    let (unstake_tx, unstake_params, unstake_secret_key) =
+    let (unstake_tx, unstake_params, _) =
         th.unstake(Holder::Alice, alice_unstake_request_oc.clone())?;
         th.unstake(Holder::Alice, alice_unstake_request_oc.clone())?;
 
 
     info!(target: "consensus", "[Faucet] ==========================");
     info!(target: "consensus", "[Faucet] ==========================");