fix crash on cli help
fix bech32 prefix bumped version improve trie read RAM use, fix a few compiler warnings open segwit window until Jan 2020 work around Windows ICU build issue upped the soft fork thresh length to a week open testnet soft forks window clarifying segwit to be manually enabled same for testnet
This commit is contained in:
parent
90afa72147
commit
141f1400dc
14 changed files with 66 additions and 106 deletions
|
@ -3,7 +3,7 @@ AC_PREREQ([2.60])
|
||||||
define(_CLIENT_VERSION_MAJOR, 0)
|
define(_CLIENT_VERSION_MAJOR, 0)
|
||||||
define(_CLIENT_VERSION_MINOR, 17)
|
define(_CLIENT_VERSION_MINOR, 17)
|
||||||
define(_CLIENT_VERSION_REVISION, 2)
|
define(_CLIENT_VERSION_REVISION, 2)
|
||||||
define(_CLIENT_VERSION_BUILD, 0)
|
define(_CLIENT_VERSION_BUILD, 1)
|
||||||
define(_CLIENT_VERSION_IS_RELEASE, true)
|
define(_CLIENT_VERSION_IS_RELEASE, true)
|
||||||
define(_COPYRIGHT_YEAR, 2019)
|
define(_COPYRIGHT_YEAR, 2019)
|
||||||
define(_COPYRIGHT_HOLDERS,[The %s developers])
|
define(_COPYRIGHT_HOLDERS,[The %s developers])
|
||||||
|
|
|
@ -22,6 +22,7 @@ define $(package)_preprocess_cmds
|
||||||
PKG_CONFIG_SYSROOT_DIR=/ \
|
PKG_CONFIG_SYSROOT_DIR=/ \
|
||||||
PKG_CONFIG_LIBDIR=$(host_prefix)/lib/pkgconfig \
|
PKG_CONFIG_LIBDIR=$(host_prefix)/lib/pkgconfig \
|
||||||
PKG_CONFIG_PATH=$(host_prefix)/share/pkgconfig \
|
PKG_CONFIG_PATH=$(host_prefix)/share/pkgconfig \
|
||||||
|
sed -i.old 's/^GEN_DEPS.cc.*/& $(CXXFLAGS)/' source/config/mh-mingw* && \
|
||||||
mkdir -p build && cd build && \
|
mkdir -p build && cd build && \
|
||||||
../source/runConfigureICU Linux $($(package)_standard_opts) CXXFLAGS=-std=c++11 && \
|
../source/runConfigureICU Linux $($(package)_standard_opts) CXXFLAGS=-std=c++11 && \
|
||||||
$(MAKE) && cd ..
|
$(MAKE) && cd ..
|
||||||
|
|
|
@ -29,6 +29,9 @@ if which ccache >/dev/null; then
|
||||||
ccache -ps
|
ccache -ps
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
export CXXFLAGS="${CXXFLAGS:--O2 -frecord-gcc-switches}"
|
||||||
|
echo "CXXFLAGS set to $CXXFLAGS"
|
||||||
|
|
||||||
pushd depends
|
pushd depends
|
||||||
make -j`getconf _NPROCESSORS_ONLN` HOST=x86_64-apple-darwin14 NO_QT=1 V=1
|
make -j`getconf _NPROCESSORS_ONLN` HOST=x86_64-apple-darwin14 NO_QT=1 V=1
|
||||||
popd
|
popd
|
||||||
|
|
|
@ -16,6 +16,9 @@ if which ccache >/dev/null; then
|
||||||
ccache -ps
|
ccache -ps
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
export CXXFLAGS="${CXXFLAGS:--O2 -frecord-gcc-switches}"
|
||||||
|
echo "CXXFLAGS set to $CXXFLAGS"
|
||||||
|
|
||||||
cd depends
|
cd depends
|
||||||
make -j`getconf _NPROCESSORS_ONLN` HOST=x86_64-pc-linux-gnu NO_QT=1 V=1
|
make -j`getconf _NPROCESSORS_ONLN` HOST=x86_64-pc-linux-gnu NO_QT=1 V=1
|
||||||
cd ..
|
cd ..
|
||||||
|
|
|
@ -20,6 +20,9 @@ if which ccache >/dev/null; then
|
||||||
ccache -ps
|
ccache -ps
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
export CXXFLAGS="${CXXFLAGS:--O2 -frecord-gcc-switches}"
|
||||||
|
echo "CXXFLAGS set to $CXXFLAGS"
|
||||||
|
|
||||||
pushd depends
|
pushd depends
|
||||||
make -j`getconf _NPROCESSORS_ONLN` HOST=i686-w64-mingw32 NO_QT=1 V=1
|
make -j`getconf _NPROCESSORS_ONLN` HOST=i686-w64-mingw32 NO_QT=1 V=1
|
||||||
popd
|
popd
|
||||||
|
|
|
@ -19,6 +19,9 @@ if which ccache >/dev/null; then
|
||||||
ccache -ps
|
ccache -ps
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
export CXXFLAGS="${CXXFLAGS:--O2 -frecord-gcc-switches}"
|
||||||
|
echo "CXXFLAGS set to $CXXFLAGS"
|
||||||
|
|
||||||
pushd depends
|
pushd depends
|
||||||
make -j`getconf _NPROCESSORS_ONLN` HOST=x86_64-w64-mingw32 NO_QT=1 V=1
|
make -j`getconf _NPROCESSORS_ONLN` HOST=x86_64-w64-mingw32 NO_QT=1 V=1
|
||||||
popd
|
popd
|
||||||
|
|
|
@ -132,8 +132,8 @@ public:
|
||||||
consensus.BIP34Height = 1;
|
consensus.BIP34Height = 1;
|
||||||
consensus.BIP34Hash = uint256S("0xdecb9e2cca03a419fd9cca0cb2b1d5ad11b088f22f8f38556d93ac4358b86c24");
|
consensus.BIP34Hash = uint256S("0xdecb9e2cca03a419fd9cca0cb2b1d5ad11b088f22f8f38556d93ac4358b86c24");
|
||||||
// FIXME: adjust heights
|
// FIXME: adjust heights
|
||||||
consensus.BIP65Height = 600000;
|
consensus.BIP65Height = 200000;
|
||||||
consensus.BIP66Height = 600000;
|
consensus.BIP66Height = 200000;
|
||||||
consensus.powLimit = uint256S("0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
|
consensus.powLimit = uint256S("0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
|
||||||
consensus.nPowTargetTimespan = 150; //retarget every block
|
consensus.nPowTargetTimespan = 150; //retarget every block
|
||||||
consensus.nPowTargetSpacing = 150;
|
consensus.nPowTargetSpacing = 150;
|
||||||
|
@ -147,8 +147,8 @@ public:
|
||||||
consensus.nMaxTakeoverWorkaroundHeight = 10000000;
|
consensus.nMaxTakeoverWorkaroundHeight = 10000000;
|
||||||
consensus.fPowAllowMinDifficultyBlocks = false;
|
consensus.fPowAllowMinDifficultyBlocks = false;
|
||||||
consensus.fPowNoRetargeting = false;
|
consensus.fPowNoRetargeting = false;
|
||||||
consensus.nRuleChangeActivationThreshold = 1916; // 95% of 2016
|
consensus.nRuleChangeActivationThreshold = 3830; // 95% of a week
|
||||||
consensus.nMinerConfirmationWindow = 2016; // nPowTargetTimespan / nPowTargetSpacing
|
consensus.nMinerConfirmationWindow = 4032; // week
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].bit = 28;
|
consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].bit = 28;
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nStartTime = 1199145601; // January 1, 2008
|
consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nStartTime = 1199145601; // January 1, 2008
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nTimeout = 1230767999; // December 31, 2008
|
consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nTimeout = 1230767999; // December 31, 2008
|
||||||
|
@ -160,8 +160,8 @@ public:
|
||||||
|
|
||||||
// Deployment of SegWit (BIP141, BIP143, and BIP147)
|
// Deployment of SegWit (BIP141, BIP143, and BIP147)
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].bit = 1;
|
consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].bit = 1;
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nStartTime = 1547942400; // Jan 20, 2019
|
consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nStartTime = Consensus::BIP9Deployment::NO_TIMEOUT; // enabling it manually
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nTimeout = 1548288000; // Jan 24, 2019
|
consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT;
|
||||||
|
|
||||||
// The best chain should have at least this much work.
|
// The best chain should have at least this much work.
|
||||||
consensus.nMinimumChainWork = uint256S("0x000000000000000000000000000000000000000000000000607ca7e806c4c1e9"); //400000
|
consensus.nMinimumChainWork = uint256S("0x000000000000000000000000000000000000000000000000607ca7e806c4c1e9"); //400000
|
||||||
|
@ -206,7 +206,7 @@ public:
|
||||||
|
|
||||||
vFixedSeeds = std::vector<SeedSpec6>(pnSeed6_main, pnSeed6_main + ARRAYLEN(pnSeed6_main));
|
vFixedSeeds = std::vector<SeedSpec6>(pnSeed6_main, pnSeed6_main + ARRAYLEN(pnSeed6_main));
|
||||||
|
|
||||||
bech32_hrp = "bc";
|
bech32_hrp = "lbc";
|
||||||
|
|
||||||
vFixedSeeds = std::vector<SeedSpec6>(pnSeed6_main, pnSeed6_main + ARRAYLEN(pnSeed6_main));
|
vFixedSeeds = std::vector<SeedSpec6>(pnSeed6_main, pnSeed6_main + ARRAYLEN(pnSeed6_main));
|
||||||
|
|
||||||
|
@ -277,8 +277,8 @@ public:
|
||||||
|
|
||||||
// Deployment of SegWit (BIP141, BIP143, and BIP147)
|
// Deployment of SegWit (BIP141, BIP143, and BIP147)
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].bit = 1;
|
consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].bit = 1;
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nStartTime = 1462060800; // May 1st 2016
|
consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nStartTime = Consensus::BIP9Deployment::NO_TIMEOUT; // enabling it manually
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nTimeout = 1493596800; // May 1st 2017
|
consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT;
|
||||||
|
|
||||||
// The best chain should have at least this much work.
|
// The best chain should have at least this much work.
|
||||||
consensus.nMinimumChainWork = uint256S("0x000000000000000000000000000000000000000000000000000a0c3931735170");
|
consensus.nMinimumChainWork = uint256S("0x000000000000000000000000000000000000000000000000000a0c3931735170");
|
||||||
|
@ -314,7 +314,7 @@ public:
|
||||||
base58Prefixes[EXT_PUBLIC_KEY] = {0x04, 0x35, 0x87, 0xCF};
|
base58Prefixes[EXT_PUBLIC_KEY] = {0x04, 0x35, 0x87, 0xCF};
|
||||||
base58Prefixes[EXT_SECRET_KEY] = {0x04, 0x35, 0x83, 0x94};
|
base58Prefixes[EXT_SECRET_KEY] = {0x04, 0x35, 0x83, 0x94};
|
||||||
|
|
||||||
bech32_hrp = "tb";
|
bech32_hrp = "tlbc";
|
||||||
|
|
||||||
vFixedSeeds = std::vector<SeedSpec6>(pnSeed6_test, pnSeed6_test + ARRAYLEN(pnSeed6_test));
|
vFixedSeeds = std::vector<SeedSpec6>(pnSeed6_test, pnSeed6_test + ARRAYLEN(pnSeed6_test));
|
||||||
|
|
||||||
|
@ -431,7 +431,7 @@ public:
|
||||||
base58Prefixes[EXT_PUBLIC_KEY] = {0x04, 0x35, 0x87, 0xCF};
|
base58Prefixes[EXT_PUBLIC_KEY] = {0x04, 0x35, 0x87, 0xCF};
|
||||||
base58Prefixes[EXT_SECRET_KEY] = {0x04, 0x35, 0x83, 0x94};
|
base58Prefixes[EXT_SECRET_KEY] = {0x04, 0x35, 0x83, 0x94};
|
||||||
|
|
||||||
bech32_hrp = "bcrt";
|
bech32_hrp = "rlbc";
|
||||||
|
|
||||||
/* enable fallback fee on regtest */
|
/* enable fallback fee on regtest */
|
||||||
m_fallback_fee_enabled = true;
|
m_fallback_fee_enabled = true;
|
||||||
|
|
|
@ -477,7 +477,7 @@ bool CClaimTrieCacheBase::ReadFromDisk(const CBlockIndex* tip)
|
||||||
base->clear();
|
base->clear();
|
||||||
boost::scoped_ptr<CDBIterator> pcursor(base->db->NewIterator());
|
boost::scoped_ptr<CDBIterator> pcursor(base->db->NewIterator());
|
||||||
|
|
||||||
std::unordered_map<std::string, uint256> hashesOnEmptyNodes;
|
std::vector<std::pair<std::string, uint256>> hashesOnEmptyNodes;
|
||||||
|
|
||||||
for (pcursor->SeekToFirst(); pcursor->Valid(); pcursor->Next()) {
|
for (pcursor->SeekToFirst(); pcursor->Valid(); pcursor->Next()) {
|
||||||
std::pair<uint8_t, std::string> key;
|
std::pair<uint8_t, std::string> key;
|
||||||
|
@ -489,7 +489,7 @@ bool CClaimTrieCacheBase::ReadFromDisk(const CBlockIndex* tip)
|
||||||
if (data.empty()) {
|
if (data.empty()) {
|
||||||
// we have a situation where our old trie had many empty nodes
|
// we have a situation where our old trie had many empty nodes
|
||||||
// we don't want to automatically throw those all into our prefix trie
|
// we don't want to automatically throw those all into our prefix trie
|
||||||
hashesOnEmptyNodes.emplace(key.second, data.hash);
|
hashesOnEmptyNodes.emplace_back(key.second, data.hash);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -514,7 +514,6 @@ bool CClaimTrieCacheBase::ReadFromDisk(const CBlockIndex* tip)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
LogPrintf("Checking claim trie consistency... ");
|
LogPrintf("Checking claim trie consistency... ");
|
||||||
if (checkConsistency()) {
|
if (checkConsistency()) {
|
||||||
LogPrintf("consistent\n");
|
LogPrintf("consistent\n");
|
||||||
|
|
|
@ -318,7 +318,7 @@ public:
|
||||||
bool SyncToDisk();
|
bool SyncToDisk();
|
||||||
|
|
||||||
friend class CClaimTrieCacheBase;
|
friend class CClaimTrieCacheBase;
|
||||||
friend class ClaimTrieChainFixture;
|
friend struct ClaimTrieChainFixture;
|
||||||
friend class CClaimTrieCacheExpirationFork;
|
friend class CClaimTrieCacheExpirationFork;
|
||||||
friend class CClaimTrieCacheNormalizationFork;
|
friend class CClaimTrieCacheNormalizationFork;
|
||||||
};
|
};
|
||||||
|
@ -532,7 +532,7 @@ private:
|
||||||
typename expirationQueueType::value_type* getSupportExpirationQueueCacheRow(int nHeight, bool createIfNotExists = false);
|
typename expirationQueueType::value_type* getSupportExpirationQueueCacheRow(int nHeight, bool createIfNotExists = false);
|
||||||
|
|
||||||
// for unit test
|
// for unit test
|
||||||
friend class ClaimTrieChainFixture;
|
friend struct ClaimTrieChainFixture;
|
||||||
friend class CClaimTrieCacheTest;
|
friend class CClaimTrieCacheTest;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -137,18 +137,10 @@ bool validParams(const UniValue& params, uint8_t required, uint8_t optional)
|
||||||
|
|
||||||
static UniValue getclaimsintrie(const JSONRPCRequest& request)
|
static UniValue getclaimsintrie(const JSONRPCRequest& request)
|
||||||
{
|
{
|
||||||
if (!IsDeprecatedRPCEnabled("getclaimsintrie")) {
|
|
||||||
const auto msg = "getclaimsintrie is deprecated and will be removed in v0.18. To use this command, start with -deprecatedrpc=getclaimsintrie";
|
|
||||||
if (request.fHelp) {
|
|
||||||
throw std::runtime_error(msg);
|
|
||||||
}
|
|
||||||
throw JSONRPCError(RPC_METHOD_DEPRECATED, msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (request.fHelp || request.params.size() > 1)
|
if (request.fHelp || request.params.size() > 1)
|
||||||
throw std::runtime_error(
|
throw std::runtime_error(
|
||||||
"getclaimsintrie\n"
|
"getclaimsintrie\n"
|
||||||
"Return all claims in the name trie.\n"
|
"Return all claims in the name trie. Deprecated.\n"
|
||||||
"Arguments:\n"
|
"Arguments:\n"
|
||||||
"1. \"blockhash\" (string, optional) get claims in the trie\n"
|
"1. \"blockhash\" (string, optional) get claims in the trie\n"
|
||||||
" at the block specified\n"
|
" at the block specified\n"
|
||||||
|
@ -174,6 +166,14 @@ static UniValue getclaimsintrie(const JSONRPCRequest& request)
|
||||||
" }\n"
|
" }\n"
|
||||||
"]\n");
|
"]\n");
|
||||||
|
|
||||||
|
if (!IsDeprecatedRPCEnabled("getclaimsintrie")) {
|
||||||
|
const auto msg = "getclaimsintrie is deprecated and will be removed in v0.18. To use this command, start with -deprecatedrpc=getclaimsintrie";
|
||||||
|
if (request.fHelp) {
|
||||||
|
throw std::runtime_error(msg);
|
||||||
|
}
|
||||||
|
throw JSONRPCError(RPC_METHOD_DEPRECATED, msg);
|
||||||
|
}
|
||||||
|
|
||||||
LOCK(cs_main);
|
LOCK(cs_main);
|
||||||
|
|
||||||
CCoinsViewCache coinsCache(pcoinsTip.get());
|
CCoinsViewCache coinsCache(pcoinsTip.get());
|
||||||
|
@ -899,7 +899,7 @@ static const CRPCCommand commands[] =
|
||||||
// --------------------- ------------------------ ----------------------- ----------
|
// --------------------- ------------------------ ----------------------- ----------
|
||||||
{ "Claimtrie", "getclaimsintrie", &getclaimsintrie, { "blockhash" } },
|
{ "Claimtrie", "getclaimsintrie", &getclaimsintrie, { "blockhash" } },
|
||||||
{ "Claimtrie", "getnamesintrie", &getnamesintrie, { "blockhash" } },
|
{ "Claimtrie", "getnamesintrie", &getnamesintrie, { "blockhash" } },
|
||||||
{ "Claimtrie", "getclaimtrie", &getclaimtrie, { "" } },
|
{ "hidden", "getclaimtrie", &getclaimtrie, { } },
|
||||||
{ "Claimtrie", "getvalueforname", &getvalueforname, { "name","blockhash" } },
|
{ "Claimtrie", "getvalueforname", &getvalueforname, { "name","blockhash" } },
|
||||||
{ "Claimtrie", "getclaimsforname", &getclaimsforname, { "name","blockhash" } },
|
{ "Claimtrie", "getclaimsforname", &getclaimsforname, { "name","blockhash" } },
|
||||||
{ "Claimtrie", "gettotalclaimednames", &gettotalclaimednames, { "" } },
|
{ "Claimtrie", "gettotalclaimednames", &gettotalclaimednames, { "" } },
|
||||||
|
|
|
@ -459,8 +459,8 @@
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4",
|
"lbc1qxph5rn26f3ky6cxgkwgsz2x5uaga4muj4zfpvp",
|
||||||
"0014751e76e8199196d454941c45d1b3a323f1433bd6",
|
"0014306f41cd5a4c6c4d60c8b3910128d4e751daef92",
|
||||||
{
|
{
|
||||||
"isPrivkey": false,
|
"isPrivkey": false,
|
||||||
"chain": "lbrycrd",
|
"chain": "lbrycrd",
|
||||||
|
@ -468,17 +468,8 @@
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"bcrt1qw508d6qejxtdg4y5r3zarvary0c5xw7kygt080",
|
"tlbc1q7h2lv2hwl26eywahnl7ceyqtfsn0dt2vkag95n",
|
||||||
"0014751e76e8199196d454941c45d1b3a323f1433bd6",
|
"0014f5d5f62aeefab5923bb79ffd8c900b4c26f6ad4c",
|
||||||
{
|
|
||||||
"isPrivkey": false,
|
|
||||||
"chain": "regtest",
|
|
||||||
"tryCaseFlip": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"tb1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3q0sl5k7",
|
|
||||||
"00201863143c14c5166804bd19203356da136c985678cd4d27a1b8c6329604903262",
|
|
||||||
{
|
{
|
||||||
"isPrivkey": false,
|
"isPrivkey": false,
|
||||||
"chain": "lbrycrdtest",
|
"chain": "lbrycrdtest",
|
||||||
|
@ -486,48 +477,13 @@
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"bc1pw508d6qejxtdg4y5r3zarvary0c5xw7kw508d6qejxtdg4y5r3zarvary0c5xw7k7grplx",
|
"rlbc1q9rjqlxnxnyag659jvp90wxchu9sxsskcvgtqju",
|
||||||
"5128751e76e8199196d454941c45d1b3a323f1433bd6751e76e8199196d454941c45d1b3a323f1433bd6",
|
"001428e40f9a66993a8d50b2604af71b17e1606842d8",
|
||||||
{
|
|
||||||
"isPrivkey": false,
|
|
||||||
"chain": "lbrycrd",
|
|
||||||
"tryCaseFlip": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"bc1sw50qa3jx3s",
|
|
||||||
"6002751e",
|
|
||||||
{
|
|
||||||
"isPrivkey": false,
|
|
||||||
"chain": "lbrycrd",
|
|
||||||
"tryCaseFlip": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"bc1zw508d6qejxtdg4y5r3zarvaryvg6kdaj",
|
|
||||||
"5210751e76e8199196d454941c45d1b3a323",
|
|
||||||
{
|
|
||||||
"isPrivkey": false,
|
|
||||||
"chain": "lbrycrd",
|
|
||||||
"tryCaseFlip": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"tb1qqqqqp399et2xygdj5xreqhjjvcmzhxw4aywxecjdzew6hylgvsesrxh6hy",
|
|
||||||
"0020000000c4a5cad46221b2a187905e5266362b99d5e91c6ce24d165dab93e86433",
|
|
||||||
{
|
|
||||||
"isPrivkey": false,
|
|
||||||
"chain": "lbrycrdtest",
|
|
||||||
"tryCaseFlip": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"bcrt1qqqqqp399et2xygdj5xreqhjjvcmzhxw4aywxecjdzew6hylgvseswlauz7",
|
|
||||||
"0020000000c4a5cad46221b2a187905e5266362b99d5e91c6ce24d165dab93e86433",
|
|
||||||
{
|
{
|
||||||
"isPrivkey": false,
|
"isPrivkey": false,
|
||||||
"chain": "regtest",
|
"chain": "regtest",
|
||||||
"tryCaseFlip": true
|
"tryCaseFlip": true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
|
@ -134,13 +134,13 @@ std::ostream& operator<<(std::ostream& os, const uint256& num);
|
||||||
std::ostream& operator<<(std::ostream& os, const uint160& num);
|
std::ostream& operator<<(std::ostream& os, const uint160& num);
|
||||||
std::ostream& operator<<(std::ostream& os, const COutPoint& point);
|
std::ostream& operator<<(std::ostream& os, const COutPoint& point);
|
||||||
|
|
||||||
class CClaimValue;
|
struct CClaimValue;
|
||||||
std::ostream& operator<<(std::ostream& os, const CClaimValue& claim);
|
std::ostream& operator<<(std::ostream& os, const CClaimValue& claim);
|
||||||
|
|
||||||
class CSupportValue;
|
struct CSupportValue;
|
||||||
std::ostream& operator<<(std::ostream& os, const CSupportValue& support);
|
std::ostream& operator<<(std::ostream& os, const CSupportValue& support);
|
||||||
|
|
||||||
class CClaimTrieData;
|
struct CClaimTrieData;
|
||||||
std::ostream& operator<<(std::ostream& os, const CClaimTrieData& data);
|
std::ostream& operator<<(std::ostream& os, const CClaimTrieData& data);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -268,15 +268,17 @@ BOOST_AUTO_TEST_CASE(versionbits_computeblockversion)
|
||||||
// Start generating blocks before nStartTime
|
// Start generating blocks before nStartTime
|
||||||
int64_t nTime = nStartTime - 1;
|
int64_t nTime = nStartTime - 1;
|
||||||
|
|
||||||
|
const uint32_t period = mainnetParams.nMinerConfirmationWindow;
|
||||||
|
|
||||||
// Before MedianTimePast of the chain has crossed nStartTime, the bit
|
// Before MedianTimePast of the chain has crossed nStartTime, the bit
|
||||||
// should not be set.
|
// should not be set.
|
||||||
CBlockIndex *lastBlock = nullptr;
|
CBlockIndex *lastBlock = nullptr;
|
||||||
lastBlock = firstChain.Mine(2016, nTime, VERSIONBITS_LAST_OLD_BLOCK_VERSION).Tip();
|
lastBlock = firstChain.Mine(period, nTime, VERSIONBITS_LAST_OLD_BLOCK_VERSION).Tip();
|
||||||
BOOST_CHECK_EQUAL(ComputeBlockVersion(lastBlock, mainnetParams) & (1<<bit), 0);
|
BOOST_CHECK_EQUAL(ComputeBlockVersion(lastBlock, mainnetParams) & (1<<bit), 0);
|
||||||
|
|
||||||
// Mine 2011 more blocks at the old time, and check that CBV isn't setting the bit yet.
|
// Mine 2011 more blocks at the old time, and check that CBV isn't setting the bit yet.
|
||||||
for (int i=1; i<2012; i++) {
|
for (uint32_t i=1; i<period-4; i++) {
|
||||||
lastBlock = firstChain.Mine(2016+i, nTime, VERSIONBITS_LAST_OLD_BLOCK_VERSION).Tip();
|
lastBlock = firstChain.Mine(period+i, nTime, VERSIONBITS_LAST_OLD_BLOCK_VERSION).Tip();
|
||||||
// This works because VERSIONBITS_LAST_OLD_BLOCK_VERSION happens
|
// This works because VERSIONBITS_LAST_OLD_BLOCK_VERSION happens
|
||||||
// to be 4, and the bit we're testing happens to be bit 28.
|
// to be 4, and the bit we're testing happens to be bit 28.
|
||||||
BOOST_CHECK_EQUAL(ComputeBlockVersion(lastBlock, mainnetParams) & (1<<bit), 0);
|
BOOST_CHECK_EQUAL(ComputeBlockVersion(lastBlock, mainnetParams) & (1<<bit), 0);
|
||||||
|
@ -284,13 +286,13 @@ BOOST_AUTO_TEST_CASE(versionbits_computeblockversion)
|
||||||
// Now mine 5 more blocks at the start time -- MTP should not have passed yet, so
|
// Now mine 5 more blocks at the start time -- MTP should not have passed yet, so
|
||||||
// CBV should still not yet set the bit.
|
// CBV should still not yet set the bit.
|
||||||
nTime = nStartTime;
|
nTime = nStartTime;
|
||||||
for (int i=2012; i<=2016; i++) {
|
for (uint32_t i=period-4; i<=period; i++) {
|
||||||
lastBlock = firstChain.Mine(2016+i, nTime, VERSIONBITS_LAST_OLD_BLOCK_VERSION).Tip();
|
lastBlock = firstChain.Mine(period+i, nTime, VERSIONBITS_LAST_OLD_BLOCK_VERSION).Tip();
|
||||||
BOOST_CHECK_EQUAL(ComputeBlockVersion(lastBlock, mainnetParams) & (1<<bit), 0);
|
BOOST_CHECK_EQUAL(ComputeBlockVersion(lastBlock, mainnetParams) & (1<<bit), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Advance to the next period and transition to STARTED,
|
// Advance to the next period and transition to STARTED,
|
||||||
lastBlock = firstChain.Mine(6048, nTime, VERSIONBITS_LAST_OLD_BLOCK_VERSION).Tip();
|
lastBlock = firstChain.Mine(period*3, nTime, VERSIONBITS_LAST_OLD_BLOCK_VERSION).Tip();
|
||||||
// so ComputeBlockVersion should now set the bit,
|
// so ComputeBlockVersion should now set the bit,
|
||||||
BOOST_CHECK((ComputeBlockVersion(lastBlock, mainnetParams) & (1<<bit)) != 0);
|
BOOST_CHECK((ComputeBlockVersion(lastBlock, mainnetParams) & (1<<bit)) != 0);
|
||||||
// and should also be using the VERSIONBITS_TOP_BITS.
|
// and should also be using the VERSIONBITS_TOP_BITS.
|
||||||
|
@ -298,8 +300,8 @@ BOOST_AUTO_TEST_CASE(versionbits_computeblockversion)
|
||||||
|
|
||||||
// Check that ComputeBlockVersion will set the bit until nTimeout
|
// Check that ComputeBlockVersion will set the bit until nTimeout
|
||||||
nTime += 600;
|
nTime += 600;
|
||||||
int blocksToMine = 4032; // test blocks for up to 2 time periods
|
auto blocksToMine = period*2; // test blocks for up to 2 time periods
|
||||||
int nHeight = 6048;
|
auto nHeight = period*3;
|
||||||
// These blocks are all before nTimeout is reached.
|
// These blocks are all before nTimeout is reached.
|
||||||
while (nTime < nTimeout && blocksToMine > 0) {
|
while (nTime < nTimeout && blocksToMine > 0) {
|
||||||
lastBlock = firstChain.Mine(nHeight+1, nTime, VERSIONBITS_LAST_OLD_BLOCK_VERSION).Tip();
|
lastBlock = firstChain.Mine(nHeight+1, nTime, VERSIONBITS_LAST_OLD_BLOCK_VERSION).Tip();
|
||||||
|
@ -313,7 +315,7 @@ BOOST_AUTO_TEST_CASE(versionbits_computeblockversion)
|
||||||
nTime = nTimeout;
|
nTime = nTimeout;
|
||||||
// FAILED is only triggered at the end of a period, so CBV should be setting
|
// FAILED is only triggered at the end of a period, so CBV should be setting
|
||||||
// the bit until the period transition.
|
// the bit until the period transition.
|
||||||
for (int i=0; i<2015; i++) {
|
for (uint32_t i=0; i<period-1; i++) {
|
||||||
lastBlock = firstChain.Mine(nHeight+1, nTime, VERSIONBITS_LAST_OLD_BLOCK_VERSION).Tip();
|
lastBlock = firstChain.Mine(nHeight+1, nTime, VERSIONBITS_LAST_OLD_BLOCK_VERSION).Tip();
|
||||||
BOOST_CHECK((ComputeBlockVersion(lastBlock, mainnetParams) & (1<<bit)) != 0);
|
BOOST_CHECK((ComputeBlockVersion(lastBlock, mainnetParams) & (1<<bit)) != 0);
|
||||||
nHeight += 1;
|
nHeight += 1;
|
||||||
|
@ -329,20 +331,20 @@ BOOST_AUTO_TEST_CASE(versionbits_computeblockversion)
|
||||||
|
|
||||||
// Mine one period worth of blocks, and check that the bit will be on for the
|
// Mine one period worth of blocks, and check that the bit will be on for the
|
||||||
// next period.
|
// next period.
|
||||||
lastBlock = secondChain.Mine(2016, nTime, VERSIONBITS_LAST_OLD_BLOCK_VERSION).Tip();
|
lastBlock = secondChain.Mine(period, nTime, VERSIONBITS_LAST_OLD_BLOCK_VERSION).Tip();
|
||||||
BOOST_CHECK((ComputeBlockVersion(lastBlock, mainnetParams) & (1<<bit)) != 0);
|
BOOST_CHECK((ComputeBlockVersion(lastBlock, mainnetParams) & (1<<bit)) != 0);
|
||||||
|
|
||||||
// Mine another period worth of blocks, signaling the new bit.
|
// Mine another period worth of blocks, signaling the new bit.
|
||||||
lastBlock = secondChain.Mine(4032, nTime, VERSIONBITS_TOP_BITS | (1<<bit)).Tip();
|
lastBlock = secondChain.Mine(period*2, nTime, VERSIONBITS_TOP_BITS | (1<<bit)).Tip();
|
||||||
// After one period of setting the bit on each block, it should have locked in.
|
// After one period of setting the bit on each block, it should have locked in.
|
||||||
// We keep setting the bit for one more period though, until activation.
|
// We keep setting the bit for one more period though, until activation.
|
||||||
BOOST_CHECK((ComputeBlockVersion(lastBlock, mainnetParams) & (1<<bit)) != 0);
|
BOOST_CHECK((ComputeBlockVersion(lastBlock, mainnetParams) & (1<<bit)) != 0);
|
||||||
|
|
||||||
// Now check that we keep mining the block until the end of this period, and
|
// Now check that we keep mining the block until the end of this period, and
|
||||||
// then stop at the beginning of the next period.
|
// then stop at the beginning of the next period.
|
||||||
lastBlock = secondChain.Mine(6047, nTime, VERSIONBITS_LAST_OLD_BLOCK_VERSION).Tip();
|
lastBlock = secondChain.Mine(period*3-1, nTime, VERSIONBITS_LAST_OLD_BLOCK_VERSION).Tip();
|
||||||
BOOST_CHECK((ComputeBlockVersion(lastBlock, mainnetParams) & (1<<bit)) != 0);
|
BOOST_CHECK((ComputeBlockVersion(lastBlock, mainnetParams) & (1<<bit)) != 0);
|
||||||
lastBlock = secondChain.Mine(6048, nTime, VERSIONBITS_LAST_OLD_BLOCK_VERSION).Tip();
|
lastBlock = secondChain.Mine(period*3, nTime, VERSIONBITS_LAST_OLD_BLOCK_VERSION).Tip();
|
||||||
BOOST_CHECK_EQUAL(ComputeBlockVersion(lastBlock, mainnetParams) & (1<<bit), 0);
|
BOOST_CHECK_EQUAL(ComputeBlockVersion(lastBlock, mainnetParams) & (1<<bit), 0);
|
||||||
|
|
||||||
// Finally, verify that after a soft fork has activated, CBV no longer uses
|
// Finally, verify that after a soft fork has activated, CBV no longer uses
|
||||||
|
|
|
@ -1456,21 +1456,11 @@ int ApplyTxInUndo(unsigned int index, CTxUndo& txUndo, CCoinsViewCache& view, CC
|
||||||
} else {
|
} else {
|
||||||
return DISCONNECT_FAILED; // adding output for transaction without known metadata
|
return DISCONNECT_FAILED; // adding output for transaction without known metadata
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: pick the above approach or this:
|
|
||||||
// what is more correct? the above AccessByTxid or this kind of lookup ?
|
|
||||||
// for (uint32_t i = index + 1; i < txUndo.vprevout.size(); ++i) {
|
|
||||||
// if (txUndo.vprevout[i].nHeight > 0) {
|
|
||||||
// assert(undo.nHeight == txUndo.vprevout[i].nHeight);
|
|
||||||
// assert(undo.fCoinBase == txUndo.vprevout[i].fCoinBase);
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// restore claim if applicable
|
// restore claim if applicable
|
||||||
if (undo.fIsClaim && !undo.txout.scriptPubKey.empty()) {
|
if (undo.fIsClaim && !undo.txout.scriptPubKey.empty()) {
|
||||||
int nValidHeight = static_cast<int>(undo.nClaimValidHeight);
|
auto nValidHeight = undo.nClaimValidHeight;
|
||||||
if (nValidHeight > 0 && nValidHeight >= undo.nHeight) {
|
if (nValidHeight > 0 && nValidHeight >= undo.nHeight) {
|
||||||
CClaimScriptUndoSpendOp undoSpend(COutPoint(out.hash, out.n), undo.txout.nValue, undo.nHeight, nValidHeight);
|
CClaimScriptUndoSpendOp undoSpend(COutPoint(out.hash, out.n), undo.txout.nValue, undo.nHeight, nValidHeight);
|
||||||
ProcessClaim(undoSpend, trieCache, undo.txout.scriptPubKey);
|
ProcessClaim(undoSpend, trieCache, undo.txout.scriptPubKey);
|
||||||
|
@ -2064,7 +2054,7 @@ bool CChainState::ConnectBlock(const CBlock& block, CValidationState& state, CBl
|
||||||
if (i > 0 && !mClaimUndoHeights.empty())
|
if (i > 0 && !mClaimUndoHeights.empty())
|
||||||
{
|
{
|
||||||
auto& txinUndos = blockundo.vtxundo.back().vprevout;
|
auto& txinUndos = blockundo.vtxundo.back().vprevout;
|
||||||
for (std::map<unsigned int, unsigned int>::iterator itHeight = mClaimUndoHeights.begin(); itHeight != mClaimUndoHeights.end(); ++itHeight)
|
for (auto itHeight = mClaimUndoHeights.begin(); itHeight != mClaimUndoHeights.end(); ++itHeight)
|
||||||
{
|
{
|
||||||
txinUndos[itHeight->first].nClaimValidHeight = itHeight->second;
|
txinUndos[itHeight->first].nClaimValidHeight = itHeight->second;
|
||||||
txinUndos[itHeight->first].fIsClaim = true;
|
txinUndos[itHeight->first].fIsClaim = true;
|
||||||
|
|
Loading…
Reference in a new issue