fix getCoinbaseHeight.

This commit is contained in:
Christopher Jeffrey 2016-06-14 19:06:17 -07:00
parent 3a18052f87
commit f1e1873514
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD

View File

@ -1225,7 +1225,7 @@ Script.prototype.execute = function execute(stack, flags, tx, index, version) {
// Note that minimaldata is not checked
// on unexecuted branches of code.
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);
stack.push(op.data);
}
@ -2170,7 +2170,7 @@ Script.prototype.removeData = function removeData(data) {
if (!op.data)
continue;
if (!Script.checkMinimal(op.data, op.value))
if (!Script.isMinimal(op.data, op.value))
continue;
if (utils.equal(op.data, data))
@ -2222,7 +2222,7 @@ Script.prototype.indexOf = function indexOf(data) {
* @returns {Boolean}
*/
Script.checkMinimal = function checkMinimal(data, opcode, flags) {
Script.isMinimal = function isMinimal(data, opcode, flags) {
if (flags == null)
flags = constants.flags.STANDARD_VERIFY_FLAGS;
@ -3030,20 +3030,50 @@ Script.prototype.getCoinbaseHeight = function getCoinbaseHeight() {
*/
Script.getCoinbaseHeight = function getCoinbaseHeight(raw) {
var height;
var flags = constants.flags.STANDARD_VERIFY_FLAGS;
var data, height, op;
if (raw.length === 0)
return -1;
// Small ints are allowed.
height = Script.getSmall(raw[0]);
if (height !== -1)
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 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();
};
/**