Make optional claimid and amount in supportclaim
Return destination claim address as well Signed-off-by: Anthony Fieroni <bvbfan@abv.bg>
This commit is contained in:
parent
a98288aa80
commit
d2b78a7fc3
2 changed files with 38 additions and 16 deletions
|
@ -880,7 +880,7 @@ UniValue supportclaim(const JSONRPCRequest& request)
|
||||||
return NullUniValue;
|
return NullUniValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (request.fHelp || request.params.size() < 3 || request.params.size() > 5)
|
if (request.fHelp || request.params.size() < 1 || request.params.size() > 5)
|
||||||
throw std::runtime_error(
|
throw std::runtime_error(
|
||||||
"supportclaim \"name\" \"claimid\" \"amount\" \"value\"\n"
|
"supportclaim \"name\" \"claimid\" \"amount\" \"value\"\n"
|
||||||
"Increase the value of a claim. Whichever claim has the greatest value, including all support values, will be the authoritative claim, according to the rest of the rules. The name is the name which is claimed by the claim that will be supported, the txid is the txid\
|
"Increase the value of a claim. Whichever claim has the greatest value, including all support values, will be the authoritative claim, according to the rest of the rules. The name is the name which is claimed by the claim that will be supported, the txid is the txid\
|
||||||
|
@ -889,31 +889,49 @@ UniValue supportclaim(const JSONRPCRequest& request)
|
||||||
+ HelpRequiringPassphrase(pwallet) +
|
+ HelpRequiringPassphrase(pwallet) +
|
||||||
"\nArguments:\n"
|
"\nArguments:\n"
|
||||||
"1. \"name\" (string, required) The name claimed by the claim to support.\n"
|
"1. \"name\" (string, required) The name claimed by the claim to support.\n"
|
||||||
"2. \"claimid\" (string, required) The claimid of the claim to support.\n"
|
"2. \"claimid\" (string, optional) The claimid, partialid or best claim to support.\n"
|
||||||
"3. \"amount\" (numeric, required) The amount in LBC to use to support the claim.\n"
|
"3. \"amount\" (numeric, optional) The amount in LBC to use to support the claim.\n"
|
||||||
"4. \"value\" (string, optional) The metadata of the support encoded in hexadecimal.\n"
|
"4. \"value\" (string, optional) The metadata of the support encoded in hexadecimal.\n"
|
||||||
"\nResult:\n"
|
"\nResult: [\n"
|
||||||
"\"transactionid\" (string) The transaction id of the support.\n");
|
"\"txId\" (string) The transaction id of the support.\n"
|
||||||
|
"\"address\" (string) The destination address of the claim.\n"
|
||||||
|
"\n]");
|
||||||
|
|
||||||
auto sName = request.params[0].get_str();
|
auto sName = request.params[0].get_str();
|
||||||
auto sClaimId = request.params[1].get_str();
|
std::string sClaimId;
|
||||||
|
if (request.params.size() > 1)
|
||||||
|
sClaimId = request.params[1].get_str();
|
||||||
|
|
||||||
const size_t claimLength = 40;
|
const size_t claimLength = 40;
|
||||||
|
|
||||||
if (!IsHex(sClaimId))
|
if (!IsHexNumber(sClaimId))
|
||||||
throw JSONRPCError(RPC_INVALID_PARAMETER, "claimid must be a 20-character hexadecimal string (not '" + sClaimId + "')");
|
throw JSONRPCError(RPC_INVALID_PARAMETER, "claimid must be a 20-character hexadecimal string (not '" + sClaimId + "')");
|
||||||
if (sClaimId.length() != claimLength)
|
|
||||||
throw JSONRPCError(RPC_INVALID_PARAMETER, strprintf("claimid must be of length %d", claimLength));
|
|
||||||
|
|
||||||
uint160 claimId;
|
if (sClaimId.length() > claimLength)
|
||||||
claimId.SetHex(sClaimId);
|
throw JSONRPCError(RPC_INVALID_PARAMETER, strprintf("claimid must be maximum of length %d", claimLength));
|
||||||
std::vector<unsigned char> vchName (sName.begin(), sName.end());
|
|
||||||
std::vector<unsigned char> vchClaimId (claimId.begin(), claimId.end());
|
|
||||||
CAmount nAmount = AmountFromValue(request.params[2]);
|
|
||||||
|
|
||||||
pwallet->BlockUntilSyncedToCurrentChain();
|
pwallet->BlockUntilSyncedToCurrentChain();
|
||||||
LOCK2(cs_main, pwallet->cs_wallet);
|
LOCK2(cs_main, pwallet->cs_wallet);
|
||||||
EnsureWalletIsUnlocked(pwallet);
|
EnsureWalletIsUnlocked(pwallet);
|
||||||
|
|
||||||
|
uint160 claimId;
|
||||||
|
if (sClaimId.length() != claimLength) {
|
||||||
|
CClaimTrieCache trieCache(pclaimTrie);
|
||||||
|
auto csToName = trieCache.getClaimsForName(sName);
|
||||||
|
if (csToName.claimsNsupports.empty())
|
||||||
|
return NullUniValue;
|
||||||
|
auto& claimNsupports = !sClaimId.empty() ? csToName.find(sClaimId) : csToName.claimsNsupports[0];
|
||||||
|
if (claimNsupports.IsNull())
|
||||||
|
return NullUniValue;
|
||||||
|
claimId = claimNsupports.claim.claimId;
|
||||||
|
} else {
|
||||||
|
claimId.SetHex(sClaimId);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<unsigned char> vchName (sName.begin(), sName.end());
|
||||||
|
std::vector<unsigned char> vchClaimId (claimId.begin(), claimId.end());
|
||||||
|
CAmount nAmount = AmountFromValue(request.params.size() > 2 ? request.params[2] : "0.00000001");
|
||||||
|
|
||||||
CScript supportScript = CScript() << OP_SUPPORT_CLAIM << vchName << vchClaimId;
|
CScript supportScript = CScript() << OP_SUPPORT_CLAIM << vchName << vchClaimId;
|
||||||
auto lastOp = OP_DROP;
|
auto lastOp = OP_DROP;
|
||||||
if (request.params.size() > 3) {
|
if (request.params.size() > 3) {
|
||||||
|
@ -941,7 +959,11 @@ UniValue supportclaim(const JSONRPCRequest& request)
|
||||||
CCoinControl cc;
|
CCoinControl cc;
|
||||||
cc.m_change_type = pwallet->m_default_change_type;
|
cc.m_change_type = pwallet->m_default_change_type;
|
||||||
auto tx = SendMoney(pwallet, dest, nAmount, false, cc, {}, {}, supportScript);
|
auto tx = SendMoney(pwallet, dest, nAmount, false, cc, {}, {}, supportScript);
|
||||||
return tx->GetHash().GetHex();
|
|
||||||
|
UniValue result(UniValue::VOBJ);
|
||||||
|
result.pushKV("txId", tx->GetHash().GetHex());
|
||||||
|
result.pushKV("address", EncodeDestination(dest));
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
UniValue abandonsupport(const JSONRPCRequest& request)
|
UniValue abandonsupport(const JSONRPCRequest& request)
|
||||||
|
|
|
@ -78,7 +78,7 @@ uint256 SupportAName(const std::string& name, const std::string& claimId, const
|
||||||
req.params.push_back(price);
|
req.params.push_back(price);
|
||||||
|
|
||||||
UniValue results = rpc_method(req);
|
UniValue results = rpc_method(req);
|
||||||
auto txid = results.get_str();
|
auto txid = results["txId"].get_str();
|
||||||
uint256 ret;
|
uint256 ret;
|
||||||
ret.SetHex(txid);
|
ret.SetHex(txid);
|
||||||
return ret;
|
return ret;
|
||||||
|
|
Loading…
Reference in a new issue