refactor.
This commit is contained in:
parent
3495b6fbf9
commit
5fb16d29e6
@ -23,7 +23,7 @@ function Witness(items) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Witness.prototype.inspect = function inspect() {
|
Witness.prototype.inspect = function inspect() {
|
||||||
return bcoin.script.format(this.items);
|
return Script.format(this.items);
|
||||||
};
|
};
|
||||||
|
|
||||||
Witness.prototype.encode = function encode() {
|
Witness.prototype.encode = function encode() {
|
||||||
@ -130,7 +130,7 @@ function Stack(items) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Stack.prototype.inspect = function inspect() {
|
Stack.prototype.inspect = function inspect() {
|
||||||
return bcoin.script.format(this.items);
|
return Script.format(this.items);
|
||||||
};
|
};
|
||||||
|
|
||||||
Stack.prototype.__defineGetter__('length', function() {
|
Stack.prototype.__defineGetter__('length', function() {
|
||||||
@ -1193,7 +1193,7 @@ Script.prototype.removeData = function removeData(data) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Script.checkPush = function checkPush(value, flags) {
|
Script.checkPush = function checkPush(value, flags) {
|
||||||
var op;
|
var pushdata = value.pushdata;
|
||||||
|
|
||||||
if (flags == null)
|
if (flags == null)
|
||||||
flags = constants.flags.STANDARD_VERIFY_FLAGS;
|
flags = constants.flags.STANDARD_VERIFY_FLAGS;
|
||||||
@ -1201,14 +1201,9 @@ Script.checkPush = function checkPush(value, flags) {
|
|||||||
if (!(flags & constants.flags.VERIFY_MINIMALDATA))
|
if (!(flags & constants.flags.VERIFY_MINIMALDATA))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (!value.pushdata)
|
if (!pushdata)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
op = value.pushdata.opcode;
|
|
||||||
|
|
||||||
if (!op)
|
|
||||||
op = value.pushdata.len;
|
|
||||||
|
|
||||||
if (value.length === 1 && value[0] === 0)
|
if (value.length === 1 && value[0] === 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@ -1219,13 +1214,13 @@ Script.checkPush = function checkPush(value, flags) {
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (value.length <= 75)
|
if (value.length <= 75)
|
||||||
return op === value.length;
|
return pushdata.opcode == null && pushdata.len === value.length;
|
||||||
|
|
||||||
if (value.length <= 255)
|
if (value.length <= 255)
|
||||||
return op === 'pushdata1';
|
return pushdata.opcode === 'pushdata1';
|
||||||
|
|
||||||
if (value.length <= 65535)
|
if (value.length <= 65535)
|
||||||
return op === 'pushdata2';
|
return pushdata.opcode === 'pushdata2';
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
@ -2471,22 +2466,22 @@ Script.decode = function decode(buf) {
|
|||||||
var off = 0;
|
var off = 0;
|
||||||
var b, opcode, len;
|
var b, opcode, len;
|
||||||
|
|
||||||
if (!buf)
|
assert(Buffer.isBuffer(buf));
|
||||||
return [];
|
|
||||||
|
|
||||||
// NOTE: We can't use a BufferReader here since
|
// NOTE: We can't use a BufferReader here since
|
||||||
// script parsing was originally non-strict.
|
// script parsing was originally non-strict/ridiculous.
|
||||||
|
// Something could do a direct push of 30 bytes with
|
||||||
|
// only 20 bytes after it.
|
||||||
while (off < buf.length) {
|
while (off < buf.length) {
|
||||||
b = buf[off++];
|
b = buf[off++];
|
||||||
|
|
||||||
// OP_0, OP_FALSE
|
// OP_0, OP_FALSE
|
||||||
// Special case: this is an empty array
|
|
||||||
// because it can be seen as an empty pushdata.
|
|
||||||
if (b === 0x00) {
|
if (b === 0x00) {
|
||||||
code.push(0);
|
code.push(0);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Direct Push
|
||||||
// Next `b` bytes should be pushed to stack
|
// Next `b` bytes should be pushed to stack
|
||||||
if (b >= 0x01 && b <= 0x4b) {
|
if (b >= 0x01 && b <= 0x4b) {
|
||||||
code.push(utils.slice(buf, off, off + b));
|
code.push(utils.slice(buf, off, off + b));
|
||||||
@ -2554,6 +2549,8 @@ Script.encode = function encode(code) {
|
|||||||
var i = 0;
|
var i = 0;
|
||||||
var op;
|
var op;
|
||||||
|
|
||||||
|
assert(Array.isArray(code));
|
||||||
|
|
||||||
for (i = 0; i < code.length; i++) {
|
for (i = 0; i < code.length; i++) {
|
||||||
op = code[i];
|
op = code[i];
|
||||||
|
|
||||||
|
|||||||
@ -200,25 +200,17 @@ utils.isBase58 = function isBase58(msg) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
utils.ripemd160 = function ripemd160(data, enc) {
|
utils.ripemd160 = function ripemd160(data, enc) {
|
||||||
var result;
|
|
||||||
|
|
||||||
if (!crypto)
|
if (!crypto)
|
||||||
return new Buffer(hash.ripemd160().update(data, enc).digest());
|
return new Buffer(hash.ripemd160().update(data, enc).digest());
|
||||||
|
|
||||||
result = crypto.createHash('ripemd160').update(data, enc).digest();
|
return crypto.createHash('ripemd160').update(data, enc).digest();
|
||||||
|
|
||||||
return result;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
utils.sha1 = function sha1(data, enc) {
|
utils.sha1 = function sha1(data, enc) {
|
||||||
var result;
|
|
||||||
|
|
||||||
if (!crypto)
|
if (!crypto)
|
||||||
return new Buffer(hash.sha1().update(data, enc).digest());
|
return new Buffer(hash.sha1().update(data, enc).digest());
|
||||||
|
|
||||||
result = crypto.createHash('sha1').update(data, enc).digest();
|
return crypto.createHash('sha1').update(data, enc).digest();
|
||||||
|
|
||||||
return result;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
utils.ripesha = function ripesha(data, enc) {
|
utils.ripesha = function ripesha(data, enc) {
|
||||||
@ -230,14 +222,10 @@ utils.checksum = function checksum(data, enc) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
utils.sha256 = function sha256(data, enc) {
|
utils.sha256 = function sha256(data, enc) {
|
||||||
var result;
|
|
||||||
|
|
||||||
if (!crypto)
|
if (!crypto)
|
||||||
return new Buffer(hash.sha256().update(data, enc).digest());
|
return new Buffer(hash.sha256().update(data, enc).digest());
|
||||||
|
|
||||||
result = crypto.createHash('sha256').update(data, enc).digest();
|
return crypto.createHash('sha256').update(data, enc).digest();
|
||||||
|
|
||||||
return result;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
utils.dsha256 = function dsha256(data, enc) {
|
utils.dsha256 = function dsha256(data, enc) {
|
||||||
@ -284,8 +272,11 @@ utils.encrypt = function encrypt(data, passphrase) {
|
|||||||
utils.decrypt = function decrypt(data, passphrase) {
|
utils.decrypt = function decrypt(data, passphrase) {
|
||||||
var decipher, out;
|
var decipher, out;
|
||||||
|
|
||||||
if (!crypto)
|
if (!crypto) {
|
||||||
|
if (data[0] === ':')
|
||||||
|
throw new Error('Cannot decrypt.');
|
||||||
return data;
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
if (data[0] !== ':')
|
if (data[0] !== ':')
|
||||||
return data;
|
return data;
|
||||||
@ -873,10 +864,6 @@ utils.fromCompact = function fromCompact(compact) {
|
|||||||
if (negative)
|
if (negative)
|
||||||
num.ineg();
|
num.ineg();
|
||||||
|
|
||||||
// var overflow = mantissa !== 0 && ((exponent > 34)
|
|
||||||
// || (mantissa > 0xff && exponent > 33)
|
|
||||||
// || (mantissa > 0xffff && exponent > 32));
|
|
||||||
|
|
||||||
return num;
|
return num;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -925,28 +912,6 @@ utils.host = function host(addr) {
|
|||||||
return addr.split(':')[0];
|
return addr.split(':')[0];
|
||||||
};
|
};
|
||||||
|
|
||||||
utils.hash = function hash(obj, enc) {
|
|
||||||
if (obj == null)
|
|
||||||
throw new Error('Cannot get hash of null');
|
|
||||||
|
|
||||||
if (typeof obj === 'string')
|
|
||||||
return enc === 'hex' ? obj : new Buffer(obj, 'hex');
|
|
||||||
|
|
||||||
if (Buffer.isBuffer(obj))
|
|
||||||
return enc === 'hex' ? utils.toHex(obj) : obj;
|
|
||||||
|
|
||||||
if (typeof obj.hash === 'function')
|
|
||||||
return obj.hash(enc);
|
|
||||||
|
|
||||||
if (obj.hash)
|
|
||||||
return hash(obj.hash, enc);
|
|
||||||
|
|
||||||
if (obj._hash)
|
|
||||||
return hash(obj._hash, enc);
|
|
||||||
|
|
||||||
throw new Error('Cannot get hash of object');
|
|
||||||
};
|
|
||||||
|
|
||||||
utils.U64 = new bn('ffffffffffffffff', 'hex');
|
utils.U64 = new bn('ffffffffffffffff', 'hex');
|
||||||
|
|
||||||
utils.nonce = function nonce() {
|
utils.nonce = function nonce() {
|
||||||
@ -1441,9 +1406,6 @@ utils.ccmp = function(a, b) {
|
|||||||
assert(Buffer.isBuffer(a));
|
assert(Buffer.isBuffer(a));
|
||||||
assert(Buffer.isBuffer(b));
|
assert(Buffer.isBuffer(b));
|
||||||
|
|
||||||
if (a.length !== b.length)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
for (i = 0; i < a.length; i++)
|
for (i = 0; i < a.length; i++)
|
||||||
res |= a[i] ^ b[i];
|
res |= a[i] ^ b[i];
|
||||||
|
|
||||||
|
|||||||
@ -42,25 +42,4 @@ describe('Utils', function() {
|
|||||||
btc = utils.fromBTC('546.0');
|
btc = utils.fromBTC('546.0');
|
||||||
assert(btc.cmp(new bn(5460).mul(new bn(10000000))) === 0);
|
assert(btc.cmp(new bn(5460).mul(new bn(10000000))) === 0);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should convert objects to hashes', function() {
|
|
||||||
var b1 = '00';
|
|
||||||
var b2 = new Buffer([0]);
|
|
||||||
var b3 = { hash: function(enc) { return enc === 'hex' ? '00' : new Buffer([0]); } };
|
|
||||||
var b4 = { hash: '00' };
|
|
||||||
var b5 = { _hash: '00' };
|
|
||||||
var b6 = { hash: new Buffer([0]) };
|
|
||||||
var b7 = { _hash: new Buffer([0]) };
|
|
||||||
[b1, b2, b3, b4, b5, b6, b7].forEach(function(b, i) {
|
|
||||||
utils.assert.equal(utils.hash(b, 'hex'), '00');
|
|
||||||
utils.assert(utils.isEqual(utils.hash(b), [0]));
|
|
||||||
});
|
|
||||||
var thrown = true;
|
|
||||||
try {
|
|
||||||
utils.hash(1, 'hex');
|
|
||||||
} catch (e) {
|
|
||||||
thrown = true;
|
|
||||||
}
|
|
||||||
assert.equal(thrown, true);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user