Fix incorrect validations of block transactions
This commit is contained in:
@@ -267,6 +267,14 @@ public:
|
|||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int64_t TotalTxValue() const {
|
||||||
|
int64_t total = 0;
|
||||||
|
BOOST_FOREACH(const CTxOut &out, vout) {
|
||||||
|
total += out.nValue;
|
||||||
|
}
|
||||||
|
return total;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class CCoinsKeyHasher
|
class CCoinsKeyHasher
|
||||||
|
|||||||
29
src/main.cpp
29
src/main.cpp
@@ -2057,9 +2057,9 @@ namespace Consensus {
|
|||||||
REJECT_INVALID, "bad-txns-premature-spend-of-coinbase");
|
REJECT_INVALID, "bad-txns-premature-spend-of-coinbase");
|
||||||
}
|
}
|
||||||
|
|
||||||
// ensure that zeroth output of coinbases are not still time locked
|
// ensure that output of coinbases are not still time locked
|
||||||
uint64_t unlockTime = tx.UnlockTime(0);
|
uint64_t unlockTime = komodo_block_unlocktime(coins->nHeight);
|
||||||
if (nSpendHeight >= unlockTime) {
|
if (nSpendHeight < unlockTime && coins->TotalTxValue() >= ASSETCHAINS_TIMELOCKGTE) {
|
||||||
return state.Invalid(
|
return state.Invalid(
|
||||||
error("CheckInputs(): tried to spend coinbase that is timelocked until block %d", unlockTime),
|
error("CheckInputs(): tried to spend coinbase that is timelocked until block %d", unlockTime),
|
||||||
REJECT_INVALID, "bad-txns-premature-spend-of-coinbase");
|
REJECT_INVALID, "bad-txns-premature-spend-of-coinbase");
|
||||||
@@ -2563,17 +2563,20 @@ void PartitionCheck(bool (*initialDownloadCheck)(), CCriticalSection& cs, const
|
|||||||
const int FIFTY_YEARS = 50*365*24*60*60;
|
const int FIFTY_YEARS = 50*365*24*60*60;
|
||||||
double alertThreshold = 1.0 / (FIFTY_YEARS / SPAN_SECONDS);
|
double alertThreshold = 1.0 / (FIFTY_YEARS / SPAN_SECONDS);
|
||||||
|
|
||||||
if (p <= alertThreshold && nBlocks < BLOCKS_EXPECTED)
|
if (bestHeader->nHeight > BLOCKS_EXPECTED)
|
||||||
{
|
{
|
||||||
// Many fewer blocks than expected: alert!
|
if (p <= alertThreshold && nBlocks < BLOCKS_EXPECTED)
|
||||||
strWarning = strprintf(_("WARNING: check your network connection, %d blocks received in the last %d hours (%d expected)"),
|
{
|
||||||
nBlocks, SPAN_HOURS, BLOCKS_EXPECTED);
|
// Many fewer blocks than expected: alert!
|
||||||
}
|
strWarning = strprintf(_("WARNING: check your network connection, %d blocks received in the last %d hours (%d expected)"),
|
||||||
else if (p <= alertThreshold && nBlocks > BLOCKS_EXPECTED)
|
nBlocks, SPAN_HOURS, BLOCKS_EXPECTED);
|
||||||
{
|
}
|
||||||
// Many more blocks than expected: alert!
|
else if (p <= alertThreshold && nBlocks > BLOCKS_EXPECTED)
|
||||||
strWarning = strprintf(_("WARNING: abnormally high number of blocks generated, %d blocks received in the last %d hours (%d expected)"),
|
{
|
||||||
nBlocks, SPAN_HOURS, BLOCKS_EXPECTED);
|
// Many more blocks than expected: alert!
|
||||||
|
strWarning = strprintf(_("WARNING: abnormally high number of blocks generated, %d blocks received in the last %d hours (%d expected)"),
|
||||||
|
nBlocks, SPAN_HOURS, BLOCKS_EXPECTED);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!strWarning.empty())
|
if (!strWarning.empty())
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -792,21 +792,9 @@ void static BitcoinMiner_noeq()
|
|||||||
fprintf(stderr,"Mining %s with %s\n", ASSETCHAINS_SYMBOL, ASSETCHAINS_ALGORITHMS[ASSETCHAINS_ALGO]);
|
fprintf(stderr,"Mining %s with %s\n", ASSETCHAINS_SYMBOL, ASSETCHAINS_ALGORITHMS[ASSETCHAINS_ALGO]);
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
if (chainparams.MiningRequiresPeers())
|
miningTimer.stop();
|
||||||
{
|
waitForPeers(chainparams);
|
||||||
miningTimer.stop();
|
miningTimer.start();
|
||||||
do {
|
|
||||||
bool fvNodesEmpty;
|
|
||||||
{
|
|
||||||
LOCK(cs_vNodes);
|
|
||||||
fvNodesEmpty = vNodes.empty();
|
|
||||||
}
|
|
||||||
if (!fvNodesEmpty )
|
|
||||||
break;
|
|
||||||
MilliSleep(1000);
|
|
||||||
} while (true);
|
|
||||||
miningTimer.start();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create new block
|
// Create new block
|
||||||
unsigned int nTransactionsUpdatedLast = mempool.GetTransactionsUpdated();
|
unsigned int nTransactionsUpdatedLast = mempool.GetTransactionsUpdated();
|
||||||
|
|||||||
Reference in New Issue
Block a user