From: alex Date: Sat, 28 Sep 2013 13:35:46 +0000 (+0400) Subject: Remove legacy code, bump version number X-Git-Tag: v0.4.4.5~6 X-Git-Url: https://git.novaco.in/?p=novacoin.git;a=commitdiff_plain;h=7e9ceb798f2685429f3387625beb872bbda1567c Remove legacy code, bump version number Full changes list: * Don't check ECDSA signatures for PoW blocks ever, with exception for the first 9689 blocks; * Remove ECDSA signing related code from mining RPC APIs; * Trim leading zeros from the hex representation of trust score in the block dump functions; * Don't check lk_max_locks if compiled with USE_LEVELDB flag; * Add hash and stake modifier checkpoints for block #44200. --- diff --git a/src/checkpoints.cpp b/src/checkpoints.cpp index 2439d04..aeb1d92 100644 --- a/src/checkpoints.cpp +++ b/src/checkpoints.cpp @@ -43,6 +43,7 @@ namespace Checkpoints ( 9690, initCheckpoint(uint256("0x00000000026561450859c46868099e0df6068a538f038cb18988fd8d47dcdaf5"), 1362791423) ) ( 13560, initCheckpoint(uint256("0xa1591a0fcbf11f282d671581edb9f0aadcd06fee69761081e0a3245914c13729"), 1364674052) ) ( 37092, initCheckpoint(uint256("0x0000000000a38c2f98556f46793b453e92d8fab2d31c0b93fd08bcf78e56099d"), 1376677203) ) + ( 44200, initCheckpoint(uint256("0xc9bda7232a18b9c1f5ff974a9e5566b2d1879ceb8fc0e9e61fba9038a25b8447"), 1380145962) ) ; // TestNet has no checkpoints diff --git a/src/clientversion.h b/src/clientversion.h index bbaff9a..79da7b1 100644 --- a/src/clientversion.h +++ b/src/clientversion.h @@ -9,7 +9,7 @@ #define CLIENT_VERSION_MAJOR 0 #define CLIENT_VERSION_MINOR 7 #define CLIENT_VERSION_REVISION 5 -#define CLIENT_VERSION_BUILD 2 +#define CLIENT_VERSION_BUILD 3 // Converts the parameter X to a string after macro replacement on X has been performed. // Don't merge these into one macro! diff --git a/src/db.cpp b/src/db.cpp index 142952c..0a8c8be 100644 --- a/src/db.cpp +++ b/src/db.cpp @@ -111,6 +111,7 @@ bool CDBEnv::Open(boost::filesystem::path pathEnv_) fDbEnvInit = true; fMockDb = false; +#ifndef USE_LEVELDB // Check that the number of locks is sufficient (to prevent chain fork possibility, read http://bitcoin.org/may15 for more info) u_int32_t nMaxLocks; if (!dbenv.get_lk_max_locks(&nMaxLocks)) @@ -133,6 +134,7 @@ bool CDBEnv::Open(boost::filesystem::path pathEnv_) printf("*** %s\n", strMessage.c_str()); } } +#endif return true; } diff --git a/src/kernel.cpp b/src/kernel.cpp index 645905f..4b03c7f 100644 --- a/src/kernel.cpp +++ b/src/kernel.cpp @@ -21,6 +21,7 @@ static std::map mapStakeModifierCheckpoints = ( 9690, 0x97dcdafau ) ( 12661, 0x5d84115du ) ( 37092, 0xd230afccu ) + ( 44200, 0x05370164u ) ; // Hard checkpoints of stake modifiers to ensure they are deterministic (testNet) diff --git a/src/main.cpp b/src/main.cpp index 952fcfb..19f7992 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -476,9 +476,7 @@ bool CTransaction::CheckTransaction() const return DoS(100, error("CTransaction::CheckTransaction() : txout empty for user transaction")); // NovaCoin: enforce minimum output amount for user transactions - // (and for all transactions until 20 Sep 2013) - if ((!IsCoinBase() || nTime < CHAINCHECKS_SWITCH_TIME) - && (!txout.IsEmpty()) && txout.nValue < MIN_TXOUT_AMOUNT) + if (!IsCoinBase() && !txout.IsEmpty() && txout.nValue < MIN_TXOUT_AMOUNT) return DoS(100, error("CTransaction::CheckTransaction() : txout.nValue below minimum")); if (txout.nValue > MAX_MONEY) @@ -1063,11 +1061,7 @@ int64 GetProofOfStakeReward(int64 nCoinAge, unsigned int nBits, unsigned int nTi if(bCoinYearOnly) return nRewardCoinYear; - // Fix problem with proof-of-stake rewards calculation since 20 Sep 2013 - if(nTime < CHAINCHECKS_SWITCH_TIME) - nSubsidy = nCoinAge * 33 / (365 * 33 + 8) * nRewardCoinYear; - else - nSubsidy = nCoinAge * nRewardCoinYear * 33 / (365 * 33 + 8); + nSubsidy = nCoinAge * nRewardCoinYear * 33 / (365 * 33 + 8); // Set reasonable reward limit for large inputs since 20 Oct 2013 // @@ -2160,14 +2154,12 @@ bool CBlock::CheckBlock(bool fCheckPOW, bool fCheckMerkleRoot, bool fCheckSig) c } else { - // Coinbase fee paid until 20 Sep 2013 - int64 nFee = GetBlockTime() < CHAINCHECKS_SWITCH_TIME ? vtx[0].GetMinFee() - MIN_TX_FEE : 0; - + int64 nReward = GetProofOfWorkReward(nBits); // Check coinbase reward - if (vtx[0].GetValueOut() > (GetProofOfWorkReward(nBits) - nFee)) + if (vtx[0].GetValueOut() > nReward) return DoS(50, error("CheckBlock() : coinbase reward exceeded (actual=%"PRI64d" vs calculated=%"PRI64d")", vtx[0].GetValueOut(), - GetProofOfWorkReward(nBits) - nFee)); + nReward)); // Should we check proof-of-work block signature or not? // @@ -2177,12 +2169,10 @@ bool CBlock::CheckBlock(bool fCheckPOW, bool fCheckMerkleRoot, bool fCheckSig) c if(!fTestNet && fCheckSig) { - bool isAfterCheckpoint = (GetBlockTime() > Checkpoints::GetLastCheckpointTime()); bool checkEntropySig = (GetBlockTime() < ENTROPY_SWITCH_TIME); - bool checkPoWSig = (isAfterCheckpoint && GetBlockTime() < CHAINCHECKS_SWITCH_TIME); // NovaCoin: check proof-of-work block signature - if ((checkEntropySig || checkPoWSig) && !CheckBlockSignature(false)) + if (checkEntropySig && !CheckBlockSignature(false)) return DoS(100, error("CheckBlock() : bad proof-of-work block signature")); } } @@ -2304,12 +2294,6 @@ uint256 CBlockIndex::GetBlockTrust() const if (bnTarget <= 0) return 0; - /* Old protocol, will be removed later */ - if (!fTestNet && GetBlockTime() < CHAINCHECKS_SWITCH_TIME) - return (IsProofOfStake()? ((CBigNum(1)<<256) / (bnTarget+1)).getuint256() : 1); - - /* New protocol */ - // Calculate work amount for block uint256 nPoWTrust = (CBigNum(nPoWBase) / (bnTarget+1)).getuint256(); diff --git a/src/rpcblockchain.cpp b/src/rpcblockchain.cpp index 2226bbb..3d2aacd 100644 --- a/src/rpcblockchain.cpp +++ b/src/rpcblockchain.cpp @@ -108,8 +108,8 @@ Object blockToJSON(const CBlock& block, const CBlockIndex* blockindex, bool fPri result.push_back(Pair("nonce", (boost::uint64_t)block.nNonce)); result.push_back(Pair("bits", HexBits(block.nBits))); result.push_back(Pair("difficulty", GetDifficulty(blockindex))); - result.push_back(Pair("blocktrust", blockindex->GetBlockTrust().GetHex())); - result.push_back(Pair("chaintrust", blockindex->nChainTrust.GetHex())); + result.push_back(Pair("blocktrust", leftTrim(blockindex->GetBlockTrust().GetHex(), '0'))); + result.push_back(Pair("chaintrust", leftTrim(blockindex->nChainTrust.GetHex(), '0'))); if (blockindex->pprev) result.push_back(Pair("previousblockhash", blockindex->pprev->GetBlockHash().GetHex())); if (blockindex->pnext) @@ -138,7 +138,7 @@ Object blockToJSON(const CBlock& block, const CBlockIndex* blockindex, bool fPri result.push_back(Pair("tx", txinfo)); - if ( block.IsProofOfStake() || (!fTestNet && block.GetBlockTime() < CHAINCHECKS_SWITCH_TIME) ) + if ( block.IsProofOfStake() || (!fTestNet && block.GetBlockTime() < ENTROPY_SWITCH_TIME) ) result.push_back(Pair("signature", HexStr(block.vchBlockSig.begin(), block.vchBlockSig.end()))); return result; diff --git a/src/rpcmining.cpp b/src/rpcmining.cpp index 5866917..5d796fa 100644 --- a/src/rpcmining.cpp +++ b/src/rpcmining.cpp @@ -160,12 +160,6 @@ Value getworkex(const Array& params, bool fHelp) pblock->hashMerkleRoot = pblock->BuildMerkleTree(); - if (!fTestNet && pblock->GetBlockTime() < CHAINCHECKS_SWITCH_TIME) - { - if (!pblock->SignBlock(*pwalletMain)) - throw JSONRPCError(-100, "Unable to sign block, wallet locked?"); - } - return CheckWork(pblock, *pwalletMain, reservekey); } } @@ -279,12 +273,6 @@ Value getwork(const Array& params, bool fHelp) pblock->vtx[0].vin[0].scriptSig = mapNewBlock[pdata->hashMerkleRoot].second; pblock->hashMerkleRoot = pblock->BuildMerkleTree(); - if (!fTestNet && pblock->GetBlockTime() < CHAINCHECKS_SWITCH_TIME) - { - if (!pblock->SignBlock(*pwalletMain)) - throw JSONRPCError(-100, "Unable to sign block, wallet locked?"); - } - return CheckWork(pblock, *pwalletMain, reservekey); } } @@ -466,12 +454,6 @@ Value submitblock(const Array& params, bool fHelp) throw JSONRPCError(RPC_DESERIALIZATION_ERROR, "Block decode failed"); } - if (!fTestNet && block.GetBlockTime() < CHAINCHECKS_SWITCH_TIME) - { - if (!block.SignBlock(*pwalletMain)) - throw JSONRPCError(-100, "Unable to sign block, wallet locked?"); - } - bool fAccepted = ProcessBlock(NULL, &block); if (!fAccepted) return "rejected"; diff --git a/src/util.h b/src/util.h index 8168216..d4d0ea2 100644 --- a/src/util.h +++ b/src/util.h @@ -291,6 +291,16 @@ inline int64 abs64(int64 n) return (n >= 0 ? n : -n); } +inline std::string leftTrim(std::string src, char chr) +{ + std::string::size_type pos = src.find_first_not_of(chr, 0); + + if(pos > 0) + src.erase(0, pos); + + return src; +} + template std::string HexStr(const T itbegin, const T itend, bool fSpaces=false) { diff --git a/src/version.h b/src/version.h index c579dfb..ee0a666 100644 --- a/src/version.h +++ b/src/version.h @@ -25,7 +25,7 @@ extern const std::string CLIENT_DATE; // network protocol versioning // -static const int PROTOCOL_VERSION = 60009; +static const int PROTOCOL_VERSION = 60010; // earlier versions not supported as of Feb 2012, and are disconnected static const int MIN_PROTO_VERSION = 209; @@ -47,6 +47,6 @@ static const int MEMPOOL_GD_VERSION = 60002; #define DISPLAY_VERSION_MAJOR 0 #define DISPLAY_VERSION_MINOR 4 #define DISPLAY_VERSION_REVISION 4 -#define DISPLAY_VERSION_BUILD 4 +#define DISPLAY_VERSION_BUILD 5 #endif