Move SendManyRecipient to wallet.h and introduce optional ua field.
This commit is contained in:
parent
e568a190f3
commit
6436230562
|
@ -25,16 +25,6 @@
|
|||
|
||||
using namespace libzcash;
|
||||
|
||||
class SendManyRecipient {
|
||||
public:
|
||||
RecipientAddress address;
|
||||
CAmount amount;
|
||||
std::optional<std::string> memo;
|
||||
|
||||
SendManyRecipient(RecipientAddress address_, CAmount amount_, std::optional<std::string> memo_) :
|
||||
address(address_), amount(amount_), memo(memo_) {}
|
||||
};
|
||||
|
||||
class TxOutputAmounts {
|
||||
public:
|
||||
CAmount t_outputs_total{0};
|
||||
|
|
|
@ -4557,7 +4557,8 @@ UniValue z_sendmany(const UniValue& params, bool fHelp)
|
|||
throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter, amount must be positive");
|
||||
}
|
||||
|
||||
recipients.push_back(SendManyRecipient(addr.value(), nAmount, memo));
|
||||
std::optional<libzcash::UnifiedAddress> ua = std::get<libzcash::UnifiedAddress>(decoded.value());
|
||||
recipients.push_back(SendManyRecipient(ua, addr.value(), nAmount, memo));
|
||||
nTotalOut += nAmount;
|
||||
}
|
||||
if (recipients.empty()) {
|
||||
|
|
|
@ -1235,7 +1235,7 @@ BOOST_AUTO_TEST_CASE(rpc_z_sendmany_internals)
|
|||
{
|
||||
auto selector = pwalletMain->ZTXOSelectorForAddress(taddr1, true).value();
|
||||
TransactionBuilder builder(consensusParams, nHeight + 1, pwalletMain);
|
||||
std::vector<SendManyRecipient> recipients = { SendManyRecipient(zaddr1, 100*COIN, "DEADBEEF") };
|
||||
std::vector<SendManyRecipient> recipients = { SendManyRecipient(std::nullopt, zaddr1, 100*COIN, "DEADBEEF") };
|
||||
std::shared_ptr<AsyncRPCOperation> operation(new AsyncRPCOperation_sendmany(builder, selector, recipients, 1));
|
||||
operation->main();
|
||||
BOOST_CHECK(operation->isFailed());
|
||||
|
@ -1247,7 +1247,7 @@ BOOST_AUTO_TEST_CASE(rpc_z_sendmany_internals)
|
|||
{
|
||||
auto selector = pwalletMain->ZTXOSelectorForAddress(zaddr1, true).value();
|
||||
TransactionBuilder builder(consensusParams, nHeight + 1, pwalletMain);
|
||||
std::vector<SendManyRecipient> recipients = { SendManyRecipient(taddr1, 100*COIN, "DEADBEEF") };
|
||||
std::vector<SendManyRecipient> recipients = { SendManyRecipient(std::nullopt, taddr1, 100*COIN, "DEADBEEF") };
|
||||
std::shared_ptr<AsyncRPCOperation> operation(new AsyncRPCOperation_sendmany(builder, selector, recipients, 1));
|
||||
operation->main();
|
||||
BOOST_CHECK(operation->isFailed());
|
||||
|
@ -1259,7 +1259,7 @@ BOOST_AUTO_TEST_CASE(rpc_z_sendmany_internals)
|
|||
{
|
||||
auto selector = pwalletMain->ZTXOSelectorForAddress(zaddr1, true).value();
|
||||
TransactionBuilder builder(consensusParams, nHeight + 1, pwalletMain);
|
||||
std::vector<SendManyRecipient> recipients = { SendManyRecipient(zaddr1, 100*COIN, "DEADBEEF") };
|
||||
std::vector<SendManyRecipient> recipients = { SendManyRecipient(std::nullopt, zaddr1, 100*COIN, "DEADBEEF") };
|
||||
std::shared_ptr<AsyncRPCOperation> operation(new AsyncRPCOperation_sendmany(builder, selector, recipients, 1));
|
||||
std::shared_ptr<AsyncRPCOperation_sendmany> ptr = std::dynamic_pointer_cast<AsyncRPCOperation_sendmany> (operation);
|
||||
TEST_FRIEND_AsyncRPCOperation_sendmany proxy(ptr);
|
||||
|
@ -1359,7 +1359,7 @@ BOOST_AUTO_TEST_CASE(rpc_z_sendmany_taddr_to_sapling)
|
|||
mtx = CreateNewContextualCMutableTransaction(consensusParams, nextBlockHeight);
|
||||
|
||||
auto selector = pwalletMain->ZTXOSelectorForAddress(taddr, true).value();
|
||||
std::vector<SendManyRecipient> recipients = { SendManyRecipient(pa, 1*COIN, "ABCD") };
|
||||
std::vector<SendManyRecipient> recipients = { SendManyRecipient(std::nullopt, pa, 1*COIN, "ABCD") };
|
||||
std::shared_ptr<AsyncRPCOperation> operation(new AsyncRPCOperation_sendmany(builder, selector, recipients, 0));
|
||||
std::shared_ptr<AsyncRPCOperation_sendmany> ptr = std::dynamic_pointer_cast<AsyncRPCOperation_sendmany> (operation);
|
||||
|
||||
|
|
|
@ -143,6 +143,17 @@ struct CRecipient
|
|||
bool fSubtractFeeFromAmount;
|
||||
};
|
||||
|
||||
class SendManyRecipient {
|
||||
public:
|
||||
std::optional<libzcash::UnifiedAddress> ua;
|
||||
libzcash::RecipientAddress address;
|
||||
CAmount amount;
|
||||
std::optional<std::string> memo;
|
||||
|
||||
SendManyRecipient(std::optional<libzcash::UnifiedAddress> ua_, libzcash::RecipientAddress address_, CAmount amount_, std::optional<std::string> memo_) :
|
||||
ua(ua_), address(address_), amount(amount_), memo(memo_) {}
|
||||
};
|
||||
|
||||
typedef std::map<std::string, std::string> mapValue_t;
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue