From 6d3d5354e44d347670ad5b32249ff8d6a80e19a7 Mon Sep 17 00:00:00 2001 From: Liquid369 <45834289+Liquid369@users.noreply.github.com> Date: Thu, 6 Jul 2023 19:22:00 -0500 Subject: [PATCH] Deserialize AddrV1 first if fails deserialize AddrV2 --- src/rpc/masternode.cpp | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/src/rpc/masternode.cpp b/src/rpc/masternode.cpp index 9772364b6ca20..38c6312562f35 100644 --- a/src/rpc/masternode.cpp +++ b/src/rpc/masternode.cpp @@ -10,6 +10,7 @@ #include "masternode-payments.h" #include "masternodeconfig.h" #include "masternodeman.h" +#include "netaddress.h" #include "netbase.h" #include "tiertwo/tiertwo_sync_state.h" #include "rpc/server.h" @@ -390,7 +391,7 @@ void RelayMNB(CMasternodeBroadcast& mnb, const bool fSucces) void SerializeMNB(UniValue& statusObjRet, const CMasternodeBroadcast& mnb, const bool fSuccess, int& successful, int& failed) { - bool isBIP155 = PROTOCOL_VERSION >= MIN_BIP155_PROTOCOL_VERSION; + bool isBIP155 = mnb.addr.IsAddrV1Compatible(); int version = isBIP155 ? PROTOCOL_VERSION | ADDRV2_FORMAT : PROTOCOL_VERSION; if(fSuccess) { successful++; @@ -877,15 +878,9 @@ UniValue getmasternodescores(const JSONRPCRequest& request) return obj; } -bool DecodeHexMnb(CMasternodeBroadcast& mnb, std::string strHexMnb) { - - if (!IsHex(strHexMnb)) - return false; - - bool isBIP155 = PROTOCOL_VERSION >= MIN_BIP155_PROTOCOL_VERSION; - int version = isBIP155 ? PROTOCOL_VERSION | ADDRV2_FORMAT : PROTOCOL_VERSION; +bool DecodeAddrV1(CMasternodeBroadcast& mnb, std::string strHexMnb) { std::vector mnbData(ParseHex(strHexMnb)); - CDataStream ssData(mnbData, SER_NETWORK, version); + CDataStream ssData(mnbData, SER_NETWORK, PROTOCOL_VERSION); try { ssData >> mnb; } @@ -895,6 +890,27 @@ bool DecodeHexMnb(CMasternodeBroadcast& mnb, std::string strHexMnb) { return true; } + +bool DecodeHexMnb(CMasternodeBroadcast& mnb, std::string strHexMnb) { + + if (!IsHex(strHexMnb)) + return false; + + bool MNAddrV1 = DecodeAddrV1(mnb, strHexMnb); + if (!MNAddrV1) { + std::vector mnbData(ParseHex(strHexMnb)); + CDataStream ssData(mnbData, SER_NETWORK, PROTOCOL_VERSION | ADDRV2_FORMAT); + try { + ssData >> mnb; + } + catch (const std::exception&) { + return false; + } + return true; + } + return true; +} + UniValue createmasternodebroadcast(const JSONRPCRequest& request) { CWallet * const pwallet = GetWalletForJSONRPCRequest(request);