From 3b75ee04c12524e32eac44d94ec88a8752f02da1 Mon Sep 17 00:00:00 2001 From: parazyd Date: Thu, 23 Feb 2023 22:36:01 +0100 Subject: [PATCH] Get contract/dao to compile. --- src/contract/dao/src/dao_client/propose.rs | 3 +- src/contract/dao/src/dao_client/vote.rs | 3 +- src/contract/dao/src/money_client.rs | 61 ++++++++++++-------- src/contract/dao/src/wallet_cache.rs | 9 +-- src/contract/money/src/client/mint_v1.rs | 2 +- src/contract/money/src/client/transfer_v1.rs | 10 ++-- 6 files changed, 49 insertions(+), 39 deletions(-) diff --git a/src/contract/dao/src/dao_client/propose.rs b/src/contract/dao/src/dao_client/propose.rs index 6f68a503a..f387d10e1 100644 --- a/src/contract/dao/src/dao_client/propose.rs +++ b/src/contract/dao/src/dao_client/propose.rs @@ -51,8 +51,7 @@ pub struct DaoProposeNote { pub struct DaoProposeStakeInput { pub secret: SecretKey, - //pub note: money::transfer::wallet::Note, - pub note: darkfi_money_contract::client::Note, + pub note: darkfi_money_contract::client::MoneyNote, pub leaf_position: MerklePosition, pub merkle_path: Vec, pub signature_secret: SecretKey, diff --git a/src/contract/dao/src/dao_client/vote.rs b/src/contract/dao/src/dao_client/vote.rs index 7814be897..5787f3831 100644 --- a/src/contract/dao/src/dao_client/vote.rs +++ b/src/contract/dao/src/dao_client/vote.rs @@ -47,8 +47,7 @@ pub struct DaoVoteNote { pub struct DaoVoteInput { pub secret: SecretKey, - //pub note: money::transfer::wallet::Note, - pub note: darkfi_money_contract::client::Note, + pub note: darkfi_money_contract::client::MoneyNote, pub leaf_position: MerklePosition, pub merkle_path: Vec, pub signature_secret: SecretKey, diff --git a/src/contract/dao/src/money_client.rs b/src/contract/dao/src/money_client.rs index 9172f90f2..20a26b322 100644 --- a/src/contract/dao/src/money_client.rs +++ b/src/contract/dao/src/money_client.rs @@ -16,20 +16,30 @@ * along with this program. If not, see . */ +//! TODO: This file should be deleted and the API from money::client +//! should be used directly. + use darkfi::{ zk::{Proof, ProvingKey}, zkas::ZkBinary, Result, }; use darkfi_sdk::crypto::{ - pallas, pasta_prelude::*, MerkleNode, MerklePosition, PublicKey, SecretKey, TokenId, ValueBlind, + note::AeadEncryptedNote, pallas, pasta_prelude::*, MerkleNode, MerklePosition, PublicKey, + SecretKey, TokenId, ValueBlind, }; use rand::rngs::OsRng; use darkfi_money_contract::{ - client::{create_transfer_burn_proof, create_transfer_mint_proof, Note}, - model::{ClearInput, Input, MoneyTransferParams, Output}, + client::{ + transfer_v1::{ + create_transfer_burn_proof, create_transfer_mint_proof, TransactionBuilderInputInfo, + TransactionBuilderOutputInfo, + }, + MoneyNote, + }, + model::{ClearInput, Input, MoneyTransferParamsV1, Output}, }; pub struct TransferCall { @@ -48,7 +58,7 @@ pub struct TransferInput { pub leaf_position: MerklePosition, pub merkle_path: Vec, pub secret: SecretKey, - pub note: Note, + pub note: MoneyNote, pub user_data_blind: pallas::Base, pub value_blind: ValueBlind, pub signature_secret: SecretKey, @@ -93,7 +103,7 @@ impl TransferCall { mint_pk: &ProvingKey, burn_zkbin: &ZkBinary, burn_pk: &ProvingKey, - ) -> Result<(MoneyTransferParams, Vec)> { + ) -> Result<(MoneyTransferParamsV1, Vec)> { assert!(self.clear_inputs.len() + self.inputs.len() > 0); let mut clear_inputs = vec![]; @@ -120,24 +130,21 @@ impl TransferCall { let value_blind = input.value_blind; input_blinds.push(value_blind); - // Note from the previous output - let note = input.note.clone(); + // FIXME: Just an API hack + let _input = TransactionBuilderInputInfo { + leaf_position: input.leaf_position, + merkle_path: input.merkle_path, + secret: input.secret, + note: input.note, + }; let (proof, revealed) = create_transfer_burn_proof( burn_zkbin, burn_pk, - note.value, - note.token_id, + &_input, value_blind, token_blind, - note.serial, - note.spend_hook, - note.user_data, input.user_data_blind, - note.coin_blind, - input.secret, - input.leaf_position, - input.merkle_path.clone(), input.signature_secret, )?; @@ -171,23 +178,28 @@ impl TransferCall { let serial = output.serial; let coin_blind = output.coin_blind; + // FIXME: This is a hack between the two APIs + let _output = TransactionBuilderOutputInfo { + value: output.value, + token_id: output.token_id, + public_key: output.public, + }; + let (proof, revealed) = create_transfer_mint_proof( mint_zkbin, mint_pk, - output.value, - output.token_id, + &_output, value_blind, token_blind, serial, output.spend_hook, output.user_data, coin_blind, - output.public, )?; proofs.push(proof); - let note = Note { + let note = MoneyNote { serial, value: output.value, token_id: output.token_id, @@ -199,18 +211,17 @@ impl TransferCall { memo: Vec::new(), }; - let encrypted_note = note.encrypt(&output.public)?; + let encrypted_note = AeadEncryptedNote::encrypt(¬e, &output.public, &mut OsRng)?; let output = Output { value_commit: revealed.value_commit, token_commit: revealed.token_commit, - coin: revealed.coin.inner(), - ciphertext: encrypted_note.ciphertext, - ephem_public: encrypted_note.ephem_public, + coin: revealed.coin, + note: encrypted_note, }; outputs.push(output); } - Ok((MoneyTransferParams { clear_inputs, inputs, outputs }, proofs)) + Ok((MoneyTransferParamsV1 { clear_inputs, inputs, outputs }, proofs)) } } diff --git a/src/contract/dao/src/wallet_cache.rs b/src/contract/dao/src/wallet_cache.rs index 4330351e1..84139a286 100644 --- a/src/contract/dao/src/wallet_cache.rs +++ b/src/contract/dao/src/wallet_cache.rs @@ -17,14 +17,15 @@ */ use darkfi_sdk::crypto::{ - merkle_prelude::*, Coin, MerkleNode, MerklePosition, MerkleTree, SecretKey, + merkle_prelude::*, note::AeadEncryptedNote, Coin, MerkleNode, MerklePosition, MerkleTree, + SecretKey, }; -use darkfi_money_contract::client::{EncryptedNote, Note}; +use darkfi_money_contract::client::MoneyNote; pub struct OwnCoin { pub coin: Coin, - pub note: Note, + pub note: MoneyNote, pub leaf_position: MerklePosition, } @@ -64,7 +65,7 @@ impl WalletCache { panic!("you forget to track() this secret!"); } - pub fn try_decrypt_note(&mut self, coin: Coin, ciphertext: &EncryptedNote) { + 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); diff --git a/src/contract/money/src/client/mint_v1.rs b/src/contract/money/src/client/mint_v1.rs index cd1a51892..0c01bf285 100644 --- a/src/contract/money/src/client/mint_v1.rs +++ b/src/contract/money/src/client/mint_v1.rs @@ -168,7 +168,7 @@ impl MintCallBuilder { } } -pub(crate) fn create_token_mint_proof( +pub fn create_token_mint_proof( zkbin: &ZkBinary, pk: &ProvingKey, output: &TransactionBuilderOutputInfo, diff --git a/src/contract/money/src/client/transfer_v1.rs b/src/contract/money/src/client/transfer_v1.rs index ccb53838f..5671dd898 100644 --- a/src/contract/money/src/client/transfer_v1.rs +++ b/src/contract/money/src/client/transfer_v1.rs @@ -103,20 +103,20 @@ impl TransferBurnRevealed { } } -pub(crate) struct TransactionBuilderClearInputInfo { +pub struct TransactionBuilderClearInputInfo { pub value: u64, pub token_id: TokenId, pub signature_secret: SecretKey, } -pub(crate) struct TransactionBuilderInputInfo { +pub struct TransactionBuilderInputInfo { pub leaf_position: MerklePosition, pub merkle_path: Vec, pub secret: SecretKey, pub note: MoneyNote, } -pub(crate) struct TransactionBuilderOutputInfo { +pub struct TransactionBuilderOutputInfo { pub value: u64, pub token_id: TokenId, pub public_key: PublicKey, @@ -363,7 +363,7 @@ impl TransferCallBuilder { } } -pub(crate) fn create_transfer_burn_proof( +pub fn create_transfer_burn_proof( zkbin: &ZkBinary, pk: &ProvingKey, input: &TransactionBuilderInputInfo, @@ -439,7 +439,7 @@ pub(crate) fn create_transfer_burn_proof( Ok((proof, public_inputs)) } -pub(crate) fn create_transfer_mint_proof( +pub fn create_transfer_mint_proof( zkbin: &ZkBinary, pk: &ProvingKey, output: &TransactionBuilderOutputInfo,