Browse Source

Merge pull request #394 from ryanxcharles/feature/beautify

ran js-beautify on all bitcore source
patch-2
Manuel Aráoz 11 years ago
parent
commit
12e7101ffa
  1. 31
      bitcore.js
  2. 14
      const.js
  3. 1
      examples/Armory.js
  4. 5
      examples/ConnectionTor.js
  5. 33
      examples/CreateAndSignTx-Multisig.js
  6. 15
      examples/CreateAndSignTx-PayToPubkeyHash.js
  7. 35
      examples/CreateAndSignTx-PayToScriptHash.js
  8. 8
      examples/CreateKey.js
  9. 4
      examples/CreateScript.js
  10. 4
      examples/PeerDiscovery.js
  11. 4
      examples/SimpleP2Pmonitor.js
  12. 3
      lib/Address.js
  13. 3
      lib/BIP39.js
  14. 3
      lib/Base58.js
  15. 27
      lib/Block.js
  16. 9
      lib/Bloom.js
  17. 12
      lib/Connection.js
  18. 15
      lib/Curve.js
  19. 5
      lib/Deserialize.js
  20. 16
      lib/Electrum.js
  21. 34
      lib/HierarchicalKey.js
  22. 3
      lib/Message.js
  23. 5
      lib/PeerManager.js
  24. 16
      lib/Point.js
  25. 7
      lib/PrivateKey.js
  26. 28
      lib/RpcClient.js
  27. 12
      lib/SIN.js
  28. 10
      lib/Script.js
  29. 11
      lib/Sign.js
  30. 57
      lib/TransactionBuilder.js
  31. 5
      lib/Wallet.js
  32. 202
      lib/browser/Bignum.js
  33. 20
      lib/browser/ECIES.js
  34. 4
      lib/browser/Key.js
  35. 56
      lib/browser/Point.js
  36. 15
      lib/common/ECIES.js
  37. 3
      lib/common/SecureRandom.js
  38. 4
      networks.js
  39. 21
      util/BinaryParser.js
  40. 14
      util/EncFile.js
  41. 5
      util/EncodedData.js
  42. 8
      util/VersionedData.js
  43. 1
      util/error.js
  44. 21
      util/log.js
  45. 5
      util/time.js

31
bitcore.js

@ -7,19 +7,27 @@ Instead, we can set the 'get' property of each class to only require them when
they are accessed, saving memory if they are not used in a given project.
*/
var requireWhenAccessed = function(name, file) {
Object.defineProperty(module.exports, name, {get: function() {return require(file)}});
Object.defineProperty(module.exports, name, {
get: function() {
return require(file)
}
});
};
requireWhenAccessed('Bignum', 'bignum');
Object.defineProperty(module.exports, 'bignum', {get: function() {
Object.defineProperty(module.exports, 'bignum', {
get: function() {
console.log('bignum (with a lower-case "b") is deprecated. Use bitcore.Bignum (capital "B") instead.');
return require('bignum');
}});
}
});
requireWhenAccessed('Base58', './lib/Base58');
Object.defineProperty(module.exports, 'base58', {get: function() {
Object.defineProperty(module.exports, 'base58', {
get: function() {
console.log('base58 (with a lower-case "b") is deprecated. Use bitcore.Base58 (capital "B") instead.');
return require('./lib/Base58');
}});
}
});
requireWhenAccessed('bufferput', 'bufferput');
requireWhenAccessed('buffertools', 'buffertools');
requireWhenAccessed('Buffers.monkey', './patches/Buffers.monkey');
@ -38,10 +46,12 @@ requireWhenAccessed('VersionedData', './util/VersionedData');
requireWhenAccessed('BinaryParser', './util/BinaryParser');
requireWhenAccessed('Address', './lib/Address');
requireWhenAccessed('HierarchicalKey', './lib/HierarchicalKey');
Object.defineProperty(module.exports, 'BIP32', {get: function() {
Object.defineProperty(module.exports, 'BIP32', {
get: function() {
console.log('BIP32 is deprecated. Use bitcore.HierarchicalKey instead.');
return require('./lib/HierarchicalKey');
}});
}
});
requireWhenAccessed('BIP39', './lib/BIP39');
requireWhenAccessed('BIP39WordlistEn', './lib/BIP39WordlistEn');
requireWhenAccessed('Point', './lib/Point');
@ -55,10 +65,12 @@ requireWhenAccessed('Block', './lib/Block');
requireWhenAccessed('ScriptInterpreter', './lib/ScriptInterpreter');
requireWhenAccessed('Bloom', './lib/Bloom');
requireWhenAccessed('Key', './lib/Key');
Object.defineProperty(module.exports, 'KeyModule', {get: function() {
Object.defineProperty(module.exports, 'KeyModule', {
get: function() {
console.log('KeyModule is deprecated.');
return require('bindings')('KeyModule');
}});
}
});
requireWhenAccessed('SINKey', './lib/SINKey');
requireWhenAccessed('SIN', './lib/SIN');
requireWhenAccessed('PrivateKey', './lib/PrivateKey');
@ -70,4 +82,3 @@ requireWhenAccessed('Message', './lib/Message');
requireWhenAccessed('Electrum', './lib/Electrum');
requireWhenAccessed('Armory', './lib/Armory');
module.exports.Buffer = Buffer;

14
const.js

