tx: fix witness item check.
This commit is contained in:
parent
ac70656e71
commit
a535d7d414
@ -1559,7 +1559,7 @@ TX.prototype.hasStandardInputs = function hasStandardInputs(view) {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
TX.prototype.hasStandardWitness = function hasStandardWitness(view) {
|
TX.prototype.hasStandardWitness = function hasStandardWitness(view) {
|
||||||
var i, j, input, witness, coin, prev, redeem, m, n;
|
var i, j, input, witness, coin, prev, redeem, m;
|
||||||
|
|
||||||
if (this.isCoinbase())
|
if (this.isCoinbase())
|
||||||
return true;
|
return true;
|
||||||
@ -1599,65 +1599,70 @@ TX.prototype.hasStandardWitness = function hasStandardWitness(view) {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!prev.isWitnessScripthash()) {
|
if (prev.isWitnessScripthash()) {
|
||||||
// Unknown program type,
|
if (witness.items.length - 1 > policy.MAX_P2WSH_STACK)
|
||||||
// let it through for now.
|
return false;
|
||||||
|
|
||||||
|
for (j = 0; j < witness.items.length - 1; j++) {
|
||||||
|
if (witness.items[j].length > policy.MAX_P2WSH_PUSH)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
redeem = witness.items[witness.items.length - 1];
|
||||||
|
|
||||||
|
if (redeem.length > policy.MAX_P2WSH_SIZE)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
prev = new Script(redeem);
|
||||||
|
|
||||||
|
if (prev.isPubkey()) {
|
||||||
|
if (witness.items.length - 1 !== 1)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (witness.items[0].length > 73)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (prev.isPubkeyhash()) {
|
||||||
|
if (input.witness.length - 1 !== 2)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (witness.items[0].length > 73)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (witness.items[1].length > 65)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (prev.isMultisig()) {
|
||||||
|
m = prev.getSmall(0);
|
||||||
|
|
||||||
|
if (witness.items.length - 1 !== m + 1)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (witness.items[0].length !== 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
for (j = 1; j < witness.items.length - 1; j++) {
|
||||||
|
if (witness.items[j].length > 73)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
redeem = witness.items[witness.items.length - 1];
|
if (witness.items.length > policy.MAX_P2WSH_STACK)
|
||||||
|
|
||||||
if (redeem.length > policy.MAX_P2WSH_SIZE)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (witness.items.length - 1 > policy.MAX_P2WSH_STACK)
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
for (j = 0; j < witness.items.length; j++) {
|
for (j = 0; j < witness.items.length; j++) {
|
||||||
if (witness.items[j].length > policy.MAX_P2WSH_PUSH)
|
if (witness.items[j].length > policy.MAX_P2WSH_PUSH)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
prev = new Script(redeem);
|
|
||||||
|
|
||||||
if (prev.isPubkey()) {
|
|
||||||
if (witness.items.length - 1 !== 1)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (witness.items[0].length > 73)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (prev.isPubkeyhash()) {
|
|
||||||
if (input.witness.length - 1 !== 2)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (witness.items[0].length > 73)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (witness.items[1].length > 65)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (prev.isMultisig()) {
|
|
||||||
m = prev.getSmall(0);
|
|
||||||
n = prev.getSmall(prev.length - 2);
|
|
||||||
|
|
||||||
if (witness.items.length - 1 !== m + 1)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (witness.items[0].length !== 0)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
for (j = 1; j < witness.items.length - 1; j++) {
|
|
||||||
if (witness.items[j].length > 73)
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user