From 02a26751bb51cf6a576790c487872a21b5beccb5 Mon Sep 17 00:00:00 2001 From: Duke Date: Mon, 13 Oct 2025 15:06:42 -0400 Subject: [PATCH] WIP donation --- src/wallet/asyncrpcoperation_shieldcoinbase.cpp | 11 ++++++++++- src/wallet/asyncrpcoperation_shieldcoinbase.h | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/wallet/asyncrpcoperation_shieldcoinbase.cpp b/src/wallet/asyncrpcoperation_shieldcoinbase.cpp index ce4da86fe..dfb1932a1 100644 --- a/src/wallet/asyncrpcoperation_shieldcoinbase.cpp +++ b/src/wallet/asyncrpcoperation_shieldcoinbase.cpp @@ -54,6 +54,7 @@ AsyncRPCOperation_shieldcoinbase::AsyncRPCOperation_shieldcoinbase( std::vector inputs, std::string toAddress, CAmount fee, + CAmount donation, UniValue contextInfo) : builder_(builder), tx_(contextualTx), inputs_(inputs), fee_(fee), contextinfo_(contextInfo) { @@ -214,6 +215,13 @@ bool ShieldToAddress::operator()(const libzcash::SaplingPaymentAddress &zaddr) c } } + //TODO: randomly select from a set + auto dzaddr = "zs1..."; + auto donationZaddr = DecodePaymentAddress(dzaddr); + if (!IsValidPaymentAddress(donationZaddr)) { + throw JSONRPCError(RPC_INVALID_PARAMETER, string("Unknown address format: ") + dzaddr); + } + //TODO: if donation==true, send X% of value to zaddr and Y% of of value to donatezaddr // Send all value to the target z-addr if(donation) { @@ -222,7 +230,8 @@ bool ShieldToAddress::operator()(const libzcash::SaplingPaymentAddress &zaddr) c CAmount donationAmount = 0; //TODO calculate exact donation amount in puposhis // donation recipient as second output - m_op->builder_.AddSaplingOutput(ovk, donationZaddr, donationAmount); + auto donationZout = boost::get(donationZaddr); + m_op->builder_.AddSaplingOutput(ovk, donationZout, donationAmount); // zdust as third output, so donation txs are indistinguishable from // non-donation z_shieldcoinbase txs diff --git a/src/wallet/asyncrpcoperation_shieldcoinbase.h b/src/wallet/asyncrpcoperation_shieldcoinbase.h index ce8de1c4d..c07b638fb 100644 --- a/src/wallet/asyncrpcoperation_shieldcoinbase.h +++ b/src/wallet/asyncrpcoperation_shieldcoinbase.h @@ -49,7 +49,7 @@ public: std::vector inputs, std::string toAddress, CAmount fee = SHIELD_COINBASE_DEFAULT_MINERS_FEE, - CAmount donation, + CAmount donation = 0, UniValue contextInfo = NullUniValue); virtual ~AsyncRPCOperation_shieldcoinbase();