diff --git a/qa/rpc-tests/dip3-deterministicmns.py b/qa/rpc-tests/dip3-deterministicmns.py index 09ed892075..f80e249c6f 100755 --- a/qa/rpc-tests/dip3-deterministicmns.py +++ b/qa/rpc-tests/dip3-deterministicmns.py @@ -496,7 +496,7 @@ class DIP3Test(BitcoinTestFramework): for node in self.nodes: protx_info = node.protx('info', mn.protx_hash) mn_list = node.masternode('list') - assert_equal(protx_info['state']['addr'], '127.0.0.2:%d' % mn.p2p_port) + assert_equal(protx_info['state']['service'], '127.0.0.2:%d' % mn.p2p_port) assert_equal(mn_list['%s-%d' % (mn.collateral_txid, mn.collateral_vout)]['address'], '127.0.0.2:%d' % mn.p2p_port) # undo diff --git a/src/evo/deterministicmns.cpp b/src/evo/deterministicmns.cpp index ba0f7d0190..6f664c05a1 100644 --- a/src/evo/deterministicmns.cpp +++ b/src/evo/deterministicmns.cpp @@ -27,45 +27,43 @@ std::string CDeterministicMNState::ToString() const { CTxDestination dest; std::string payoutAddress = "unknown"; - std::string operatorRewardAddress = "none"; + std::string operatorPayoutAddress = "none"; if (ExtractDestination(scriptPayout, dest)) { payoutAddress = CBitcoinAddress(dest).ToString(); } if (ExtractDestination(scriptOperatorPayout, dest)) { - operatorRewardAddress = CBitcoinAddress(dest).ToString(); + operatorPayoutAddress = CBitcoinAddress(dest).ToString(); } return strprintf("CDeterministicMNState(nRegisteredHeight=%d, nLastPaidHeight=%d, nPoSePenalty=%d, nPoSeRevivedHeight=%d, nPoSeBanHeight=%d, nRevocationReason=%d, " - "keyIDOwner=%s, pubKeyOperator=%s, keyIDVoting=%s, addr=%s, payoutAddress=%s, operatorRewardAddress=%s)", + "ownerAddress=%s, pubKeyOperator=%s, votingAddress=%s, addr=%s, payoutAddress=%s, operatorPayoutAddress=%s)", nRegisteredHeight, nLastPaidHeight, nPoSePenalty, nPoSeRevivedHeight, nPoSeBanHeight, nRevocationReason, - keyIDOwner.ToString(), pubKeyOperator.ToString(), keyIDVoting.ToString(), addr.ToStringIPPort(false), payoutAddress, operatorRewardAddress); + CBitcoinAddress(keyIDOwner).ToString(), pubKeyOperator.ToString(), CBitcoinAddress(keyIDVoting).ToString(), addr.ToStringIPPort(false), payoutAddress, operatorPayoutAddress); } void CDeterministicMNState::ToJson(UniValue& obj) const { obj.clear(); obj.setObject(); + obj.push_back(Pair("service", addr.ToStringIPPort(false))); obj.push_back(Pair("registeredHeight", nRegisteredHeight)); obj.push_back(Pair("lastPaidHeight", nLastPaidHeight)); obj.push_back(Pair("PoSePenalty", nPoSePenalty)); obj.push_back(Pair("PoSeRevivedHeight", nPoSeRevivedHeight)); obj.push_back(Pair("PoSeBanHeight", nPoSeBanHeight)); obj.push_back(Pair("revocationReason", nRevocationReason)); - obj.push_back(Pair("keyIDOwner", keyIDOwner.ToString())); - obj.push_back(Pair("pubKeyOperator", pubKeyOperator.ToString())); - obj.push_back(Pair("keyIDVoting", keyIDVoting.ToString())); - obj.push_back(Pair("ownerKeyAddr", CBitcoinAddress(keyIDOwner).ToString())); - obj.push_back(Pair("votingKeyAddr", CBitcoinAddress(keyIDVoting).ToString())); - obj.push_back(Pair("addr", addr.ToStringIPPort(false))); + obj.push_back(Pair("ownerAddress", CBitcoinAddress(keyIDOwner).ToString())); + obj.push_back(Pair("votingAddress", CBitcoinAddress(keyIDVoting).ToString())); CTxDestination dest; if (ExtractDestination(scriptPayout, dest)) { - CBitcoinAddress bitcoinAddress(dest); - obj.push_back(Pair("payoutAddress", bitcoinAddress.ToString())); + CBitcoinAddress payoutAddress(dest); + obj.push_back(Pair("payoutAddress", payoutAddress.ToString())); } + obj.push_back(Pair("pubKeyOperator", pubKeyOperator.ToString())); if (ExtractDestination(scriptOperatorPayout, dest)) { - CBitcoinAddress bitcoinAddress(dest); - obj.push_back(Pair("operatorRewardAddress", bitcoinAddress.ToString())); + CBitcoinAddress operatorPayoutAddress(dest); + obj.push_back(Pair("operatorPayoutAddress", operatorPayoutAddress.ToString())); } } diff --git a/src/evo/providertx.cpp b/src/evo/providertx.cpp index b4a045cd99..c7e7df0dc6 100644 --- a/src/evo/providertx.cpp +++ b/src/evo/providertx.cpp @@ -417,8 +417,8 @@ std::string CProRegTx::ToString() const payee = CBitcoinAddress(dest).ToString(); } - return strprintf("CProRegTx(nVersion=%d, collateralOutpoint=%s, addr=%s, nOperatorReward=%f, keyIDOwner=%s, pubKeyOperator=%s, keyIDVoting=%s, scriptPayout=%s)", - nVersion, collateralOutpoint.ToStringShort(), addr.ToString(), (double)nOperatorReward / 100, keyIDOwner.ToString(), pubKeyOperator.ToString(), keyIDVoting.ToString(), payee); + return strprintf("CProRegTx(nVersion=%d, collateralOutpoint=%s, addr=%s, nOperatorReward=%f, ownerAddress=%s, pubKeyOperator=%s, votingAddress=%s, scriptPayout=%s)", + nVersion, collateralOutpoint.ToStringShort(), addr.ToString(), (double)nOperatorReward / 100, CBitcoinAddress(keyIDOwner).ToString(), pubKeyOperator.ToString(), CBitcoinAddress(keyIDVoting).ToString(), payee); } void CProRegTx::ToJson(UniValue& obj) const @@ -429,15 +429,15 @@ void CProRegTx::ToJson(UniValue& obj) const obj.push_back(Pair("collateralHash", collateralOutpoint.hash.ToString())); obj.push_back(Pair("collateralIndex", (int)collateralOutpoint.n)); obj.push_back(Pair("service", addr.ToString(false))); - obj.push_back(Pair("keyIDOwner", keyIDOwner.ToString())); - obj.push_back(Pair("pubKeyOperator", pubKeyOperator.ToString())); - obj.push_back(Pair("keyIDVoting", keyIDVoting.ToString())); + obj.push_back(Pair("ownerAddress", CBitcoinAddress(keyIDOwner).ToString())); + obj.push_back(Pair("votingAddress", CBitcoinAddress(keyIDVoting).ToString())); CTxDestination dest; if (ExtractDestination(scriptPayout, dest)) { CBitcoinAddress bitcoinAddress(dest); obj.push_back(Pair("payoutAddress", bitcoinAddress.ToString())); } + obj.push_back(Pair("pubKeyOperator", pubKeyOperator.ToString())); obj.push_back(Pair("operatorReward", (double)nOperatorReward / 100)); obj.push_back(Pair("inputsHash", inputsHash.ToString())); @@ -478,8 +478,8 @@ std::string CProUpRegTx::ToString() const payee = CBitcoinAddress(dest).ToString(); } - return strprintf("CProUpRegTx(nVersion=%d, proTxHash=%s, pubKeyOperator=%s, keyIDVoting=%s, payoutAddress=%s)", - nVersion, proTxHash.ToString(), pubKeyOperator.ToString(), keyIDVoting.ToString(), payee); + return strprintf("CProUpRegTx(nVersion=%d, proTxHash=%s, pubKeyOperator=%s, votingAddress=%s, payoutAddress=%s)", + nVersion, proTxHash.ToString(), pubKeyOperator.ToString(), CBitcoinAddress(keyIDVoting).ToString(), payee); } void CProUpRegTx::ToJson(UniValue& obj) const @@ -488,13 +488,13 @@ void CProUpRegTx::ToJson(UniValue& obj) const obj.setObject(); obj.push_back(Pair("version", nVersion)); obj.push_back(Pair("proTxHash", proTxHash.ToString())); - obj.push_back(Pair("pubKeyOperator", pubKeyOperator.ToString())); - obj.push_back(Pair("keyIDVoting", keyIDVoting.ToString())); + obj.push_back(Pair("votingAddress", CBitcoinAddress(keyIDVoting).ToString())); CTxDestination dest; if (ExtractDestination(scriptPayout, dest)) { CBitcoinAddress bitcoinAddress(dest); obj.push_back(Pair("payoutAddress", bitcoinAddress.ToString())); } + obj.push_back(Pair("pubKeyOperator", pubKeyOperator.ToString())); obj.push_back(Pair("inputsHash", inputsHash.ToString())); } diff --git a/src/evo/simplifiedmns.cpp b/src/evo/simplifiedmns.cpp index b630e06d31..875c46dea5 100644 --- a/src/evo/simplifiedmns.cpp +++ b/src/evo/simplifiedmns.cpp @@ -8,6 +8,7 @@ #include "simplifiedmns.h" #include "specialtx.h" +#include "base58.h" #include "chainparams.h" #include "consensus/merkle.h" #include "univalue.h" @@ -32,8 +33,8 @@ uint256 CSimplifiedMNListEntry::CalcHash() const std::string CSimplifiedMNListEntry::ToString() const { - return strprintf("CSimplifiedMNListEntry(proRegTxHash=%s, confirmedHash=%s, service=%s, pubKeyOperator=%s, keyIDVoting=%s, isValie=%d)", - proRegTxHash.ToString(), confirmedHash.ToString(), service.ToString(false), pubKeyOperator.ToString(), keyIDVoting.ToString(), isValid); + return strprintf("CSimplifiedMNListEntry(proRegTxHash=%s, confirmedHash=%s, service=%s, pubKeyOperator=%s, votingAddress=%s, isValie=%d)", + proRegTxHash.ToString(), confirmedHash.ToString(), service.ToString(false), pubKeyOperator.ToString(), CBitcoinAddress(keyIDVoting).ToString(), isValid); } void CSimplifiedMNListEntry::ToJson(UniValue& obj) const @@ -44,7 +45,7 @@ void CSimplifiedMNListEntry::ToJson(UniValue& obj) const obj.push_back(Pair("confirmedHash", confirmedHash.ToString())); obj.push_back(Pair("service", service.ToString(false))); obj.push_back(Pair("pubKeyOperator", pubKeyOperator.ToString())); - obj.push_back(Pair("keyIDVoting", keyIDVoting.ToString())); + obj.push_back(Pair("votingAddress", CBitcoinAddress(keyIDVoting).ToString())); obj.push_back(Pair("isValid", isValid)); } diff --git a/src/rpc/governance.cpp b/src/rpc/governance.cpp index 441f7453d6..4f5afc6151 100644 --- a/src/rpc/governance.cpp +++ b/src/rpc/governance.cpp @@ -692,7 +692,7 @@ UniValue gobject_vote_alias(const JSONRPCRequest& request) CKey votingKey; if (!pwalletMain->GetKey(dmn->pdmnState->keyIDVoting, votingKey)) { - throw JSONRPCError(RPC_INVALID_PARAMETER, strprintf("Voting ekey %s not known by wallet", CBitcoinAddress(dmn->pdmnState->keyIDVoting).ToString())); + throw JSONRPCError(RPC_INVALID_PARAMETER, strprintf("Private key for voting address %s not known by wallet", CBitcoinAddress(dmn->pdmnState->keyIDVoting).ToString())); } CBitcoinSecret secret(votingKey); diff --git a/src/rpc/masternode.cpp b/src/rpc/masternode.cpp index f443a0527c..dafc9ae4be 100644 --- a/src/rpc/masternode.cpp +++ b/src/rpc/masternode.cpp @@ -148,7 +148,8 @@ void masternode_list_help() " lastpaidblock - Print the last block height a node was paid on the network\n" " lastpaidtime - Print the last time a node was paid on the network\n" " lastseen - Print timestamp of when a masternode was last seen on the network\n" - " payee - Print Dash address associated with a masternode (can be additionally filtered,\n" + " owneraddress - Print the masternode owner Dash address\n" + " payee - Print the masternode payout Dash address (can be additionally filtered,\n" " partial match)\n" " protocol - Print protocol of a masternode (can be additionally filtered, exact match)\n" " keyid - Print the masternode (not collateral) key id\n" @@ -156,6 +157,7 @@ void masternode_list_help() " sentinel - Print sentinel version of a masternode (can be additionally filtered, exact match)\n" " status - Print masternode status: PRE_ENABLED / ENABLED / EXPIRED / SENTINEL_PING_EXPIRED / NEW_START_REQUIRED /\n" " UPDATE_REQUIRED / POSE_BAN / OUTPOINT_SPENT (can be additionally filtered, partial match)\n" + " votingaddress - Print the masternode voting Dash address\n" ); } @@ -855,6 +857,7 @@ UniValue masternodelist(const JSONRPCRequest& request) if (request.fHelp || ( strMode != "activeseconds" && strMode != "addr" && strMode != "daemon" && strMode != "full" && strMode != "info" && strMode != "json" && + strMode != "owneraddress" && strMode != "votingaddress" && strMode != "keyid" && strMode != "lastseen" && strMode != "lastpaidtime" && strMode != "lastpaidblock" && strMode != "protocol" && strMode != "payee" && strMode != "pubkey" && strMode != "rank" && strMode != "sentinel" && strMode != "status")) @@ -953,7 +956,7 @@ UniValue masternodelist(const JSONRPCRequest& request) } else if (strMode == "json") { std::ostringstream streamInfo; streamInfo << mn.addr.ToString() << " " << - CBitcoinAddress(mn.pubKeyCollateralAddress.GetID()).ToString() << " " << + payeeStr << " " << mn.GetStatus() << " " << mn.nProtocolVersion << " " << mn.lastPing.nDaemonVersion << " " << @@ -968,7 +971,7 @@ UniValue masternodelist(const JSONRPCRequest& request) strOutpoint.find(strFilter) == std::string::npos) continue; UniValue objMN(UniValue::VOBJ); objMN.push_back(Pair("address", mn.addr.ToString())); - objMN.push_back(Pair("payee", CBitcoinAddress(mn.pubKeyCollateralAddress.GetID()).ToString())); + objMN.push_back(Pair("payee", payeeStr)); objMN.push_back(Pair("status", mn.GetStatus())); objMN.push_back(Pair("protocol", mn.nProtocolVersion)); objMN.push_back(Pair("daemonversion", mn.lastPing.GetDaemonString())); @@ -978,7 +981,12 @@ UniValue masternodelist(const JSONRPCRequest& request) objMN.push_back(Pair("activeseconds", (int64_t)(mn.lastPing.sigTime - mn.sigTime))); objMN.push_back(Pair("lastpaidtime", mn.GetLastPaidTime())); objMN.push_back(Pair("lastpaidblock", mn.GetLastPaidBlock())); + objMN.push_back(Pair("owneraddress", CBitcoinAddress(mn.keyIDOwner).ToString())); + objMN.push_back(Pair("votingaddress", CBitcoinAddress(mn.keyIDVoting).ToString())); obj.push_back(Pair(strOutpoint, objMN)); + } else if (strMode == "keyid") { + if (strFilter !="" && strOutpoint.find(strFilter) == std::string::npos) continue; + obj.push_back(Pair(strOutpoint, HexStr(mn.legacyKeyIDOperator))); } else if (strMode == "lastpaidblock") { if (strFilter !="" && strOutpoint.find(strFilter) == std::string::npos) continue; obj.push_back(Pair(strOutpoint, mn.GetLastPaidBlock())); @@ -988,6 +996,9 @@ UniValue masternodelist(const JSONRPCRequest& request) } else if (strMode == "lastseen") { if (strFilter !="" && strOutpoint.find(strFilter) == std::string::npos) continue; obj.push_back(Pair(strOutpoint, (int64_t)mn.lastPing.sigTime)); + } else if (strMode == "owneraddress") { + if (strFilter !="" && strOutpoint.find(strFilter) == std::string::npos) continue; + obj.push_back(Pair(strOutpoint, CBitcoinAddress(mn.keyIDOwner).ToString())); } else if (strMode == "payee") { if (strFilter !="" && payeeStr.find(strFilter) == std::string::npos && strOutpoint.find(strFilter) == std::string::npos) continue; @@ -996,20 +1007,14 @@ UniValue masternodelist(const JSONRPCRequest& request) if (strFilter !="" && strFilter != strprintf("%d", mn.nProtocolVersion) && strOutpoint.find(strFilter) == std::string::npos) continue; obj.push_back(Pair(strOutpoint, mn.nProtocolVersion)); - } else if (strMode == "keyIDOwner") { - if (strFilter !="" && strOutpoint.find(strFilter) == std::string::npos) continue; - obj.push_back(Pair(strOutpoint, HexStr(mn.keyIDOwner))); - } else if (strMode == "keyIDOperator") { - if (strFilter !="" && strOutpoint.find(strFilter) == std::string::npos) continue; - obj.push_back(Pair(strOutpoint, HexStr(mn.legacyKeyIDOperator))); - } else if (strMode == "keyIDVoting") { - if (strFilter !="" && strOutpoint.find(strFilter) == std::string::npos) continue; - obj.push_back(Pair(strOutpoint, HexStr(mn.keyIDVoting))); } else if (strMode == "status") { std::string strStatus = mn.GetStatus(); if (strFilter !="" && strStatus.find(strFilter) == std::string::npos && strOutpoint.find(strFilter) == std::string::npos) continue; obj.push_back(Pair(strOutpoint, strStatus)); + } else if (strMode == "votingaddress") { + if (strFilter !="" && strOutpoint.find(strFilter) == std::string::npos) continue; + obj.push_back(Pair(strOutpoint, CBitcoinAddress(mn.keyIDVoting).ToString())); } } } diff --git a/src/rpc/rpcevo.cpp b/src/rpc/rpcevo.cpp index 754763e39c..5287d3eedf 100644 --- a/src/rpc/rpcevo.cpp +++ b/src/rpc/rpcevo.cpp @@ -224,7 +224,7 @@ static std::string SignAndSendSpecialTx(const CMutableTransaction& tx) void protx_register_fund_help() { throw std::runtime_error( - "protx register_fund \"collateralAddress\" \"ipAndPort\" \"ownerKeyAddr\" \"operatorPubKey\" \"votingKeyAddr\" operatorReward \"payoutAddress\" ( \"fundAddress\" )\n" + "protx register_fund \"collateralAddress\" \"ipAndPort\" \"ownerAddress\" \"operatorPubKey\" \"votingAddress\" operatorReward \"payoutAddress\" ( \"fundAddress\" )\n" "\nCreates, funds and sends a ProTx to the network. The resulting transaction will move 1000 Dash\n" "to the address specified by collateralAddress and will then function as the collateral of your\n" "masternode.\n" @@ -235,12 +235,12 @@ void protx_register_fund_help() " Must be a P2PKH address.\n" "2. \"ipAndPort\" (string, required) IP and port in the form \"IP:PORT\".\n" " Must be unique on the network. Can be set to 0, which will require a ProUpServTx afterwards.\n" - "3. \"ownerKeyAddr\" (string, required) The owner key used for payee updates and proposal voting.\n" + "3. \"ownerAddress\" (string, required) The owner key used for payee updates and proposal voting.\n" " The private key belonging to this address must be known in your wallet. The address must\n" " be unused and must differ from the collateralAddress\n" "4. \"operatorPubKey\" (string, required) The operator BLS public key. The private key does not have to be known.\n" " It has to match the private key which is later used when operating the masternode.\n" - "5. \"votingKeyAddr\" (string, required) The voting key address. The private key does not have to be known by your wallet.\n" + "5. \"votingAddress\" (string, required) The voting key address. The private key does not have to be known by your wallet.\n" " It has to match the private key which is later used when voting on proposals.\n" " If set to \"0\" or an empty string, ownerAddr will be used.\n" "6. \"operatorReward\" (numeric, required) The fraction in % to share with the operator. The value must be\n" @@ -257,7 +257,7 @@ void protx_register_fund_help() void protx_register_help() { throw std::runtime_error( - "protx register \"collateralHash\" collateralIndex \"ipAndPort\" \"ownerKeyAddr\" \"operatorPubKey\" \"votingKeyAddr\" operatorReward \"payoutAddress\" ( \"feeSourceAddress\" )\n" + "protx register \"collateralHash\" collateralIndex \"ipAndPort\" \"ownerAddress\" \"operatorPubKey\" \"votingAddress\" operatorReward \"payoutAddress\" ( \"feeSourceAddress\" )\n" "\nSame as \"protx register_fund\", but with an externally referenced collateral.\n" "The collateral is specified through \"collateralHash\" and \"collateralIndex\" and must be an unspent\n" "transaction output. It must also not be used by any other masternode.\n" @@ -274,7 +274,7 @@ void protx_register_help() void protx_register_prepare_help() { throw std::runtime_error( - "protx register_prepare \"collateralHash\" collateralIndex \"ipAndPort\" \"ownerKeyAddr\" \"operatorPubKey\" \"votingKeyAddr\" operatorReward \"payoutAddress\" ( \"feeSourceAddress\" )\n" + "protx register_prepare \"collateralHash\" collateralIndex \"ipAndPort\" \"ownerAddress\" \"operatorPubKey\" \"votingAddress\" operatorReward \"payoutAddress\" ( \"feeSourceAddress\" )\n" "\nCreates an unsigned ProTx and returns it. The ProTx must be signed externally with the collateral\n" "key and then passed to \"protx register_submit\". The prepared transaction will also contain inputs\n" "and outputs to cover fees.\n" @@ -577,7 +577,7 @@ UniValue protx_update_service(const JSONRPCRequest& request) void protx_update_registrar_help() { throw std::runtime_error( - "protx update_registrar \"proTxHash\" \"operatorKeyAddr\" \"votingKeyAddr\" \"payoutAddress\" ( \"feeSourceAddress\" )\n" + "protx update_registrar \"proTxHash\" \"operatorPubKey\" \"votingAddress\" \"payoutAddress\" ( \"feeSourceAddress\" )\n" "\nCreates and sends a ProUpRegTx to the network. This will update the operator key, voting key and payout\n" "address of the masternode specified by \"proTxHash\".\n" "The owner key of the masternode must be known to your wallet.\n" @@ -586,7 +586,7 @@ void protx_update_registrar_help() "2. \"operatorPubKey\" (string, required) The operator public key. The private key does not have to be known by you.\n" " It has to match the private key which is later used when operating the masternode.\n" " If set to \"0\" or an empty string, the last on-chain operator key of the masternode will be used.\n" - "3. \"votingKeyAddr\" (string, required) The voting key address. The private key does not have to be known by your wallet.\n" + "3. \"votingAddress\" (string, required) The voting key address. The private key does not have to be known by your wallet.\n" " It has to match the private key which is later used when voting on proposals.\n" " If set to \"0\" or an empty string, the last on-chain voting key of the masternode will be used.\n" "4. \"payoutAddress\" (string, required) The dash address to use for masternode reward payments\n" @@ -632,7 +632,7 @@ UniValue protx_update_registrar(const JSONRPCRequest& request) CKey keyOwner; if (!pwalletMain->GetKey(dmn->pdmnState->keyIDOwner, keyOwner)) { - throw std::runtime_error(strprintf("owner key %s not found in your wallet", dmn->pdmnState->keyIDOwner.ToString())); + throw std::runtime_error(strprintf("Private key for owner address %s not found in your wallet", CBitcoinAddress(dmn->pdmnState->keyIDOwner).ToString())); } CMutableTransaction tx;