From eac02213aa4bc34a658b614d26f0f2ab2800f4b6 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Wed, 27 Jul 2022 13:52:31 -0400 Subject: [PATCH 1/6] Update native MacOS CI build environment to MacOS 11 --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2e443b0c68..17bc8167a2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -46,8 +46,8 @@ jobs: run: | ./ci/test_run_all.sh test-macos: - name: macOS 10.15 native [GOAL install] [GUI] [no depends] - runs-on: macos-10.15 + name: macOS 11 native [GOAL install] [GUI] [no depends] + runs-on: macos-11 env: DANGER_RUN_CI_ON_HOST: true CI_USE_APT_INSTALL: no From 35378622896d16a3e74fb57fefeddf2d1ef79952 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sun, 24 Jul 2022 11:04:13 -0400 Subject: [PATCH 2/6] Set Final Kermit's Mom hardfork heights This commit sets the mainnet block v12, poll v3, and project v2 height to 2671700 (i.e. all coincident on the same height). This height will occur on or about Sunday, Aug 31, 2022. --- src/chainparams.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 1a2cb088c6..09fb004639 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -65,9 +65,9 @@ class CMainParams : public CChainParams { consensus.BlockV9TallyHeight = 1144120; consensus.BlockV10Height = 1420000; consensus.BlockV11Height = 2053000; - consensus.BlockV12Height = std::numeric_limits::max(); - consensus.PollV3Height = std::numeric_limits::max(); - consensus.ProjectV2Height = std::numeric_limits::max(); + consensus.BlockV12Height = 2671700; + consensus.PollV3Height = 2671700; + consensus.ProjectV2Height = 2671700; // Immediately post zero payment interval fees 40% for mainnet consensus.InitialMRCFeeFractionPostZeroInterval = Fraction(2, 5); // Zero day interval is 14 days on mainnet @@ -142,7 +142,8 @@ class CMainParams : public CChainParams { }; masterkeys = { - {0, ParseHex("049ac003b3318d9fe28b2830f6a95a2624ce2a69fb0c0c7ac0b513efcc1e93a6a6e8eba84481155dd82f2f1104e0ff62c69d662b0094639b7106abc5d84f948c0a")} + {0, ParseHex("049ac003b3318d9fe28b2830f6a95a2624ce2a69fb0c0c7ac0b513efcc1e93a6a6e8eba84481155dd82f2f1104e0ff62c69d662b0094639b7106abc5d84f948c0a")}, + {2671700, ParseHex("0288b33697c4c752f922764bf1a5075fa96bad46aaf4f0579bf7d19ab048e200f0")} }; } }; @@ -199,7 +200,8 @@ class CTestNetParams : public CChainParams { }; masterkeys = { - {0, ParseHex("049ac003b3318d9fe28b2830f6a95a2624ce2a69fb0c0c7ac0b513efcc1e93a6a6e8eba84481155dd82f2f1104e0ff62c69d662b0094639b7106abc5d84f948c0a")} + {0, ParseHex("049ac003b3318d9fe28b2830f6a95a2624ce2a69fb0c0c7ac0b513efcc1e93a6a6e8eba84481155dd82f2f1104e0ff62c69d662b0094639b7106abc5d84f948c0a")}, + {1964600, ParseHex("031886a6776699cbd6362df7641c5d128146afabc769dfa36f1630889c706ce730")} }; } }; From 9afd4be6164724557fded6b9e058ea2cb0bb2b3c Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sun, 24 Jul 2022 11:40:16 -0400 Subject: [PATCH 3/6] Extend dumpprivkey to provide option to dump hex. Maintain compatibility by default --- src/rpc/client.cpp | 1 + src/wallet/rpcdump.cpp | 21 +++++++++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/rpc/client.cpp b/src/rpc/client.cpp index a14309eafa..b2af33fa03 100644 --- a/src/rpc/client.cpp +++ b/src/rpc/client.cpp @@ -133,6 +133,7 @@ static const CRPCConvertParam vRPCConvertParams[] = { "consolidatemsunspent" , 4 }, { "consolidateunspent" , 3 }, { "consolidateunspent" , 4 }, + { "dumpprivkey" , 1 }, { "getbalance" , 1 }, { "getbalance" , 2 }, { "getbalancedetail" , 0 }, diff --git a/src/wallet/rpcdump.cpp b/src/wallet/rpcdump.cpp index b6e5e6de98..6d1ddc346e 100644 --- a/src/wallet/rpcdump.cpp +++ b/src/wallet/rpcdump.cpp @@ -274,10 +274,12 @@ UniValue importwallet(const UniValue& params, bool fHelp) UniValue dumpprivkey(const UniValue& params, bool fHelp) { - if (fHelp || params.size() != 1) + if (fHelp || params.size() < 1 || params.size() > 2) throw runtime_error( - "dumpprivkey \n" + "dumpprivkey [bool:dump hex]\n" " -> Address of requested key\n" + "[bool:dump hex] -> Optional; default false boolean to dump private and public key\n" + " as hex strings to JSON in addition to private key base58 encoded" "\n" "Reveals the private key corresponding to \n"); @@ -299,6 +301,21 @@ UniValue dumpprivkey(const UniValue& params, bool fHelp) bool fCompressed; if (!pwalletMain->GetSecret(keyID, vchSecret, fCompressed)) throw JSONRPCError(RPC_WALLET_ERROR, "Private key for address " + strAddress + " is not known"); + + + if (params.size() == 2 && params[1].isBool() && params[1].get_bool()) { + CKey key_out; + pwalletMain->GetKey(keyID, key_out); + + UniValue result(UniValue::VOBJ); + + result.pushKV("private_key", CBitcoinSecret(vchSecret, fCompressed).ToString()); + result.pushKV("private_key_hex", HexStr(key_out.GetPrivKey())); + result.pushKV("public_key_hex", HexStr(key_out.GetPubKey())); + + return result; + } + return CBitcoinSecret(vchSecret, fCompressed).ToString(); } From 638a39f8663e878e19bdd595a436fa8e15458639 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sun, 24 Jul 2022 14:31:14 -0400 Subject: [PATCH 4/6] Implement listalerts --- src/rpc/net.cpp | 66 ++++++++++++++++++++++++++++++++++++++++++++++ src/rpc/server.cpp | 1 + src/rpc/server.h | 1 + 3 files changed, 68 insertions(+) diff --git a/src/rpc/net.cpp b/src/rpc/net.cpp index 2f47e055f3..3d88b7e4fe 100644 --- a/src/rpc/net.cpp +++ b/src/rpc/net.cpp @@ -11,9 +11,13 @@ #include "wallet/walletdb.h" #include "net.h" #include "banman.h" +#include "logging.h" using namespace std; +extern std::map mapAlerts; +extern CCriticalSection cs_mapAlerts; + UniValue getconnectioncount(const UniValue& params, bool fHelp) { if (fHelp || params.size() != 0) @@ -384,6 +388,68 @@ UniValue getnettotals(const UniValue& params, bool fHelp) return obj; } +UniValue listalerts(const UniValue& params, bool fHelp) +{ + if (fHelp || params.size() > 0) + throw runtime_error( + "listalerts\n" + "\n" + "Returns information about alerts.\n"); + + LOCK(cs_mapAlerts); + + UniValue result(UniValue::VOBJ); + UniValue alerts(UniValue::VARR); + + + for (const auto& iter_alert : mapAlerts) { + UniValue alert(UniValue::VOBJ); + + alert.pushKV("nVersion", iter_alert.second.nVersion); + alert.pushKV("nRelayUntil", iter_alert.second.nRelayUntil); + alert.pushKV("nExpiration", DateTimeStrFormat(iter_alert.second.nExpiration)); + alert.pushKV("nID", iter_alert.second.nID); + alert.pushKV("nCancel", iter_alert.second.nCancel); + + UniValue set_cancel(UniValue::VARR); + for (const auto& iter_cancel : iter_alert.second.setCancel) { + UniValue cancel(UniValue::VOBJ); + + cancel.pushKV("nID", iter_cancel); + + set_cancel.push_back(cancel); + } + + alert.pushKV("nMinVer", iter_alert.second.nMinVer); + alert.pushKV("nMaxVer", iter_alert.second.nMaxVer); + + UniValue set_subver(UniValue::VARR); + for (const auto& iter_subver : iter_alert.second.setSubVer) { + UniValue sub_ver(UniValue::VOBJ); + + sub_ver.pushKV("subversion", iter_subver); + + set_subver.push_back(sub_ver); + } + + alert.pushKV("nPriority", iter_alert.second.nPriority); + + alert.pushKV("strComment", iter_alert.second.strComment); + alert.pushKV("strComment", iter_alert.second.strStatusBar); + alert.pushKV("strComment", iter_alert.second.strReserved); + + alert.pushKV("IsNull()", iter_alert.second.IsNull()); + alert.pushKV("GetHash()", iter_alert.second.GetHash().GetHex()); + alert.pushKV("IsInEffect()", iter_alert.second.IsInEffect()); + alert.pushKV("AppliesToMe()", iter_alert.second.AppliesToMe()); + + alerts.push_back(alert); + } + + result.pushKV("alerts", alerts); + + return result; +} // ppcoin: send alert. diff --git a/src/rpc/server.cpp b/src/rpc/server.cpp index 0e0460fc79..5ca1f2b253 100644 --- a/src/rpc/server.cpp +++ b/src/rpc/server.cpp @@ -378,6 +378,7 @@ static const CRPCCommand vRPCCommands[] = { "getlistof", &getlistof, cat_developer }, { "getrecentblocks", &rpc_getrecentblocks, cat_developer }, { "inspectaccrualsnapshot", &inspectaccrualsnapshot, cat_developer }, + { "listalerts", &listalerts, cat_developer }, { "listdata", &listdata, cat_developer }, { "listprojects", &listprojects, cat_developer }, { "listresearcheraccounts", &listresearcheraccounts, cat_developer }, diff --git a/src/rpc/server.h b/src/rpc/server.h index df2618a465..4885d4c3f9 100644 --- a/src/rpc/server.h +++ b/src/rpc/server.h @@ -190,6 +190,7 @@ extern UniValue dumpcontracts(const UniValue& params, bool fHelp); extern UniValue rpc_getblockstats(const UniValue& params, bool fHelp); extern UniValue getlistof(const UniValue& params, bool fHelp); extern UniValue inspectaccrualsnapshot(const UniValue& params, bool fHelp); +extern UniValue listalerts(const UniValue& params, bool fHelp); extern UniValue listdata(const UniValue& params, bool fHelp); extern UniValue listprojects(const UniValue& params, bool fHelp); extern UniValue listresearcheraccounts(const UniValue& params, bool fHelp); From a7782fea67a767044cfa322108cc84db2aed95c9 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sun, 24 Jul 2022 12:35:34 -0400 Subject: [PATCH 5/6] Insert new alertkeys for mainnet and testnet. --- src/chainparams.cpp | 20 ++++++++++++++++---- src/chainparams.h | 4 ++-- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 09fb004639..230cfb8451 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -84,7 +84,6 @@ class CMainParams : public CChainParams { pchMessageStart[1] = 0x35; pchMessageStart[2] = 0x22; pchMessageStart[3] = 0x05; - vAlertPubKey = ParseHex("049ac003b3318d9fe28b2830f6a95a2624ce2a69fb0c0c7ac0b513efcc1e93a6a6e8eba84481155dd82f2f1104e0ff62c69d662b0094639b7106abc5d84f948c0a"); nDefaultPort = 32749; m_assumed_blockchain_size = 4; @@ -141,6 +140,13 @@ class CMainParams : public CChainParams { } }; + // Master and alert keys other than the original are shorter because they are compressed. + + // The original alert key was the same as the "master" (administrative contract) key For + // before Kermit's Mom (< 5.3.3.12, < 5.4.0.0) + // TestNet alerts public key for Kermit's Mom and beyond (>= 5.3.3.12, >= 5.4.0.0): + vAlertPubKey = ParseHex("0352063cf6cf0317cc848ae24f3ed8b525334d2f059f242d27975f8c3a2e91b446"); + masterkeys = { {0, ParseHex("049ac003b3318d9fe28b2830f6a95a2624ce2a69fb0c0c7ac0b513efcc1e93a6a6e8eba84481155dd82f2f1104e0ff62c69d662b0094639b7106abc5d84f948c0a")}, {2671700, ParseHex("0288b33697c4c752f922764bf1a5075fa96bad46aaf4f0579bf7d19ab048e200f0")} @@ -176,9 +182,6 @@ class CTestNetParams : public CChainParams { pchMessageStart[1] = 0xf2; pchMessageStart[2] = 0xc0; pchMessageStart[3] = 0xef; - vAlertPubKey = ParseHex("0471dc165db490094d35cde15b1f5d755fa6ad6f2b5ed0f340e3f17f57389c3c2af113a8cbcc885bde73305a553b5640c83021128008ddf882e856336269080496"); - // TestNet alerts private key - // "308201130201010420b665cff1884e53da26376fd1b433812c9a5a8a4d5221533b15b9629789bb7e42a081a53081a2020101302c06072a8648ce3d0101022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f300604010004010704410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141020101a1440342000471dc165db490094d35cde15b1f5d755fa6ad6f2b5ed0f340e3f17f57389c3c2af113a8cbcc885bde73305a553b5640c83021128008ddf882e856336269080496" nDefaultPort = 32748; m_assumed_blockchain_size = 2; @@ -199,6 +202,15 @@ class CTestNetParams : public CChainParams { } }; + + // Master and keys other than the original are shorter because they are compressed. + + // TestNet alerts private key for before Kermit's Mom (< 5.3.3.12, < 5.4.0.0): + // "308201130201010420b665cff1884e53da26376fd1b433812c9a5a8a4d5221533b15b9629789bb7e42a081a53081a2020101302c06072a8648ce3d0101022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f300604010004010704410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141020101a1440342000471dc165db490094d35cde15b1f5d755fa6ad6f2b5ed0f340e3f17f57389c3c2af113a8cbcc885bde73305a553b5640c83021128008ddf882e856336269080496" + // TestNet alerts private key for Kermit's Mom and beyond (>= 5.3.3.12, >= 5.4.0.0): + // "925ekjvCRKuwEzu2WuqifVFE2T3r755rwBNN3ck7Fr8esTdQdrA" + vAlertPubKey = ParseHex("02bf4aa6330f525ab91a25cd5c1362481d16d8c039b3d27cb48ac0870176202462"); + masterkeys = { {0, ParseHex("049ac003b3318d9fe28b2830f6a95a2624ce2a69fb0c0c7ac0b513efcc1e93a6a6e8eba84481155dd82f2f1104e0ff62c69d662b0094639b7106abc5d84f948c0a")}, {1964600, ParseHex("031886a6776699cbd6362df7641c5d128146afabc769dfa36f1630889c706ce730")} diff --git a/src/chainparams.h b/src/chainparams.h index 8e449275d5..24dfd28420 100644 --- a/src/chainparams.h +++ b/src/chainparams.h @@ -52,7 +52,7 @@ class CChainParams } assert(false && "No master key specified or height is negative."); - }; + } int GetDefaultPort() const { return nDefaultPort; } // const CBlock& GenesisBlock() const { return genesis; } @@ -71,7 +71,6 @@ class CChainParams Consensus::Params consensus; CMessageHeader::MessageStartChars pchMessageStart; - std::vector vAlertPubKey; int nDefaultPort; uint64_t m_assumed_blockchain_size; unsigned char base58Prefix[MAX_BASE58_TYPES]; @@ -80,6 +79,7 @@ class CChainParams bool m_is_test_chain; bool m_is_mockable_chain; CCheckpointData checkpointData; + std::vector vAlertPubKey; MapMasterKeys masterkeys; }; From a3995a6ae79a4b53b0ad76b0e23262a2b0a3dfb8 Mon Sep 17 00:00:00 2001 From: "James C. Owens" Date: Wed, 27 Jul 2022 14:07:32 -0400 Subject: [PATCH 6/6] modify key names for new listalerts rpc Co-authored-by: div72 <60045611+div72@users.noreply.github.com> --- src/rpc/net.cpp | 45 +++++++++++++++++++-------------------------- 1 file changed, 19 insertions(+), 26 deletions(-) diff --git a/src/rpc/net.cpp b/src/rpc/net.cpp index 3d88b7e4fe..0ed2d57561 100644 --- a/src/rpc/net.cpp +++ b/src/rpc/net.cpp @@ -405,43 +405,36 @@ UniValue listalerts(const UniValue& params, bool fHelp) for (const auto& iter_alert : mapAlerts) { UniValue alert(UniValue::VOBJ); - alert.pushKV("nVersion", iter_alert.second.nVersion); - alert.pushKV("nRelayUntil", iter_alert.second.nRelayUntil); - alert.pushKV("nExpiration", DateTimeStrFormat(iter_alert.second.nExpiration)); - alert.pushKV("nID", iter_alert.second.nID); - alert.pushKV("nCancel", iter_alert.second.nCancel); + alert.pushKV("version", iter_alert.second.nVersion); + alert.pushKV("relay_until", DateTimeStrFormat(iter_alert.second.nRelayUntil)); + alert.pushKV("expiration", DateTimeStrFormat(iter_alert.second.nExpiration)); + alert.pushKV("id", iter_alert.second.nID); + alert.pushKV("cancel_upto", iter_alert.second.nCancel); UniValue set_cancel(UniValue::VARR); - for (const auto& iter_cancel : iter_alert.second.setCancel) { - UniValue cancel(UniValue::VOBJ); - - cancel.pushKV("nID", iter_cancel); - + for (const auto& cancel : iter_alert.second.setCancel) { set_cancel.push_back(cancel); } + alert.pushKV("cancels", set_cancel); - alert.pushKV("nMinVer", iter_alert.second.nMinVer); - alert.pushKV("nMaxVer", iter_alert.second.nMaxVer); + alert.pushKV("minimum_version", iter_alert.second.nMinVer); + alert.pushKV("maximum_version", iter_alert.second.nMaxVer); UniValue set_subver(UniValue::VARR); - for (const auto& iter_subver : iter_alert.second.setSubVer) { - UniValue sub_ver(UniValue::VOBJ); - - sub_ver.pushKV("subversion", iter_subver); - - set_subver.push_back(sub_ver); + for (const auto& subver : iter_alert.second.setSubVer) { + set_subver.push_back(subver); } + alert.pushKV("subversions", set_subver); - alert.pushKV("nPriority", iter_alert.second.nPriority); + alert.pushKV("priority", iter_alert.second.nPriority); - alert.pushKV("strComment", iter_alert.second.strComment); - alert.pushKV("strComment", iter_alert.second.strStatusBar); - alert.pushKV("strComment", iter_alert.second.strReserved); + alert.pushKV("comment", iter_alert.second.strComment); + alert.pushKV("status_bar", iter_alert.second.strStatusBar); + alert.pushKV("reserved", iter_alert.second.strReserved); - alert.pushKV("IsNull()", iter_alert.second.IsNull()); - alert.pushKV("GetHash()", iter_alert.second.GetHash().GetHex()); - alert.pushKV("IsInEffect()", iter_alert.second.IsInEffect()); - alert.pushKV("AppliesToMe()", iter_alert.second.AppliesToMe()); + alert.pushKV("hash", iter_alert.second.GetHash().GetHex()); + alert.pushKV("in_effect", iter_alert.second.IsInEffect()); + alert.pushKV("applies_to_me", iter_alert.second.AppliesToMe()); alerts.push_back(alert); }