@ -1,4 +1,3 @@
MSG = {
TX: 1,
BLOCK: 2,
@ -7,12 +6,15 @@ MSG = {
MSG.to_str = function(t) {
switch (t) {
case MSG.TX: return 'transaction';
case MSG.BLOCK: return 'block';
case MSG.FILTERED_BLOCK: return 'filtered block';
default: return 'unknown';
case MSG.TX:
return 'transaction';
case MSG.BLOCK:
return 'block';
case MSG.FILTERED_BLOCK:
return 'filtered block';
default:
return 'unknown';
}
}
exports.MSG = MSG;

1
examples/Armory.js

@ -63,4 +63,3 @@ for (var i = 0; i < 5; i++) {
console.log(Address.fromPubKey(b.pubkey).as('base58'));
b = b.next();
}

5
examples/ConnectionTor.js

@ -14,7 +14,10 @@ dns.resolve('dnsseed.bluematt.me', function(err, seeds) {
// but specify a socks5 proxy to create a socket
// that's bound to that proxy in it's place
var connection = new Connection(null, peer, {
proxy: { host: '127.0.0.1', port: 9050 }
proxy: {
host: '127.0.0.1',
port: 9050
}
});
connection.open();

33
examples/CreateAndSignTx-Multisig.js

@ -1,10 +1,11 @@
var run = function() {
bitcore = typeof(bitcore) === 'undefined' ? require('../bitcore') : bitcore;
var networks = require('../networks');
var WalletKey = bitcore.WalletKey;
var Builder = bitcore.TransactionBuilder;
var opts = {network: networks.testnet};
var opts = {
network: networks.testnet
};
console.log('## Network: ' + opts.network.name);
@ -13,8 +14,7 @@ var run = function() {
input.priv = "cS62Ej4SobZnpFQYN1PEEBr2KWf5sgRYYnELtumcG6WVCfxno39V";
// Complete with the corresponding UTXO you want to use
var utxos = [
{
var utxos = [{
address: input.addr,
txid: "39c71ebda371f75f4b854a720eaf9898b237facf3c2b101b58cd4383a44a6adc",
vout: 1,
@ -22,8 +22,7 @@ var run = function() {
scriptPubKey: "76a914e867aad8bd361f57c50adc37a0c018692b5b0c9a88ac",
amount: 0.4296,
confirmations: 2
}
];
}];
var privs = [
"cP6JBHuQf7yqeqtdKRd22ibF3VehDv7G6BdzxSNABgrv3jFJUGoN",
@ -36,12 +35,18 @@ var run = function() {
var pubkeys = []
privs.forEach(function(p) {
var wk = new WalletKey(opts);
wk.fromObj({priv: p});
wk.fromObj({
priv: p
});
pubkeys.push(bitcore.buffertools.toHex(wk.privKey.public));
});
var outs = [{nreq:3, pubkeys:pubkeys, amount:0.05}];
var outs = [{
nreq: 3,
pubkeys: pubkeys,
amount: 0.05
}];
var tx = new Builder(opts)
.setUnspent(utxos)
.setOutputs(outs)
@ -59,8 +64,7 @@ var run = function() {
*
* REDDEEM TX
*/
var utxos2 = [
{
var utxos2 = [{
address: input.addr,
txid: "e4bc22d8c519d3cf848d710619f8480be56176a4a6548dfbe865ab3886b578b5",
vout: 0,
@ -68,10 +72,12 @@ var run = function() {
scriptPubKey: scriptPubKey,
amount: 0.05,
confirmations: 2
}
];
}];
outs = [{address:input.addr, amount:0.04}];
outs = [{
address: input.addr,
amount: 0.04
}];
var b = new Builder(opts)
.setUnspent(utxos2)
.setOutputs(outs)
@ -100,4 +106,3 @@ if (typeof module !== 'undefined') {
}
////

15
examples/CreateAndSignTx-PayToPubkeyHash.js

@ -1,6 +1,3 @@
var run = function() {
bitcore = typeof(bitcore) === 'undefined' ? require('../bitcore') : bitcore;
@ -23,9 +20,16 @@ var run = function() {
console.log('Unspends Outputs:', utxos);
var outs = [{address:toAddress, amount:amt}];
var outs = [{
address: toAddress,
amount: amt
}];
var keys = [priv];
var opts = {remainderOut: {address: changeAddressString}};
var opts = {
remainderOut: {
address: changeAddressString
}
};
var Builder = bitcore.TransactionBuilder;
var tx = new Builder(opts)
@ -67,4 +71,3 @@ if (typeof module !== 'undefined') {
}
////

35
examples/CreateAndSignTx-PayToScriptHash.js

@ -4,7 +4,9 @@ var run = function() {
var WalletKey = bitcore.WalletKey;
var Script = bitcore.Script;
var Builder = bitcore.TransactionBuilder;
var opts = {network: networks.testnet};
var opts = {
network: networks.testnet
};
console.log('## Network: ' + opts.network.name);
@ -13,8 +15,7 @@ var run = function() {
input.priv = "cS62Ej4SobZnpFQYN1PEEBr2KWf5sgRYYnELtumcG6WVCfxno39V";
// Complete with the corresponding UTXO you want to use
var utxos = [
{
var utxos = [{
address: "n2hoFVbPrYQf7RJwiRy1tkbuPPqyhAEfbp",
txid: "e4bc22d8c519d3cf848d710619f8480be56176a4a6548dfbe865ab3886b578b5",
vout: 1,
@ -22,8 +23,7 @@ var run = function() {
scriptPubKey: "76a914e867aad8bd361f57c50adc37a0c018692b5b0c9a88ac",
amount: 0.3795,
confirmations: 7
}
];
}];
var privs = [
"cMpKwGr5oxEacN95WFKNEq6tTcvi11regFwS3muHvGYVxMPJX8JA",
@ -36,12 +36,17 @@ var run = function() {
var pubkeys = []
privs.forEach(function(p) {
var wk = new WalletKey(opts);
wk.fromObj({priv: p});
wk.fromObj({
priv: p
});
pubkeys.push(bitcore.buffertools.toHex(wk.privKey.public));
});
// multisig p2sh
var opts = {nreq:3, pubkeys:pubkeys};
var opts = {
nreq: 3,
pubkeys: pubkeys
};
// p2scriphash p2sh
//var opts = [{address: an_address}];
@ -51,7 +56,10 @@ var run = function() {
var p2shAddress = info.address;
var outs = [{address:p2shAddress, amount:0.05}];
var outs = [{
address: p2shAddress,
amount: 0.05
}];
var tx = new Builder(opts)
.setUnspent(utxos)
.setOutputs(outs)
@ -72,8 +80,7 @@ var run = function() {
*
* REDDEEM TX
*/
var utxos2 = [
{
var utxos2 = [{
address: p2shAddress,
txid: "c2e50d1c8c581d8c4408378b751633f7eb86687fc5f0502be7b467173f275ae7",
vout: 0,
@ -81,10 +88,12 @@ var run = function() {
scriptPubKey: scriptPubKey,
amount: 0.05,
confirmations: 1
}
];
}];
outs = [{address:input.addr, amount:0.04}];
outs = [{
address: input.addr,
amount: 0.04
}];
var hashMap = {};
hashMap[p2shAddress] = p2shScript;

8
examples/CreateKey.js

@ -8,7 +8,9 @@ var run = function() {
var networks = require('../networks');
var WalletKey = bitcore.WalletKey;
var opts = {network: networks.testnet};
var opts = {
network: networks.testnet
};
function print(wk) {
@ -32,7 +34,9 @@ var run = function() {
//Generate from private Key WIF. Compressed status taken from WIF.
var wk2 = new WalletKey(opts);
wk2.fromObj({priv:'cMpKwGr5oxEacN95WFKNEq6tTcvi11regFwS3muHvGYVxMPJX8JA'});
wk2.fromObj({
priv: 'cMpKwGr5oxEacN95WFKNEq6tTcvi11regFwS3muHvGYVxMPJX8JA'
});
print(wk2);

4
examples/CreateScript.js

@ -9,7 +9,9 @@ var run = function() {
var buffertools = bitcore.buffertools;
var Address = bitcore.Address;
var util = bitcore.util;
var opts = {network: networks.testnet};
var opts = {
network: networks.testnet
};
var p = console.log;

4
examples/PeerDiscovery.js

@ -1,4 +1,6 @@
var PeerManager = require('../lib/PeerManager');
var peerman = new PeerManager();
peerman.discover({ limit: 12 }).start();
peerman.discover({
limit: 12
}).start();

4
examples/SimpleP2Pmonitor.js

@ -19,7 +19,8 @@ var socket = peer.createConnection();
var con = new Connection(socket, peer);
con.on('error', function(msg) {
var peer = msg.peer, err = msg.err;
var peer = msg.peer,
err = msg.err;
console.error('Error connecting to peer', peer.host + ':' + peer.port, '(' + err.message + ')');
});
@ -69,4 +70,3 @@ listen('inv', function (event, log) {
log('Received message inv (%s invs)', event.message.count);
console.log(event.message.invs);
});

3
lib/Address.js

@ -105,7 +105,8 @@ Address.fromScriptPubKey = function(scriptPubKey, network) {
if (!network)
network = 'livenet';
var ret=[], version;
var ret = [],
version;
var payload = scriptPubKey.capture();
if (payload) {

3
lib/BIP39.js

@ -15,8 +15,7 @@ var pbkdf2Sync_sha512 = function(password, salt, iterations, keylen) {
return sjcl.codec.hex.fromBits(derivedKey)
};
var BIP39 = function() {
};
var BIP39 = function() {};
BIP39.mnemonic = function(wordlist, bits) {
if (!bits)

3
lib/Base58.js

@ -35,7 +35,8 @@ var base58 = {
var j = 0;
while (buf[j] == 0) {
str[i] = ALPHABET_BUF[0];
j++; i--;
j++;
i--;
}
return str.slice(i + 1, str.length).toString('ascii');

27
lib/Block.js

@ -17,8 +17,7 @@ var BlockRules = {
largestHash: Bignum(2).pow(256)
};
function Block(data)
{
function Block(data) {
if ("object" !== typeof data) {
data = {};
}
@ -39,12 +38,18 @@ function Block(data)
Block.prototype.getHeader = function getHeader() {
var buf = new Buffer(80);
var ofs = 0;
buf.writeUInt32LE(this.version, ofs); ofs += 4;
this.prev_hash.copy(buf, ofs); ofs += 32;
this.merkle_root.copy(buf, ofs); ofs += 32;
buf.writeUInt32LE(this.timestamp, ofs); ofs += 4;
buf.writeUInt32LE(this.bits, ofs); ofs += 4;
buf.writeUInt32LE(this.nonce, ofs); ofs += 4;
buf.writeUInt32LE(this.version, ofs);
ofs += 4;
this.prev_hash.copy(buf, ofs);
ofs += 32;
this.merkle_root.copy(buf, ofs);
ofs += 32;
buf.writeUInt32LE(this.timestamp, ofs);
ofs += 4;
buf.writeUInt32LE(this.bits, ofs);
ofs += 4;
buf.writeUInt32LE(this.nonce, ofs);
ofs += 4;
return buf;
};
@ -234,8 +239,7 @@ Block.prototype.toString = function toString() {
Block.prototype.createCoinbaseTx =
function createCoinbaseTx(beneficiary)
{
function createCoinbaseTx(beneficiary) {
var tx = new Transaction();
tx.ins.push(new TransactionIn({
s: util.EMPTY_BUFFER,
@ -259,8 +263,7 @@ Block.prototype.solve = function solve(miner, callback) {
* Returns an object with the same field names as jgarzik's getblock patch.
*/
Block.prototype.getStandardizedObject =
function getStandardizedObject(txs)
{
function getStandardizedObject(txs) {
var block = {
hash: util.formatHashFull(this.getHash()),
version: this.version,

9
lib/Bloom.js

@ -47,9 +47,12 @@ Bloom.prototype.hash = function(hashNum, data) {
var k1 = 0;
switch (data.length & 3) {
case 3: k1 ^= tail[2] << 16;
case 2: k1 ^= tail[1] << 8;
case 1: k1 ^= tail[0];
case 3:
k1 ^= tail[2] << 16;
case 2:
k1 ^= tail[1] << 8;
case 1:
k1 ^= tail[0];
k1 *= c1;
k1 = ROTL32(k1, 15);
k1 *= c2;

12
lib/Connection.js

@ -399,10 +399,11 @@ Connection.prototype.processData = function () {
var checksumConfirm = doubleSha256(payload).slice(0, 4);
if (buffertools.compare(checksumConfirm, checksum) !== 0) {
log.err('[' + this.peer + '] ' +
'Checksum failed',
{ cmd: command,
'Checksum failed', {
cmd: command,
expected: checksumConfirm.toString('hex'),
actual: checksum.toString('hex') });
actual: checksum.toString('hex')
});
return;
}
}
@ -552,8 +553,9 @@ Connection.prototype.parseMessage = function (command, payload) {
break;
default:
log.err('Connection.parseMessage(): Command not implemented',
{cmd: command});
log.err('Connection.parseMessage(): Command not implemented', {
cmd: command
});
// This tells the calling function not to issue an event
return null;

15
lib/Curve.js

@ -3,11 +3,12 @@ var imports = require('soop');
var bignum = imports.bignum || require('bignum');
var Point = imports.Point || require('./Point');
var n = bignum.fromBuffer(new Buffer("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141", 'hex'), {size: 32});
var n = bignum.fromBuffer(new Buffer("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141", 'hex'), {
size: 32
});
var Curve = function() {
};
var Curve = function() {};
/* secp256k1 curve */
var G;
@ -16,8 +17,12 @@ Curve.getG = function() {
// when Point is not loaded yet
// use cached version if available
G = G || new Point(bignum.fromBuffer(new Buffer("79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798", 'hex'), {size: 32}),
bignum.fromBuffer(new Buffer("483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8", 'hex'), {size: 32}));
G = G || new Point(bignum.fromBuffer(new Buffer("79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798", 'hex'), {
size: 32
}),
bignum.fromBuffer(new Buffer("483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8", 'hex'), {
size: 32
}));
return G;
};

5
lib/Deserialize.js

@ -1,8 +1,5 @@
exports.intFromCompact = function(c)
{
exports.intFromCompact = function(c) {
var bytes = ((c >>> 24) & 0xff) >>> 0;
var v = ((c & 0xffffff) << (8 * (bytes - 3))) >>> 0;
return v;
}

16
lib/Electrum.js

@ -23,8 +23,12 @@ Electrum.prototype.getSequence = function (for_change, n) {
};
Electrum.prototype.generatePubKey = function(n, for_change) {
var x = bignum.fromBuffer(this.mpk.slice(0, 32), { size: 32 });
var y = bignum.fromBuffer(this.mpk.slice(32, 64), { size: 32 });
var x = bignum.fromBuffer(this.mpk.slice(0, 32), {
size: 32
});
var y = bignum.fromBuffer(this.mpk.slice(32, 64), {
size: 32
});
var mpk_pt = new Point(x, y);
var sequence = this.getSequence(for_change, n);
@ -37,8 +41,12 @@ Electrum.prototype.generatePubKey = function (n, for_change) {
pt = Point.add(mpk_pt, sequence_pt);
var xbuf = pt.x.toBuffer({ size: 32 });
var ybuf = pt.y.toBuffer({ size: 32 });
var xbuf = pt.x.toBuffer({
size: 32
});
var ybuf = pt.y.toBuffer({
size: 32
});
var prefix = new Buffer([0x04]);
var key = new Key();

34
lib/HierarchicalKey.js

@ -19,8 +19,7 @@ var HierarchicalKey = function(bytes) {
if (typeof bytes == 'undefined' || bytes == 'mainnet' || bytes == 'livenet') {
bytes = 'livenet';
this.version = networks['livenet'].hkeyPrivateVersion;
}
else if (bytes == 'testnet') {
} else if (bytes == 'testnet') {
this.version = networks['testnet'].hkeyPrivateVersion;
}
if (bytes == 'livenet' || bytes == 'testnet') {
@ -265,18 +264,24 @@ HierarchicalKey.prototype.deriveChild = function(i) {
}
var hash = coinUtil.sha512hmac(data, this.chainCode);
var il = bignum.fromBuffer(hash.slice(0, 32), {size: 32});
var il = bignum.fromBuffer(hash.slice(0, 32), {
size: 32
});
var ir = hash.slice(32, 64);
// ki = IL + kpar (mod n).
var priv = bignum.fromBuffer(this.eckey.private, {size: 32});
var priv = bignum.fromBuffer(this.eckey.private, {
size: 32
});
var k = il.add(priv).mod(secp256k1_n);
ret = new HierarchicalKey(null);
ret.chainCode = ir;
ret.eckey = new Key();
ret.eckey.private = k.toBuffer({size: 32});
ret.eckey.private = k.toBuffer({
size: 32
});
ret.eckey.regenerateSync();
ret.hasPrivateKey = true;
@ -334,9 +339,20 @@ function uint(f, size) {
return n;
}
function u8(f) {return uint(f,1);}
function u16(f) {return uint(f,2);}
function u32(f) {return uint(f,4);}
function u64(f) {return uint(f,8);}
function u8(f) {
return uint(f, 1);
}
function u16(f) {
return uint(f, 2);
}
function u32(f) {
return uint(f, 4);
}
function u64(f) {
return uint(f, 8);
}
module.exports = require('soop')(HierarchicalKey);

3
lib/Message.js

@ -3,8 +3,7 @@ var imports = require('soop').imports();
var coinUtil = imports.coinUtil || require('../util');
var Key = imports.Key || require('./Key');
var Message = function() {
};
var Message = function() {};
Message.sign = function(str, key) {
var hash = Message.magicHash(str);

5
lib/PeerManager.js

@ -64,8 +64,9 @@ PeerManager.prototype.addPeer = function(peer, port) {
} else if ("string" == typeof peer) {
this.addPeer(new Peer(peer, port));
} else {
log.err('Node.addPeer(): Invalid value provided for peer',
{val: peer});
log.err('Node.addPeer(): Invalid value provided for peer', {
val: peer
});
throw 'Node.addPeer(): Invalid value provided for peer.';
}
};

16
lib/Point.js

@ -28,15 +28,23 @@ Point.multiply = function(p1, x) {
//convert the public key of a Key into a Point
Point.fromUncompressedPubKey = function(pubkey) {
var point = new Point();
point.x = bignum.fromBuffer(pubkey.slice(1, 33), {size: 32});
point.y = bignum.fromBuffer(pubkey.slice(33, 65), {size: 32});
point.x = bignum.fromBuffer(pubkey.slice(1, 33), {
size: 32
});
point.y = bignum.fromBuffer(pubkey.slice(33, 65), {
size: 32
});
return point;
};
//convert the Point into the Key containing a compressed public key
Point.prototype.toUncompressedPubKey = function() {
var xbuf = this.x.toBuffer({size: 32});
var ybuf = this.y.toBuffer({size: 32});
var xbuf = this.x.toBuffer({
size: 32
});
var ybuf = this.y.toBuffer({
size: 32
});
var prefix = new Buffer([0x04]);
var pubkey = Buffer.concat([prefix, xbuf, ybuf]);
return pubkey;

7
lib/PrivateKey.js

@ -26,7 +26,9 @@ PrivateKey.prototype.validate = function() {
// overloaded from VersionedData
PrivateKey.prototype.payload = function(data) {
if (data) {
this.doAsBinary(function() {data.copy(this.data,1);});
this.doAsBinary(function() {
data.copy(this.data, 1);
});
return data;
}
var buf = this.as('binary');
@ -50,8 +52,7 @@ PrivateKey.prototype.compressed = function(compressed) {
this.data = this.data.slice(0, len - 1);
}
});
}
else {
} else {
var len = 1 + 32 + 1;
var data = this.as('binary');
if (data.length == len && data[len - 1] == 1)

28
lib/RpcClient.js

@ -107,18 +107,33 @@ function generateRPCMethods(constructor, apiCalls, rpc) {
if (argMap[i]) arguments[i] = argMap[i](arguments[i]);
};
if (this.batchedCalls) {
this.batchedCalls.push({jsonrpc: '2.0', method: methodName, params: slice(arguments)});
this.batchedCalls.push({
jsonrpc: '2.0',
method: methodName,
params: slice(arguments)
});
} else {
rpc.call(this, {method: methodName, params: slice(arguments, 0, arguments.length - 1)}, arguments[arguments.length - 1]);
rpc.call(this, {
method: methodName,
params: slice(arguments, 0, arguments.length - 1)
}, arguments[arguments.length - 1]);
}
};
};
var types = {
str: function(arg) {return arg.toString();},
int: function(arg) {return parseFloat(arg);},
float: function(arg) {return parseFloat(arg);},
bool: function(arg) {return (arg === true || arg == '1' || arg == 'true' || arg.toString().toLowerCase() == 'true');},
str: function(arg) {
return arg.toString();
},
int: function(arg) {
return parseFloat(arg);
},
float: function(arg) {
return parseFloat(arg);
},
bool: function(arg) {
return (arg === true || arg == '1' || arg == 'true' || arg.toString().toLowerCase() == 'true');
},
};
for (var k in apiCalls) {
@ -205,4 +220,3 @@ function rpc(request, callback) {
generateRPCMethods(RpcClient, callspec, rpc);
module.exports = require('soop')(RpcClient);

12
lib/SIN.js

@ -22,7 +22,9 @@ SIN.SIN_EPHEM = 0x02; // generate off-net at any time
// get or set the prefix data (the first byte of the address)
SIN.prototype.prefix = function(num) {
if (num || (num === 0)) {
this.doAsBinary(function() {this.data.writeUInt8(num, 0);});
this.doAsBinary(function() {
this.data.writeUInt8(num, 0);
});
return num;
}
return this.as('binary').readUInt8(0);
@ -31,7 +33,9 @@ SIN.prototype.prefix = function(num) {
// get or set the SIN-type data (the second byte of the address)
SIN.prototype.type = function(num) {
if (num || (num === 0)) {
this.doAsBinary(function() {this.data.writeUInt8(num, 1);});
this.doAsBinary(function() {
this.data.writeUInt8(num, 1);
});
return num;
}
return this.as('binary').readUInt8(1);
@ -40,7 +44,9 @@ SIN.prototype.type = function(num) {
// get or set the payload data (as a Buffer object)
SIN.prototype.payload = function(data) {
if (data) {
this.doAsBinary(function() {data.copy(this.data, 2);});
this.doAsBinary(function() {
data.copy(this.data, 2);
});
return data;
}
return this.as('binary').slice(1);

10
lib/Script.js

@ -110,7 +110,9 @@ function isSmallIntOp(opcode) {
Script.prototype.isMultiSig = function() {
return (this.chunks.length > 3 &&
isSmallIntOp(this.chunks[0]) &&
this.chunks.slice(1,this.chunks.length-2).every(function(i){return Buffer.isBuffer(i);}) &&
this.chunks.slice(1, this.chunks.length - 2).every(function(i) {
return Buffer.isBuffer(i);
}) &&
isSmallIntOp(this.chunks[this.chunks.length - 2]) &&
this.chunks[this.chunks.length - 1] == Opcode.map.OP_CHECKMULTISIG);
};
@ -137,8 +139,7 @@ Script.prototype.countSignatures = function() {
// Multisig?
if (this.isMultiSigScriptSig()) {
ret = l - 1;
}
else if (this.isP2shScriptSig()) {
} else if (this.isP2shScriptSig()) {
ret = l - 2;
}
// p2pubkey or p2pubkeyhash
@ -161,8 +162,7 @@ Script.prototype.countMissingSignatures = function() {
var redeemScript = new Script(this.chunks[l - 1]);
if (!isSmallIntOp(redeemScript.chunks[0])) {
log.debug("Unrecognized script type");
}
else {
} else {
var nreq = redeemScript.chunks[0] - 80; //see OP_2-OP_16
ret = nreq - (l - 2); // 2-> marked 0 + redeemScript
}

11
lib/Sign.js

@ -1,6 +1,4 @@
function signOne(hash, addrStr, keys)
{
function signOne(hash, addrStr, keys) {
var keyObj = keys[addrStr];
var rawPrivKey = new Buffer(keyObj.priv, 'hex');
var key = new KeyModule.Key();
@ -10,8 +8,7 @@ function signOne(hash, addrStr, keys)
return signature;
}
function signTxIn(nIn, tx, txInputs, network, keys, scripts)
{
function signTxIn(nIn, tx, txInputs, network, keys, scripts) {
// locate TX input needing a signature
var txin = tx.ins[nIn];
var scriptSig = txin.getScript();
@ -125,9 +122,7 @@ function signTxIn(nIn, tx, txInputs, network, keys, scripts)
scriptSig.writeBytes(subscriptRaw);
}
exports.Transaction = function Transaction(tx, txInputs, network, keys, scripts)
{
exports.Transaction = function Transaction(tx, txInputs, network, keys, scripts) {
for (var i = 0; i < tx.ins.length; i++)
signTxIn(i, tx, txInputs, network, keys, scripts);
};

57
lib/TransactionBuilder.js

@ -344,7 +344,8 @@ TransactionBuilder.prototype._setRemainder = function(txobj, remainderIndex) {
TransactionBuilder.prototype._setFeeAndRemainder = function(txobj) {
/* starting size estimation */
var size = 500, maxSizeK, remainderIndex = txobj.outs.length;
var size = 500,
maxSizeK, remainderIndex = txobj.outs.length;
do {
/* based on https://en.bitcoin.it/wiki/Transaction_fees */
maxSizeK = parseInt(size / 1000) + 1;
@ -422,13 +423,15 @@ TransactionBuilder._mapKeys = function(keys) {
if (typeof k === 'string') {
var pk = new PrivateKey(k);
wk = new WalletKey({ network: pk.network() });
wk.fromObj({ priv: k });
}
else if (k instanceof WalletKey) {
wk = new WalletKey({
network: pk.network()
});
wk.fromObj({
priv: k
});
} else if (k instanceof WalletKey) {
wk = k;
}
else {
} else {
throw new Error('argument must be an array of strings (WIF format) or WalletKey objects');
}
walletKeyMap[wk.storeObj().addr] = wk;
@ -437,7 +440,8 @@ TransactionBuilder._mapKeys = function(keys) {
};
TransactionBuilder._signHashAndVerify = function(wk, txSigHash) {
var triesLeft = 10, sigRaw;
var triesLeft = 10,
sigRaw;
do {
sigRaw = wk.privKey.signSync(txSigHash);
@ -475,11 +479,9 @@ TransactionBuilder.prototype._findWalletKey = function(walletKeyMap, input) {
if (input.address) {
wk = walletKeyMap[input.address];
}
else if (input.pubKeyHash) {
} else if (input.pubKeyHash) {
wk = this._multiFindKey(walletKeyMap, input.pubKeyHash);
}
else if (input.pubKeyBuf) {
} else if (input.pubKeyBuf) {
var pubKeyHash = util.sha256ripe160(input.pubKeyBuf);
wk = this._multiFindKey(walletKeyMap, pubKeyHash);
} else {
@ -502,7 +504,11 @@ TransactionBuilder.prototype._signPubKey = function(walletKeyMap, input, txSigHa
var scriptSig = new Script();
scriptSig.chunks.push(sig);
scriptSig.updateBuffer();
return {inputFullySigned: true, signaturesAdded: 1, script: scriptSig.getBuffer()};
return {
inputFullySigned: true,
signaturesAdded: 1,
script: scriptSig.getBuffer()
};
};
TransactionBuilder.prototype._signPubKeyHash = function(walletKeyMap, input, txSigHash) {
@ -521,7 +527,11 @@ TransactionBuilder.prototype._signPubKeyHash = function(walletKeyMap, input, txS
scriptSig.chunks.push(sig);
scriptSig.chunks.push(wk.privKey.public);
scriptSig.updateBuffer();
return {inputFullySigned: true, signaturesAdded: 1, script: scriptSig.getBuffer()};
return {
inputFullySigned: true,
signaturesAdded: 1,
script: scriptSig.getBuffer()
};
};
/* FOR TESTING
@ -618,7 +628,9 @@ TransactionBuilder.prototype._signMultiSig = function(walletKeyMap, input, txSig
var signaturesAdded = 0;
for (var j = 0; j < l && scriptSig.countSignatures() < nreq; j++) {
var wk = this._findWalletKey(walletKeyMap, {pubKeyBuf: pubkeys[j]});
var wk = this._findWalletKey(walletKeyMap, {
pubKeyBuf: pubkeys[j]
});
if (!wk) continue;
var newScriptSig = this._updateMultiSig(j, wk, scriptSig, txSigHash, pubkeys);
@ -855,8 +867,7 @@ TransactionBuilder.prototype._checkMergeability = function(b) {
.forEach(function(k) {
if (self[k].toString() !== b[k].toString()) {
throw new Error('mismatch at TransactionBuilder match: '
+ k + ': ' + self[k] + ' vs. ' + b[k]);
throw new Error('mismatch at TransactionBuilder match: ' + k + ': ' + self[k] + ' vs. ' + b[k]);
}
});
@ -872,7 +883,8 @@ TransactionBuilder.prototype._checkMergeability = function(b) {
}
var err = 0, i=0;;
var err = 0,
i = 0;;
self.selectedUtxos.forEach(function(u) {
if (!err) {
var v = b.selectedUtxos[i++];
@ -888,7 +900,8 @@ TransactionBuilder.prototype._checkMergeability = function(b) {
throw new Error('mismatch at TransactionBuilder selectedUtxos #' + i - 1 + ' Key:' + err);
err = 0; i=0;;
err = 0;
i = 0;;
self.inputMap.forEach(function(u) {
if (!err) {
var v = b.inputMap[i++];
@ -969,8 +982,7 @@ TransactionBuilder.prototype._mergeInputSig = function(index, s0buf, s1buf) {
log.debug('Merging two signed inputs type:' +
input.scriptPubKey.getRawOutType() + '. Signatures differs. Using the first version.');
return s0buf;
}
else if (type!== Script.TX_SCRIPTHASH) {
} else if (type !== Script.TX_SCRIPTHASH) {
// No support for normal multisig or strange txs.
throw new Error('Script type:' + input.scriptPubKey.getRawOutType() + 'not supported at #merge');
}
@ -1013,8 +1025,7 @@ TransactionBuilder.prototype.merge = function(b) {
// Does this tX have any signature already?
if (this.tx || b.tx) {
if (this.tx.getNormalizedHash().toString('hex')
!== b.tx.getNormalizedHash().toString('hex'))
if (this.tx.getNormalizedHash().toString('hex') !== b.tx.getNormalizedHash().toString('hex'))
throw new Error('mismatch at TransactionBuilder NTXID');
this._mergeTx(b.tx);

5
lib/Wallet.js

@ -1,6 +1,8 @@
var imports = require('soop').imports();
var hex = function(hex) {return new Buffer(hex, 'hex');};
var hex = function(hex) {
return new Buffer(hex, 'hex');
};
var fs = require('fs');
var EncFile = require('../util/EncFile');
@ -137,4 +139,3 @@ Wallet.prototype.addScript = function(script) {
};
module.exports = require('soop')(Wallet);

202
lib/browser/Bignum.js

@ -78,7 +78,9 @@ var MAX = 1E9, // 0 to 1e+9
outOfRange,
id = 0,
isValid = /^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,
trim = String.prototype.trim || function () {return this.replace(/^\s+|\s+$/g, '')},
trim = String.prototype.trim || function() {
return this.replace(/^\s+|\s+$/g, '')
},
ONE = BigNumber(1);
@ -238,8 +240,7 @@ function BigNumber( n, b ) {
}
// Determine leading zeros.
for ( i = 0; n.charAt(i) == '0'; i++ ) {
}
for (i = 0; n.charAt(i) == '0'; i++) {}
b = n.length;
@ -265,15 +266,13 @@ function BigNumber( n, b ) {
} else {
// Determine trailing zeros.
for ( ; n.charAt(--b) == '0'; ) {
}
for (; n.charAt(--b) == '0';) {}
x['e'] = e;
x['c'] = [];
// Convert string to array of digits (without leading and trailing zeros).
for ( e = 0; i <= b; x['c'][e++] = +n.charAt(i++) ) {
}
for (e = 0; i <= b; x['c'][e++] = +n.charAt(i++)) {}
}
}
@ -298,16 +297,15 @@ BigNumber['fromBuffer'] = function (buf, opts) {
if (!opts) opts = {};
var endian = { 1 : 'big', '-1' : 'little' }[opts.endian]
|| opts.endian || 'big'
;
var endian = {
1: 'big',
'-1': 'little'
}[opts.endian] || opts.endian || 'big';
var size = opts.size === 'auto' ? Math.ceil(buf.length) : (opts.size || 1);
if (buf.length % size !== 0) {
throw new RangeError('Buffer length (' + buf.length + ')'
+ ' must be a multiple of size (' + size + ')'
);
throw new RangeError('Buffer length (' + buf.length + ')' + ' must be a multiple of size (' + size + ')');
}
var hex = [];
@ -356,9 +354,11 @@ BigNumber['config'] = function () {
return !((outOfRange = n < lo || n > hi) ||
parse(n) != n && n !== 0);
},
has = o && typeof o == 'object'
? function () {if ( o.hasOwnProperty(p) ) return ( v = o[p] ) != null}
: function () {if ( a.length > i ) return ( v = a[i++] ) != null};
has = o && typeof o == 'object' ? function() {
if (o.hasOwnProperty(p)) return (v = o[p]) != null
} : function() {
if (a.length > i) return (v = a[i++]) != null
};
// [DECIMAL_PLACES] {number} Integer, 0 to MAX inclusive.
if (has(p = 'DECIMAL_PLACES')) {
@ -433,9 +433,7 @@ BigNumber['config'] = function () {
if (has(p = 'ERRORS')) {
if (v === !!v || v === 1 || v === 0) {
parse = ( outOfRange = id = 0, ERRORS = !!v )
? parseInt
: parseFloat;
parse = (outOfRange = id = 0, ERRORS = !!v) ? parseInt : parseFloat;
} else {
// 'config() ERRORS not a boolean or binary digit: {v}'
@ -466,14 +464,9 @@ function ifExceptionsThrow( arg, i, j, isArray, isRange, isErrors) {
method + ' number type has more than 15 significant digits',
method + ' not a base ' + j + ' number',
method + ' base' + message,
method + ' not a number' ][i] ||
j + '() ' + i + ( isErrors
? ' not a boolean or binary digit'
: message + ( isArray
? ' or not [' + ( outOfRange
? ' negative, positive'
: ' integer, integer' ) + ' ]'
: '' ) ) ) + ': ' + arg;
method + ' not a number'
][i] ||
j + '() ' + i + (isErrors ? ' not a boolean or binary digit' : message + (isArray ? ' or not [' + (outOfRange ? ' negative, positive' : ' integer, integer') + ' ]' : ''))) + ': ' + arg;
outOfRange = id = 0;
error = new Error(message);
@ -502,12 +495,9 @@ function convert( nStr, baseOut, baseIn, sign ) {
for (bIn = bIn || baseIn; i < strL; i++) {
for ( arrL = arr.length, j = 0; j < arrL; arr[j] *= bIn, j++ ) {
}
for (arrL = arr.length, j = 0; j < arrL; arr[j] *= bIn, j++) {}
for ( arr[0] += DIGITS.indexOf( str.charAt(i) ), j = 0;
j < arr.length;
j++ ) {
for (arr[0] += DIGITS.indexOf(str.charAt(i)), j = 0; j < arr.length; j++) {
if (arr[j] > baseOut - 1) {
@ -530,8 +520,7 @@ function convert( nStr, baseOut, baseIn, sign ) {
arrL = arr.length,
str = '';
for ( ; i < arrL; str += DIGITS.charAt( arr[i++] ) ) {
}
for (; i < arrL; str += DIGITS.charAt(arr[i++])) {}
return str;
}
@ -576,8 +565,7 @@ function convert( nStr, baseOut, baseIn, sign ) {
if (e = fracBN['e']) {
// Append zeros according to the exponent of the result.
for ( ; ++e; fracArr.unshift(0) ) {
}
for (; ++e; fracArr.unshift(0)) {}
// Append the fraction part to the converted integer part.
nStr = arrToStr(nArr) + '.' + arrToStr(fracArr);
@ -625,8 +613,7 @@ function divide( dvd, dvs, exp, s, base, isOdd ) {
s = dig < 0 ? 0 : dig;
// Add zeros to make remainder as long as divisor.
for ( ; remL++ < dvsL; rem.push(0) ) {
}
for (; remL++ < dvsL; rem.push(0)) {}
// Create version of divisor with leading zero.
dvsZ.unshift(0);
@ -658,17 +645,13 @@ function divide( dvd, dvs, exp, s, base, isOdd ) {
if (rem[--remL] < dvsT[remL]) {
for ( remI = remL;
remI && !rem[--remI];
rem[remI] = base - 1 ) {
}
for (remI = remL; remI && !rem[--remI]; rem[remI] = base - 1) {}
--rem[remI];
rem[remL] += base;
}
rem[remL] -= dvsT[remL];
}
for ( ; !rem[0]; rem.shift() ) {
}
for (; !rem[0]; rem.shift()) {}
} else {
break;
}
@ -678,9 +661,7 @@ function divide( dvd, dvs, exp, s, base, isOdd ) {
qc[qi++] = cmp ? next : ++next;
// Update the remainder.
rem[0] && cmp
? ( rem[remL] = dvd[dvdI] || 0 )
: ( rem = [ dvd[dvdI] ] );
rem[0] && cmp ? (rem[remL] = dvd[dvdI] || 0) : (rem = [dvd[dvdI]]);
} while ((dvdI++ < dvdL || rem[0] != null) && s--);
@ -742,8 +723,7 @@ function format( n, d, exp ) {
i = c[0] == 0 ? i + 1 : exp ? d : n['e'] + i + 1;
// Append zeros?
for ( ; c.length < i; c.push(0) ) {
}
for (; c.length < i; c.push(0)) {}
i = n['e'];
/*
@ -754,9 +734,7 @@ function format( n, d, exp ) {
return exp == 1 || exp == 2 && (--d < i || i <= TO_EXP_NEG)
// Exponential notation.
? ( n['s'] < 0 && c[0] ? '-' : '' ) + ( c.length > 1
? ( c.splice( 1, 0, '.' ), c.join('') )
: c[0] ) + ( i < 0 ? 'e' : 'e+' ) + i
? (n['s'] < 0 && c[0] ? '-' : '') + (c.length > 1 ? (c.splice(1, 0, '.'), c.join('')) : c[0]) + (i < 0 ? 'e' : 'e+') + i
// Normal notation.
: n['toS']();
@ -784,12 +762,10 @@ function rnd( x, dp, base, isOdd, r ) {
*/
more = r || i < 0 || xc[i + 1] != null;
r = ROUNDING_MODE < 4
? ( next != null || more ) &&
r = ROUNDING_MODE < 4 ? (next != null || more) &&
(ROUNDING_MODE == 0 ||
ROUNDING_MODE == 2 && !isNeg ||
ROUNDING_MODE == 3 && isNeg )
: next > half || next == half &&
ROUNDING_MODE == 3 && isNeg) : next > half || next == half &&
(ROUNDING_MODE == 4 || more ||
/*
@ -837,8 +813,7 @@ function rnd( x, dp, base, isOdd, r ) {
}
// Remove trailing zeros.
for ( i = xc.length; !xc[--i]; xc.pop() ) {
}
for (i = xc.length; !xc[--i]; xc.pop()) {}
return x;
}
@ -1152,12 +1127,10 @@ P['minus'] = P['sub'] = function ( y, b ) {
if (!xc[0] || !yc[0]) {
// y is non-zero?
return yc[0]
? ( y['s'] = -b, y )
return yc[0] ? (y['s'] = -b, y)
// x is non-zero?
: new BigNumber( xc[0]
? x
: new BigNumber(xc[0] ? x
// Both are zero.
// IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity
@ -1170,8 +1143,7 @@ P['minus'] = P['sub'] = function ( y, b ) {
if (xc = xc.slice(), a = xe - ye) {
d = (xLTy = a < 0) ? (a = -a, xc) : (ye = xe, yc);
for ( d.reverse(), b = a; b--; d.push(0) ) {
}
for (d.reverse(), b = a; b--; d.push(0)) {}
d.reverse();
} else {
@ -1199,8 +1171,7 @@ P['minus'] = P['sub'] = function ( y, b ) {
*/
if ((b = -((j = xc.length) - yc.length)) > 0) {
for ( ; b--; xc[j++] = 0 ) {
}
for (; b--; xc[j++] = 0) {}
}
// Subtract yc from xc.
@ -1208,8 +1179,7 @@ P['minus'] = P['sub'] = function ( y, b ) {
if (xc[--b] < yc[b]) {
for ( i = b; i && !xc[--i]; xc[i] = 9 ) {
}
for (i = b; i && !xc[--i]; xc[i] = 9) {}
--xc[i];
xc[b] += 10;
}
@ -1217,12 +1187,10 @@ P['minus'] = P['sub'] = function ( y, b ) {
}
// Remove trailing zeros.
for ( ; xc[--j] == 0; xc.pop() ) {
}
for (; xc[--j] == 0; xc.pop()) {}
// Remove leading zeros and adjust exponent accordingly.
for ( ; xc[0] == 0; xc.shift(), --ye ) {
}
for (; xc[0] == 0; xc.shift(), --ye) {}
/*
* No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity
@ -1280,9 +1248,7 @@ P['modulo'] = P['mod'] = function ( y, b ) {
b = y['cmp'](x) == 1;
x['s'] = i, y['s'] = j;
return b
? new BigNumber(x)
: ( i = DECIMAL_PLACES, j = ROUNDING_MODE,
return b ? new BigNumber(x) : (i = DECIMAL_PLACES, j = ROUNDING_MODE,
DECIMAL_PLACES = 0, ROUNDING_MODE = 1,
x = x['div'](y),
DECIMAL_PLACES = i, ROUNDING_MODE = j,
@ -1356,12 +1322,10 @@ P['plus'] = P['add'] = function ( y, b ) {
if (!xc[0] || !yc[0]) {
// y is non-zero?
return yc[0]
? y
return yc[0] ? y
// x is non-zero?
: new BigNumber( xc[0]
? x
: new BigNumber(xc[0] ? x
// Both are zero. Return zero.
: a * 0);
@ -1373,8 +1337,7 @@ P['plus'] = P['add'] = function ( y, b ) {
if (xc = xc.slice(), a = xe - ye) {
d = a > 0 ? (ye = xe, yc) : (a = -a, xc);
for ( d.reverse(); a--; d.push(0) ) {
}
for (d.reverse(); a--; d.push(0)) {}
d.reverse();
}
@ -1387,9 +1350,7 @@ P['plus'] = P['add'] = function ( y, b ) {
* Only start adding at yc.length - 1 as the
* further digits of xc can be left as they are.
*/
for ( a = yc.length, b = 0; a;
b = ( xc[--a] = xc[a] + yc[a] + b ) / 10 ^ 0, xc[a] %= 10 ) {
}
for (a = yc.length, b = 0; a; b = (xc[--a] = xc[a] + yc[a] + b) / 10 ^ 0, xc[a] %= 10) {}
// No need to check for zero, as +x + +y != 0 && -x + -y != 0
@ -1405,8 +1366,7 @@ P['plus'] = P['add'] = function ( y, b ) {
}
// Remove trailing zeros.
for ( a = xc.length; xc[--a] == 0; xc.pop() ) {
}
for (a = xc.length; xc[--a] == 0; xc.pop()) {}
return y['c'] = xc, y['e'] = ye, y;
};
@ -1494,9 +1454,7 @@ P['round'] = function ( dp, rm ) {
// 'round() decimal places out of range: {dp}'
// 'round() decimal places not an integer: {dp}'
!ifExceptionsThrow( dp, 'decimal places', 'round' ) )
? 0
: dp | 0;
!ifExceptionsThrow(dp, 'decimal places', 'round')) ? 0 : dp | 0;
rm = rm == null || (((outOfRange = rm < 0 || rm > 8) ||
@ -1505,9 +1463,7 @@ P['round'] = function ( dp, rm ) {
// 'round() mode not an integer: {rm}'
// 'round() mode out of range: {rm}'
!ifExceptionsThrow( rm, 'mode', 'round' ) )
? ROUNDING_MODE
: rm | 0;
!ifExceptionsThrow(rm, 'mode', 'round')) ? ROUNDING_MODE : rm | 0;
return setMode(this, dp, rm);
};
@ -1537,9 +1493,7 @@ P['squareRoot'] = P['sqrt'] = function () {
// Negative/NaN/Infinity/zero?
if (s !== 1 || !c || !c[0]) {
return new BigNumber( !s || s < 0 && ( !c || c[0] )
? NaN
: c ? x : 1 / 0 );
return new BigNumber(!s || s < 0 && (!c || c[0]) ? NaN : c ? x : 1 / 0);
}
// Initial estimate.
@ -1705,18 +1659,14 @@ P['times'] = P['mul'] = function ( y, b ) {
c = xc, xc = yc, yc = c, j = a, a = b, b = j;
}
for ( j = a + b, c = []; j--; c.push(0) ) {
}
for (j = a + b, c = []; j--; c.push(0)) {}
// Multiply!
for (i = b - 1; i > -1; i--) {
for ( b = 0, j = a + i;
j > i;
b = c[j] + yc[i] * xc[j - i - 1] + b,
for (b = 0, j = a + i; j > i; b = c[j] + yc[i] * xc[j - i - 1] + b,
c[j--] = b % 10 | 0,
b = b / 10 | 0 ) {
}
b = b / 10 | 0) {}
if (b) {
c[j] = (c[j] + b) % 10;
@ -1729,8 +1679,7 @@ P['times'] = P['mul'] = function ( y, b ) {
!c[0] && c.shift();
// Remove trailing zeros.
for ( j = c.length; !c[--j]; c.pop() ) {
}
for (j = c.length; !c[--j]; c.pop()) {}
// No zero check needed as only x * 0 == 0 etc.
@ -1761,7 +1710,10 @@ P['toBuffer'] = function ( opts ) {
if (opts !== 'mpint') return 'Unsupported Buffer representation';
var abs = this.abs();
var buf = abs.toBuffer({ size : 1, endian : 'big' });
var buf = abs.toBuffer({
size: 1,
endian: 'big'
});
var len = buf.length === 1 && buf[0] === 0 ? 0 : buf.length;
if (buf[0] & 0x80) len++;
@ -1789,9 +1741,10 @@ P['toBuffer'] = function ( opts ) {
if (!opts) opts = {};
var endian = { 1 : 'big', '-1' : 'little' }[opts.endian]
|| opts.endian || 'big'
;
var endian = {
1: 'big',
'-1': 'little'
}[opts.endian] || opts.endian || 'big';
var hex = this.toString(16);
if (hex.charAt(0) === '-') throw new Error(
@ -1808,8 +1761,9 @@ P['toBuffer'] = function ( opts ) {
var hx = hex
.split(new RegExp('(.{' + (2 * size) + '})'))
.filter(function (s) { return s.length > 0 })
;
.filter(function(s) {
return s.length > 0
});
hx.forEach(function(chunk, i) {
for (var j = 0; j < size; j++) {
@ -1830,8 +1784,7 @@ P['toBuffer'] = function ( opts ) {
*/
P['toExponential'] = P['toE'] = function(dp) {
return format( this,
( dp == null || ( ( outOfRange = dp < 0 || dp > MAX ) ||
return format(this, (dp == null || ((outOfRange = dp < 0 || dp > MAX) ||
/*
* Include '&& dp !== 0' because with Opera -0 == parseFloat(-0) is
@ -1841,9 +1794,7 @@ P['toExponential'] = P['toE'] = function ( dp ) {
// 'toE() decimal places not an integer: {dp}'
// 'toE() decimal places out of range: {dp}'
!ifExceptionsThrow( dp, 'decimal places', 'toE' ) ) && this['c']
? this['c'].length - 1
: dp | 0, 1 );
!ifExceptionsThrow(dp, 'decimal places', 'toE')) && this['c'] ? this['c'].length - 1 : dp | 0, 1);
};
@ -1981,9 +1932,7 @@ P['toFraction'] = P['toFr'] = function ( maxD ) {
// Determine which fraction is closer to x, n0 / d0 or n1 / d1?
frac = n1['div'](d1)['minus'](x)['abs']()['cmp'](
n0['div'](d0)['minus'](x)['abs']() ) < 1
? [ n1['toS'](), d1['toS']() ]
: [ n0['toS'](), d0['toS']() ];
n0['div'](d0)['minus'](x)['abs']()) < 1 ? [n1['toS'](), d1['toS']()] : [n0['toS'](), d0['toS']()];
return MAX_EXP = exp, DECIMAL_PLACES = dp, frac;
};
@ -2009,9 +1958,7 @@ P['toPrecision'] = P['toP'] = function ( sd ) {
// 'toP() precision not an integer: {sd}'
// 'toP() precision out of range: {sd}'
!ifExceptionsThrow( sd, 'precision', 'toP' ) )
? this['toS']()
: format( this, --sd | 0, 2 );
!ifExceptionsThrow(sd, 'precision', 'toP')) ? this['toS']() : format(this, --sd | 0, 2);
};
@ -2044,8 +1991,7 @@ P['toString'] = P['toS'] = function ( b ) {
if (xe < 0) {
// Prepend zeros.
for ( ; ++xe; str = '0' + str ) {
}
for (; ++xe; str = '0' + str) {}
str = '0.' + str;
// Positive exponent?
@ -2054,8 +2000,7 @@ P['toString'] = P['toS'] = function ( b ) {
if (++xe > strL) {
// Append zeros.
for ( xe -= strL; xe-- ; str += '0' ) {
}
for (xe -= strL; xe--; str += '0') {}
} else if (xe < strL) {
str = str.slice(0, xe) + '.' + str.slice(xe);
}
@ -2118,6 +2063,9 @@ P['valueOf'] = function () {
// EXPORT
BigNumber.config({EXPONENTIAL_AT: 9999999, DECIMAL_PLACES: 0, ROUNDING_MODE: 1});
BigNumber.config({
EXPONENTIAL_AT: 9999999,
DECIMAL_PLACES: 0,
ROUNDING_MODE: 1
});
module.exports = BigNumber;

20
lib/browser/ECIES.js

@ -9,7 +9,13 @@ ECIES.symmetricEncrypt = function(key, iv, message) {
var smessage = sjcl.codec.hex.toBits(message.toString('hex'));
sjcl.beware["CBC mode is dangerous because it doesn't protect message integrity."]();
var params = {iv: siv, ks: 256, ts: 128, iter: 1000, mode: 'cbc'};
var params = {
iv: siv,
ks: 256,
ts: 128,
iter: 1000,
mode: 'cbc'
};
var encrypted = sjcl.encrypt(skey, smessage, params);
var enchex = sjcl.codec.hex.fromBits(sjcl.codec.base64.toBits(JSON.parse(encrypted).ct));
@ -29,7 +35,17 @@ ECIES.symmetricDecrypt = function(key, encrypted) {
var sct = sjcl.codec.base64.fromBits(sjcl.codec.hex.toBits(todecrypt.toString('hex')));
sjcl.beware["CBC mode is dangerous because it doesn't protect message integrity."]();
var obj = {iv: siv, v: 1, iter: 1000, ks: 256, ts: 128, mode: 'cbc', adata: '', cipher: 'aes', ct: sct};
var obj = {
iv: siv,
v: 1,
iter: 1000,
ks: 256,
ts: 128,
mode: 'cbc',
adata: '',
cipher: 'aes',
ct: sct
};
var str = JSON.stringify(obj);
var decrypted = sjcl.decrypt(skey, str);

4
lib/browser/Key.js

@ -61,7 +61,9 @@ Key.generateSync = function() {
while (true) {
privbuf = SecureRandom.getRandomBuffer(32);
if ((bignum.fromBuffer(privbuf, {size: 32})).cmp(Curve.getN()) < 0)
if ((bignum.fromBuffer(privbuf, {
size: 32
})).cmp(Curve.getN()) < 0)
break;
}

56
lib/browser/Point.js

@ -19,17 +19,25 @@ var Point = function(x, y) {
Point.add = function(p1, p2) {
var ecparams = getSECCurveByName('secp256k1');
var p1xhex = p1.x.toBuffer({size: 32}).toString('hex');
var p1xhex = p1.x.toBuffer({
size: 32
}).toString('hex');
var p1x = new BigInteger(p1xhex, 16);
var p1yhex = p1.y.toBuffer({size: 32}).toString('hex');
var p1yhex = p1.y.toBuffer({
size: 32
}).toString('hex');
var p1y = new BigInteger(p1yhex, 16);
var p1px = new ECFieldElementFp(ecparams.getCurve().getQ(), p1x);
var p1py = new ECFieldElementFp(ecparams.getCurve().getQ(), p1y);
var p1p = new ECPointFp(ecparams.getCurve(), p1px, p1py);
var p2xhex = p2.x.toBuffer({size: 32}).toString('hex');
var p2xhex = p2.x.toBuffer({
size: 32
}).toString('hex');
var p2x = new BigInteger(p2xhex, 16);
var p2yhex = p2.y.toBuffer({size: 32}).toString('hex');
var p2yhex = p2.y.toBuffer({
size: 32
}).toString('hex');
var p2y = new BigInteger(p2yhex, 16);
var p2px = new ECFieldElementFp(ecparams.getCurve().getQ(), p2x);
var p2py = new ECFieldElementFp(ecparams.getCurve().getQ(), p2y);
@ -39,11 +47,15 @@ Point.add = function(p1, p2) {
var point = new Point();
var pointxbuf = new Buffer(p.getX().toBigInteger().toByteArrayUnsigned());
point.x = bignum.fromBuffer(pointxbuf, {size: pointxbuf.length});
point.x = bignum.fromBuffer(pointxbuf, {
size: pointxbuf.length
});
assert(pointxbuf.length <= 32);
var pointybuf = new Buffer(p.getY().toBigInteger().toByteArrayUnsigned());
assert(pointybuf.length <= 32);
point.y = bignum.fromBuffer(pointybuf, {size: pointybuf.length});
point.y = bignum.fromBuffer(pointybuf, {
size: pointybuf.length
});
return point;
};
@ -53,9 +65,13 @@ Point.multiply = function(p1, x) {
var ecparams = getSECCurveByName('secp256k1');
var p1xhex = p1.x.toBuffer({size: 32}).toString('hex');
var p1xhex = p1.x.toBuffer({
size: 32
}).toString('hex');
var p1x = new BigInteger(p1xhex, 16);
var p1yhex = p1.y.toBuffer({size: 32}).toString('hex');
var p1yhex = p1.y.toBuffer({
size: 32
}).toString('hex');
var p1y = new BigInteger(p1yhex, 16);
var p1px = new ECFieldElementFp(ecparams.getCurve().getQ(), p1x);
var p1py = new ECFieldElementFp(ecparams.getCurve().getQ(), p1y);
@ -65,11 +81,15 @@ Point.multiply = function(p1, x) {
var point = new Point();
var pointxbuf = new Buffer(p.getX().toBigInteger().toByteArrayUnsigned());
point.x = bignum.fromBuffer(pointxbuf, {size: pointxbuf.length});
point.x = bignum.fromBuffer(pointxbuf, {
size: pointxbuf.length
});
assert(pointxbuf.length <= 32);
var pointybuf = new Buffer(p.getY().toBigInteger().toByteArrayUnsigned());
assert(pointybuf.length <= 32);
point.y = bignum.fromBuffer(pointybuf, {size: pointybuf.length});
point.y = bignum.fromBuffer(pointybuf, {
size: pointybuf.length
});
return point;
};
@ -77,15 +97,23 @@ Point.multiply = function(p1, x) {
//convert the public key of a Key into a Point
Point.fromUncompressedPubKey = function(pubkey) {
var point = new Point();
point.x = bignum.fromBuffer((new Buffer(pubkey)).slice(1, 33), {size: 32});
point.y = bignum.fromBuffer((new Buffer(pubkey)).slice(33, 65), {size: 32});
point.x = bignum.fromBuffer((new Buffer(pubkey)).slice(1, 33), {
size: 32
});
point.y = bignum.fromBuffer((new Buffer(pubkey)).slice(33, 65), {
size: 32
});
return point;
};
//convert the Point into the Key containing a compressed public key
Point.prototype.toUncompressedPubKey = function() {
var xbuf = this.x.toBuffer({size: 32});
var ybuf = this.y.toBuffer({size: 32});
var xbuf = this.x.toBuffer({
size: 32
});
var ybuf = this.y.toBuffer({
size: 32
});
var prefix = new Buffer([0x04]);
var pub = Buffer.concat([prefix, xbuf, ybuf]);
return pub;

15
lib/common/ECIES.js

@ -6,8 +6,7 @@ var SecureRandom = imports.SecureRandom || require('../SecureRandom');
var Key = imports.Key || require('../Key');
// http://en.wikipedia.org/wiki/Integrated_Encryption_Scheme
var ECIES = function() {
};
var ECIES = function() {};
ECIES.encryptObj = function(pubkey, message, r, iv) {
var ecies = new ECIES();
@ -42,7 +41,9 @@ ECIES.decryptObj = function(ecies) {
var c = ecies.c;
var d = ecies.d;
var P = Point.multiply(R, kB);
var S = P.x.toBuffer({size: 32});
var S = P.x.toBuffer({
size: 32
});
var buf = ECIES.kdf(S);
var kE = ecies.kE = buf.slice(0, 32);
var kM = ecies.kM = buf.slice(32, 64);
@ -98,7 +99,9 @@ ECIES.prototype.getSfromPubkey = function() {
key2.compressed = false;
var KBP = Point.fromUncompressedPubKey(key2.public);
this.P = Point.multiply(KBP, this.r);
this.S = this.P.x.toBuffer({size: 32});
this.S = this.P.x.toBuffer({
size: 32
});
return this.S;
};
@ -106,7 +109,9 @@ ECIES.prototype.getSfromPrivkey = function() {
var R = this.R;
var kB = this.kB;
var SP = Point.multiply(R, kB);
var S = SP.x.toBuffer({size: 32});
var S = SP.x.toBuffer({
size: 32
});
return S;
};

3
lib/common/SecureRandom.js

@ -1,7 +1,6 @@
var imports = require('soop');
var SecureRandom = function() {
};
var SecureRandom = function() {};
/* secure random bytes that sometimes throws an error due to lack of entropy */
SecureRandom.getRandomBuffer = function() {};

4
networks.js

@ -1,6 +1,8 @@
var Put = require('bufferput');
var buffertools = require('buffertools');
var hex = function(hex) {return new Buffer(hex, 'hex');};
var hex = function(hex) {
return new Buffer(hex, 'hex');
};
exports.livenet = {
name: 'livenet',

21
util/BinaryParser.js

@ -3,8 +3,8 @@
*/
var imports = require('soop').imports();
function Parser(buffer)
{
function Parser(buffer) {
this.subject = buffer;
this.pos = 0;
};
@ -102,26 +102,19 @@ function getDecoder(len, fn) {
[1, 2, 4, 8].forEach(function(bytes) {
var bits = bytes * 8;
Parser.prototype['word' + bits + 'le']
= Parser.prototype['word' + bits + 'lu']
= getDecoder(bytes, decodeLEu);
Parser.prototype['word' + bits + 'le'] = Parser.prototype['word' + bits + 'lu'] = getDecoder(bytes, decodeLEu);
Parser.prototype['word' + bits + 'ls']
= getDecoder(bytes, decodeLEs);
Parser.prototype['word' + bits + 'ls'] = getDecoder(bytes, decodeLEs);
Parser.prototype['word' + bits + 'be']
= Parser.prototype['word' + bits + 'bu']
= getDecoder(bytes, decodeBEu);
Parser.prototype['word' + bits + 'be'] = Parser.prototype['word' + bits + 'bu'] = getDecoder(bytes, decodeBEu);
Parser.prototype['word' + bits + 'bs']
= getDecoder(bytes, decodeBEs);
Parser.prototype['word' + bits + 'bs'] = getDecoder(bytes, decodeBEs);
Parser.prototype.word8 = Parser.prototype.word8u = Parser.prototype.word8be;
Parser.prototype.word8s = Parser.prototype.word8bs;
});
Parser.prototype.varInt = function ()
{
Parser.prototype.varInt = function() {
var firstByte = this.word8();
switch (firstByte) {
case 0xFD:

14
util/EncFile.js

@ -1,9 +1,7 @@
var fs = require('fs');
var crypto = require('crypto');
exports.readFileSync = function(enc_method, enc_passphrase, filename)
{
exports.readFileSync = function(enc_method, enc_passphrase, filename) {
// read entire file into memory
var fileData = fs.readFileSync(filename, 'binary');
if (fileData.length < 32)
@ -28,14 +26,12 @@ exports.readFileSync = function(enc_method, enc_passphrase, filename)
return dec;
};
exports.readJFileSync = function(enc_method, enc_passphrase, filename)
{
exports.readJFileSync = function(enc_method, enc_passphrase, filename) {
var raw = this.readFileSync(enc_method, enc_passphrase, filename);
return JSON.parse(raw);
};
exports.writeFileSync = function(enc_method, enc_passphrase, filename, data)
{
exports.writeFileSync = function(enc_method, enc_passphrase, filename, data) {
// encrypt to ciphertext
var cipher = crypto.createCipher(enc_method, enc_passphrase);
var crypted = cipher.update(data, 'binary', 'binary');
@ -51,9 +47,7 @@ exports.writeFileSync = function(enc_method, enc_passphrase, filename, data)
return true;
};
exports.writeJFileSync = function(enc_method, enc_passphrase, filename, obj)
{
exports.writeJFileSync = function(enc_method, enc_passphrase, filename, obj) {
var raw = JSON.stringify(obj);
return this.writeFileSync(enc_method, enc_passphrase, filename, raw);
};

5
util/EncodedData.js

@ -129,7 +129,9 @@ var encodings = {
},
};
var no_conversion = function() {return this.data;};
var no_conversion = function() {
return this.data;
};
for (var k in encodings) {
if (encodings.hasOwnProperty(k)) {
if (!encodings[k].converters[k])
@ -155,4 +157,3 @@ EncodedData.applyEncodingsTo = function(aClass) {
EncodedData.applyEncodingsTo(EncodedData);
module.exports = require('soop')(EncodedData);

8
util/VersionedData.js

@ -20,7 +20,9 @@ parent.applyEncodingsTo(VersionedData);
// get or set the version data (the first byte of the address)
VersionedData.prototype.version = function(num) {
if (num || (num === 0)) {
this.doAsBinary(function() {this.data.writeUInt8(num, 0);});
this.doAsBinary(function() {
this.data.writeUInt8(num, 0);
});
return num;
}
return this.as('binary').readUInt8(0);
@ -29,7 +31,9 @@ VersionedData.prototype.version = function(num) {
// get or set the payload data (as a Buffer object)
VersionedData.prototype.payload = function(data) {
if (data) {
this.doAsBinary(function() {data.copy(this.data,1);});
this.doAsBinary(function() {
data.copy(this.data, 1);
});
return data;
}
return this.as('binary').slice(1);

1
util/error.js

@ -1,4 +1,3 @@
/**
* Used during transcation verification when a source txout is missing.
*

21
util/log.js

@ -6,9 +6,24 @@ var cl = function() {
};
var loggers = {
none: {info: noop, warn: noop, err: noop, debug: noop},
normal: {info: cl, warn: cl, err: cl, debug: noop},
debug: {info: cl, warn: cl, err: cl, debug: cl},
none: {
info: noop,
warn: noop,
err: noop,
debug: noop
},
normal: {
info: cl,
warn: cl,
err: cl,
debug: noop
},
debug: {
info: cl,
warn: cl,
err: cl,
debug: cl
},
};
var config = require('../config');

5
util/time.js

@ -1,7 +1,4 @@
// current time, in seconds
exports.curtime = function curtime()
{
exports.curtime = function curtime() {
return Math.round(Date.now() / 1000);
}

Loading…
Cancel
Save