From 0ccf67aef6c7ccd8f63c5eca70e401dbef55d0b8 Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Wed, 23 Dec 2015 21:55:25 -0800 Subject: [PATCH] more input and output data work. --- lib/bcoin/input.js | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/lib/bcoin/input.js b/lib/bcoin/input.js index df0a384d..12fac103 100644 --- a/lib/bcoin/input.js +++ b/lib/bcoin/input.js @@ -115,7 +115,7 @@ Input.getData = function getData(input) { var s = input.script; var sub = bcoin.script.subscript(input.script); - var schema, sig, pub, hash, addr, redeem, data, output; + var schema, sig, pub, hash, addr, redeem, data, output, val; schema = { type: null, @@ -160,7 +160,7 @@ Input.getData = function getData(input) { height: data.height || -1, addr: input._id('coinbase'), flags: data.flags, - text: data.text.join(''), + text: data.text.join('').replace(/[\r\n\t\v]/g, ''), none: true }); } @@ -168,14 +168,26 @@ Input.getData = function getData(input) { if (input.out.tx) { output = input.out.tx.outputs[input.out.index]; data = bcoin.output.getData(output); - if (data.type === 'pubkey' || data.type === 'pubkeyhash') { + if (data.type === 'pubkey' ) { data.sig = sub[0]; + } else if (data.type === 'pubkeyhash') { + data.sig = sub[0]; + data.pub = sub[1]; + } else if (data.type === 'scripthash') { + // We work backwards here: scripthash is one of the few cases + // where we get more data from the input than the output. + val = Input.getData({ + out: { hash: input.out.hash, index: input.out.index }, + script: input.script, + seq: input.seq + }); + val.lock = data.lock; + val.value = data.value; + val.script = data.script; + data = val; } else if (data.type === 'multisig') { data.multisig.sigs = sub.slice(1); - data.sig = data.multisig.sigs[0]; - } else if (data.type === 'scripthash') { - data.multisig.sigs = sub.slice(1, -1); - data.sig = data.multisig.sigs[0]; + data.sig = sub[1]; } return utils.merge(data, { seq: input.seq,