Changeset View
Standalone View
src/validation.cpp
Show First 20 Lines • Show All 1,226 Lines • ▼ Show 20 Lines | bool CheckInputs(const CTransaction &tx, CValidationState &state, | ||||
if (!fScriptChecks) { | if (!fScriptChecks) { | ||||
return true; | return true; | ||||
} | } | ||||
// First check if script executions have been cached with the same flags. | // First check if script executions have been cached with the same flags. | ||||
// Note that this assumes that the inputs provided are correct (ie that the | // Note that this assumes that the inputs provided are correct (ie that the | ||||
// transaction hash which is in tx's prevouts properly commits to the | // transaction hash which is in tx's prevouts properly commits to the | ||||
// scriptPubKey in the inputs view of that transaction). | // scriptPubKey in the inputs view of that transaction). | ||||
uint256 hashCacheEntry = GetScriptCacheKey(tx, flags); | int nSigChecksDummy; | ||||
if (IsKeyInScriptCache(hashCacheEntry, !scriptCacheStore)) { | ScriptCacheKey hashCacheEntry = GetScriptCacheKey(tx, flags); | ||||
if (IsKeyInScriptCache(hashCacheEntry, !scriptCacheStore, | |||||
nSigChecksDummy)) { | |||||
return true; | return true; | ||||
} | } | ||||
for (size_t i = 0; i < tx.vin.size(); i++) { | for (size_t i = 0; i < tx.vin.size(); i++) { | ||||
const COutPoint &prevout = tx.vin[i].prevout; | const COutPoint &prevout = tx.vin[i].prevout; | ||||
const Coin &coin = inputs.AccessCoin(prevout); | const Coin &coin = inputs.AccessCoin(prevout); | ||||
assert(!coin.IsSpent()); | assert(!coin.IsSpent()); | ||||
▲ Show 20 Lines • Show All 46 Lines • ▼ Show 20 Lines | for (size_t i = 0; i < tx.vin.size(); i++) { | ||||
strprintf("mandatory-script-verify-flag-failed (%s)", | strprintf("mandatory-script-verify-flag-failed (%s)", | ||||
ScriptErrorString(scriptError))); | ScriptErrorString(scriptError))); | ||||
} | } | ||||
} | } | ||||
if (scriptCacheStore && !pvChecks) { | if (scriptCacheStore && !pvChecks) { | ||||
// We executed all of the provided scripts, and were told to cache the | // We executed all of the provided scripts, and were told to cache the | ||||
// result. Do so now. | // result. Do so now. | ||||
AddKeyInScriptCache(hashCacheEntry); | AddKeyInScriptCache(hashCacheEntry, 0); | ||||
deadalnix: I know this value isn't used anywhere, but it feels wrong to set something to a purposefully… | |||||
markblundebergAuthorUnsubmitted Done Inline ActionsYeah I know what you mean, but in the long term this seemingly bad value is actually what I intend to have in the cache for the preactivation flagset. Reason: before activation, someone can make a monster standard but slow tx with 100000 signature checks, and we definitely want that guy to be cached. So for the preactivation flags all tx including the monster will be cached with sigchecks=0. For postactivation flags they will have accurate sigchecks but that monster tx will be rejected anyway by the standard input-sigcheck limiter from D4617, so it won't even get to this point. markblundeberg: Yeah I know what you mean, but in the long term this seemingly bad value is actually what I… | |||||
deadalnixUnsubmitted Not Done Inline ActionsEven then, why not put the right value in there? I get that it doesn't need to be put in there in this very patch, but it going to be computed anyway. deadalnix: Even then, why not put the right value in there? I get that it doesn't need to be put in there… | |||||
markblundebergAuthorUnsubmitted Done Inline ActionsHmm how do you mean -- what's the right value? markblundeberg: Hmm how do you mean -- what's the right value? | |||||
} | } | ||||
return true; | return true; | ||||
} | } | ||||
namespace { | namespace { | ||||
bool UndoWriteToDisk(const CBlockUndo &blockundo, FlatFilePos &pos, | bool UndoWriteToDisk(const CBlockUndo &blockundo, FlatFilePos &pos, | ||||
▲ Show 20 Lines • Show All 4,350 Lines • Show Last 20 Lines |
I know this value isn't used anywhere, but it feels wrong to set something to a purposefully bad value.