Skip to content

Commit 4ab9352

Browse files
gpdionisioFuzzbawls
authored andcommitted
broke up the RPC commands in create/decode/relay
1 parent 5fd451f commit 4ab9352

File tree

4 files changed

+85
-94
lines changed

4 files changed

+85
-94
lines changed

src/masternode.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -698,7 +698,7 @@ bool CMasternodeBroadcast::VerifySignature()
698698
{
699699
std::string errorMessage;
700700
std::string strMessage;
701-
if(protocolVersion < 70913) {
701+
if(protocolVersion < 70911) {
702702
std::string vchPubKey(pubKeyCollateralAddress.begin(), pubKeyCollateralAddress.end());
703703
std::string vchPubKey2(pubKeyMasternode.begin(), pubKeyMasternode.end());
704704
strMessage = addr.ToString() + boost::lexical_cast<std::string>(sigTime) + vchPubKey + vchPubKey2 + boost::lexical_cast<std::string>(protocolVersion);

src/rpcmasternode.cpp

Lines changed: 78 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -963,29 +963,24 @@ bool DecodeHexMnb(CMasternodeBroadcast& mnb, std::string strHexMnb) {
963963

964964
return true;
965965
}
966-
967-
UniValue masternodebroadcast(const UniValue& params, bool fHelp)
966+
UniValue createmasternodebroadcast(const UniValue& params, bool fHelp)
968967
{
969-
string strCommand;
970-
if (params.size() >= 1)
971-
strCommand = params[0].get_str();
972-
973-
if (fHelp ||
974-
(strCommand != "create-alias" && strCommand != "create-all" && strCommand != "decode" && strCommand != "relay"))
975-
throw runtime_error(
976-
"masternodebroadcast \"command\"... ( \"passphrase\" )\n"
977-
"Set of commands to create and relay masternode broadcast messages\n"
978-
"\nArguments:\n"
979-
"1. \"command\" (string or set of strings, required) The command to execute\n"
980-
"2. \"passphrase\" (string, optional) The wallet passphrase\n"
981-
"\nAvailable commands:\n"
982-
" create-alias - Create single remote masternode broadcast message by assigned alias configured in masternode.conf\n"
983-
" create-all - Create remote masternode broadcast messages for all masternodes configured in masternode.conf\n"
984-
" decode - Decode masternode broadcast message\n"
985-
" relay - Relay masternode broadcast message to the network\n"
986-
+ HelpRequiringPassphrase());
987-
988-
if (strCommand == "create-alias")
968+
string strCommand;
969+
if (params.size() >= 1)
970+
strCommand = params[0].get_str();
971+
if (fHelp ||
972+
(strCommand != "alias" && strCommand != "all"))
973+
throw runtime_error(
974+
"createmasternodebroadcast \"command\""
975+
"Set of commands to create masternode broadcast messages for masternodes configured in masternode.conf\n"
976+
"\nArguments:\n"
977+
"1. \"command\" (string or set of strings, required) The command to execute\n"
978+
"\nAvailable commands:\n"
979+
" alias - Create single remote masternode broadcast message by assigned alias configured in masternode.conf\n"
980+
" all - Create remote masternode broadcast messages for all masternodes configured in masternode.conf\n"
981+
+ HelpRequiringPassphrase());
982+
983+
if (strCommand == "alias")
989984
{
990985
// wait for reindex and/or import to finish
991986
if (fImporting || fReindex)
@@ -996,20 +991,8 @@ UniValue masternodebroadcast(const UniValue& params, bool fHelp)
996991

997992
std::string alias = params[1].get_str();
998993

999-
if(pwalletMain->IsLocked()) {
1000-
SecureString strWalletPass;
1001-
strWalletPass.reserve(100);
1002-
1003-
if (params.size() == 3){
1004-
strWalletPass = params[2].get_str().c_str();
1005-
} else {
1006-
throw JSONRPCError(RPC_WALLET_UNLOCK_NEEDED, "Your wallet is locked, passphrase is required");
1007-
}
1008-
1009-
if(!pwalletMain->Unlock(strWalletPass)){
1010-
throw JSONRPCError(RPC_WALLET_PASSPHRASE_INCORRECT, "The wallet passphrase entered was incorrect");
1011-
}
1012-
}
994+
if(pwalletMain->IsLocked())
995+
throw JSONRPCError(RPC_WALLET_UNLOCK_NEEDED, "Your wallet is locked, it needs to be unlocked first.");
1013996

1014997
bool found = false;
1015998

@@ -1046,26 +1029,14 @@ UniValue masternodebroadcast(const UniValue& params, bool fHelp)
10461029

10471030
}
10481031

1049-
if (strCommand == "create-all")
1032+
if (strCommand == "all")
10501033
{
10511034
// wait for reindex and/or import to finish
10521035
if (fImporting || fReindex)
10531036
throw JSONRPCError(RPC_INTERNAL_ERROR, "Wait for reindex and/or import to finish");
10541037

1055-
if(pwalletMain->IsLocked()) {
1056-
SecureString strWalletPass;
1057-
strWalletPass.reserve(100);
1058-
1059-
if (params.size() == 2){
1060-
strWalletPass = params[1].get_str().c_str();
1061-
} else {
1062-
throw JSONRPCError(RPC_WALLET_UNLOCK_NEEDED, "Your wallet is locked, passphrase is required");
1063-
}
1064-
1065-
if(!pwalletMain->Unlock(strWalletPass)){
1066-
throw JSONRPCError(RPC_WALLET_PASSPHRASE_INCORRECT, "The wallet passphrase entered was incorrect");
1067-
}
1068-
}
1038+
if(pwalletMain->IsLocked())
1039+
throw JSONRPCError(RPC_WALLET_UNLOCK_NEEDED, "Your wallet is locked, it needs to be unlocked first.");
10691040

10701041
std::vector<CMasternodeConfig::CMasternodeEntry> mnEntries;
10711042
mnEntries = masternodeConfig.getEntries();
@@ -1108,59 +1079,75 @@ UniValue masternodebroadcast(const UniValue& params, bool fHelp)
11081079
return returnObj;
11091080
}
11101081

1111-
if (strCommand == "decode")
1112-
{
1113-
if (params.size() != 2)
1114-
throw JSONRPCError(RPC_INVALID_PARAMETER, "Correct usage is 'masternodebroadcast decode \"hexstring\"'");
1082+
return NullUniValue;
11151083

1116-
CMasternodeBroadcast mnb;
1084+
}
11171085

1118-
if (!DecodeHexMnb(mnb, params[1].get_str()))
1119-
throw JSONRPCError(RPC_DESERIALIZATION_ERROR, "Masternode broadcast message decode failed");
1086+
UniValue decodemasternodebroadcast(const UniValue& params, bool fHelp)
1087+
{
1088+
if (fHelp)
1089+
throw runtime_error(
1090+
"decodemasternodebroadcast \"hexstring\"\n"
1091+
"Command to decode masternode broadcast messages\n"
1092+
"\nArgument:\n"
1093+
"1. \"hexstring\" (hex string) The masternode broadcast message\n");
11201094

1121-
if(!mnb.VerifySignature())
1122-
throw JSONRPCError(RPC_INVALID_PARAMETER, "Masternode broadcast signature verification failed");
1095+
if (params.size() != 1)
1096+
throw JSONRPCError(RPC_INVALID_PARAMETER, "Correct usage is 'decodemasternodebroadcast \"hexstring\"'");
11231097

1124-
UniValue resultObj(UniValue::VOBJ);
1098+
CMasternodeBroadcast mnb;
11251099

1126-
resultObj.push_back(Pair("vin", mnb.vin.ToString()));
1127-
resultObj.push_back(Pair("addr", mnb.addr.ToString()));
1128-
resultObj.push_back(Pair("pubkey", CBitcoinAddress(mnb.pubKeyCollateralAddress.GetID()).ToString()));
1129-
resultObj.push_back(Pair("pubkey2", CBitcoinAddress(mnb.pubKeyMasternode.GetID()).ToString()));
1130-
resultObj.push_back(Pair("vchSig", EncodeBase64(&mnb.sig[0], mnb.sig.size())));
1131-
resultObj.push_back(Pair("sigTime", mnb.sigTime));
1132-
resultObj.push_back(Pair("protocolVersion", mnb.protocolVersion));
1133-
resultObj.push_back(Pair("nLastDsq", mnb.nLastDsq));
1100+
if (!DecodeHexMnb(mnb, params[0].get_str()))
1101+
throw JSONRPCError(RPC_DESERIALIZATION_ERROR, "Masternode broadcast message decode failed");
11341102

1135-
UniValue lastPingObj(UniValue::VOBJ);
1136-
lastPingObj.push_back(Pair("vin", mnb.lastPing.vin.ToString()));
1137-
lastPingObj.push_back(Pair("blockHash", mnb.lastPing.blockHash.ToString()));
1138-
lastPingObj.push_back(Pair("sigTime", mnb.lastPing.sigTime));
1139-
lastPingObj.push_back(Pair("vchSig", EncodeBase64(&mnb.lastPing.vchSig[0], mnb.lastPing.vchSig.size())));
1103+
if(!mnb.VerifySignature())
1104+
throw JSONRPCError(RPC_INVALID_PARAMETER, "Masternode broadcast signature verification failed");
11401105

1141-
resultObj.push_back(Pair("lastPing", lastPingObj));
1106+
UniValue resultObj(UniValue::VOBJ);
11421107

1143-
return resultObj;
1144-
}
1108+
resultObj.push_back(Pair("vin", mnb.vin.ToString()));
1109+
resultObj.push_back(Pair("addr", mnb.addr.ToString()));
1110+
resultObj.push_back(Pair("pubkey", CBitcoinAddress(mnb.pubKeyCollateralAddress.GetID()).ToString()));
1111+
resultObj.push_back(Pair("pubkey2", CBitcoinAddress(mnb.pubKeyMasternode.GetID()).ToString()));
1112+
resultObj.push_back(Pair("vchSig", EncodeBase64(&mnb.sig[0], mnb.sig.size())));
1113+
resultObj.push_back(Pair("sigTime", mnb.sigTime));
1114+
resultObj.push_back(Pair("protocolVersion", mnb.protocolVersion));
1115+
resultObj.push_back(Pair("nLastDsq", mnb.nLastDsq));
11451116

1146-
if (strCommand == "relay")
1147-
{
1148-
if (params.size() != 2)
1149-
throw JSONRPCError(RPC_INVALID_PARAMETER, "Correct usage is 'masternodebroadcast relay \"hexstring\"'");
1117+
UniValue lastPingObj(UniValue::VOBJ);
1118+
lastPingObj.push_back(Pair("vin", mnb.lastPing.vin.ToString()));
1119+
lastPingObj.push_back(Pair("blockHash", mnb.lastPing.blockHash.ToString()));
1120+
lastPingObj.push_back(Pair("sigTime", mnb.lastPing.sigTime));
1121+
lastPingObj.push_back(Pair("vchSig", EncodeBase64(&mnb.lastPing.vchSig[0], mnb.lastPing.vchSig.size())));
11501122

1151-
CMasternodeBroadcast mnb;
1123+
resultObj.push_back(Pair("lastPing", lastPingObj));
11521124

1153-
if (!DecodeHexMnb(mnb, params[1].get_str()))
1154-
throw JSONRPCError(RPC_DESERIALIZATION_ERROR, "Masternode broadcast message decode failed");
1125+
return resultObj;
1126+
}
11551127

1156-
if(!mnb.VerifySignature())
1157-
throw JSONRPCError(RPC_INVALID_PARAMETER, "Masternode broadcast signature verification failed");
1128+
UniValue relaymasternodebroadcast(const UniValue& params, bool fHelp)
1129+
{
1130+
if (fHelp)
1131+
throw runtime_error(
1132+
"relaymasternodebroadcast \"hexstring\"\n"
1133+
"Command to relay masternode broadcast messages\n"
1134+
"\nArguments:\n"
1135+
"1. \"hexstring\" (hex string) The masternode broadcast message\n");
11581136

1159-
mnodeman.UpdateMasternodeList(mnb);
1160-
mnb.Relay();
1137+
if (params.size() != 1)
1138+
throw JSONRPCError(RPC_INVALID_PARAMETER, "Correct usage is 'relaymasternodebroadcast \"hexstring\"'");
11611139

1162-
return strprintf("Masternode broadcast sent (service %s, vin %s)", mnb.addr.ToString(), mnb.vin.ToString());
1163-
}
1140+
CMasternodeBroadcast mnb;
11641141

1165-
return UniValue(UniValue::VOBJ);
1142+
if (!DecodeHexMnb(mnb, params[0].get_str()))
1143+
throw JSONRPCError(RPC_DESERIALIZATION_ERROR, "Masternode broadcast message decode failed");
1144+
1145+
if(!mnb.VerifySignature())
1146+
throw JSONRPCError(RPC_INVALID_PARAMETER, "Masternode broadcast signature verification failed");
1147+
1148+
mnodeman.UpdateMasternodeList(mnb);
1149+
mnb.Relay();
1150+
1151+
return strprintf("Masternode broadcast sent (service %s, vin %s)", mnb.addr.ToString(), mnb.vin.ToString());
11661152
}
1153+

src/rpcserver.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,9 @@ static const CRPCCommand vRPCCommands[] =
356356
{"pivx", "listmasternodes", &listmasternodes, true, true, false},
357357
{"pivx", "getmasternodecount", &getmasternodecount, true, true, false},
358358
{"pivx", "masternodeconnect", &masternodeconnect, true, true, false},
359-
{"pivx", "masternodebroadcast", &masternodebroadcast, true, true, false},
359+
{"pivx", "createmasternodebroadcast", &createmasternodebroadcast, true, true, false},
360+
{"pivx", "decodemasternodebroadcast", &decodemasternodebroadcast, true, true, false},
361+
{"pivx", "relaymasternodebroadcast", &relaymasternodebroadcast, true, true, false},
360362
{"pivx", "masternodecurrent", &masternodecurrent, true, true, false},
361363
{"pivx", "masternodedebug", &masternodedebug, true, true, false},
362364
{"pivx", "startmasternode", &startmasternode, true, true, false},

src/rpcserver.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,9 @@ extern UniValue getpoolinfo(const UniValue& params, bool fHelp);
293293
extern UniValue masternode(const UniValue& params, bool fHelp);
294294
extern UniValue listmasternodes(const UniValue& params, bool fHelp);
295295
extern UniValue getmasternodecount(const UniValue& params, bool fHelp);
296-
extern UniValue masternodebroadcast(const UniValue& params, bool fHelp);
296+
extern UniValue createmasternodebroadcast(const UniValue& params, bool fHelp);
297+
extern UniValue decodemasternodebroadcast(const UniValue& params, bool fHelp);
298+
extern UniValue relaymasternodebroadcast(const UniValue& params, bool fHelp);
297299
extern UniValue masternodeconnect(const UniValue& params, bool fHelp);
298300
extern UniValue masternodecurrent(const UniValue& params, bool fHelp);
299301
extern UniValue masternodedebug(const UniValue& params, bool fHelp);

0 commit comments

Comments
 (0)