Skip to content

Commit f58349c

Browse files
committed
Restore some assert semantics in sigop cost calculations
There are some similar asserts which are left removed in policy and ATMP (policy code being broken isn't a huge deal, but if we fail to verify some consensus rules, we should most definitely crash).
1 parent 3533fb4 commit f58349c

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

src/consensus/tx_verify.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,9 @@ unsigned int GetP2SHSigOpCount(const CTransaction& tx, const CCoinsViewCache& in
126126
unsigned int nSigOps = 0;
127127
for (unsigned int i = 0; i < tx.vin.size(); i++)
128128
{
129-
const CTxOut &prevout = inputs.AccessCoin(tx.vin[i].prevout).out;
129+
const Coin& coin = inputs.AccessCoin(tx.vin[i].prevout);
130+
assert(!coin.IsSpent());
131+
const CTxOut &prevout = coin.out;
130132
if (prevout.scriptPubKey.IsPayToScriptHash())
131133
nSigOps += prevout.scriptPubKey.GetSigOpCount(tx.vin[i].scriptSig);
132134
}
@@ -146,7 +148,9 @@ int64_t GetTransactionSigOpCost(const CTransaction& tx, const CCoinsViewCache& i
146148

147149
for (unsigned int i = 0; i < tx.vin.size(); i++)
148150
{
149-
const CTxOut &prevout = inputs.AccessCoin(tx.vin[i].prevout).out;
151+
const Coin& coin = inputs.AccessCoin(tx.vin[i].prevout);
152+
assert(!coin.IsSpent());
153+
const CTxOut &prevout = coin.out;
150154
nSigOps += CountWitnessSigOps(tx.vin[i].scriptSig, prevout.scriptPubKey, &tx.vin[i].scriptWitness, flags);
151155
}
152156
return nSigOps;

0 commit comments

Comments
 (0)