fix getCoinbaseHeight.
This commit is contained in:
parent
3a18052f87
commit
f1e1873514
@ -1225,7 +1225,7 @@ Script.prototype.execute = function execute(stack, flags, tx, index, version) {
|
|||||||
// Note that minimaldata is not checked
|
// Note that minimaldata is not checked
|
||||||
// on unexecuted branches of code.
|
// on unexecuted branches of code.
|
||||||
if (negate === 0) {
|
if (negate === 0) {
|
||||||
if (!Script.checkMinimal(op.data, op.value, flags))
|
if (!Script.isMinimal(op.data, op.value, flags))
|
||||||
throw new ScriptError('MINIMALDATA', op, ip);
|
throw new ScriptError('MINIMALDATA', op, ip);
|
||||||
stack.push(op.data);
|
stack.push(op.data);
|
||||||
}
|
}
|
||||||
@ -2170,7 +2170,7 @@ Script.prototype.removeData = function removeData(data) {
|
|||||||
if (!op.data)
|
if (!op.data)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!Script.checkMinimal(op.data, op.value))
|
if (!Script.isMinimal(op.data, op.value))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (utils.equal(op.data, data))
|
if (utils.equal(op.data, data))
|
||||||
@ -2222,7 +2222,7 @@ Script.prototype.indexOf = function indexOf(data) {
|
|||||||
* @returns {Boolean}
|
* @returns {Boolean}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Script.checkMinimal = function checkMinimal(data, opcode, flags) {
|
Script.isMinimal = function isMinimal(data, opcode, flags) {
|
||||||
if (flags == null)
|
if (flags == null)
|
||||||
flags = constants.flags.STANDARD_VERIFY_FLAGS;
|
flags = constants.flags.STANDARD_VERIFY_FLAGS;
|
||||||
|
|
||||||
@ -3030,20 +3030,50 @@ Script.prototype.getCoinbaseHeight = function getCoinbaseHeight() {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
Script.getCoinbaseHeight = function getCoinbaseHeight(raw) {
|
Script.getCoinbaseHeight = function getCoinbaseHeight(raw) {
|
||||||
var height;
|
var flags = constants.flags.STANDARD_VERIFY_FLAGS;
|
||||||
|
var data, height, op;
|
||||||
|
|
||||||
if (raw.length === 0)
|
if (raw.length === 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
// Small ints are allowed.
|
||||||
height = Script.getSmall(raw[0]);
|
height = Script.getSmall(raw[0]);
|
||||||
|
|
||||||
if (height !== -1)
|
if (height !== -1)
|
||||||
return height;
|
return height;
|
||||||
|
|
||||||
if (raw[0] <= 0x06 && raw.length >= 1 + raw[0])
|
// No more than 6 bytes (we can't
|
||||||
|
// handle 7 byte JS numbers and
|
||||||
|
// height 281 trillion is far away).
|
||||||
|
if (raw[0] > 0x06)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
return new bn(raw.slice(1, 1 + raw[0]), 'le').toNumber();
|
// No bad pushes allowed.
|
||||||
|
if (raw.length < 1 + raw[0])
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
data = raw.slice(1, 1 + raw[0]);
|
||||||
|
|
||||||
|
// Deserialize the height.
|
||||||
|
try {
|
||||||
|
height = Script.num(data, flags, 6);
|
||||||
|
} catch (e) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reserialize the height.
|
||||||
|
op = Opcode.fromNumber(height);
|
||||||
|
|
||||||
|
// Should have been OP_0-OP_16.
|
||||||
|
if (!op.data)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
// Ensure the miner serialized the
|
||||||
|
// number in the most minimal fashion.
|
||||||
|
if (!utils.equal(data, op.data))
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
return height.toNumber();
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user