better handling of [] when it is OP_0.
This commit is contained in:
parent
2fd1d171f2
commit
690fe7163a
@ -605,7 +605,7 @@ script.execute = function execute(s, stack, tx, index) {
|
||||
var n = stack.pop();
|
||||
if (n.length !== 1 || !(1 <= n[0] && n[0] <= 3))
|
||||
return false;
|
||||
n = n[0];
|
||||
n = n[0] || 0;
|
||||
|
||||
if (stack.length < n + 1)
|
||||
return false;
|
||||
@ -622,7 +622,7 @@ script.execute = function execute(s, stack, tx, index) {
|
||||
var m = stack.pop();
|
||||
if (m.length !== 1 || !(1 <= m[0] && m[0] <= n))
|
||||
return false;
|
||||
m = m[0];
|
||||
m = m[0] || 0;
|
||||
|
||||
if (stack.length < m + 1)
|
||||
return false;
|
||||
@ -782,7 +782,7 @@ script.isMultisig = function isMultisig(s, key) {
|
||||
m = [m];
|
||||
if (!Array.isArray(m) || m.length !== 1)
|
||||
return false;
|
||||
m = m[0];
|
||||
m = m[0] || 0;
|
||||
|
||||
if (s[s.length - 1] !== 'checkmultisig')
|
||||
return false;
|
||||
@ -792,7 +792,7 @@ script.isMultisig = function isMultisig(s, key) {
|
||||
n = [n];
|
||||
if (!Array.isArray(n) || n.length !== 1)
|
||||
return false;
|
||||
n = n[0];
|
||||
n = n[0] || 0;
|
||||
|
||||
if (n + 3 !== s.length)
|
||||
return false;
|
||||
|
||||
@ -168,7 +168,7 @@ TX.prototype.scriptInput = function(input, pub) {
|
||||
var n = s[s.length - 2];
|
||||
// If using pushdata instead of OP_1-16:
|
||||
if (Array.isArray(n))
|
||||
n = n[0];
|
||||
n = n[0] || 0;
|
||||
for (var i = 0; i < n; i++)
|
||||
input.script[i + 1] = [];
|
||||
return;
|
||||
@ -178,7 +178,11 @@ TX.prototype.scriptInput = function(input, pub) {
|
||||
// p2sh format: OP_FALSE [sig-1] [sig-2] ... [redeem-script]
|
||||
if (bcoin.script.isScripthash(s)) {
|
||||
input.script = [ [] ];
|
||||
var n = pub[pub.length - 2] - constants.opcodes['1'] + 1;
|
||||
var redeem = bcoin.script.decode(pub);
|
||||
var n = redeem[redeem.length - 2];
|
||||
// If using pushdata instead of OP_1-16:
|
||||
if (Array.isArray(n))
|
||||
n = n[0] || 0;
|
||||
for (var i = 0; i < n; i++)
|
||||
input.script[i + 1] = [];
|
||||
// P2SH requires the redeem script after signatures
|
||||
@ -230,12 +234,9 @@ TX.prototype.signInput = function(input, key, type) {
|
||||
}
|
||||
|
||||
var m = redeem[0];
|
||||
var n = redeem[s.length - 2];
|
||||
// If using pushdata instead of OP_1-16:
|
||||
if (Array.isArray(m))
|
||||
m = m[0];
|
||||
if (Array.isArray(n))
|
||||
n = n[0];
|
||||
m = m[0] || 0;
|
||||
|
||||
var keys = redeem.slice(1, -2);
|
||||
var pub = key.getPublic(true, 'array');
|
||||
@ -258,7 +259,7 @@ TX.prototype.signInput = function(input, key, type) {
|
||||
// and count the total number of signatures.
|
||||
var totalSigs = 0;
|
||||
for (var i = 1; i < len; i++) {
|
||||
if (input.script[i].length) {
|
||||
if (Array.isArray(input.script[i]) && input.script[i].length) {
|
||||
totalSigs++;
|
||||
continue;
|
||||
}
|
||||
@ -274,7 +275,7 @@ TX.prototype.signInput = function(input, key, type) {
|
||||
// All signatures added. Finalize by removing empty slots.
|
||||
if (totalSigs >= m) {
|
||||
for (var i = len - 1; i >= 1; i--) {
|
||||
if (!input.script[i].length)
|
||||
if (Array.isArray(input.script[i]) && !input.script[i].length)
|
||||
input.script.splice(i, 1);
|
||||
}
|
||||
}
|
||||
@ -494,7 +495,7 @@ TX.prototype.maxSize = function maxSize() {
|
||||
var m = s[0];
|
||||
// If using pushdata instead of OP_1-16:
|
||||
if (Array.isArray(m))
|
||||
m = m[0];
|
||||
m = m[0] || 0;
|
||||
assert(m >= 1 && m <= 3);
|
||||
size += 74 * m;
|
||||
return;
|
||||
@ -504,9 +505,14 @@ TX.prototype.maxSize = function maxSize() {
|
||||
var script = this.inputs[i].script;
|
||||
var redeem, m, n;
|
||||
if (script.length) {
|
||||
redeem = script[script.length - 1];
|
||||
redeem = bcoin.script.decode(script[script.length - 1]);
|
||||
m = redeem[0];
|
||||
n = redeem[redeem.length - 2];
|
||||
// If using pushdata instead of OP_1-16:
|
||||
if (Array.isArray(m))
|
||||
m = m[0] || 0;
|
||||
if (Array.isArray(n))
|
||||
n = n[0] || 0;
|
||||
} else {
|
||||
// May end up in a higher fee if we
|
||||
// do not have the redeem script available.
|
||||
|
||||
Loading…
Reference in New Issue
Block a user