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.
|
// Make sure the height contained in the coinbase is correct.
|
||||||
if (this.version >= 2 && prev.isUpgraded(2)) {
|
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.
|
// Make sure the coinbase is parseable.
|
||||||
if (!cb) {
|
if (!cb) {
|
||||||
|
|||||||
@ -1759,109 +1759,32 @@ script.isScripthashInput = function isScripthashInput(s, data, strict) {
|
|||||||
return raw;
|
return raw;
|
||||||
};
|
};
|
||||||
|
|
||||||
script.coinbaseBits = function coinbaseBits(s, block) {
|
script.coinbase = function coinbase(s) {
|
||||||
var value;
|
var coinbase, flags;
|
||||||
|
|
||||||
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;
|
|
||||||
});
|
|
||||||
|
|
||||||
coinbase = {
|
coinbase = {
|
||||||
script: s
|
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]))
|
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.flags = flags;
|
||||||
coinbase.text =
|
coinbase.text =
|
||||||
flags.map(utils.array2utf8).join('')
|
flags.map(utils.array2utf8).join('')
|
||||||
.replace(/[\u0000-\u0019\u007f-\u00ff]/g, '');
|
.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;
|
return coinbase;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user