From 0ca1e40a6d9954bbc672d5c22222851e1f632342 Mon Sep 17 00:00:00 2001 From: Daniel Cousens Date: Fri, 2 Oct 2015 13:00:00 +1000 Subject: [PATCH] script: refactor isMultisigOutput for clarity --- src/script.js | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/src/script.js b/src/script.js index 0c8749b..69ce147 100644 --- a/src/script.js +++ b/src/script.js @@ -13,6 +13,8 @@ var REVERSE_OPS = (function () { return result })() +const OP_INT_BASE = OPS.OP_RESERVED // OP_1 - 1 + function toASM (chunks) { if (types.Buffer(chunks)) { chunks = decompile(chunks) @@ -228,18 +230,18 @@ function isMultisigOutput (script) { if (chunks[chunks.length - 1] !== OPS.OP_CHECKMULTISIG) return false var mOp = chunks[0] - if (!types.Number(mOp)) return false - if (mOp < OPS.OP_1) return false - if (mOp > OPS.OP_16) return false - var nOp = chunks[chunks.length - 2] - if (!types.Number(nOp)) return false - if (nOp < OPS.OP_1) return false - if (nOp > OPS.OP_16) return false - var m = mOp - (OPS.OP_1 - 1) - var n = nOp - (OPS.OP_1 - 1) - if (n < m) return false + if (!types.Number(mOp)) return false + if (!types.Number(nOp)) return false + + var m = mOp - OP_INT_BASE + var n = nOp - OP_INT_BASE + + // 0 < m <= n <= 16 + if (m <= 0) return false + if (m > n) return false + if (n > 16) return false var pubKeys = chunks.slice(1, -2) if (n !== pubKeys.length) return false @@ -314,9 +316,9 @@ function multisigOutput (m, pubKeys) { if (n < m) throw new Error('Not enough pubKeys provided') return compile([].concat( - (OPS.OP_1 - 1) + m, + OP_INT_BASE + m, pubKeys, - (OPS.OP_1 - 1) + n, + OP_INT_BASE + n, OPS.OP_CHECKMULTISIG )) } @@ -354,8 +356,8 @@ function multisigInput (signatures, scriptPubKey) { var mOp = chunks[0] var nOp = chunks[chunks.length - 2] - var m = mOp - (OPS.OP_1 - 1) - var n = nOp - (OPS.OP_1 - 1) + var m = mOp - OP_INT_BASE + var n = nOp - OP_INT_BASE if (signatures.length < m) throw new Error('Not enough signatures provided') if (signatures.length > n) throw new Error('Too many signatures provided')