drop extra coinbase functions.

This commit is contained in:
Christopher Jeffrey 2016-01-20 00:21:41 -08:00
parent 486c22d0e7
commit a2c08d9692
2 changed files with 13 additions and 90 deletions

View File

@ -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) {

View File

@ -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;
};