drop extra coinbase functions.
This commit is contained in:
parent
486c22d0e7
commit
a2c08d9692
@ -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) {
|
||||
|
||||
@ -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;
|
||||
};
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user