checkmultisig fixes. misc.
This commit is contained in:
parent
cf5a117a3e
commit
9c2b0015d1
@ -13,7 +13,6 @@ var i;
|
|||||||
exports.minVersion = 70001;
|
exports.minVersion = 70001;
|
||||||
exports.version = 70002;
|
exports.version = 70002;
|
||||||
|
|
||||||
// version - services field
|
|
||||||
exports.services = {
|
exports.services = {
|
||||||
network: 1
|
network: 1
|
||||||
};
|
};
|
||||||
@ -45,7 +44,7 @@ exports.opcodes = {
|
|||||||
pushdata4: 0x4e,
|
pushdata4: 0x4e,
|
||||||
// negate1: 0x4f,
|
// negate1: 0x4f,
|
||||||
|
|
||||||
nop1: 0x61,
|
nop: 0x61,
|
||||||
if_: 0x63,
|
if_: 0x63,
|
||||||
notif: 0x64,
|
notif: 0x64,
|
||||||
else_: 0x67,
|
else_: 0x67,
|
||||||
@ -124,6 +123,8 @@ exports.opcodes = {
|
|||||||
checksigverify: 0xad,
|
checksigverify: 0xad,
|
||||||
checkmultisig: 0xae,
|
checkmultisig: 0xae,
|
||||||
checkmultisigverify: 0xaf,
|
checkmultisigverify: 0xaf,
|
||||||
|
|
||||||
|
eval_: 0xb0,
|
||||||
checklocktimeverify: 0xb1
|
checklocktimeverify: 0xb1
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -140,7 +141,6 @@ Object.keys(exports.opcodes).forEach(function(name) {
|
|||||||
exports.opcodesByVal[exports.opcodes[name]] = name;
|
exports.opcodesByVal[exports.opcodes[name]] = name;
|
||||||
});
|
});
|
||||||
|
|
||||||
// Little-endian hash type
|
|
||||||
exports.hashType = {
|
exports.hashType = {
|
||||||
all: 1,
|
all: 1,
|
||||||
none: 2,
|
none: 2,
|
||||||
@ -206,7 +206,7 @@ exports.hd = {
|
|||||||
pathRoots: ['m', 'M', 'm\'', 'M\'']
|
pathRoots: ['m', 'M', 'm\'', 'M\'']
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.locktimeThreshold = 500000000; // Tue Nov 5 00:53:20 1985 UTC
|
exports.locktimeThreshold = 500000000; // Tue Nov 5 00:53:20 1985 UTC
|
||||||
|
|
||||||
exports.oneHash = utils.toArray(
|
exports.oneHash = utils.toArray(
|
||||||
'0000000000000000000000000000000000000000000000000000000000000001',
|
'0000000000000000000000000000000000000000000000000000000000000001',
|
||||||
|
|||||||
@ -330,7 +330,7 @@ script.execute = function execute(s, stack, tx, index, flags, recurse) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch (o) {
|
switch (o) {
|
||||||
case 'nop1':
|
case 'nop':
|
||||||
case 'nop3':
|
case 'nop3':
|
||||||
case 'nop4':
|
case 'nop4':
|
||||||
case 'nop5':
|
case 'nop5':
|
||||||
@ -743,12 +743,12 @@ script.execute = function execute(s, stack, tx, index, flags, recurse) {
|
|||||||
if (!script.isKey(key))
|
if (!script.isKey(key))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
if (!script.isSig(sig))
|
||||||
|
return false;
|
||||||
|
|
||||||
if (flags.strictder !== false) {
|
if (flags.strictder !== false) {
|
||||||
if (!script.isValidSig(sig))
|
if (!script.isValidSig(sig))
|
||||||
return false;
|
return false;
|
||||||
} else {
|
|
||||||
if (!script.isSig(sig))
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type = sig[sig.length - 1];
|
type = sig[sig.length - 1];
|
||||||
@ -775,9 +775,14 @@ script.execute = function execute(s, stack, tx, index, flags, recurse) {
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
n = stack.pop();
|
n = stack.pop();
|
||||||
if (n.length !== 1 || !(1 <= n[0] && n[0] <= 15))
|
|
||||||
|
if (!Array.isArray(n))
|
||||||
return false;
|
return false;
|
||||||
n = n[0] || 0;
|
|
||||||
|
if (n.length !== 1 || !(n[0] >= 1 && n[0] <= 15))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
n = n[0];
|
||||||
|
|
||||||
if (stack.length < n + 1)
|
if (stack.length < n + 1)
|
||||||
return false;
|
return false;
|
||||||
@ -792,26 +797,30 @@ script.execute = function execute(s, stack, tx, index, flags, recurse) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
m = stack.pop();
|
m = stack.pop();
|
||||||
if (m.length !== 1 || !(1 <= m[0] && m[0] <= n))
|
|
||||||
|
if (!Array.isArray(m))
|
||||||
return false;
|
return false;
|
||||||
m = m[0] || 0;
|
|
||||||
|
if (m.length !== 1 || !(m[0] >= 1 && m[0] <= n))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
m = m[0];
|
||||||
|
|
||||||
if (stack.length < m + 1)
|
if (stack.length < m + 1)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
subscript = script.subscript(s, lastSep);
|
subscript = script.subscript(s, lastSep);
|
||||||
|
|
||||||
// Get signatures
|
|
||||||
succ = 0;
|
succ = 0;
|
||||||
for (i = 0, j = 0; i < m && j < n; i++) {
|
for (i = 0, j = 0; i < m && j < n; i++) {
|
||||||
sig = stack.pop();
|
sig = stack.pop();
|
||||||
|
|
||||||
|
if (!script.isSig(sig))
|
||||||
|
return false;
|
||||||
|
|
||||||
if (flags.strictder !== false) {
|
if (flags.strictder !== false) {
|
||||||
if (!script.isValidSig(sig))
|
if (!script.isValidSig(sig))
|
||||||
return false;
|
return false;
|
||||||
} else {
|
|
||||||
if (!script.isSig(sig))
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type = sig[sig.length - 1];
|
type = sig[sig.length - 1];
|
||||||
@ -829,7 +838,6 @@ script.execute = function execute(s, stack, tx, index, flags, recurse) {
|
|||||||
succ++;
|
succ++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Extra value
|
|
||||||
if (stack.length < 1)
|
if (stack.length < 1)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user