diff --git a/lib/bcoin/block.js b/lib/bcoin/block.js index 348be531..4348cead 100644 --- a/lib/bcoin/block.js +++ b/lib/bcoin/block.js @@ -52,6 +52,7 @@ function Block(data, subtype) { tx = bcoin.tx(tx); tx.block = self.hash('hex'); tx.ts = tx.ts || self.ts; + // self.tx.push(tx.hash('hex')); return tx; }); this.invalid = !this._checkBlock(); diff --git a/lib/bcoin/input.js b/lib/bcoin/input.js index 32ed5e24..6380db32 100644 --- a/lib/bcoin/input.js +++ b/lib/bcoin/input.js @@ -51,7 +51,17 @@ function Input(options) { } Input.prototype.__defineGetter__('data', function() { - return Input.getData(this); + var data; + + if (this._data) + return this._data; + + data = Input.getData(this); + + if (this.script.length && this.out.tx) + utils.hidden(this, '_data', data); + + return data; }); Input.prototype.__defineGetter__('addr', function() { diff --git a/lib/bcoin/output.js b/lib/bcoin/output.js index aed7b6b5..83a4174a 100644 --- a/lib/bcoin/output.js +++ b/lib/bcoin/output.js @@ -35,7 +35,17 @@ function Output(options) { } Output.prototype.__defineGetter__('data', function() { - return Output.getData(this); + var data; + + if (this._data) + return this._data; + + data = Output.getData(this); + + if (this.script.length && this.value.cmpn(0) !== 0) + utils.hidden(this, '_data', data); + + return data; }); Output.prototype.__defineGetter__('addr', function() { diff --git a/lib/bcoin/script.js b/lib/bcoin/script.js index d390e48e..ca3e2c30 100644 --- a/lib/bcoin/script.js +++ b/lib/bcoin/script.js @@ -897,6 +897,8 @@ script.spendable = function spendable(s, lockTime) { }; script.isPubkey = function isPubkey(s, key) { + s = script.subscript(s); + if (script.lockTime(s)) s = s.slice(3); @@ -914,6 +916,8 @@ script.isPubkey = function isPubkey(s, key) { }; script.isPubkeyhash = function isPubkeyhash(s, hash) { + s = script.subscript(s); + if (script.lockTime(s)) s = s.slice(3); @@ -938,6 +942,8 @@ script.isPubkeyhash = function isPubkeyhash(s, hash) { script.isMultisig = function isMultisig(s, pubs) { var m, n, keys, isArray, total; + s = script.subscript(s); + if (script.lockTime(s)) s = s.slice(3); @@ -990,6 +996,8 @@ script.isMultisig = function isMultisig(s, pubs) { }; script.isScripthash = function isScripthash(s, hash) { + s = script.subscript(s); + if (script.lockTime(s)) s = s.slice(3); @@ -1011,6 +1019,8 @@ script.isScripthash = function isScripthash(s, hash) { }; script.isColored = function isColored(s) { + s = script.subscript(s); + if (s.length !== 2) return false; @@ -1035,6 +1045,8 @@ script.standardInput = function standardInput(s) { }; script.isPubkeyInput = function isPubkeyInput(s, key, tx, i) { + s = script.subscript(s); + if (s.length !== 1 || !Array.isArray(s[0])) return false; @@ -1050,6 +1062,8 @@ script.isPubkeyInput = function isPubkeyInput(s, key, tx, i) { }; script.isPubkeyhashInput = function isPubkeyhashInput(s, key) { + s = script.subscript(s); + if (s.length !== 2 || !Array.isArray(s[0]) || !Array.isArray(s[1])) return false; @@ -1071,6 +1085,8 @@ script.isPubkeyhashInput = function isPubkeyhashInput(s, key) { script.isMultisigInput = function isMultisigInput(s, pubs, tx, i) { var i, res, o; + s = script.subscript(s); + if (s.length < 3) return false; @@ -1095,6 +1111,8 @@ script.isMultisigInput = function isMultisigInput(s, pubs, tx, i) { script.isScripthashInput = function isScripthashInput(s, redeem) { var i, res, r, keys; + s = script.subscript(s); + if (s.length < 4) return false; diff --git a/lib/bcoin/tx.js b/lib/bcoin/tx.js index 56785907..2fe9d925 100644 --- a/lib/bcoin/tx.js +++ b/lib/bcoin/tx.js @@ -53,7 +53,7 @@ function TX(data, block) { } if (!data.ts && block && block.hasTX(this.hash('hex'))) { - // if (!data.block && block) { + // if (block) { this.ts = block.ts; this.block = block.hash('hex'); } @@ -369,8 +369,7 @@ TX.prototype.scriptOutput = function scriptOutput(output, options) { options = options || output; var script = output.script; - var keys, m, n; - var hash, color; + var keys, m, n, hash, color; if (Array.isArray(options.keys || options.address)) { // Raw multisig transaction