mirror of
https://github.com/ElementsProject/elements.git
synced 2026-08-18 13:17:55 +02:00
GetTransactionSigOpCost shouldn't need fedpegscript to evaluate
This commit is contained in:
parent
b096f8ddac
commit
b00515e223
1 changed files with 10 additions and 8 deletions
|
|
@ -157,26 +157,28 @@ int64_t GetTransactionSigOpCost(const CTransaction& tx, const CCoinsViewCache& i
|
||||||
nSigOps += GetP2SHSigOpCount(tx, inputs) * WITNESS_SCALE_FACTOR;
|
nSigOps += GetP2SHSigOpCount(tx, inputs) * WITNESS_SCALE_FACTOR;
|
||||||
}
|
}
|
||||||
|
|
||||||
// N.B. Peg-in signatures are always counted against witness sigops,
|
// Note that we only count segwit sigops for peg-in inputs
|
||||||
// even if the prevout scriptpubkey isn't.
|
|
||||||
for (unsigned int i = 0; i < tx.vin.size(); i++)
|
for (unsigned int i = 0; i < tx.vin.size(); i++)
|
||||||
{
|
{
|
||||||
CTxOut prevout;
|
CScript scriptPubKey;
|
||||||
if (tx.vin[i].m_is_pegin) {
|
if (tx.vin[i].m_is_pegin) {
|
||||||
std::string err;
|
std::string err;
|
||||||
// Make sure witness exists and is properly formatted
|
// Make sure witness exists and has enough peg-in witness fields for
|
||||||
if (tx.witness.vtxinwit.size() != tx.vin.size() || !IsValidPeginWitness(tx.witness.vtxinwit[i].m_pegin_witness, tx.vin[i].prevout, err, false)) {
|
// the claim_script
|
||||||
|
if (tx.witness.vtxinwit.size() != tx.vin.size() ||
|
||||||
|
tx.witness.vtxinwit[i].m_pegin_witness.stack.size() < 4) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
prevout = GetPeginOutputFromWitness(tx.witness.vtxinwit[i].m_pegin_witness);
|
const auto pegin_witness = tx.witness.vtxinwit[i].m_pegin_witness;
|
||||||
|
scriptPubKey = CScript(pegin_witness.stack[3].begin(), pegin_witness.stack[3].end());
|
||||||
} else {
|
} else {
|
||||||
const Coin& coin = inputs.AccessCoin(tx.vin[i].prevout);
|
const Coin& coin = inputs.AccessCoin(tx.vin[i].prevout);
|
||||||
assert(!coin.IsSpent());
|
assert(!coin.IsSpent());
|
||||||
prevout = coin.out;
|
scriptPubKey = coin.out.scriptPubKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
const CScriptWitness* pScriptWitness = tx.witness.vtxinwit.size() > i ? &tx.witness.vtxinwit[i].scriptWitness : NULL;
|
const CScriptWitness* pScriptWitness = tx.witness.vtxinwit.size() > i ? &tx.witness.vtxinwit[i].scriptWitness : NULL;
|
||||||
nSigOps += CountWitnessSigOps(tx.vin[i].scriptSig, prevout.scriptPubKey, pScriptWitness, flags);
|
nSigOps += CountWitnessSigOps(tx.vin[i].scriptSig, scriptPubKey, pScriptWitness, flags);
|
||||||
}
|
}
|
||||||
return nSigOps;
|
return nSigOps;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue