|
|
@ -1269,7 +1269,7 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa |
|
|
|
} |
|
|
|
|
|
|
|
auto verifier = libzcash::ProofVerifier::Strict(); |
|
|
|
if ( komodo_validate_interest(tx,chainActive.Tip()->nHeight+1,chainActive.Tip()->GetMedianTimePast() + 777,0) < 0 ) |
|
|
|
if ( komodo_validate_interest(tx,chainActive.LastTip()->nHeight+1,chainActive.LastTip()->GetMedianTimePast() + 777,0) < 0 ) |
|
|
|
{ |
|
|
|
//fprintf(stderr,"AcceptToMemoryPool komodo_validate_interest failure\n");
|
|
|
|
return error("AcceptToMemoryPool: komodo_validate_interest failed"); |
|
|
@ -1399,7 +1399,7 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa |
|
|
|
// Bring the best block into scope
|
|
|
|
view.GetBestBlock(); |
|
|
|
|
|
|
|
nValueIn = view.GetValueIn(chainActive.Tip()->nHeight,&interest,tx,chainActive.Tip()->nTime); |
|
|
|
nValueIn = view.GetValueIn(chainActive.LastTip()->nHeight,&interest,tx,chainActive.LastTip()->nTime); |
|
|
|
if ( 0 && interest != 0 ) |
|
|
|
fprintf(stderr,"add interest %.8f\n",(double)interest/COIN); |
|
|
|
// we have all inputs cached now, so switch back to dummy, so we don't need to keep lock on mempool
|
|
|
@ -1891,7 +1891,7 @@ void CheckForkWarningConditions() |
|
|
|
if (pindexBestForkTip && chainActive.Height() - pindexBestForkTip->nHeight >= 288) |
|
|
|
pindexBestForkTip = NULL; |
|
|
|
|
|
|
|
if (pindexBestForkTip || (pindexBestInvalid && pindexBestInvalid->nChainWork > chainActive.Tip()->nChainWork + (GetBlockProof(*chainActive.Tip()) * 6))) |
|
|
|
if (pindexBestForkTip || (pindexBestInvalid && pindexBestInvalid->nChainWork > chainActive.LastTip()->nChainWork + (GetBlockProof(*chainActive.LastTip()) * 6))) |
|
|
|
{ |
|
|
|
if (!fLargeWorkForkFound && pindexBestForkBase) |
|
|
|
{ |
|
|
@ -1926,7 +1926,7 @@ void CheckForkWarningConditionsOnNewFork(CBlockIndex* pindexNewForkTip) |
|
|
|
AssertLockHeld(cs_main); |
|
|
|
// If we are on a fork that is sufficiently large, set a warning flag
|
|
|
|
CBlockIndex* pfork = pindexNewForkTip; |
|
|
|
CBlockIndex* plonger = chainActive.Tip(); |
|
|
|
CBlockIndex* plonger = chainActive.LastTip(); |
|
|
|
while (pfork && pfork != plonger) |
|
|
|
{ |
|
|
|
while (plonger && plonger->nHeight > pfork->nHeight) |
|
|
@ -1983,7 +1983,7 @@ void static InvalidChainFound(CBlockIndex* pindexNew) |
|
|
|
pindexNew->GetBlockHash().ToString(), pindexNew->nHeight, |
|
|
|
log(pindexNew->nChainWork.getdouble())/log(2.0), DateTimeStrFormat("%Y-%m-%d %H:%M:%S", |
|
|
|
pindexNew->GetBlockTime())); |
|
|
|
CBlockIndex *tip = chainActive.Tip(); |
|
|
|
CBlockIndex *tip = chainActive.LastTip(); |
|
|
|
assert (tip); |
|
|
|
LogPrintf("%s: current best=%s height=%d log2_work=%.8g date=%s\n", __func__, |
|
|
|
tip->GetBlockHash().ToString(), chainActive.Height(), log(tip->nChainWork.getdouble())/log(2.0), |
|
|
@ -2111,14 +2111,14 @@ namespace Consensus { |
|
|
|
// Check for negative or overflow input values
|
|
|
|
nValueIn += coins->vout[prevout.n].nValue; |
|
|
|
#ifdef KOMODO_ENABLE_INTEREST |
|
|
|
if ( ASSETCHAINS_SYMBOL[0] == 0 && nSpendHeight > 60000 )//chainActive.Tip() != 0 && chainActive.Tip()->nHeight >= 60000 )
|
|
|
|
if ( ASSETCHAINS_SYMBOL[0] == 0 && nSpendHeight > 60000 )//chainActive.LastTip() != 0 && chainActive.LastTip()->nHeight >= 60000 )
|
|
|
|
{ |
|
|
|
if ( coins->vout[prevout.n].nValue >= 10*COIN ) |
|
|
|
{ |
|
|
|
int64_t interest; int32_t txheight; uint32_t locktime; |
|
|
|
if ( (interest= komodo_accrued_interest(&txheight,&locktime,prevout.hash,prevout.n,0,coins->vout[prevout.n].nValue,(int32_t)nSpendHeight-1)) != 0 ) |
|
|
|
{ |
|
|
|
//fprintf(stderr,"checkResult %.8f += val %.8f interest %.8f ht.%d lock.%u tip.%u\n",(double)nValueIn/COIN,(double)coins->vout[prevout.n].nValue/COIN,(double)interest/COIN,txheight,locktime,chainActive.Tip()->nTime);
|
|
|
|
//fprintf(stderr,"checkResult %.8f += val %.8f interest %.8f ht.%d lock.%u tip.%u\n",(double)nValueIn/COIN,(double)coins->vout[prevout.n].nValue/COIN,(double)interest/COIN,txheight,locktime,chainActive.LastTip()->nTime);
|
|
|
|
nValueIn += interest; |
|
|
|
} |
|
|
|
} |
|
|
@ -2868,7 +2868,7 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin |
|
|
|
|
|
|
|
if (!tx.IsCoinBase()) |
|
|
|
{ |
|
|
|
nFees += view.GetValueIn(chainActive.Tip()->nHeight,&interest,tx,chainActive.Tip()->nTime) - tx.GetValueOut(); |
|
|
|
nFees += view.GetValueIn(chainActive.LastTip()->nHeight,&interest,tx,chainActive.LastTip()->nTime) - tx.GetValueOut(); |
|
|
|
sum += interest; |
|
|
|
|
|
|
|
std::vector<CScriptCheck> vChecks; |
|
|
@ -3197,16 +3197,16 @@ void static UpdateTip(CBlockIndex *pindexNew) { |
|
|
|
KOMODO_NEWBLOCKS++; |
|
|
|
double progress; |
|
|
|
if ( ASSETCHAINS_SYMBOL[0] == 0 ) { |
|
|
|
progress = Checkpoints::GuessVerificationProgress(chainParams.Checkpoints(), chainActive.Tip()); |
|
|
|
progress = Checkpoints::GuessVerificationProgress(chainParams.Checkpoints(), chainActive.LastTip()); |
|
|
|
} else { |
|
|
|
int32_t longestchain = komodo_longestchain(); |
|
|
|
progress = (longestchain > 0 ) ? (double) chainActive.Height() / longestchain : 1.0; |
|
|
|
} |
|
|
|
|
|
|
|
LogPrintf("%s: new best=%s height=%d log2_work=%.8g tx=%lu date=%s progress=%f cache=%.1fMiB(%utx)\n", __func__, |
|
|
|
chainActive.Tip()->GetBlockHash().ToString(), chainActive.Height(), |
|
|
|
log(chainActive.Tip()->nChainWork.getdouble())/log(2.0), (unsigned long)chainActive.Tip()->nChainTx, |
|
|
|
DateTimeStrFormat("%Y-%m-%d %H:%M:%S", chainActive.Tip()->GetBlockTime()), progress, |
|
|
|
chainActive.LastTip()->GetBlockHash().ToString(), chainActive.Height(), |
|
|
|
log(chainActive.Tip()->nChainWork.getdouble())/log(2.0), (unsigned long)chainActive.LastTip()->nChainTx, |
|
|
|
DateTimeStrFormat("%Y-%m-%d %H:%M:%S", chainActive.LastTip()->GetBlockTime()), progress, |
|
|
|
pcoinsTip->DynamicMemoryUsage() * (1.0 / (1<<20)), pcoinsTip->GetCacheSize()); |
|
|
|
|
|
|
|
cvBlockChange.notify_all(); |
|
|
@ -3455,7 +3455,7 @@ static void PruneBlockIndexCandidates() { |
|
|
|
// Note that we can't delete the current block itself, as we may need to return to it later in case a
|
|
|
|
// reorganization to a better block fails.
|
|
|
|
std::set<CBlockIndex*, CBlockIndexWorkComparator>::iterator it = setBlockIndexCandidates.begin(); |
|
|
|
while (it != setBlockIndexCandidates.end() && setBlockIndexCandidates.value_comp()(*it, chainActive.Tip())) { |
|
|
|
while (it != setBlockIndexCandidates.end() && setBlockIndexCandidates.value_comp()(*it, chainActive.LastTip())) { |
|
|
|
setBlockIndexCandidates.erase(it++); |
|
|
|
} |
|
|
|
// Either the current tip or a successor of it we're working towards is left in setBlockIndexCandidates.
|
|
|
@ -3507,8 +3507,8 @@ static bool ActivateBestChainStep(CValidationState &state, CBlockIndex *pindexMo |
|
|
|
if ( KOMODO_REWIND != 0 ) |
|
|
|
{ |
|
|
|
CBlockIndex *tipindex; |
|
|
|
fprintf(stderr,">>>>>>>>>>> rewind start ht.%d -> KOMODO_REWIND.%d\n",chainActive.Tip()->nHeight,KOMODO_REWIND); |
|
|
|
while ( KOMODO_REWIND > 0 && (tipindex= chainActive.Tip()) != 0 && tipindex->nHeight > KOMODO_REWIND ) |
|
|
|
fprintf(stderr,">>>>>>>>>>> rewind start ht.%d -> KOMODO_REWIND.%d\n",chainActive.LastTip()->nHeight,KOMODO_REWIND); |
|
|
|
while ( KOMODO_REWIND > 0 && (tipindex= chainActive.LastTip()) != 0 && tipindex->nHeight > KOMODO_REWIND ) |
|
|
|
{ |
|
|
|
fBlocksDisconnected = true; |
|
|
|
fprintf(stderr,"%d ",(int32_t)tipindex->nHeight); |
|
|
@ -3922,9 +3922,9 @@ bool CheckBlockHeader(int32_t *futureblockp,int32_t height,CBlockIndex *pindex, |
|
|
|
for (i=31; i>=0; i--) |
|
|
|
fprintf(stderr,"%02x",((uint8_t *)&hash)[i]); |
|
|
|
fprintf(stderr," <- CheckBlockHeader\n"); |
|
|
|
if ( chainActive.Tip() != 0 ) |
|
|
|
if ( chainActive.LastTip() != 0 ) |
|
|
|
{ |
|
|
|
hash = chainActive.Tip()->GetBlockHash(); |
|
|
|
hash = chainActive.LastTip()->GetBlockHash(); |
|
|
|
for (i=31; i>=0; i--) |
|
|
|
fprintf(stderr,"%02x",((uint8_t *)&hash)[i]); |
|
|
|
fprintf(stderr," <- chainTip\n"); |
|
|
@ -4103,7 +4103,7 @@ bool ContextualCheckBlockHeader(const CBlockHeader& block, CValidationState& sta |
|
|
|
// Don't accept any forks from the main chain prior to last checkpoint
|
|
|
|
CBlockIndex* pcheckpoint = Checkpoints::GetLastCheckpoint(chainParams.Checkpoints()); |
|
|
|
int32_t notarized_height; |
|
|
|
if ( nHeight == 1 && chainActive.Tip() != 0 && chainActive.Tip()->nHeight > 1 ) |
|
|
|
if ( nHeight == 1 && chainActive.LastTip() != 0 && chainActive.LastTip()->nHeight > 1 ) |
|
|
|
{ |
|
|
|
CBlockIndex *heightblock = chainActive[nHeight]; |
|
|
|
if ( heightblock != 0 && heightblock->GetBlockHash() == hash ) |
|
|
@ -4440,8 +4440,8 @@ bool ProcessNewBlock(bool from_miner,int32_t height,CValidationState &state, CNo |
|
|
|
auto verifier = libzcash::ProofVerifier::Disabled(); |
|
|
|
hash = pblock->GetHash(); |
|
|
|
|
|
|
|
if ( chainActive.Tip() != 0 ) |
|
|
|
komodo_currentheight_set(chainActive.Tip()->nHeight); |
|
|
|
if ( chainActive.LastTip() != 0 ) |
|
|
|
komodo_currentheight_set(chainActive.LastTip()->nHeight); |
|
|
|
checked = CheckBlock(&futureblock,height!=0?height:komodo_block2height(pblock),0,*pblock, state, verifier,0); |
|
|
|
{ |
|
|
|
LOCK(cs_main); |
|
|
@ -4871,8 +4871,8 @@ bool static LoadBlockIndexDB() |
|
|
|
} |
|
|
|
|
|
|
|
LogPrintf("%s: hashBestChain=%s height=%d date=%s progress=%f\n", __func__, |
|
|
|
chainActive.Tip()->GetBlockHash().ToString(), chainActive.Height(), |
|
|
|
DateTimeStrFormat("%Y-%m-%d %H:%M:%S", chainActive.Tip()->GetBlockTime()), |
|
|
|
chainActive.LastTip()->GetBlockHash().ToString(), chainActive.Height(), |
|
|
|
DateTimeStrFormat("%Y-%m-%d %H:%M:%S", chainActive.LastTip()->GetBlockTime()), |
|
|
|
progress); |
|
|
|
|
|
|
|
EnforceNodeDeprecation(chainActive.Height(), true); |
|
|
|