Преглед изворни кода

contract/money: Final integration test fixes

Signed-off-by: parazyd <parazyd@dyne.org>
parazyd пре 2 година
родитељ
комит
8c2a7c65a1

+ 2 - 4
src/contract/money/src/client/fee_v1.rs

@@ -65,8 +65,6 @@ pub struct FeeRevealed {
     pub token_commit: pallas::Base,
     /// Merkle root for input coin
     pub merkle_root: MerkleNode,
-    /// Input's spend hook
-    pub input_spend_hook: FuncId,
     /// Encrypted user data for input coin
     pub input_user_data_enc: pallas::Base,
     /// Public key used to sign transaction
@@ -94,7 +92,6 @@ impl FeeRevealed {
             self.token_commit,
             self.merkle_root.inner(),
             self.input_user_data_enc,
-            self.input_spend_hook.inner(),
             *sigpub_coords.x(),
             *sigpub_coords.y(),
             self.output_coin.inner(),
@@ -181,7 +178,6 @@ pub fn create_fee_proof(
         input_value_commit,
         token_commit,
         merkle_root,
-        input_spend_hook: input.note.spend_hook,
         input_user_data_enc,
         signature_public,
         output_coin,
@@ -208,6 +204,8 @@ pub fn create_fee_proof(
         Witness::Base(Value::known(token_blind.inner())),
     ];
 
+    //darkfi::zk::export_witness_json("witness.json", &prover_witnesses, &public_inputs.to_vec());
+
     let circuit = ZkCircuit::new(prover_witnesses, zkbin);
     let proof = Proof::create(pk, &[circuit], &public_inputs.to_vec(), &mut OsRng)?;
 

+ 49 - 2
src/contract/money/tests/integration.rs

@@ -18,6 +18,7 @@
 
 use darkfi::Result;
 use darkfi_contract_test_harness::{init_logger, Holder, TestHarness};
+use darkfi_sdk::blockchain::expected_reward;
 
 #[test]
 fn money_integration() -> Result<()> {
@@ -30,12 +31,58 @@ fn money_integration() -> Result<()> {
         // Initialize harness
         let mut th = TestHarness::new(&HOLDERS, true).await?;
 
-        // Generate a new block mined by Alice
+        // Generate two new blocks mined by Alice
+        th.generate_block(&Holder::Alice, &HOLDERS).await?;
         th.generate_block(&Holder::Alice, &HOLDERS).await?;
 
-        // Generate a new block mined by Bob
+        // Generate two new blocks mined by Bob
+        th.generate_block(&Holder::Bob, &HOLDERS).await?;
         th.generate_block(&Holder::Bob, &HOLDERS).await?;
 
+        // Assert correct rewards
+        let alice_coins = &th.holders.get(&Holder::Alice).unwrap().unspent_money_coins;
+        let bob_coins = &th.holders.get(&Holder::Bob).unwrap().unspent_money_coins;
+        assert!(alice_coins.len() == 2);
+        assert!(bob_coins.len() == 2);
+        assert!(alice_coins[0].note.value == expected_reward(1));
+        assert!(alice_coins[1].note.value == expected_reward(2));
+        assert!(bob_coins[0].note.value == expected_reward(3));
+        assert!(bob_coins[1].note.value == expected_reward(4));
+
+        let current_block_height = 4;
+
+        // Alice transfers some tokens to Bob
+        let (tx, (xfer_params, fee_params), _spent_soins) = th
+            .transfer(
+                alice_coins[0].note.value,
+                &Holder::Alice,
+                &Holder::Bob,
+                &[alice_coins[0].clone()],
+                alice_coins[0].note.token_id,
+                current_block_height,
+            )
+            .await?;
+
+        // Execute the transaction
+        for holder in &HOLDERS {
+            th.execute_transfer_tx(
+                holder,
+                tx.clone(),
+                &xfer_params,
+                &fee_params,
+                current_block_height,
+                true,
+            )
+            .await?;
+        }
+
+        // Assert coins in wallets
+        let alice_coins = &th.holders.get(&Holder::Alice).unwrap().unspent_money_coins;
+        let bob_coins = &th.holders.get(&Holder::Bob).unwrap().unspent_money_coins;
+        assert!(alice_coins.len() == 1); // Change from fee
+        assert!(bob_coins.len() == 3);
+        assert!(bob_coins[2].note.value == expected_reward(1));
+
         // Thanks for reading
         Ok(())
     })

+ 0 - 5
src/validator/verification.rs

@@ -660,11 +660,6 @@ pub async fn verify_transactions(
                 overlay.lock().unwrap().revert_to_checkpoint()?;
             }
         }
-
-        if verify_fees {
-            // Enforce that enough fee is paid.
-            todo!()
-        }
     }
 
     if erroneous_txs.is_empty() {