From a2c08d96920e55f42758d0ead9598efcd62505c9 Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Wed, 20 Jan 2016 00:21:41 -0800 Subject: [PATCH] drop extra coinbase functions. --- lib/bcoin/block.js | 2 +- lib/bcoin/script.js | 101 ++++++-------------------------------------- 2 files changed, 13 insertions(+), 90 deletions(-) diff --git a/lib/bcoin/block.js b/lib/bcoin/block.js index 3d67c3ae..22084438 100644 --- a/lib/bcoin/block.js +++ b/lib/bcoin/block.js @@ -369,7 +369,7 @@ Block.prototype.verifyContext = function verifyContext() { // Make sure the height contained in the coinbase is correct. if (this.version >= 2 && prev.isUpgraded(2)) { - cb = bcoin.script.isCoinbase(this.txs[0].inputs[0].script, this); + cb = bcoin.script.coinbase(this.txs[0].inputs[0].script); // Make sure the coinbase is parseable. if (!cb) { diff --git a/lib/bcoin/script.js b/lib/bcoin/script.js index 95fbd849..bce204b5 100644 --- a/lib/bcoin/script.js +++ b/lib/bcoin/script.js @@ -1759,109 +1759,32 @@ script.isScripthashInput = function isScripthashInput(s, data, strict) { return raw; }; -script.coinbaseBits = function coinbaseBits(s, block) { - var value; - - s = s.filter(function(chunk) { - return Array.isArray(chunk) && chunk.length !== 0; - }); - - if (!Array.isArray(s[0])) - return { type: 'value', value: s[0] }; - - // Number can only store up to 53 bits (6 & 5/8 bytes) - if (s[0].length > 6) - return { type: 'value', value: s[0] }; - - value = script.num(s[0], true); - - // Test for bits and ts - if (block && block.version < 2) { - if (value === block.bits) - return { type: 'bits', value: value }; - - if (value === block.ts) - return { type: 'ts', value: value }; - } - - // Test for height - if (block) { - if (block.version < 2) - return { type: 'value', value: value }; - } else { - if (value <= 227835) - return { type: 'value', value: value }; - } - - if (s[0].length < 3) - return { type: 'value', value: value }; - - return { type: 'height', value: value }; -}; - -script.coinbaseHeight = function coinbaseHeight(s, block) { - var data = script.coinbaseBits(s, block); - if (data.type !== 'height') - return -1; - return data.value; -}; - -script.coinbase = function coinbase(s, block) { - var coinbase, data, extraNonce, flags; - - s = s.filter(function(chunk) { - return Array.isArray(chunk) && chunk.length !== 0; - }); +script.coinbase = function coinbase(s) { + var coinbase, flags; coinbase = { script: s }; - data = script.coinbaseBits(s, block); + if (Array.isArray(s[0])) + coinbase.height = script.num(s[0], true); + else + coinbase.height = -1; if (Array.isArray(s[1])) - extraNonce = script.num(s[1]); + coinbase.extraNonce = script.num(s[1]); + else + coinbase.extraNonce = script.num(0); - flags = s.slice(2); + flags = s.slice(2).filter(function(chunk) { + return Array.isArray(chunk) && chunk.length !== 0; + }); - coinbase[data.type] = data.value; - coinbase.extraNonce = extraNonce; coinbase.flags = flags; coinbase.text = flags.map(utils.array2utf8).join('') .replace(/[\u0000-\u0019\u007f-\u00ff]/g, ''); - if (coinbase.height == null) - coinbase.height = -1; - - return coinbase; -}; - -script.isCoinbase = function isCoinbase(s, block, strict) { - var coinbase = script.coinbase(s, block); - var size = script.size(s); - - if (size < 2 || size > 100) - return false; - - if (strict) { - if (s.length < 2) - return false; - - if (coinbase.value != null) - return false; - - if (coinbase.extraNonce == null) - return false; - - if (block) { - // The early bitcoind miner (which used the bits - // as the first stack push) had no flags after it. - if (coinbase.bits != null && coinbase.flags.length) - return false; - } - } - return coinbase; };