Pārlūkot izejas kodu

contract/test-harness: integrated new TransactionBuilder to consensus and money builders

aggstam 2 gadi atpakaļ
vecāks
revīzija
9d8fdb0c3a

+ 10 - 4
src/contract/test-harness/src/consensus_genesis_stake.rs

@@ -18,7 +18,11 @@
 
 use std::time::Instant;
 
-use darkfi::{tx::Transaction, zk::halo2::Field, Result};
+use darkfi::{
+    tx::{ContractCallLeaf, Transaction, TransactionBuilder},
+    zk::halo2::Field,
+    Result,
+};
 use darkfi_consensus_contract::{
     client::genesis_stake_v1::ConsensusGenesisStakeCallBuilder,
     model::ConsensusGenesisStakeParamsV1, ConsensusFunction,
@@ -72,9 +76,11 @@ impl TestHarness {
         let mut data = vec![ConsensusFunction::GenesisStakeV1 as u8];
         genesis_stake_params.encode(&mut data)?;
         let contract_call = ContractCall { contract_id: *CONSENSUS_CONTRACT_ID, data };
-        let calls = vec![contract_call];
-        let proofs = vec![genesis_stake_proofs];
-        let mut genesis_stake_tx = Transaction { calls, proofs, signatures: vec![] };
+        let mut genesis_stake_tx_builder = TransactionBuilder::new(
+            ContractCallLeaf { call: contract_call, proofs: genesis_stake_proofs },
+            vec![],
+        );
+        let mut genesis_stake_tx = genesis_stake_tx_builder.build()?;
         let sigs = genesis_stake_tx.create_sigs(&mut OsRng, &[wallet.keypair.secret])?;
         genesis_stake_tx.signatures = vec![sigs];
         tx_action_benchmark.creation_times.push(timer.elapsed());

+ 6 - 5
src/contract/test-harness/src/consensus_proposal.rs

@@ -18,7 +18,10 @@
 
 use std::time::Instant;
 
-use darkfi::{tx::Transaction, Result};
+use darkfi::{
+    tx::{ContractCallLeaf, Transaction, TransactionBuilder},
+    Result,
+};
 use darkfi_consensus_contract::{
     client::proposal_v1::ConsensusProposalCallBuilder,
     model::{ConsensusProposalParamsV1, REWARD},
@@ -78,10 +81,8 @@ impl TestHarness {
         let mut data = vec![ConsensusFunction::ProposalV1 as u8];
         params.encode(&mut data)?;
         let call = ContractCall { contract_id: *CONSENSUS_CONTRACT_ID, data };
-
-        let calls = vec![call];
-        let proofs = vec![proofs];
-        let mut tx = Transaction { calls, proofs, signatures: vec![] };
+        let mut tx_builder = TransactionBuilder::new(ContractCallLeaf { call, proofs }, vec![]);
+        let mut tx = tx_builder.build()?;
         let sigs = tx.create_sigs(&mut OsRng, &[signature_secret_key])?;
         tx.signatures = vec![sigs];
         tx_action_benchmark.creation_times.push(timer.elapsed());

+ 11 - 4
src/contract/test-harness/src/consensus_stake.rs

@@ -18,7 +18,10 @@
 
 use std::time::Instant;
 
-use darkfi::{tx::Transaction, Result};
+use darkfi::{
+    tx::{ContractCallLeaf, Transaction, TransactionBuilder},
+    Result,
+};
 use darkfi_consensus_contract::{client::stake_v1::ConsensusStakeCallBuilder, ConsensusFunction};
 use darkfi_money_contract::{
     client::{stake_v1::MoneyStakeCallBuilder, ConsensusOwnCoin, OwnCoin},
@@ -105,9 +108,13 @@ impl TestHarness {
         consensus_stake_params.encode(&mut data)?;
         let consensus_call = ContractCall { contract_id: *CONSENSUS_CONTRACT_ID, data };
 
-        let calls = vec![money_call, consensus_call];
-        let proofs = vec![money_stake_proofs, consensus_stake_proofs];
-        let mut stake_tx = Transaction { calls, proofs, signatures: vec![] };
+        let mut stake_tx_builder = TransactionBuilder::new(
+            ContractCallLeaf { call: consensus_call, proofs: consensus_stake_proofs },
+            vec![],
+        );
+        stake_tx_builder
+            .append(ContractCallLeaf { call: money_call, proofs: money_stake_proofs }, vec![])?;
+        let mut stake_tx = stake_tx_builder.build()?;
         let money_sigs = stake_tx.create_sigs(&mut OsRng, &[money_stake_secret_key])?;
         let consensus_sigs = stake_tx.create_sigs(&mut OsRng, &[consensus_stake_secret_key])?;
         stake_tx.signatures = vec![money_sigs, consensus_sigs];

+ 13 - 4
src/contract/test-harness/src/consensus_unstake.rs

@@ -18,7 +18,10 @@
 
 use std::time::Instant;
 
-use darkfi::{tx::Transaction, Result};
+use darkfi::{
+    tx::{ContractCallLeaf, Transaction, TransactionBuilder},
+    Result,
+};
 use darkfi_consensus_contract::{
     client::unstake_v1::ConsensusUnstakeCallBuilder, ConsensusFunction,
 };
@@ -99,9 +102,15 @@ impl TestHarness {
         money_unstake_params.encode(&mut data)?;
         let money_call = ContractCall { contract_id: *MONEY_CONTRACT_ID, data };
 
-        let calls = vec![consensus_call, money_call];
-        let proofs = vec![consensus_unstake_proofs, money_unstake_proofs];
-        let mut unstake_tx = Transaction { calls, proofs, signatures: vec![] };
+        let mut unstake_tx_builder = TransactionBuilder::new(
+            ContractCallLeaf { call: money_call, proofs: money_unstake_proofs },
+            vec![],
+        );
+        unstake_tx_builder.append(
+            ContractCallLeaf { call: consensus_call, proofs: consensus_unstake_proofs },
+            vec![],
+        )?;
+        let mut unstake_tx = unstake_tx_builder.build()?;
         let consensus_sigs = unstake_tx.create_sigs(&mut OsRng, &[consensus_unstake_secret_key])?;
         let money_sigs = unstake_tx.create_sigs(&mut OsRng, &[consensus_unstake_secret_key])?;
         unstake_tx.signatures = vec![consensus_sigs, money_sigs];

+ 9 - 4
src/contract/test-harness/src/consensus_unstake_request.rs

@@ -18,7 +18,10 @@
 
 use std::time::Instant;
 
-use darkfi::{tx::Transaction, Result};
+use darkfi::{
+    tx::{ContractCallLeaf, Transaction, TransactionBuilder},
+    Result,
+};
 use darkfi_consensus_contract::{
     client::unstake_request_v1::ConsensusUnstakeRequestCallBuilder, ConsensusFunction,
 };
@@ -84,9 +87,11 @@ impl TestHarness {
         let mut data = vec![ConsensusFunction::UnstakeRequestV1 as u8];
         unstake_request_params.encode(&mut data)?;
         let call = ContractCall { contract_id: *CONSENSUS_CONTRACT_ID, data };
-        let calls = vec![call];
-        let proofs = vec![unstake_request_proofs];
-        let mut unstake_request_tx = Transaction { calls, proofs, signatures: vec![] };
+        let mut unstake_request_builder = TransactionBuilder::new(
+            ContractCallLeaf { call, proofs: unstake_request_proofs },
+            vec![],
+        );
+        let mut unstake_request_tx = unstake_request_builder.build()?;
         let sigs =
             unstake_request_tx.create_sigs(&mut OsRng, &[unstake_request_signature_secret_key])?;
         unstake_request_tx.signatures = vec![sigs];

+ 9 - 4
src/contract/test-harness/src/money_airdrop.rs

@@ -18,7 +18,11 @@
 
 use std::time::Instant;
 
-use darkfi::{tx::Transaction, zk::halo2::Field, Result};
+use darkfi::{
+    tx::{ContractCallLeaf, Transaction, TransactionBuilder},
+    zk::halo2::Field,
+    Result,
+};
 use darkfi_money_contract::{
     client::{transfer_v1 as xfer, OwnCoin},
     model::MoneyTransferParamsV1,
@@ -81,9 +85,10 @@ impl TestHarness {
 
         let mut data = vec![MoneyFunction::TransferV1 as u8];
         params.encode(&mut data)?;
-        let calls = vec![ContractCall { contract_id: *MONEY_CONTRACT_ID, data }];
-        let proofs = vec![secrets.proofs];
-        let mut tx = Transaction { calls, proofs, signatures: vec![] };
+        let call = ContractCall { contract_id: *MONEY_CONTRACT_ID, data };
+        let mut tx_builder =
+            TransactionBuilder::new(ContractCallLeaf { call, proofs: secrets.proofs }, vec![]);
+        let mut tx = tx_builder.build()?;
         let sigs = tx.create_sigs(&mut OsRng, &secrets.signature_secrets)?;
         tx.signatures = vec![sigs];
         tx_action_benchmark.creation_times.push(timer.elapsed());

+ 8 - 4
src/contract/test-harness/src/money_genesis_mint.rs

@@ -18,7 +18,10 @@
 
 use std::time::Instant;
 
-use darkfi::{tx::Transaction, Result};
+use darkfi::{
+    tx::{ContractCallLeaf, Transaction, TransactionBuilder},
+    Result,
+};
 use darkfi_money_contract::{
     client::genesis_mint_v1::GenesisMintCallBuilder, model::MoneyTokenMintParamsV1, MoneyFunction,
     MONEY_CONTRACT_ZKAS_MINT_NS_V1,
@@ -66,9 +69,10 @@ impl TestHarness {
 
         let mut data = vec![MoneyFunction::GenesisMintV1 as u8];
         debris.params.encode(&mut data)?;
-        let calls = vec![ContractCall { contract_id: *MONEY_CONTRACT_ID, data }];
-        let proofs = vec![debris.proofs];
-        let mut tx = Transaction { calls, proofs, signatures: vec![] };
+        let call = ContractCall { contract_id: *MONEY_CONTRACT_ID, data };
+        let mut tx_builder =
+            TransactionBuilder::new(ContractCallLeaf { call, proofs: debris.proofs }, vec![]);
+        let mut tx = tx_builder.build()?;
         let sigs = tx.create_sigs(&mut OsRng, &[wallet.keypair.secret])?;
         tx.signatures = vec![sigs];
         tx_action_benchmark.creation_times.push(timer.elapsed());

+ 9 - 6
src/contract/test-harness/src/money_otc_swap.rs

@@ -18,7 +18,11 @@
 
 use std::time::Instant;
 
-use darkfi::{tx::Transaction, zk::halo2::Field, Result};
+use darkfi::{
+    tx::{ContractCallLeaf, Transaction, TransactionBuilder},
+    zk::halo2::Field,
+    Result,
+};
 use darkfi_money_contract::{
     client::{swap_v1::SwapCallBuilder, OwnCoin},
     model::MoneyTransferParamsV1,
@@ -134,11 +138,10 @@ impl TestHarness {
         // And signs the transaction
         let mut data = vec![MoneyFunction::OtcSwapV1 as u8];
         swap_full_params.encode(&mut data)?;
-        let mut tx = Transaction {
-            calls: vec![ContractCall { contract_id: *MONEY_CONTRACT_ID, data }],
-            proofs: vec![swap_full_proofs],
-            signatures: vec![],
-        };
+        let call = ContractCall { contract_id: *MONEY_CONTRACT_ID, data };
+        let mut tx_builder =
+            TransactionBuilder::new(ContractCallLeaf { call, proofs: swap_full_proofs }, vec![]);
+        let mut tx = tx_builder.build()?;
         let sigs = tx.create_sigs(&mut OsRng, &[debris1.signature_secret])?;
         tx.signatures = vec![sigs];
 

+ 8 - 4
src/contract/test-harness/src/money_pow_reward.rs

@@ -18,7 +18,10 @@
 
 use std::time::Instant;
 
-use darkfi::{tx::Transaction, Result};
+use darkfi::{
+    tx::{ContractCallLeaf, Transaction, TransactionBuilder},
+    Result,
+};
 use darkfi_money_contract::{
     client::pow_reward_v1::PoWRewardCallBuilder, model::MoneyPoWRewardParamsV1, MoneyFunction,
     MONEY_CONTRACT_ZKAS_MINT_NS_V1,
@@ -86,9 +89,10 @@ impl TestHarness {
 
         let mut data = vec![MoneyFunction::PoWRewardV1 as u8];
         debris.params.encode(&mut data)?;
-        let calls = vec![ContractCall { contract_id: *MONEY_CONTRACT_ID, data }];
-        let proofs = vec![debris.proofs];
-        let mut tx = Transaction { calls, proofs, signatures: vec![] };
+        let call = ContractCall { contract_id: *MONEY_CONTRACT_ID, data };
+        let mut tx_builder =
+            TransactionBuilder::new(ContractCallLeaf { call, proofs: debris.proofs }, vec![]);
+        let mut tx = tx_builder.build()?;
         let sigs = tx.create_sigs(&mut OsRng, &[wallet.keypair.secret])?;
         tx.signatures = vec![sigs];
         tx_action_benchmark.creation_times.push(timer.elapsed());

+ 13 - 7
src/contract/test-harness/src/money_token.rs

@@ -18,7 +18,11 @@
 
 use std::time::Instant;
 
-use darkfi::{tx::Transaction, zk::halo2::Field, Result};
+use darkfi::{
+    tx::{ContractCallLeaf, Transaction, TransactionBuilder},
+    zk::halo2::Field,
+    Result,
+};
 use darkfi_money_contract::{
     client::{token_freeze_v1::TokenFreezeCallBuilder, token_mint_v1::TokenMintCallBuilder},
     model::{MoneyTokenFreezeParamsV1, MoneyTokenMintParamsV1},
@@ -70,9 +74,10 @@ impl TestHarness {
 
         let mut data = vec![MoneyFunction::TokenMintV1 as u8];
         debris.params.encode(&mut data)?;
-        let calls = vec![ContractCall { contract_id: *MONEY_CONTRACT_ID, data }];
-        let proofs = vec![debris.proofs];
-        let mut tx = Transaction { calls, proofs, signatures: vec![] };
+        let call = ContractCall { contract_id: *MONEY_CONTRACT_ID, data };
+        let mut tx_builder =
+            TransactionBuilder::new(ContractCallLeaf { call, proofs: debris.proofs }, vec![]);
+        let mut tx = tx_builder.build()?;
         let sigs = tx.create_sigs(&mut OsRng, &[mint_authority.secret])?;
         tx.signatures = vec![sigs];
         tx_action_benchmark.creation_times.push(timer.elapsed());
@@ -132,9 +137,10 @@ impl TestHarness {
 
         let mut data = vec![MoneyFunction::TokenFreezeV1 as u8];
         debris.params.encode(&mut data)?;
-        let calls = vec![ContractCall { contract_id: *MONEY_CONTRACT_ID, data }];
-        let proofs = vec![debris.proofs];
-        let mut tx = Transaction { calls, proofs, signatures: vec![] };
+        let call = ContractCall { contract_id: *MONEY_CONTRACT_ID, data };
+        let mut tx_builder =
+            TransactionBuilder::new(ContractCallLeaf { call, proofs: debris.proofs }, vec![]);
+        let mut tx = tx_builder.build()?;
         let sigs = tx.create_sigs(&mut OsRng, &[mint_authority.secret])?;
         tx.signatures = vec![sigs];
         tx_action_benchmark.creation_times.push(timer.elapsed());

+ 8 - 4
src/contract/test-harness/src/money_transfer.rs

@@ -18,7 +18,10 @@
 
 use std::time::Instant;
 
-use darkfi::{tx::Transaction, Result};
+use darkfi::{
+    tx::{ContractCallLeaf, Transaction, TransactionBuilder},
+    Result,
+};
 use darkfi_money_contract::{
     client::{transfer_v1::make_transfer_call, OwnCoin},
     model::MoneyTransferParamsV1,
@@ -71,9 +74,10 @@ impl TestHarness {
 
         let mut data = vec![MoneyFunction::TransferV1 as u8];
         params.encode(&mut data)?;
-        let calls = vec![ContractCall { contract_id: *MONEY_CONTRACT_ID, data }];
-        let proofs = vec![secrets.proofs];
-        let mut tx = Transaction { calls, proofs, signatures: vec![] };
+        let call = ContractCall { contract_id: *MONEY_CONTRACT_ID, data };
+        let mut tx_builder =
+            TransactionBuilder::new(ContractCallLeaf { call, proofs: secrets.proofs }, vec![]);
+        let mut tx = tx_builder.build()?;
         let sigs = tx.create_sigs(&mut OsRng, &secrets.signature_secrets)?;
         tx.signatures = vec![sigs];
         tx_action_benchmark.creation_times.push(timer.elapsed());

+ 7 - 6
src/tx/mod.rs

@@ -186,8 +186,6 @@ pub struct ContractCallLeaf {
     pub call: ContractCall,
     /// Attached ZK proofs
     pub proofs: Vec<Proof>,
-    /// Attached Schnorr signatures
-    pub signatures: Vec<Signature>,
 }
 
 /// Auxilliary structure to build a full [`Transaction`] using
@@ -208,7 +206,12 @@ impl TransactionBuilder {
     }
 
     /// Append a new call to the tree
-    pub fn append(&mut self, child: DarkTree<ContractCallLeaf>) -> DarkTreeResult<()> {
+    pub fn append(
+        &mut self,
+        data: ContractCallLeaf,
+        children: Vec<DarkTree<ContractCallLeaf>>,
+    ) -> DarkTreeResult<()> {
+        let child = DarkTree::new(data, children, Some(MIN_TX_CALLS), Some(MAX_TX_CALLS));
         self.calls.append(child)
     }
 
@@ -224,7 +227,6 @@ impl TransactionBuilder {
         // Build the corresponding transaction
         let mut calls = Vec::with_capacity(leafs.len());
         let mut proofs = Vec::with_capacity(leafs.len());
-        let mut signatures = Vec::with_capacity(leafs.len());
         for leaf in leafs {
             let call = DarkLeaf {
                 data: leaf.data.call,
@@ -233,9 +235,8 @@ impl TransactionBuilder {
             };
             calls.push(call);
             proofs.push(leaf.data.proofs);
-            signatures.push(leaf.data.signatures);
         }
 
-        Ok(Transaction { calls, proofs, signatures })
+        Ok(Transaction { calls, proofs, signatures: vec![] })
     }
 }