From 10c5b0d0fd332622b55e6c65f6e1617217baf038 Mon Sep 17 00:00:00 2001 From: Just Wonder Date: Sat, 4 Jul 2020 18:30:29 -0700 Subject: [PATCH] Fixed namespace creation. Fixed mempool propagation for both old (incorrect) and new (correct) namespaces. Version 0.16.5.4 --- configure.ac | 2 +- depends/packages/libsodium.mk | 3 +- src/chainparams.cpp | 39 ++++++---- src/consensus/params.h | 1 + src/keva/main.cpp | 18 +++-- src/script/keva.cpp | 23 ++++-- src/script/keva.h | 3 +- src/test/keva_tests.cpp | 10 ++- src/validation.cpp | 6 ++ src/validation.h | 3 + src/versionbits.cpp | 4 ++ src/wallet/wallet.cpp | 3 +- test/functional/feature_keva_ns.py | 99 ++++++++++++++++++++++++++ test/functional/feature_keva_ns_bug.py | 61 ++++++++++++++++ 14 files changed, 245 insertions(+), 30 deletions(-) create mode 100755 test/functional/feature_keva_ns.py create mode 100755 test/functional/feature_keva_ns_bug.py diff --git a/configure.ac b/configure.ac index 1246b6623..a342bca29 100644 --- a/configure.ac +++ b/configure.ac @@ -3,7 +3,7 @@ AC_PREREQ([2.60]) define(_CLIENT_VERSION_MAJOR, 0) define(_CLIENT_VERSION_MINOR, 16) define(_CLIENT_VERSION_REVISION, 5) -define(_CLIENT_VERSION_BUILD, 3) +define(_CLIENT_VERSION_BUILD, 4) define(_CLIENT_VERSION_IS_RELEASE, true) define(_COPYRIGHT_YEAR, 2020) define(_COPYRIGHT_HOLDERS,[The %s developers]) diff --git a/depends/packages/libsodium.mk b/depends/packages/libsodium.mk index 1bbb12c5d..2a5b5c12d 100644 --- a/depends/packages/libsodium.mk +++ b/depends/packages/libsodium.mk @@ -2,7 +2,7 @@ package=libsodium $(package)_version=1.0.18 $(package)_download_path=https://download.libsodium.org/libsodium/releases/ $(package)_file_name=$(package)-$($(package)_version)-stable.tar.gz -$(package)_sha256_hash=7047fc20e7692bbfa656a5df825983ad7c7640eaec3926331d14aa2ae1d542ea +$(package)_sha256_hash=51ff569103105b78b49df53a861fd0be5ed1cb1522440c84dfe63b39cfb97bd4 define $(package)_set_vars $(package)_config_opts_mingw32+=CFLAGS="-Ofast -fomit-frame-pointer -march=pentium3 -mtune=westmere" @@ -19,4 +19,3 @@ endef define $(package)_stage_cmds $(MAKE) DESTDIR=$($(package)_staging_dir) install endef - diff --git a/src/chainparams.cpp b/src/chainparams.cpp index d37c13b70..94bb8141c 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -122,24 +122,27 @@ public: consensus.nPowTargetSpacing = 2.0 * 60; // Two minutes consensus.fPowAllowMinDifficultyBlocks = false; consensus.fPowNoRetargeting = false; - consensus.nRuleChangeActivationThreshold = 6048; // 75% of 8064 - consensus.nMinerConfirmationWindow = 8064; // nPowTargetTimespan / nPowTargetSpacing * 4 + consensus.nRuleChangeActivationThreshold = 1620; // 75% of 2160 + consensus.nMinerConfirmationWindow = 2160; // 3 days consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].bit = 28; consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nStartTime = 1199145601; // January 1, 2008 consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nTimeout = 1230767999; // December 31, 2008 // Deployment of BIP68, BIP112, and BIP113. consensus.vDeployments[Consensus::DEPLOYMENT_CSV].bit = 0; - //consensus.vDeployments[Consensus::DEPLOYMENT_CSV].nStartTime = 1485561600; // January 28, 2017 consensus.vDeployments[Consensus::DEPLOYMENT_CSV].nStartTime = -1; // Consensus::BIP9Deployment::ALWAYS_ACTIVE consensus.vDeployments[Consensus::DEPLOYMENT_CSV].nTimeout = 1517356801; // January 31st, 2018 // Deployment of SegWit (BIP141, BIP143, and BIP147) consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].bit = 1; - //consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nStartTime = 1485561600; // January 28, 2017 consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nStartTime = -1; // Consensus::BIP9Deployment::ALWAYS_ACTIVE consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nTimeout = 1517356801; // January 31st, 2018 + // Deployment of NsFix + consensus.vDeployments[Consensus::DEPLOYMENT_NSFIX].bit = 3; + consensus.vDeployments[Consensus::DEPLOYMENT_NSFIX].nStartTime = 1594771200; // 07/15/2020 @ 12:00am + consensus.vDeployments[Consensus::DEPLOYMENT_NSFIX].nTimeout = 1598745600; // 08/30/2020 @ 12:00am + // The best chain should have at least this much work. consensus.nMinimumChainWork = uint256S("0x00000000000000000000000000000000000000000000000000000999a6a433f7"); @@ -211,30 +214,33 @@ public: consensus.BIP34Hash = uint256S("0xa8dbaa66a9266348f6527fe528efea73227d51938befb81d5a1521cebd319c4a"); // Genesis consensus.BIP65Height = 1; consensus.BIP66Height = 1; - consensus.RandomXHeight = 6030; + consensus.RandomXHeight = 3; consensus.powLimit = uint256S("000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); consensus.nPowTargetTimespan = 2.0 * 60; // Two minutes consensus.nPowTargetSpacing = 2.0 * 60; // Two minutes consensus.fPowAllowMinDifficultyBlocks = true; - consensus.fPowNoRetargeting = false; - consensus.nRuleChangeActivationThreshold = 1512; // 75% for testchains - consensus.nMinerConfirmationWindow = 2016; // nPowTargetTimespan / nPowTargetSpacing + consensus.fPowNoRetargeting = true; + consensus.nRuleChangeActivationThreshold = 108; // 75% for testchains + consensus.nMinerConfirmationWindow = 144; // nPowTargetTimespan / nPowTargetSpacing consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].bit = 28; consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nStartTime = 1199145601; // January 1, 2008 consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nTimeout = 1230767999; // December 31, 2008 // Deployment of BIP68, BIP112, and BIP113. consensus.vDeployments[Consensus::DEPLOYMENT_CSV].bit = 0; - //consensus.vDeployments[Consensus::DEPLOYMENT_CSV].nStartTime = 1483228800; // January 1, 2017 consensus.vDeployments[Consensus::DEPLOYMENT_CSV].nStartTime = -1; // Consensus::BIP9Deployment::ALWAYS_ACTIVE consensus.vDeployments[Consensus::DEPLOYMENT_CSV].nTimeout = 1517356801; // January 31st, 2018 // Deployment of SegWit (BIP141, BIP143, and BIP147) consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].bit = 1; - //consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nStartTime = 1483228800; // January 1, 2017 consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nStartTime = -1; // Consensus::BIP9Deployment::ALWAYS_ACTIVE consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nTimeout = 1517356801; // January 31st, 2018 + // Deployment of NsFix + consensus.vDeployments[Consensus::DEPLOYMENT_NSFIX].bit = 3; + consensus.vDeployments[Consensus::DEPLOYMENT_NSFIX].nStartTime = 1594771200; // 07/15/2020 @ 12:00am + consensus.vDeployments[Consensus::DEPLOYMENT_NSFIX].nTimeout = 1598745600; // 08/30/2020 @ 12:00am + // The best chain should have at least this much work. consensus.nMinimumChainWork = uint256S("0x0000000000000000000000000000000000000000000000000000000000001000"); @@ -303,7 +309,7 @@ public: consensus.BIP34Hash = uint256(); consensus.BIP65Height = 1351; // BIP65 activated on regtest (Used in rpc activation tests) consensus.BIP66Height = 1251; // BIP66 activated on regtest (Used in rpc activation tests) - consensus.RandomXHeight = 20; // RandomxX acticated on regtest. + consensus.RandomXHeight = 2000000; // RandomX acticated on regtest. consensus.powLimit = uint256S("7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); consensus.nPowTargetTimespan = 2.0 * 60; // Two minutes consensus.nPowTargetSpacing = 2.0 * 60; // Two minutes @@ -312,15 +318,22 @@ public: consensus.nRuleChangeActivationThreshold = 108; // 75% for testchains consensus.nMinerConfirmationWindow = 144; // Faster than normal for regtest (144 instead of 2016) consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].bit = 28; - consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nStartTime = 0; + //consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nStartTime = 0; + consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nStartTime = Consensus::BIP9Deployment::ALWAYS_ACTIVE; consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; consensus.vDeployments[Consensus::DEPLOYMENT_CSV].bit = 0; - consensus.vDeployments[Consensus::DEPLOYMENT_CSV].nStartTime = 0; + //consensus.vDeployments[Consensus::DEPLOYMENT_CSV].nStartTime = 0; + consensus.vDeployments[Consensus::DEPLOYMENT_CSV].nStartTime = Consensus::BIP9Deployment::ALWAYS_ACTIVE; consensus.vDeployments[Consensus::DEPLOYMENT_CSV].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].bit = 1; consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nStartTime = Consensus::BIP9Deployment::ALWAYS_ACTIVE; consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; + // Deployment of NsFix + consensus.vDeployments[Consensus::DEPLOYMENT_NSFIX].bit = 3; + consensus.vDeployments[Consensus::DEPLOYMENT_NSFIX].nStartTime = 1517356801; // January 31st, 2018 + consensus.vDeployments[Consensus::DEPLOYMENT_NSFIX].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; + // The best chain should have at least this much work. consensus.nMinimumChainWork = uint256S("0x00"); diff --git a/src/consensus/params.h b/src/consensus/params.h index e89011809..ce8d05c3c 100644 --- a/src/consensus/params.h +++ b/src/consensus/params.h @@ -18,6 +18,7 @@ enum DeploymentPos DEPLOYMENT_TESTDUMMY, DEPLOYMENT_CSV, // Deployment of BIP68, BIP112, and BIP113. DEPLOYMENT_SEGWIT, // Deployment of BIP141, BIP143, and BIP147. + DEPLOYMENT_NSFIX, // Deployment of fix of Keva namespace creation. // NOTE: Also add new deployments to VersionBitsDeploymentInfo in versionbits.cpp MAX_VERSION_BITS_DEPLOYMENTS }; diff --git a/src/keva/main.cpp b/src/keva/main.cpp index b67220378..7c958a67e 100644 --- a/src/keva/main.cpp +++ b/src/keva/main.cpp @@ -144,9 +144,9 @@ bool CKevaMemPool::validateNamespace(const CTransaction& tx, const valtype& name if (tx.vin.size() == 0) { return false; } - valtype kevaNamespace = ToByteVector(Hash160(ToByteVector(tx.vin[0].prevout.hash))); - const std::vector& ns_prefix = Params().Base58Prefix(CChainParams::KEVA_NAMESPACE); - kevaNamespace.insert(kevaNamespace.begin(), ns_prefix.begin(), ns_prefix.end()); + valtype kevaNamespace; + bool nsFixEnabled = IsNsFixEnabled(chainActive.Tip(), Params().GetConsensus()); + CKevaScript::generateNamespace(tx.vin[0].prevout.hash, tx.vin[0].prevout.n, kevaNamespace, Params(), nsFixEnabled); return kevaNamespace == nameSpace; } @@ -336,7 +336,17 @@ CheckKevaTransaction (const CTransaction& tx, unsigned nHeight, if (nameOpOut.getOpNamespaceDisplayName().size () > MAX_VALUE_LENGTH) { return state.Invalid (error ("CheckKevaTransaction: display name value too long")); } - return true; + + LOCK(cs_main); + bool nsFixEnabled = IsNsFixEnabled(chainActive.Tip(), Params().GetConsensus()); + if (!nsFixEnabled) { + // This is a historic bug. + return true; + } + // Make sure the namespace Id is correctly derived from vin[0]. + valtype expectedNamespace; + CKevaScript::generateNamespace(tx.vin[0].prevout.hash, tx.vin[0].prevout.n, expectedNamespace, Params(), true); + return expectedNamespace == nameOpOut.getOpNamespace(); } assert(nameOpOut.isAnyUpdate()); diff --git a/src/script/keva.cpp b/src/script/keva.cpp index 7500cc8bf..2ee03c508 100644 --- a/src/script/keva.cpp +++ b/src/script/keva.cpp @@ -7,7 +7,9 @@ // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include