From de4655d4c7babafa2b0af433f311c5b7574e206a Mon Sep 17 00:00:00 2001 From: zancas Date: Mon, 6 May 2024 21:24:43 -0600 Subject: [PATCH 1/4] readd update_tmamt_and_return_step_result --- zingolib/src/lightclient/send.rs | 97 ++++++++++++++++---------------- 1 file changed, 49 insertions(+), 48 deletions(-) diff --git a/zingolib/src/lightclient/send.rs b/zingolib/src/lightclient/send.rs index 3dd0610242..c64c616db8 100644 --- a/zingolib/src/lightclient/send.rs +++ b/zingolib/src/lightclient/send.rs @@ -33,38 +33,57 @@ impl LightClient { }) } - async fn iterate_proposal_send_scan( + async fn update_tmamt_and_return_step_result( + &self, + proposal: &Proposal, + step: zcash_client_backend::proposal::Step, + step_results: &Vec<( + &zcash_client_backend::proposal::Step, + zcash_primitives::transaction::builder::BuildResult, + )>, + ) -> Result { + let fee_rule = proposal.fee_rule(); + let min_target_height = proposal.min_target_height(); + let unified_spend_key = zcash_keys::keys::UnifiedSpendingKey::try_from( + self.wallet.wallet_capability().as_ref(), + ) + .map_err(DoSendProposedError::UnifiedSpendKey)?; + let (sapling_output, sapling_spend) = self + .read_sapling_params() + .map_err(DoSendProposedError::SaplingParams)?; + let sapling_prover = LocalTxProver::from_bytes(&sapling_spend, &sapling_output); + zcash_client_backend::data_api::wallet::calculate_proposed_transaction( + std::ops::DerefMut::deref_mut( + &mut self + .wallet + .transaction_context + .transaction_metadata_set + .write() + .await, + ), + &self.wallet.transaction_context.config.chain, + &sapling_prover, + &sapling_prover, + &unified_spend_key, + zcash_client_backend::wallet::OvkPolicy::Sender, + fee_rule, + min_target_height, + &step_results, + &step, + ) + .map_err(DoSendProposedError::Calculation) + } + async fn iterate_proposal_send_scan( &self, proposal: &Proposal, - sapling_prover: &(impl SpendProver + OutputProver), - unified_spend_key: &UnifiedSpendingKey, submission_height: BlockHeight, ) -> Result, DoSendProposedError> { let mut step_results = Vec::with_capacity(proposal.steps().len()); let mut txids = Vec::with_capacity(proposal.steps().len()); for step in proposal.steps() { - let step_result = { - let mut tmamt = self - .wallet - .transaction_context - .transaction_metadata_set - .write() - .await; - - zcash_client_backend::data_api::wallet::calculate_proposed_transaction( - tmamt.deref_mut(), - &self.wallet.transaction_context.config.chain, - sapling_prover, - sapling_prover, - unified_spend_key, - zcash_client_backend::wallet::OvkPolicy::Sender, - proposal.fee_rule(), - proposal.min_target_height(), - &step_results, - step, - ) - .map_err(DoSendProposedError::Calculation)? - }; + let step_result = self + .update_tmamt_and_return_step_result(proposal, step.clone(), &step_results) + .await?; let txid = self .wallet @@ -108,32 +127,14 @@ impl LightClient { .await .map_err(DoSendProposedError::SubmissionHeight)?; - let (sapling_output, sapling_spend) = self - .read_sapling_params() - .map_err(DoSendProposedError::SaplingParams)?; - let sapling_prover = LocalTxProver::from_bytes(&sapling_spend, &sapling_output); - let unified_spend_key = - UnifiedSpendingKey::try_from(self.wallet.wallet_capability().as_ref()) - .map_err(DoSendProposedError::UnifiedSpendKey)?; - match proposal { crate::lightclient::ZingoProposal::Transfer(transfer_proposal) => { - self.iterate_proposal_send_scan( - transfer_proposal, - &sapling_prover, - &unified_spend_key, - submission_height, - ) - .await + self.iterate_proposal_send_scan(transfer_proposal, submission_height) + .await } crate::lightclient::ZingoProposal::Shield(shield_proposal) => { - self.iterate_proposal_send_scan( - shield_proposal, - &sapling_prover, - &unified_spend_key, - submission_height, - ) - .await + self.iterate_proposal_send_scan(shield_proposal, submission_height) + .await } } } else { @@ -216,6 +217,6 @@ pub enum DoSendProposedError { pub enum DoQuickSendProposedError { #[error("propose {0}")] Propose(crate::lightclient::propose::DoProposeError), - #[error("No proposal. Call do_propose first.")] + #[error("Can't QuickSend! No proposal. Call do_propose first.")] Send(DoSendProposedError), } From 594c08552d7fce96feb5183898270b641fb3596f Mon Sep 17 00:00:00 2001 From: zancas Date: Mon, 6 May 2024 21:30:37 -0600 Subject: [PATCH 2/4] readd calls to update_latest_proposal --- zingolib/src/lightclient/propose.rs | 11 ++++------- zingolib/src/lightclient/send.rs | 8 ++------ 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/zingolib/src/lightclient/propose.rs b/zingolib/src/lightclient/propose.rs index 5ca5b32191..54fd1829a9 100644 --- a/zingolib/src/lightclient/propose.rs +++ b/zingolib/src/lightclient/propose.rs @@ -170,10 +170,8 @@ impl LightClient { ) .map_err(DoProposeError::Proposal)?; - let mut latest_proposal_lock = self.latest_proposal.write().await; - *latest_proposal_lock = Some(crate::data::proposal::ZingoProposal::Transfer( - proposal.clone(), - )); + self.update_latest_proposal(ZingoProposal::Transfer(proposal.clone())) + .await; Ok(proposal) } @@ -246,9 +244,8 @@ impl LightClient { ) .map_err(DoProposeError::ShieldProposal)?; - *self.latest_proposal.write().await = Some(crate::data::proposal::ZingoProposal::Shield( - proposed_shield.clone(), - )); + self.update_latest_proposal(ZingoProposal::Shield(proposed_shield.clone())) + .await; Ok(proposed_shield) } /// A helper method that standardizes latest_proposal update diff --git a/zingolib/src/lightclient/send.rs b/zingolib/src/lightclient/send.rs index c64c616db8..2e81d992cf 100644 --- a/zingolib/src/lightclient/send.rs +++ b/zingolib/src/lightclient/send.rs @@ -1,13 +1,7 @@ //! TODO: Add Mod Description Here! -use std::ops::DerefMut; use nonempty::NonEmpty; -use sapling_crypto::prover::OutputProver; -use sapling_crypto::prover::SpendProver; - -use zcash_keys::keys::UnifiedSpendingKey; - use zcash_client_backend::{proposal::Proposal, zip321::TransactionRequest}; use zcash_primitives::{consensus::BlockHeight, transaction::TxId}; use zcash_proofs::prover::LocalTxProver; @@ -177,10 +171,12 @@ mod test { .await .expect("A client!"); let proposal = ProposalBuilder::new().build(); + /* let step = zcash_client_backend::proposal::Step::from_parts(); let step_result = client .update_tmamt_and_return_step_result(&proposal, step, step_results) .await; + */ } } From 44fe308d61950206cd6844f72f62610732d505c7 Mon Sep 17 00:00:00 2001 From: zancas Date: Mon, 6 May 2024 21:43:07 -0600 Subject: [PATCH 3/4] more test framework --- zingolib/src/lightclient/send.rs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/zingolib/src/lightclient/send.rs b/zingolib/src/lightclient/send.rs index 2e81d992cf..74d1a008c1 100644 --- a/zingolib/src/lightclient/send.rs +++ b/zingolib/src/lightclient/send.rs @@ -158,7 +158,10 @@ mod test { use zingo_testvectors::seeds::HOSPITAL_MUSEUM_SEED; use zingoconfig::ZingoConfigBuilder; - use crate::{lightclient::LightClient, test_framework::mocks::ProposalBuilder}; + use crate::{ + lightclient::LightClient, + test_framework::mocks::{ProposalBuilder, StepBuilder}, + }; #[tokio::test] async fn update_tmamt_and_return_step_result() { @@ -171,12 +174,14 @@ mod test { .await .expect("A client!"); let proposal = ProposalBuilder::new().build(); - /* - let step = zcash_client_backend::proposal::Step::from_parts(); + let step = StepBuilder::new().build(); + let step_results: Vec<( + &zcash_client_backend::proposal::Step, + zcash_primitives::transaction::builder::BuildResult, + )> = vec![]; let step_result = client - .update_tmamt_and_return_step_result(&proposal, step, step_results) + .update_tmamt_and_return_step_result(&proposal, step, &step_results) .await; - */ } } From d11a615c3687be3a970c2dfd675398ce56510054 Mon Sep 17 00:00:00 2001 From: zancas Date: Mon, 6 May 2024 21:57:24 -0600 Subject: [PATCH 4/4] found unwrap None! Will address immediately. --- zingolib/src/lightclient/send.rs | 6 ++++++ zingolib/src/test_framework/mocks.rs | 3 +++ 2 files changed, 9 insertions(+) diff --git a/zingolib/src/lightclient/send.rs b/zingolib/src/lightclient/send.rs index 74d1a008c1..d01fde2047 100644 --- a/zingolib/src/lightclient/send.rs +++ b/zingolib/src/lightclient/send.rs @@ -165,7 +165,9 @@ mod test { #[tokio::test] async fn update_tmamt_and_return_step_result() { + dbg!("Begin test fn 1"); let config = ZingoConfigBuilder::default().create(); + dbg!("Begin test fn 2"); let client = LightClient::create_unconnected( &config, crate::wallet::WalletBase::MnemonicPhrase(HOSPITAL_MUSEUM_SEED.to_string()), @@ -173,12 +175,16 @@ mod test { ) .await .expect("A client!"); + dbg!("Begin test fn 3"); let proposal = ProposalBuilder::new().build(); + dbg!("Begin test fn 4"); let step = StepBuilder::new().build(); + dbg!("Begin test fn 5"); let step_results: Vec<( &zcash_client_backend::proposal::Step, zcash_primitives::transaction::builder::BuildResult, )> = vec![]; + dbg!("Here?"); let step_result = client .update_tmamt_and_return_step_result(&proposal, step, &step_results) .await; diff --git a/zingolib/src/test_framework/mocks.rs b/zingolib/src/test_framework/mocks.rs index 6efb51c69b..921b520d6f 100644 --- a/zingolib/src/test_framework/mocks.rs +++ b/zingolib/src/test_framework/mocks.rs @@ -324,7 +324,9 @@ pub mod proposal { /// `build` will panic if any fields of the builder are `None` or if the build failed /// due to invalid values. pub fn build(self) -> Proposal { + dbg!("Inside Proposal Builder new"); let step = self.steps.unwrap().first().clone(); + dbg!("Ooopppsss!"); Proposal::single_step( step.transaction_request().clone(), step.payment_pools().clone(), @@ -401,6 +403,7 @@ pub mod proposal { /// due to invalid values. #[allow(dead_code)] pub fn build(self) -> Step { + dbg!("building!"); Step::from_parts( &[], self.transaction_request.unwrap(),