From 065a60acd36e57175d727173a97beeceedebd6f1 Mon Sep 17 00:00:00 2001 From: levonpetrosyan93 <45027856+levonpetrosyan93@users.noreply.github.com> Date: Sat, 11 May 2024 21:45:54 +0400 Subject: [PATCH] checkifmncollateral rpc added (#1427) * checkifmncollateral rpc added * review comments applied --- src/rpc/misc.cpp | 38 ++++++++++++++++++++++++++++++++++++++ src/rpc/server.cpp | 2 ++ src/rpc/server.h | 2 ++ 3 files changed, 42 insertions(+) diff --git a/src/rpc/misc.cpp b/src/rpc/misc.cpp index 74479aaa71..ad96886540 100644 --- a/src/rpc/misc.cpp +++ b/src/rpc/misc.cpp @@ -23,6 +23,7 @@ #include "txdb.h" #include "masternode-sync.h" +#include "evo/deterministicmns.h" #include @@ -1430,6 +1431,42 @@ UniValue getsparklatestcoinid(const JSONRPCRequest& request) return UniValue(latestCoinId); } +UniValue checkifmncollateral(const JSONRPCRequest& request) +{ + if (request.fHelp || request.params.size() != 2) + throw std::runtime_error( + "checkifmncollateral\n" + "\nReturns bool value.\n" + "\nArguments:\n" + " \"txHash\"\n" + " \"index\"\n" + + HelpExampleCli("checkifmncollateral", "\"b476ed2b374bb081ea51d111f68f0136252521214e213d119b8dc67b92f5a390\"" "\"0\" ") + + HelpExampleRpc("checkifmncollateral", "\"b476ed2b374bb081ea51d111f68f0136252521214e213d119b8dc67b92f5a390\"" "\"0\" ") + ); + + std::string strTxId; + int index; + + try { + strTxId = request.params[0].get_str(); + index = std::stol(request.params[1].get_str()); + } catch (std::logic_error const & e) { + throw std::runtime_error(std::string("An exception occurred while parsing parameters: ") + e.what()); + } + + uint256 txid = uint256S(strTxId); + + CTransactionRef tx; + uint256 hashBlock; + if(!GetTransaction(txid, tx, Params().GetConsensus(), hashBlock, true)) + throw std::runtime_error("Unknown transaction."); + + auto mnList = deterministicMNManager->GetListAtChainTip(); + COutPoint o(txid, index); + bool fMnExists = deterministicMNManager->IsProTxWithCollateral(tx, index) || mnList.HasMNByCollateral(o); + return UniValue(fMnExists); +} + UniValue getaddresstxids(const JSONRPCRequest& request) { if (request.fHelp || request.params.size() != 1) @@ -1727,6 +1764,7 @@ static const CRPCCommand commands[] = { "mobile", "getusedcoinstags", &getusedcoinstags, false }, { "mobile", "getsparklatestcoinid", &getsparklatestcoinid, true }, + { "mobile", "checkifmncollateral", &checkifmncollateral, false }, { "hidden", "setmocktime", &setmocktime, true, {"timestamp"}}, { "hidden", "echo", &echo, true, {"arg0","arg1","arg2","arg3","arg4","arg5","arg6","arg7","arg8","arg9"}}, diff --git a/src/rpc/server.cpp b/src/rpc/server.cpp index 88c97abee2..04870a06bc 100644 --- a/src/rpc/server.cpp +++ b/src/rpc/server.cpp @@ -344,6 +344,8 @@ static const CRPCCommand vRPCCommands[] = { "mobile", "getusedcoinstags", &getusedcoinstags, false }, { "mobile", "getsparklatestcoinid", &getsparklatestcoinid, true }, + { "mobile", "checkifmncollateral", &checkifmncollateral, false }, + }; CRPCTable::CRPCTable() diff --git a/src/rpc/server.h b/src/rpc/server.h index 642e33451e..b16f0f4e95 100644 --- a/src/rpc/server.h +++ b/src/rpc/server.h @@ -218,6 +218,8 @@ extern UniValue getsparkmintmetadata(const JSONRPCRequest& params); extern UniValue getusedcoinstags(const JSONRPCRequest& params); extern UniValue getsparklatestcoinid(const JSONRPCRequest& params); +extern UniValue checkifmncollateral(const JSONRPCRequest& params); + extern UniValue znode(const JSONRPCRequest &request); extern UniValue znodelist(const JSONRPCRequest &request); extern UniValue znodebroadcast(const JSONRPCRequest &request);