Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit a2e6ffa

Browse files
committed
[BDAP] Allow sending to stealth addresses in "makecredits" RPC
1 parent ef652b1 commit a2e6ffa

File tree

2 files changed

+34
-9
lines changed

2 files changed

+34
-9
lines changed

src/bdap/rpcdomainentry.cpp

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
#include <univalue.h>
2121

2222
extern void SendBDAPTransaction(const CScript& bdapDataScript, const CScript& bdapOPScript, CWalletTx& wtxNew, const CAmount& nDataAmount, const CAmount& nOpAmount, const bool fUseInstantSend);
23-
extern void SendColorTransaction(const CScript& scriptColorCoins, CWalletTx& wtxNew, const CAmount& nColorAmount, const CCoinControl* coinControl, const bool fUseInstantSend, const bool fUsePrivateSend);
23+
extern void SendColorTransaction(const CScript& scriptColorCoins, const CScript& stealthDataScript, CWalletTx& wtxNew, const CAmount& nColorAmount, const CCoinControl* coinControl, const bool fUseInstantSend, const bool fUsePrivateSend);
2424

2525
static UniValue AddDomainEntry(const JSONRPCRequest& request, BDAP::ObjectType bdapType)
2626
{
@@ -958,20 +958,40 @@ UniValue makecredits(const JSONRPCRequest& request)
958958
if (nColorAmount <= 0)
959959
throw JSONRPCError(RPC_TYPE_ERROR, "Invalid amount for coloring");
960960

961+
CScript scriptDestination;
962+
std::vector<uint8_t> vStealthData;
963+
bool fStealthAddress = false;
964+
if (dest.type() == typeid(CStealthAddress))
965+
{
966+
CStealthAddress sxAddr = boost::get<CStealthAddress>(dest);
967+
std::string sError;
968+
if (0 != PrepareStealthOutput(sxAddr, scriptDestination, vStealthData, sError)) {
969+
LogPrintf("%s -- PrepareStealthOutput failed. Error = %s\n", __func__, sError);
970+
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid address");
971+
}
972+
fStealthAddress = true;
973+
CTxDestination newDest;
974+
if (ExtractDestination(scriptDestination, newDest))
975+
LogPrint("bdap", "%s -- Stealth send to address: %s\n", __func__, CDynamicAddress(newDest).ToString());
976+
}
977+
else {
978+
scriptDestination = GetScriptForDestination(dest);
979+
}
980+
CScript stealthScript;
981+
if (fStealthAddress) {
982+
stealthScript << OP_RETURN << vStealthData;
983+
}
984+
// Create BDAP move asset operation script
961985
std::vector<unsigned char> vchMoveSource = vchFromString(std::string("DYN"));
962986
std::vector<unsigned char> vchMoveDestination = vchFromString(std::string("BDAP"));
963-
964-
// Create BDAP move asset operation script
965987
CScript scriptColorCoins;
966988
scriptColorCoins << CScript::EncodeOP_N(OP_BDAP_MOVE) << CScript::EncodeOP_N(OP_BDAP_ASSET)
967989
<< vchMoveSource << vchMoveDestination << OP_2DROP << OP_2DROP;
968990

969-
CScript scriptDestination;
970-
scriptDestination = GetScriptForDestination(dest);
971991
scriptColorCoins += scriptDestination;
972992

973993
CWalletTx wtx;
974-
SendColorTransaction(scriptColorCoins, wtx, nColorAmount, NULL, false, false);
994+
SendColorTransaction(scriptColorCoins, stealthScript, wtx, nColorAmount, NULL, false, false);
975995

976996
return wtx.GetHash().GetHex();
977997
}

src/wallet/rpcwallet.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -552,7 +552,7 @@ void SendLinkingTransaction(const CScript& bdapDataScript, const CScript& bdapOP
552552
}
553553
}
554554

555-
void SendColorTransaction(const CScript& scriptColorCoins, CWalletTx& wtxNew, const CAmount& nColorAmount, const CCoinControl* coinControl, const bool fUseInstantSend, const bool fUsePrivateSend)
555+
void SendColorTransaction(const CScript& scriptColorCoins, const CScript& stealthDataScript, CWalletTx& wtxNew, const CAmount& nColorAmount, const CCoinControl* coinControl, const bool fUseInstantSend, const bool fUsePrivateSend)
556556
{
557557
CAmount curBalance = pwalletMain->GetBalance();
558558

@@ -570,11 +570,16 @@ void SendColorTransaction(const CScript& scriptColorCoins, CWalletTx& wtxNew, co
570570
std::vector<CRecipient> vecSend;
571571
int nChangePosInOut = 0;
572572

573-
LogPrintf("Sending color coin script: %s\n", ScriptToAsmStr(scriptColorCoins));
573+
LogPrint("bdap", "Sending color coin script: %s\n", ScriptToAsmStr(scriptColorCoins));
574+
575+
if (stealthDataScript.size() > 0) {
576+
CRecipient recStealthData = {stealthDataScript, 0, false};
577+
vecSend.push_back(recStealthData);
578+
}
574579

575580
CRecipient recScript = {scriptColorCoins, nColorAmount, false};
576581
vecSend.push_back(recScript);
577-
//
582+
578583
if (!pwalletMain->CreateTransaction(vecSend, wtxNew, reservekey, nFeeRequired, nChangePosInOut,
579584
strError, coinControl, true, fUsePrivateSend ? ONLY_DENOMINATED : ALL_COINS, fUseInstantSend, true)) {
580585
if (nColorAmount + nFeeRequired > pwalletMain->GetBalance())

0 commit comments

Comments
 (0)