From a7a96a90342b338aac3565e6aac3791460f39365 Mon Sep 17 00:00:00 2001 From: fluidvanadium Date: Wed, 17 Apr 2024 16:25:32 +0000 Subject: [PATCH 01/19] this is a squash-style commit --- zingolib/src/data.rs | 2 ++ zingolib/src/data/proposal.rs | 14 ++++++++++++++ zingolib/src/lightclient.rs | 11 ++++++++++- zingolib/src/lightclient/send.rs | 13 +++++++++++-- 4 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 zingolib/src/data/proposal.rs diff --git a/zingolib/src/data.rs b/zingolib/src/data.rs index b713264d2..ff0d870ee 100644 --- a/zingolib/src/data.rs +++ b/zingolib/src/data.rs @@ -1 +1,3 @@ +#[cfg(feature = "zip317")] +pub mod proposal; pub mod witness_trees; diff --git a/zingolib/src/data/proposal.rs b/zingolib/src/data/proposal.rs new file mode 100644 index 000000000..45ebcc462 --- /dev/null +++ b/zingolib/src/data/proposal.rs @@ -0,0 +1,14 @@ +use std::convert::Infallible; + +use zcash_client_backend::proposal::Proposal; +use zcash_primitives::transaction::fees::zip317::FeeRule; + +use crate::wallet::notes::NoteRecordIdentifier; + +pub type TransferProposal = Proposal; +pub type ShieldProposal = Proposal; +#[derive(Clone)] +pub enum ZingoProposal { + Transfer(TransferProposal), + Shield(ShieldProposal), +} diff --git a/zingolib/src/lightclient.rs b/zingolib/src/lightclient.rs index c6b7bce3b..3ad5e5aea 100644 --- a/zingolib/src/lightclient.rs +++ b/zingolib/src/lightclient.rs @@ -17,6 +17,9 @@ use crate::{ wallet::{keys::unified::ReceiverSelection, message::Message, LightWallet, SendProgress}, }; +#[cfg(feature = "zip317")] +use crate::data::proposal::ZingoProposal; + #[derive(Clone, Debug, Default)] pub struct SyncResult { pub success: bool, @@ -202,6 +205,9 @@ pub struct LightClient { bsync_data: Arc>, interrupt_sync: Arc>, + #[cfg(feature = "zip317")] + latest_proposal: Arc>>, + save_buffer: ZingoSaveBuffer, } @@ -227,8 +233,9 @@ pub mod instantiation { }; impl LightClient { - /// this is the standard initializer for a LightClient. // toDo rework ZingoConfig. + + /// This is the fundamental invocation of a LightClient. It lives in an asyncronous runtime. pub async fn create_from_wallet_async( wallet: LightWallet, config: ZingoConfig, @@ -242,6 +249,8 @@ pub mod instantiation { sync_lock: Mutex::new(()), bsync_data: Arc::new(RwLock::new(BlazeSyncData::new(&config))), interrupt_sync: Arc::new(RwLock::new(false)), + #[cfg(feature = "zip317")] + latest_proposal: Arc::new(RwLock::new(None)), save_buffer: ZingoSaveBuffer::new(buffer), }) } diff --git a/zingolib/src/lightclient/send.rs b/zingolib/src/lightclient/send.rs index 1f3b41660..6bca5a777 100644 --- a/zingolib/src/lightclient/send.rs +++ b/zingolib/src/lightclient/send.rs @@ -69,14 +69,23 @@ impl LightClient { ) -> Result, String> { use crate::test_framework::mocks::ProposalBuilder; - Ok(ProposalBuilder::default().build()) + let proposal = ProposalBuilder::default().build(); + let mut latest_proposal_lock = self.latest_proposal.write().await; + *latest_proposal_lock = Some(crate::data::proposal::ZingoProposal::Transfer( + proposal.clone(), + )); + Ok(proposal) } /// Unstable function to expose the zip317 interface for development // TODO: add correct functionality and doc comments / tests #[cfg(feature = "zip317")] pub async fn do_send_proposal(&self) -> Result, String> { - Ok(vec![TxId::from_bytes([0u8; 32])]) + if let Some(_proposal) = self.latest_proposal.read().await.as_ref() { + Ok(vec![TxId::from_bytes([0u8; 32])]) + } else { + Err("No proposal. Call do_propose first.".to_string()) + } } // TODO: Add migrate_sapling_to_orchard argument From ac858135d4514dd4e197a89e2c25073dbfbfd25a Mon Sep 17 00:00:00 2001 From: fluidvanadium Date: Wed, 17 Apr 2024 16:27:55 +0000 Subject: [PATCH 02/19] updated changelog --- zingolib/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/zingolib/CHANGELOG.md b/zingolib/CHANGELOG.md index 196b4126a..86125d299 100644 --- a/zingolib/CHANGELOG.md +++ b/zingolib/CHANGELOG.md @@ -26,6 +26,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `commands`: - `ProposeCommand` struct and methods behind "zip317" feature - `QuickSendCommand` struct and methods behind "zip317" feature +- `data::proposal` mod - `test_framework` mod behind "test-features" feature From fc7480bce868c9ca4411f3c401eeb523e3e356ff Mon Sep 17 00:00:00 2001 From: fluidvanadium Date: Wed, 17 Apr 2024 16:30:31 +0000 Subject: [PATCH 03/19] fixed whitespace --- zingolib/src/lightclient.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zingolib/src/lightclient.rs b/zingolib/src/lightclient.rs index 3ad5e5aea..5e2fbb962 100644 --- a/zingolib/src/lightclient.rs +++ b/zingolib/src/lightclient.rs @@ -235,7 +235,7 @@ pub mod instantiation { impl LightClient { // toDo rework ZingoConfig. - /// This is the fundamental invocation of a LightClient. It lives in an asyncronous runtime. + /// This is the fundamental invocation of a LightClient. It lives in an asyncronous runtime. pub async fn create_from_wallet_async( wallet: LightWallet, config: ZingoConfig, From 2b58469a9ca9bbdf3cf35fcc78a91e55620df80f Mon Sep 17 00:00:00 2001 From: fluidvanadium Date: Wed, 17 Apr 2024 17:20:27 +0000 Subject: [PATCH 04/19] added doc-comments --- zingolib/src/data/proposal.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/zingolib/src/data/proposal.rs b/zingolib/src/data/proposal.rs index 45ebcc462..96a5ba7bd 100644 --- a/zingolib/src/data/proposal.rs +++ b/zingolib/src/data/proposal.rs @@ -1,3 +1,4 @@ +//! The types of transaction Proposal that Zingo! uses. use std::convert::Infallible; use zcash_client_backend::proposal::Proposal; @@ -5,10 +6,16 @@ use zcash_primitives::transaction::fees::zip317::FeeRule; use crate::wallet::notes::NoteRecordIdentifier; +/// A proposed send to addresses. pub type TransferProposal = Proposal; +/// A proposed shielding. pub type ShieldProposal = Proposal; + +/// The LightClient holds one proposal at a time while the user decides whether to accept the fee. #[derive(Clone)] pub enum ZingoProposal { + /// Destination somewhere else. Transfer(TransferProposal), + /// Destination this wallet. Shield(ShieldProposal), } From 7e6e13c7750796957fc6df717d49738d59e66065 Mon Sep 17 00:00:00 2001 From: zancas Date: Wed, 17 Apr 2024 11:38:36 -0600 Subject: [PATCH 05/19] make comment more precise --- zingolib/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zingolib/CHANGELOG.md b/zingolib/CHANGELOG.md index 86125d299..82b925e38 100644 --- a/zingolib/CHANGELOG.md +++ b/zingolib/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -All notable changes to this project will be documented in this file. +All notable changes to this crate will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). From 820e8b562e2d5690c0d73d8368e9c974fdaf23e0 Mon Sep 17 00:00:00 2001 From: zancas Date: Wed, 17 Apr 2024 11:56:43 -0600 Subject: [PATCH 06/19] add doc-comment to ShieldProposal --- zingolib/src/data/proposal.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/zingolib/src/data/proposal.rs b/zingolib/src/data/proposal.rs index 96a5ba7bd..86317a937 100644 --- a/zingolib/src/data/proposal.rs +++ b/zingolib/src/data/proposal.rs @@ -9,6 +9,11 @@ use crate::wallet::notes::NoteRecordIdentifier; /// A proposed send to addresses. pub type TransferProposal = Proposal; /// A proposed shielding. +/// The zcash_client_backend Proposal type exposes a "NoteRef" generic +/// parameter to track notes that are generated in proposal steps, +/// but Shielding has no $INSERT CORRECT TERMinilogy HERE steps that produce +/// outputs which are consume in the same proposal, rather the outputs +/// are unspent shielded notes. pub type ShieldProposal = Proposal; /// The LightClient holds one proposal at a time while the user decides whether to accept the fee. From 98f4cb190b53a541dee77961f053d3a8c0511103 Mon Sep 17 00:00:00 2001 From: zancas Date: Wed, 17 Apr 2024 12:00:55 -0600 Subject: [PATCH 07/19] another doc-comment --- zingolib/src/data/proposal.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/zingolib/src/data/proposal.rs b/zingolib/src/data/proposal.rs index 86317a937..f4d53b249 100644 --- a/zingolib/src/data/proposal.rs +++ b/zingolib/src/data/proposal.rs @@ -19,8 +19,10 @@ pub type ShieldProposal = Proposal; /// The LightClient holds one proposal at a time while the user decides whether to accept the fee. #[derive(Clone)] pub enum ZingoProposal { - /// Destination somewhere else. + /// Destination somewhere else. This is an implementation detail of the code as is, not + /// an invariant that is guaranteed for any number of versions. Transfer(TransferProposal), - /// Destination this wallet. + /// Destination this wallet. This is an implementation detail of the code as is, not + /// an invariant that is guaranteed for any number of versions. Shield(ShieldProposal), } From b328acbe14e018a4565b5424f9cb25f3485b469b Mon Sep 17 00:00:00 2001 From: zancas Date: Wed, 17 Apr 2024 13:18:32 -0600 Subject: [PATCH 08/19] fix doc-comment --- zingolib/src/data/proposal.rs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/zingolib/src/data/proposal.rs b/zingolib/src/data/proposal.rs index f4d53b249..fe6d9978c 100644 --- a/zingolib/src/data/proposal.rs +++ b/zingolib/src/data/proposal.rs @@ -10,10 +10,8 @@ use crate::wallet::notes::NoteRecordIdentifier; pub type TransferProposal = Proposal; /// A proposed shielding. /// The zcash_client_backend Proposal type exposes a "NoteRef" generic -/// parameter to track notes that are generated in proposal steps, -/// but Shielding has no $INSERT CORRECT TERMinilogy HERE steps that produce -/// outputs which are consume in the same proposal, rather the outputs -/// are unspent shielded notes. +/// parameter to track Shielded inputs to the proposal these are +/// disallowed ing Zingo ShielddedProposals pub type ShieldProposal = Proposal; /// The LightClient holds one proposal at a time while the user decides whether to accept the fee. From 3a8d78b1059116d0d8691c3390656e4e351e0592 Mon Sep 17 00:00:00 2001 From: zancas Date: Wed, 17 Apr 2024 13:43:11 -0600 Subject: [PATCH 09/19] fixup typo --- zingolib/src/data/proposal.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zingolib/src/data/proposal.rs b/zingolib/src/data/proposal.rs index fe6d9978c..95d4275fc 100644 --- a/zingolib/src/data/proposal.rs +++ b/zingolib/src/data/proposal.rs @@ -11,7 +11,7 @@ pub type TransferProposal = Proposal; /// A proposed shielding. /// The zcash_client_backend Proposal type exposes a "NoteRef" generic /// parameter to track Shielded inputs to the proposal these are -/// disallowed ing Zingo ShielddedProposals +/// disallowed in Zingo ShieldedProposals pub type ShieldProposal = Proposal; /// The LightClient holds one proposal at a time while the user decides whether to accept the fee. From 14bac7dbacae5adc13ceb20d1901064b7b17d988 Mon Sep 17 00:00:00 2001 From: zancas Date: Wed, 17 Apr 2024 13:52:31 -0600 Subject: [PATCH 10/19] specify fanciest pool --- zingolib/src/data/proposal.rs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/zingolib/src/data/proposal.rs b/zingolib/src/data/proposal.rs index 95d4275fc..44933aff4 100644 --- a/zingolib/src/data/proposal.rs +++ b/zingolib/src/data/proposal.rs @@ -17,10 +17,9 @@ pub type ShieldProposal = Proposal; /// The LightClient holds one proposal at a time while the user decides whether to accept the fee. #[derive(Clone)] pub enum ZingoProposal { - /// Destination somewhere else. This is an implementation detail of the code as is, not - /// an invariant that is guaranteed for any number of versions. + /// Can propose any valid recipient. Transfer(TransferProposal), - /// Destination this wallet. This is an implementation detail of the code as is, not - /// an invariant that is guaranteed for any number of versions. + /// For now this is constrained by lrz zcash_client_backend transaction construction + /// to send to the proposing capability's receiver for its fanciest shielded pool Shield(ShieldProposal), } From c7b0a061e251f5bfdd93ffa5a6e8880a93af686a Mon Sep 17 00:00:00 2001 From: fluidvanadium Date: Wed, 17 Apr 2024 23:50:50 +0000 Subject: [PATCH 11/19] change visibility --- zingolib/src/data/proposal.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/zingolib/src/data/proposal.rs b/zingolib/src/data/proposal.rs index 96a5ba7bd..89affa01c 100644 --- a/zingolib/src/data/proposal.rs +++ b/zingolib/src/data/proposal.rs @@ -7,13 +7,13 @@ use zcash_primitives::transaction::fees::zip317::FeeRule; use crate::wallet::notes::NoteRecordIdentifier; /// A proposed send to addresses. -pub type TransferProposal = Proposal; +pub(crate) type TransferProposal = Proposal; /// A proposed shielding. -pub type ShieldProposal = Proposal; +pub(crate) type ShieldProposal = Proposal; /// The LightClient holds one proposal at a time while the user decides whether to accept the fee. #[derive(Clone)] -pub enum ZingoProposal { +pub(crate) enum ZingoProposal { /// Destination somewhere else. Transfer(TransferProposal), /// Destination this wallet. From 2b4ff0ee135f702244af29e34f0125064c24a6d7 Mon Sep 17 00:00:00 2001 From: fluidvanadium Date: Wed, 17 Apr 2024 23:52:01 +0000 Subject: [PATCH 12/19] feature-gate proposal --- zingolib/src/data.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/zingolib/src/data.rs b/zingolib/src/data.rs index 6f3b0fe63..bb7b728e6 100644 --- a/zingolib/src/data.rs +++ b/zingolib/src/data.rs @@ -1,3 +1,4 @@ //! This is a mod for data structs that will be used across all sections of zingolib. +#[cfg(feature = "zip317")] pub mod proposal; pub mod witness_trees; From 576e78d5cb347c799f6da89452eba4f98e72a17c Mon Sep 17 00:00:00 2001 From: fluidvanadium Date: Wed, 17 Apr 2024 23:57:23 +0000 Subject: [PATCH 13/19] expand doc-comment --- zingolib/src/data/proposal.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/zingolib/src/data/proposal.rs b/zingolib/src/data/proposal.rs index c2dfc0293..ba849e9cf 100644 --- a/zingolib/src/data/proposal.rs +++ b/zingolib/src/data/proposal.rs @@ -7,6 +7,7 @@ use zcash_primitives::transaction::fees::zip317::FeeRule; use crate::wallet::notes::NoteRecordIdentifier; /// A proposed send to addresses. +/// Identifies the notes to spend by txid, pool, and output_index. pub(crate) type TransferProposal = Proposal; /// A proposed shielding. /// The zcash_client_backend Proposal type exposes a "NoteRef" generic From c48e5a8d0460d678b8495bc98ba7937ba6362ce4 Mon Sep 17 00:00:00 2001 From: fluidvanadium Date: Thu, 18 Apr 2024 00:14:43 +0000 Subject: [PATCH 14/19] updated do_send_proposal to match variants --- zingolib/src/lightclient/send.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/zingolib/src/lightclient/send.rs b/zingolib/src/lightclient/send.rs index c26a16202..bdcb51564 100644 --- a/zingolib/src/lightclient/send.rs +++ b/zingolib/src/lightclient/send.rs @@ -84,8 +84,15 @@ impl LightClient { // TODO: add correct functionality and doc comments / tests #[cfg(feature = "zip317")] pub async fn do_send_proposal(&self) -> Result, String> { - if let Some(_proposal) = self.latest_proposal.read().await.as_ref() { - Ok(vec![TxId::from_bytes([0u8; 32])]) + if let Some(proposal) = self.latest_proposal.read().await.as_ref() { + match proposal { + crate::lightclient::ZingoProposal::Transfer(_) => { + Ok(vec![TxId::from_bytes([1u8; 32])]) + } + crate::lightclient::ZingoProposal::Shield(_) => { + Ok(vec![TxId::from_bytes([222u8; 32])]) + } + } } else { Err("No proposal. Call do_propose first.".to_string()) } From 77b2ef5f026199dc413471cd54660da0c8b352ce Mon Sep 17 00:00:00 2001 From: fluidvanadium Date: Thu, 18 Apr 2024 00:22:44 +0000 Subject: [PATCH 15/19] propose_spend diverges from propose_shield --- zingolib/src/commands.rs | 4 ++-- zingolib/src/lightclient/send.rs | 17 ++++++++++++++--- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/zingolib/src/commands.rs b/zingolib/src/commands.rs index d2c28f782..d7296b4d7 100644 --- a/zingolib/src/commands.rs +++ b/zingolib/src/commands.rs @@ -844,7 +844,7 @@ impl Command for ProposeCommand { }; RT.block_on(async move { match lightclient - .do_propose( + .do_propose_spend( send_inputs .iter() .map(|(address, amount, memo)| (address.as_str(), *amount, memo.clone())) @@ -963,7 +963,7 @@ impl Command for QuickSendCommand { }; RT.block_on(async move { if let Err(e) = lightclient - .do_propose( + .do_propose_spend( send_inputs .iter() .map(|(address, amount, memo)| (address.as_str(), *amount, memo.clone())) diff --git a/zingolib/src/lightclient/send.rs b/zingolib/src/lightclient/send.rs index bdcb51564..778a282a3 100644 --- a/zingolib/src/lightclient/send.rs +++ b/zingolib/src/lightclient/send.rs @@ -63,13 +63,13 @@ impl LightClient { } /// Unstable function to expose the zip317 interface for development - // TODO: add correct functionality and doc comments / tests + // TOdo: add correct functionality and doc comments / tests // TODO: Add migrate_sapling_to_orchard argument #[cfg(feature = "zip317")] - pub async fn do_propose( + pub async fn do_propose_spend( &self, _address_amount_memo_tuples: Vec<(&str, u64, Option)>, - ) -> Result, String> { + ) -> Result { use crate::test_framework::mocks::ProposalBuilder; let proposal = ProposalBuilder::default().build(); @@ -80,6 +80,17 @@ impl LightClient { Ok(proposal) } + /// Unstable function to expose the zip317 interface for development + // TOdo: add correct functionality and doc comments / tests + #[cfg(feature = "zip317")] + pub async fn do_propose_shield( + &self, + _address_amount_memo_tuples: Vec<(&str, u64, Option)>, + ) -> Result { + use crate::test_framework::mocks::ProposalBuilder; + todo!() + } + /// Unstable function to expose the zip317 interface for development // TODO: add correct functionality and doc comments / tests #[cfg(feature = "zip317")] From 773f68b08eae3df9f1155cfc2e6c7891a3da7d7c Mon Sep 17 00:00:00 2001 From: fluidvanadium Date: Thu, 18 Apr 2024 00:56:24 +0000 Subject: [PATCH 16/19] remove dead uses --- zingolib/src/lightclient/send.rs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/zingolib/src/lightclient/send.rs b/zingolib/src/lightclient/send.rs index 778a282a3..f8e48fa11 100644 --- a/zingolib/src/lightclient/send.rs +++ b/zingolib/src/lightclient/send.rs @@ -13,9 +13,7 @@ use crate::wallet::Pool; #[cfg(feature = "zip317")] use { - crate::wallet::notes::NoteRecordIdentifier, - zcash_client_backend::proposal::Proposal, - zcash_primitives::transaction::{fees::zip317::FeeRule, TxId}, + zcash_primitives::transaction::{TxId}, }; impl LightClient { @@ -87,7 +85,7 @@ impl LightClient { &self, _address_amount_memo_tuples: Vec<(&str, u64, Option)>, ) -> Result { - use crate::test_framework::mocks::ProposalBuilder; + todo!() } From f2e5fdcbfd04e9ffa95a4b94dcbe21c9ea8065b9 Mon Sep 17 00:00:00 2001 From: fluidvanadium Date: Thu, 18 Apr 2024 00:57:08 +0000 Subject: [PATCH 17/19] ignore dead code --- zingolib/src/data/proposal.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/zingolib/src/data/proposal.rs b/zingolib/src/data/proposal.rs index ba849e9cf..02c6011ac 100644 --- a/zingolib/src/data/proposal.rs +++ b/zingolib/src/data/proposal.rs @@ -23,5 +23,6 @@ pub(crate) enum ZingoProposal { Transfer(TransferProposal), /// For now this is constrained by lrz zcash_client_backend transaction construction /// to send to the proposing capability's receiver for its fanciest shielded pool + #[allow(dead_code)] // TOdo construct it Shield(ShieldProposal), } From dca06c2d372e8ca32f3d6154a8588ed4669791ce Mon Sep 17 00:00:00 2001 From: fluidvanadium Date: Thu, 18 Apr 2024 01:49:59 +0000 Subject: [PATCH 18/19] cargo fmt --- zingolib/src/lightclient/send.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/zingolib/src/lightclient/send.rs b/zingolib/src/lightclient/send.rs index f8e48fa11..856b55435 100644 --- a/zingolib/src/lightclient/send.rs +++ b/zingolib/src/lightclient/send.rs @@ -12,9 +12,7 @@ use super::{LightClient, LightWalletSendProgress}; use crate::wallet::Pool; #[cfg(feature = "zip317")] -use { - zcash_primitives::transaction::{TxId}, -}; +use zcash_primitives::transaction::TxId; impl LightClient { async fn get_submission_height(&self) -> Result { @@ -85,7 +83,6 @@ impl LightClient { &self, _address_amount_memo_tuples: Vec<(&str, u64, Option)>, ) -> Result { - todo!() } From 41c0b0e1814394057675bb5314c3917e53900509 Mon Sep 17 00:00:00 2001 From: fluidvanadium Date: Thu, 18 Apr 2024 01:57:33 +0000 Subject: [PATCH 19/19] allowed dead code in ZingoProposal --- zingolib/src/data/proposal.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/zingolib/src/data/proposal.rs b/zingolib/src/data/proposal.rs index 02c6011ac..edf455f4a 100644 --- a/zingolib/src/data/proposal.rs +++ b/zingolib/src/data/proposal.rs @@ -20,6 +20,7 @@ pub(crate) type ShieldProposal = Proposal; pub(crate) enum ZingoProposal { /// Destination somewhere else. /// Can propose any valid recipient. + #[allow(dead_code)] // TOdo use it Transfer(TransferProposal), /// For now this is constrained by lrz zcash_client_backend transaction construction /// to send to the proposing capability's receiver for its fanciest shielded pool