From 812d74aa0ad178c6ac926d5aa2880aaea8c842b9 Mon Sep 17 00:00:00 2001 From: Daniel Cousens Date: Fri, 14 Aug 2015 10:26:24 +1000 Subject: [PATCH] coerce wherever necessary for now --- src/address.js | 5 +++-- src/script.js | 14 +++++++++++++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/address.js b/src/address.js index 9b9da05..0bf33e6 100644 --- a/src/address.js +++ b/src/address.js @@ -20,8 +20,9 @@ function fromBase58Check (address) { function fromOutputScript (script, network) { network = network || networks.bitcoin - if (scripts.isPubKeyHashOutput(script)) return toBase58Check(script[2], network.pubKeyHash) - if (scripts.isScriptHashOutput(script)) return toBase58Check(script[1], network.scriptHash) + var chunks = Script.decompile(script) + if (scripts.isPubKeyHashOutput(chunks)) return toBase58Check(chunks[2], network.pubKeyHash) + if (scripts.isScriptHashOutput(chunks)) return toBase58Check(chunks[1], network.scriptHash) throw new Error(Script.toASM(script) + ' has no matching Address') } diff --git a/src/script.js b/src/script.js index 0e29f73..6c75f11 100644 --- a/src/script.js +++ b/src/script.js @@ -4,7 +4,15 @@ var typeforce = require('typeforce') var types = require('./types') function coerceChunks (chunks) { - return types.Array(chunks) ? chunks : decompile(chunks) + if (types.Array(chunks)) return chunks + + return decompile(chunks) +} + +function coerceBuffer (buffer) { + if (types.Buffer(buffer)) return buffer + + return compile(buffer) } function toASM (chunks) { @@ -41,6 +49,8 @@ function fromASM (asm) { } function compile (chunks) { + chunks = coerceChunks(chunks) + typeforce(types.Array, chunks) var bufferSize = chunks.reduce(function (accum, chunk) { @@ -76,6 +86,8 @@ function compile (chunks) { } function decompile (buffer) { + buffer = coerceBuffer(buffer) + typeforce(types.Buffer, buffer) var chunks = []