// Settings
int64_t nTransactionFee = MIN_TX_FEE;
-int64_t nMinimumInputValue = MIN_TX_FEE;
+int64_t nMinimumInputValue = MIN_TXOUT_AMOUNT;
// Ping and address broadcast intervals
int64_t nPingInterval = 30 * 60;
BOOST_FOREACH(CWallet* pwallet, setpwalletRegistered)
pwallet->AddToWalletIfInvolvingMe(tx, pblock, fUpdate);
- // Preloaded coins cache invalidation
- fCoinsDataActual = false;
}
// notify wallets about a new best chain
// Human readable form:
//
// nSubsidy = 100 / (diff ^ 1/6)
+ //
+ // Please note that we're using bisection to find an approximate solutuion
CBigNum bnLowerBound = CENT;
CBigNum bnUpperBound = bnSubsidyLimit;
while (bnLowerBound + CENT <= bnUpperBound)
{
CBigNum bnMidValue = (bnLowerBound + bnUpperBound) / 2;
- if (fDebug && GetBoolArg("-printcreation"))
- printf("GetProofOfWorkReward() : lower=%" PRId64 " upper=%" PRId64 " mid=%" PRId64 "\n", bnLowerBound.getuint64(), bnUpperBound.getuint64(), bnMidValue.getuint64());
if (bnMidValue * bnMidValue * bnMidValue * bnMidValue * bnMidValue * bnMidValue * bnTargetLimit > bnSubsidyLimit * bnSubsidyLimit * bnSubsidyLimit * bnSubsidyLimit * bnSubsidyLimit * bnSubsidyLimit * bnTarget)
bnUpperBound = bnMidValue;
else
while (bnLowerBound + CENT <= bnUpperBound)
{
CBigNum bnMidValue = (bnLowerBound + bnUpperBound) / 2;
- if (fDebug && GetBoolArg("-printcreation"))
- printf("GetProofOfStakeReward() : lower=%" PRId64 " upper=%" PRId64 " mid=%" PRId64 "\n", bnLowerBound.getuint64(), bnUpperBound.getuint64(), bnMidValue.getuint64());
-
if(!fTestNet && nTime < STAKECURVE_SWITCH_TIME)
{
//
return true;
}
-// novacoin: attempt to generate suitable proof-of-stake
-bool CBlock::SignBlock(CWallet& wallet)
-{
- // if we are trying to sign
- // something except proof-of-stake block template
- if (!vtx[0].vout[0].IsEmpty())
- return false;
-
- // if we are trying to sign
- // a complete proof-of-stake block
- if (IsProofOfStake())
- return true;
-
- static uint32_t nLastCoinStakeSearchTime = GetAdjustedTime(); // startup timestamp
-
- CKey key;
- CTransaction txCoinStake;
- uint32_t nSearchTime = txCoinStake.nTime; // search to current time
-
- if (nSearchTime > nLastCoinStakeSearchTime)
- {
- if (wallet.CreateCoinStake(wallet, nBits, nSearchTime-nLastCoinStakeSearchTime, txCoinStake, key))
- {
- if (txCoinStake.nTime >= max(pindexBest->GetMedianTimePast()+1, PastDrift(pindexBest->GetBlockTime())))
- {
- // make sure coinstake would meet timestamp protocol
- // as it would be the same as the block timestamp
- vtx[0].nTime = nTime = txCoinStake.nTime;
- nTime = max(pindexBest->GetMedianTimePast()+1, GetMaxTransactionTime());
- nTime = max(GetBlockTime(), PastDrift(pindexBest->GetBlockTime()));
-
- // we have to make sure that we have no future timestamps in
- // our transactions set
- for (vector<CTransaction>::iterator it = vtx.begin(); it != vtx.end();)
- if (it->nTime > nTime) { it = vtx.erase(it); } else { ++it; }
-
- vtx.insert(vtx.begin() + 1, txCoinStake);
- hashMerkleRoot = BuildMerkleTree();
-
- // append a signature to our block
- return key.Sign(GetHash(), vchBlockSig);
- }
- }
- nLastCoinStakeSearchInterval = nSearchTime - nLastCoinStakeSearchTime;
- nLastCoinStakeSearchTime = nSearchTime;
- }
-
- return false;
-}
-
// ppcoin: check block signature
bool CBlock::CheckBlockSignature() const
{
}
return true;
}
+
+
+class CMainCleanup
+{
+public:
+ CMainCleanup() {}
+ ~CMainCleanup() {
+ // block headers
+ std::map<uint256, CBlockIndex*>::iterator it1 = mapBlockIndex.begin();
+ for (; it1 != mapBlockIndex.end(); it1++)
+ delete (*it1).second;
+ mapBlockIndex.clear();
+
+ // orphan blocks
+ std::map<uint256, CBlock*>::iterator it2 = mapOrphanBlocks.begin();
+ for (; it2 != mapOrphanBlocks.end(); it2++)
+ delete (*it2).second;
+ mapOrphanBlocks.clear();
+
+ // orphan transactions
+ }
+} instance_of_cmaincleanup;
\ No newline at end of file