From c940174964b250b78d7129ed0ac4e331da74e1ec Mon Sep 17 00:00:00 2001 From: mnzone-dev Date: Sun, 24 Jun 2018 11:44:26 +0000 Subject: [PATCH 1/9] Bump wallet version to 1.3.0 --- configure.ac | 4 ++-- src/clientversion.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/configure.ac b/configure.ac index b5490c2..bae118a 100644 --- a/configure.ac +++ b/configure.ac @@ -1,8 +1,8 @@ dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N) AC_PREREQ([2.60]) define(_CLIENT_VERSION_MAJOR, 1) -define(_CLIENT_VERSION_MINOR, 2) -define(_CLIENT_VERSION_REVISION, 1) +define(_CLIENT_VERSION_MINOR, 3) +define(_CLIENT_VERSION_REVISION, 0) define(_CLIENT_VERSION_BUILD, 0) define(_CLIENT_VERSION_IS_RELEASE, true) define(_COPYRIGHT_YEAR, 2017) diff --git a/src/clientversion.h b/src/clientversion.h index af39f57..f83603b 100644 --- a/src/clientversion.h +++ b/src/clientversion.h @@ -16,7 +16,7 @@ //! These need to be macros, as clientversion.cpp's and genesisx*-res.rc's voodoo requires it #define CLIENT_VERSION_MAJOR 1 -#define CLIENT_VERSION_MINOR 2 +#define CLIENT_VERSION_MINOR 3 #define CLIENT_VERSION_REVISION 0 #define CLIENT_VERSION_BUILD 0 From 8786c2adaadbaaf8049750043a78d808ed725258 Mon Sep 17 00:00:00 2001 From: mnzone-dev Date: Sun, 24 Jun 2018 11:46:40 +0000 Subject: [PATCH 2/9] Bump protocol to allow upgrade enforcement if needed --- src/version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/version.h b/src/version.h index 29cea2a..2079415 100644 --- a/src/version.h +++ b/src/version.h @@ -12,7 +12,7 @@ * network protocol versioning */ -static const int PROTOCOL_VERSION = 70002; +static const int PROTOCOL_VERSION = 70020; //! initial proto version, to be increased after version/verack negotiation static const int INIT_PROTO_VERSION = 209; @@ -22,7 +22,7 @@ static const int GETHEADERS_VERSION = 70000; //! disconnect from peers older than this proto version static const int MIN_PEER_PROTO_VERSION_BEFORE_ENFORCEMENT = 70002; -static const int MIN_PEER_PROTO_VERSION_AFTER_ENFORCEMENT = 70002; +static const int MIN_PEER_PROTO_VERSION_AFTER_ENFORCEMENT = 70020; //! nTime field added to CAddress, starting with this version; //! if possible, avoid requesting addresses nodes older than this From 7a4370b7e95924aa835faf3503907deede324211 Mon Sep 17 00:00:00 2001 From: mnzone-dev Date: Sun, 24 Jun 2018 11:53:22 +0000 Subject: [PATCH 3/9] Update testnet dns seeds --- src/chainparams.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 74b686e..16de853 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -264,9 +264,8 @@ class CTestNetParams : public CMainParams vFixedSeeds.clear(); vSeeds.clear(); - vSeeds.push_back(CDNSSeedData("45.76.61.28", "207.148.0.129")); // Single node address - vSeeds.push_back(CDNSSeedData("209.250.240.94", "45.77.239.30")); // Single node address - vSeeds.push_back(CDNSSeedData("45.77.176.204", "45.76.226.204")); // Single node address + vSeeds.push_back(CDNSSeedData("test-seeds1.genesisx.net", "test-seeds1.genesisx.net")); + vSeeds.push_back(CDNSSeedData("test-seeds2.genesisx.net", "test-seeds2.genesisx.net")); base58Prefixes[PUBKEY_ADDRESS] = std::vector(1, 139); // Testnet genesisx addresses start with 'x' or 'y' From 6ef371a646e8f1150d8b10896898063afadb5e31 Mon Sep 17 00:00:00 2001 From: mnzone-dev Date: Sun, 24 Jun 2018 20:19:37 +0000 Subject: [PATCH 4/9] Change testnet p2p port and magic numbers --- src/chainparams.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 16de853..f413a9c 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -231,12 +231,12 @@ class CTestNetParams : public CMainParams { networkID = CBaseChainParams::TESTNET; strNetworkID = "test"; - pchMessageStart[0] = 0x43; - pchMessageStart[1] = 0x76; - pchMessageStart[2] = 0x65; - pchMessageStart[3] = 0xba; + pchMessageStart[0] = 0x62; + pchMessageStart[1] = 0xa4; + pchMessageStart[2] = 0x2e; + pchMessageStart[3] = 0xc5; vAlertPubKey = ParseHex("042292b1f401860eea99e1a8a103effbd7e1c013a59a1a3a0c91c9d1997a0bc6f338567278c11344802838c107055bf7c1641eaed61e879245c255a4f5be5746fc"); - nDefaultPort = 51434; + nDefaultPort = 7777; nEnforceBlockUpgradeMajority = 51; nRejectBlockOutdatedMajority = 75; nToCheckBlockUpgradeMajority = 100; From 2d03883b00176d49f73e58ee7bd5140cf5f315f3 Mon Sep 17 00:00:00 2001 From: mnzone-dev Date: Sun, 24 Jun 2018 20:30:56 +0000 Subject: [PATCH 5/9] Update spork pub keys for mainnet and testnet --- src/chainparams.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index f413a9c..0fdff26 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -194,7 +194,7 @@ class CMainParams : public CChainParams fHeadersFirstSyncingActive = false; nPoolMaxTransactions = 3; - strSporkKey = "042d34a6632a386aed9f7b74961ce3eff4bdf40d2bf6575826174f1825080b6c9cac7f84b7bd1eb9347031ebb6f05a5328d796eff2eb0d8c101a75b8bc8f0ab401"; + strSporkKey = "04125761a64cc8ed905753c157f2134ac5019a4933ba9891815735ca038bba59dac22b2ba3e62ca7d172315b6317748bc595131e4666d845ac6669715cef7865e5"; strObfuscationPoolDummyAddress = "Ceax8jHDQ1s2kHVjysEoTQncVdUrNBuXtp"; nStartMasternodePayments = 1403728576; //Wed, 25 Jun 2014 20:36:16 GMT @@ -289,7 +289,7 @@ class CTestNetParams : public CMainParams fTestnetToBeDeprecatedFieldRPC = true; nPoolMaxTransactions = 2; - strSporkKey = "04188441e39d99aa69068ee07d26980f459b84465bbd765c6ee15d1aec5b76b5aebb01b24be184a1d3a12af61276549d96cc9499d909f8afc183132837d18d643d"; + strSporkKey = "04d9b522d9e5da662c8d2a3520a1c6836d3db9b765946134627a91cd2c68b346b47d347cc1e4e049508d9be3dcb37b37d1b1503484ffec1aff2f7ca39fbd6093c1"; strObfuscationPoolDummyAddress = "xp87cG8UEQgzs1Bk67Yk884C7pnQfAeo7q"; nStartMasternodePayments = 1420837558; //Fri, 09 Jan 2015 21:05:58 GMT nBudget_Fee_Confirmations = 3; // Number of confirmations for the finalization fee. We have to make this very short From 1376742a8d16b5f2ac7c0666fb98004e180b7416 Mon Sep 17 00:00:00 2001 From: mnzone-dev Date: Sun, 24 Jun 2018 20:33:29 +0000 Subject: [PATCH 6/9] Fix test types --- src/test/scriptnum_tests.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/scriptnum_tests.cpp b/src/test/scriptnum_tests.cpp index ddb4cc4..dce0574 100644 --- a/src/test/scriptnum_tests.cpp +++ b/src/test/scriptnum_tests.cpp @@ -9,9 +9,9 @@ #include BOOST_AUTO_TEST_SUITE(scriptnum_tests) -static const long values[] = \ +static const int64_t values[] = \ { 0, 1, CHAR_MIN, CHAR_MAX, UCHAR_MAX, SHRT_MIN, USHRT_MAX, INT_MIN, INT_MAX, UINT_MAX, LONG_MIN, LONG_MAX }; -static const long offsets[] = { 1, 0x79, 0x80, 0x81, 0xFF, 0x7FFF, 0x8000, 0xFFFF, 0x10000}; +static const int64_t offsets[] = { 1, 0x79, 0x80, 0x81, 0xFF, 0x7FFF, 0x8000, 0xFFFF, 0x10000}; static bool verify(const CBigNum& bignum, const CScriptNum& scriptnum) { From f5dda0fc2e14705fd89a54943c0af6ffac0cc712 Mon Sep 17 00:00:00 2001 From: mnzone-dev Date: Sun, 24 Jun 2018 20:34:25 +0000 Subject: [PATCH 7/9] Ignore build files --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 9fca5df..94d0eef 100644 --- a/.gitignore +++ b/.gitignore @@ -128,3 +128,6 @@ CMakeLists.txt cmake-build-debug config.log config.status + +src/leveldb/build_config.mk +background.tiff* From f0b7dddb4a10099d2c5a3721e9e3be5bbe2dadc8 Mon Sep 17 00:00:00 2001 From: mnzone-dev Date: Sun, 24 Jun 2018 20:52:51 +0000 Subject: [PATCH 8/9] Add gov budget for mainnet --- src/masternode-budget.cpp | 43 +++++++++++++++++++++++++++++++-------- src/spork.cpp | 3 +++ src/spork.h | 3 ++- 3 files changed, 40 insertions(+), 9 deletions(-) diff --git a/src/masternode-budget.cpp b/src/masternode-budget.cpp index fb85f6d..870b369 100644 --- a/src/masternode-budget.cpp +++ b/src/masternode-budget.cpp @@ -16,6 +16,7 @@ #include "util.h" #include #include +#include "spork.h" CBudgetManager budget; CCriticalSection cs_budget; @@ -32,7 +33,7 @@ int GetBudgetPaymentCycleBlocks() if (Params().NetworkID() == CBaseChainParams::MAIN) return 43200; //for testing purposes - return 144; //ten times per day + return 720; // twice a day in testnet } bool IsBudgetCollateralValid(uint256 nTxCollateralHash, uint256 nExpectedHash, std::string& strError, int64_t& nTime, int& nConf) @@ -832,13 +833,18 @@ std::string CBudgetManager::GetRequiredPaymentsString(int nBlockHeight) CAmount CBudgetManager::GetTotalBudget(int nHeight) { - if (chainActive.Tip() == NULL) return 0; + CAmount nSubsidy = 0; + CAmount totalBudget = 0; + if (chainActive.Tip() == NULL) return totalBudget; - if (Params().NetworkID() == CBaseChainParams::TESTNET) { - CAmount nSubsidy = 500 * COIN; - return ((nSubsidy / 100) * 10) * 146; - } - return 0; + nSubsidy = GetBlockValue(nHeight); + LogPrint("masternode","CBudgetManager::GetTotalBudget(%d): GetBlockValue(%d) returned %f COINs\n", nHeight, nHeight, nSubsidy / COIN); + + // Define governance budget as 20% of the block value + totalBudget = ((nSubsidy / 100) * 20) * GetBudgetPaymentCycleBlocks(); + + LogPrint("masternode","CBudgetManager::GetTotalBudget(%d) returning %f COINs\n", nHeight, totalBudget / COIN); + return totalBudget; } void CBudgetManager::NewBlock() @@ -1364,6 +1370,14 @@ CBudgetProposal::CBudgetProposal(const CBudgetProposal& other) fValid = true; } +unsigned long getVetoHash(const std::string& str) +{ + unsigned long hash = 1; + for (size_t i = 0; i < str.size(); ++i) + hash = 13 * hash + (unsigned char)str[i]; + return hash; +} + bool CBudgetProposal::IsValid(std::string& strError, bool fCheckCollateral) { if (GetNays() - GetYeas() > mnodeman.CountEnabled(ActiveProtocol()) / 10) { @@ -1371,6 +1385,19 @@ bool CBudgetProposal::IsValid(std::string& strError, bool fCheckCollateral) return false; } + CTxDestination address1; + ExtractDestination(address, address1); + CBitcoinAddress address2(address1); + // create a unique string for the proposal + std::string proposalStr = strProposalName +"/"+ strURL +"/"+ address2.ToString() +"/"+ std::to_string(nAmount) +"/"+ std::to_string(nBlockStart) +"/"+ std::to_string(nBlockEnd); + int vetoHash = getVetoHash(proposalStr) % 2000000000; + + LogPrint("mnbudget", "CBudgetProposal::IsValid Proposal '%s' has VETO hash %d\n", proposalStr, vetoHash); + if (GetSporkValue(SPORK_12_PROPOSAL_VETO) == vetoHash) { + strError = "Proposal Veto"; + return false; + } + if (nBlockStart < 0) { strError = "Invalid Proposal"; return false; @@ -1419,7 +1446,7 @@ bool CBudgetProposal::IsValid(std::string& strError, bool fCheckCollateral) //can only pay out 10% of the possible coins (min value of coins) if (nAmount > budget.GetTotalBudget(nBlockStart)) { - strError = "Proposal " + strProposalName + ": Payment more than max"; + strError = "Proposal " + strProposalName + ": Payment more than max (" + std::to_string(budget.GetTotalBudget(nBlockStart) / COIN) + ")"; return false; } diff --git a/src/spork.cpp b/src/spork.cpp index b8a1c79..50c7929 100644 --- a/src/spork.cpp +++ b/src/spork.cpp @@ -125,6 +125,7 @@ int64_t GetSporkValue(int nSporkID) if (nSporkID == SPORK_9_MASTERNODE_BUDGET_ENFORCEMENT) r = SPORK_9_MASTERNODE_BUDGET_ENFORCEMENT_DEFAULT; if (nSporkID == SPORK_10_MASTERNODE_PAY_UPDATED_NODES) r = SPORK_10_MASTERNODE_PAY_UPDATED_NODES_DEFAULT; if (nSporkID == SPORK_11_LOCK_INVALID_UTXO) r = SPORK_11_LOCK_INVALID_UTXO_DEFAULT; + if (nSporkID == SPORK_12_PROPOSAL_VETO) r = SPORK_12_PROPOSAL_VETO_DEFAULT; if (nSporkID == SPORK_13_ENABLE_SUPERBLOCKS) r = SPORK_13_ENABLE_SUPERBLOCKS_DEFAULT; if (nSporkID == SPORK_14_NEW_PROTOCOL_ENFORCEMENT) r = SPORK_14_NEW_PROTOCOL_ENFORCEMENT_DEFAULT; if (nSporkID == SPORK_15_NEW_PROTOCOL_ENFORCEMENT_2) r = SPORK_15_NEW_PROTOCOL_ENFORCEMENT_2_DEFAULT; @@ -265,6 +266,7 @@ int CSporkManager::GetSporkIDByName(std::string strName) if (strName == "SPORK_9_MASTERNODE_BUDGET_ENFORCEMENT") return SPORK_9_MASTERNODE_BUDGET_ENFORCEMENT; if (strName == "SPORK_10_MASTERNODE_PAY_UPDATED_NODES") return SPORK_10_MASTERNODE_PAY_UPDATED_NODES; if (strName == "SPORK_11_LOCK_INVALID_UTXO") return SPORK_11_LOCK_INVALID_UTXO; + if (strName == "SPORK_12_PROPOSAL_VETO") return SPORK_12_PROPOSAL_VETO; if (strName == "SPORK_13_ENABLE_SUPERBLOCKS") return SPORK_13_ENABLE_SUPERBLOCKS; if (strName == "SPORK_14_NEW_PROTOCOL_ENFORCEMENT") return SPORK_14_NEW_PROTOCOL_ENFORCEMENT; if (strName == "SPORK_15_NEW_PROTOCOL_ENFORCEMENT_2") return SPORK_15_NEW_PROTOCOL_ENFORCEMENT_2; @@ -283,6 +285,7 @@ std::string CSporkManager::GetSporkNameByID(int id) if (id == SPORK_9_MASTERNODE_BUDGET_ENFORCEMENT) return "SPORK_9_MASTERNODE_BUDGET_ENFORCEMENT"; if (id == SPORK_10_MASTERNODE_PAY_UPDATED_NODES) return "SPORK_10_MASTERNODE_PAY_UPDATED_NODES"; if (id == SPORK_11_LOCK_INVALID_UTXO) return "SPORK_11_LOCK_INVALID_UTXO"; + if (id == SPORK_12_PROPOSAL_VETO) return "SPORK_12_PROPOSAL_VETO"; if (id == SPORK_13_ENABLE_SUPERBLOCKS) return "SPORK_13_ENABLE_SUPERBLOCKS"; if (id == SPORK_14_NEW_PROTOCOL_ENFORCEMENT) return "SPORK_14_NEW_PROTOCOL_ENFORCEMENT"; if (id == SPORK_15_NEW_PROTOCOL_ENFORCEMENT_2) return "SPORK_15_NEW_PROTOCOL_ENFORCEMENT_2"; diff --git a/src/spork.h b/src/spork.h index 527887a..f866bda 100644 --- a/src/spork.h +++ b/src/spork.h @@ -37,7 +37,7 @@ using namespace boost; #define SPORK_9_MASTERNODE_BUDGET_ENFORCEMENT 10008 #define SPORK_10_MASTERNODE_PAY_UPDATED_NODES 10009 #define SPORK_11_LOCK_INVALID_UTXO 10010 -//#define SPORK_12_RECONSIDER_BLOCKS 10011 +#define SPORK_12_PROPOSAL_VETO 10011 #define SPORK_13_ENABLE_SUPERBLOCKS 10012 #define SPORK_14_NEW_PROTOCOL_ENFORCEMENT 10013 #define SPORK_15_NEW_PROTOCOL_ENFORCEMENT_2 10014 @@ -51,6 +51,7 @@ using namespace boost; #define SPORK_9_MASTERNODE_BUDGET_ENFORCEMENT_DEFAULT 4070908800 //OFF #define SPORK_10_MASTERNODE_PAY_UPDATED_NODES_DEFAULT 4070908800 //OFF #define SPORK_11_LOCK_INVALID_UTXO_DEFAULT 4070908800 //OFF - NOTE: this is block height not time! +#define SPORK_12_PROPOSAL_VETO_DEFAULT 2000000001 #define SPORK_13_ENABLE_SUPERBLOCKS_DEFAULT 4070908800 //OFF #define SPORK_14_NEW_PROTOCOL_ENFORCEMENT_DEFAULT 4070908800 //OFF #define SPORK_15_NEW_PROTOCOL_ENFORCEMENT_2_DEFAULT 4070908800 //OFF From 722fb982a088258ae7f1cf41f3e12aedea5a8535 Mon Sep 17 00:00:00 2001 From: mnzone-dev Date: Sun, 24 Jun 2018 21:16:12 +0000 Subject: [PATCH 9/9] Add checkpoints for improved security and faster sync --- src/chainparams.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 0fdff26..28e3644 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -54,13 +54,16 @@ static void convertSeed6(std::vector& vSeedsOut, const SeedSpec6* data // + Contains no strange transactions static Checkpoints::MapCheckpoints mapCheckpoints = boost::assign::map_list_of - (0, uint256("0x000007d87c5c9a214365124b0109599ca2640d6b1b3a86ebe855b310f49cebc0")); + ( 0, uint256("000007d87c5c9a214365124b0109599ca2640d6b1b3a86ebe855b310f49cebc0")) + ( 20000, uint256("649f7d85aa7670cc4978f8b712f25d4063a984d0dd5ed165fc46f75d542cec4e")) + ( 40000, uint256("8ea815b75a8303fdd2a61202a4782313803de5c999fe74140aae45fe8e5143ea")); + static const Checkpoints::CCheckpointData data = { &mapCheckpoints, - 1514540176, // * UNIX timestamp of last checkpoint block - 0, // * total number of transactions between genesis and last checkpoint + 1529839927, // * UNIX timestamp of last checkpoint block + 95164, // * total number of transactions between genesis and last checkpoint // (the tx=... number in the SetBestChain debug.log lines) - 2000 // * estimated number of transactions per day after checkpoint + 3425 // * estimated number of transactions per day after checkpoint }; static Checkpoints::MapCheckpoints mapCheckpointsTestnet =