From 3554f3a70bd703b7f0e77683617521a99a68e490 Mon Sep 17 00:00:00 2001 From: x Date: Tue, 8 Nov 2022 12:04:15 +0000 Subject: [PATCH] dao: construct signatures for tx --- example/dao2/src/main.rs | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/example/dao2/src/main.rs b/example/dao2/src/main.rs index 853a3785e..034c10f0c 100644 --- a/example/dao2/src/main.rs +++ b/example/dao2/src/main.rs @@ -15,6 +15,7 @@ use darkfi_sdk::{ crypto::{ constants::MERKLE_DEPTH, pedersen::pedersen_commitment_u64, poseidon_hash, ContractId, Keypair, MerkleNode, MerkleTree, PublicKey, SecretKey, TokenId, + schnorr::SchnorrSecret, }, tx::ContractCall, }; @@ -34,13 +35,14 @@ use std::{ }; use dao_contract::{DaoFunction, DaoMintParams}; +use money_contract::{MoneyFunction, MoneyTransferParams}; use crate::{ contract::{dao, example, money}, note::EncryptedNote2, schema::WalletCache, tx::Transaction, - util::{sign, StateRegistry, ZkContractTable}, + util::{StateRegistry, ZkContractTable}, }; mod contract; @@ -414,7 +416,28 @@ async fn main() -> BoxResult<()> { user_data, }], }; - let (params, dao_mint_proofs) = builder.build(&zk_bins)?; + let (params, proofs) = builder.build(&zk_bins)?; + + // Write the actual call data + let mut calldata = Vec::new(); + // Selects which path executes in the contract. + calldata.write_u8(MoneyFunction::Transfer as u8)?; + params.encode(&mut calldata)?; + + let calls = vec![ContractCall { contract_id: money_contract_id, data: calldata }]; + + let proofs = vec![proofs]; + + // We sign everything + let mut unsigned_tx_data = vec![]; + calls.encode(&mut unsigned_tx_data)?; + proofs.encode(&mut unsigned_tx_data)?; + let signature = cashier_signature_secret.sign(&mut OsRng, &unsigned_tx_data[..]); + + // Our tx has a single contract call which itself has a single input + let signatures = vec![vec![signature]]; + + Transaction { calls, proofs, signatures } };