Get staking parameters from chainparams.cpp
nStakeTimestampMask, nStakeMinConfirmations, nStakeMinAge
This commit is contained in:
@@ -101,7 +101,9 @@ public:
|
||||
consensus.nProtocolV2Time = 1407053625;
|
||||
consensus.nProtocolV3Time = 1444028400;
|
||||
consensus.nLastPOWBlock = 10000;
|
||||
consensus.nStakeTimestampMask = 0xf;
|
||||
consensus.nStakeTimestampMask = 0xf; // 15
|
||||
consensus.nStakeMinConfirmations = 500;
|
||||
consensus.nStakeMinAge = 8 * 60 * 60; // 8 hours
|
||||
|
||||
/**
|
||||
* The message start string is designed to be unlikely to occur in normal data.
|
||||
|
||||
@@ -70,6 +70,8 @@ struct Params {
|
||||
unsigned int GetTargetSpacing(int nHeight) { return IsProtocolV2(nHeight) ? 64 : 60; }
|
||||
int nLastPOWBlock;
|
||||
int nStakeTimestampMask;
|
||||
int nStakeMinConfirmations;
|
||||
unsigned int nStakeMinAge;
|
||||
};
|
||||
} // namespace Consensus
|
||||
|
||||
|
||||
@@ -3437,7 +3437,7 @@ bool GetCoinAge(const CTransaction& tx, CBlockTreeDB& txdb, const CBlockIndex* p
|
||||
if (Params().GetConsensus().IsProtocolV3(tx.nTime))
|
||||
{
|
||||
int nSpendDepth;
|
||||
if (IsConfirmedInNPrevBlocks(txindex, pindexPrev, nStakeMinConfirmations - 1, nSpendDepth))
|
||||
if (IsConfirmedInNPrevBlocks(txindex, pindexPrev, Params().GetConsensus().nStakeMinConfirmations - 1, nSpendDepth))
|
||||
{
|
||||
LogPrint("coinage", "coin age skip nSpendDepth=%d\n", nSpendDepth + 1);
|
||||
continue; // only count coins meeting min confirmations requirement
|
||||
@@ -3450,7 +3450,7 @@ bool GetCoinAge(const CTransaction& tx, CBlockTreeDB& txdb, const CBlockIndex* p
|
||||
const CDiskBlockPos& pos = CDiskBlockPos(txindex.nFile, txindex.nPos);
|
||||
if (!ReadBlockFromDisk(block, pos, Params().GetConsensus()))
|
||||
return false; // unable to read block of previous transaction
|
||||
if (block.GetBlockTime() + nStakeMinAge > tx.nTime)
|
||||
if (block.GetBlockTime() + Params().GetConsensus().nStakeMinAge > tx.nTime)
|
||||
continue; // only count coins meeting min age requirement
|
||||
}
|
||||
|
||||
|
||||
@@ -417,7 +417,7 @@ void static BitcoinMiner(const CChainParams& chainparams)
|
||||
}
|
||||
|
||||
//check the block height
|
||||
if (chainActive.Tip()->nHeight > Params().LastPOWBlock() + nStakeMinConfirmations)
|
||||
if (chainActive.Tip()->nHeight > Params().LastPOWBlock() + Params().GetConsensus().nStakeMinConfirmations)
|
||||
{
|
||||
// The stake is confirmed, stop the PoW miner
|
||||
throw boost::thread_interrupted();
|
||||
@@ -568,7 +568,7 @@ bool SignBlock(CBlock& block, CWallet& wallet, int64_t& nFees)
|
||||
CMutableTransaction txCoinBase(block.vtx[0]);
|
||||
CMutableTransaction txCoinStake;
|
||||
txCoinStake.nTime = GetAdjustedTime();
|
||||
txCoinStake.nTime &= ~STAKE_TIMESTAMP_MASK;
|
||||
txCoinStake.nTime &= ~Params().GetConsensus().nStakeTimestampMask;
|
||||
|
||||
int64_t nSearchTime = txCoinStake.nTime; // search to current time
|
||||
|
||||
|
||||
@@ -132,7 +132,7 @@ bool CheckProofOfStake(CBlockIndex* pindexPrev, const CTransaction& tx, unsigned
|
||||
|
||||
// Min age requirement
|
||||
int nDepth;
|
||||
if (IsConfirmedInNPrevBlocks(txindex, pindexPrev, nStakeMinConfirmations - 1, nDepth))
|
||||
if (IsConfirmedInNPrevBlocks(txindex, pindexPrev, Params().GetConsensus().nStakeMinConfirmations - 1, nDepth))
|
||||
return state.DoS(100, error("CheckProofOfStake() : tried to stake at depth %d", nDepth + 1));
|
||||
|
||||
if (!CheckStakeKernelHash(pindexPrev, nBits, new CCoins(txPrev, pindexPrev->nHeight), txin.prevout, tx.nTime))
|
||||
|
||||
@@ -21,12 +21,6 @@ using namespace std;
|
||||
/** Compute the hash modifier for proof-of-stake */
|
||||
uint256 ComputeStakeModifier(const CBlockIndex* pindexPrev, const uint256& kernel);
|
||||
|
||||
static const int nStakeMinConfirmations = 500;
|
||||
static const unsigned int nStakeMinAge = 8 * 60 * 60; // 8 hours
|
||||
// To decrease granularity of timestamp
|
||||
// Supposed to be 2^n-1
|
||||
static const int STAKE_TIMESTAMP_MASK = 15;
|
||||
|
||||
// Check whether the coinstake timestamp meets protocol
|
||||
bool CheckCoinStakeTimestamp(int64_t nTimeBlock, int64_t nTimeTx);
|
||||
bool CheckStakeBlockTimestamp(int64_t nTimeBlock);
|
||||
|
||||
@@ -769,7 +769,7 @@ UniValue checkkernel(const UniValue& params, bool fHelp)
|
||||
CBlockHeader blockHeader = pindexPrev->GetBlockHeader();
|
||||
unsigned int nBits = GetNextTargetRequired(pindexPrev, &blockHeader, true, Params().GetConsensus());
|
||||
int64_t nTime = GetAdjustedTime();
|
||||
nTime &= ~STAKE_TIMESTAMP_MASK;
|
||||
nTime &= ~Params().GetConsensus().nStakeTimestampMask;
|
||||
|
||||
for (unsigned int idx = 0; idx < inputs.size(); idx++) {
|
||||
const UniValue& input = inputs[idx];
|
||||
|
||||
@@ -580,7 +580,7 @@ void CWallet::AvailableCoinsForStaking(std::vector<COutput>& vCoins) const
|
||||
if (nDepth < 1)
|
||||
continue;
|
||||
|
||||
if (nDepth < nStakeMinConfirmations)
|
||||
if (nDepth < Params().GetConsensus().nStakeMinConfirmations)
|
||||
continue;
|
||||
|
||||
if (pcoin->GetBlocksToMaturity() > 0)
|
||||
@@ -654,7 +654,7 @@ bool CheckKernel(CBlockIndex* pindexPrev, unsigned int nBits, int64_t nTime, con
|
||||
return false;
|
||||
|
||||
int nDepth;
|
||||
if (IsConfirmedInNPrevBlocks(txindex, pindexPrev, nStakeMinConfirmations - 1, nDepth))
|
||||
if (IsConfirmedInNPrevBlocks(txindex, pindexPrev, Params().GetConsensus().nStakeMinConfirmations - 1, nDepth))
|
||||
return false;
|
||||
|
||||
if (pBlockTime)
|
||||
@@ -3315,7 +3315,7 @@ uint64_t CWallet::GetStakeWeight() const
|
||||
LOCK2(cs_main, cs_wallet);
|
||||
BOOST_FOREACH(PAIRTYPE(const CWalletTx*, unsigned int) pcoin, setCoins)
|
||||
{
|
||||
if (pcoin.first->GetDepthInMainChain() >= nStakeMinConfirmations)
|
||||
if (pcoin.first->GetDepthInMainChain() >= Params().GetConsensus().nStakeMinConfirmations)
|
||||
nWeight += pcoin.first->vout[pcoin.second].nValue;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user