add environment.
This commit is contained in:
parent
5830cc044b
commit
0a7f118528
@ -167,9 +167,7 @@ miner.createBlock(function(err, attempt) {
|
||||
### Connecting to the P2P network
|
||||
|
||||
``` js
|
||||
var bcoin = require('bcoin');
|
||||
|
||||
bcoin.protocol.network.set('testnet');
|
||||
var bcoin = require('bcoin')('testnet');
|
||||
|
||||
var chain = new bcoin.chain({ db: 'leveldb' });
|
||||
var mempool = new bcoin.mempool({ chain: chain, db: 'memory' });
|
||||
@ -200,9 +198,7 @@ pool.on('tx', function(tx) {
|
||||
### Doing an SPV sync
|
||||
|
||||
``` js
|
||||
var bcoin = require('bcoin');
|
||||
|
||||
bcoin.protocol.network.set('testnet');
|
||||
var bcoin = require('bcoin')('testnet');
|
||||
|
||||
var chain = new bcoin.chain({
|
||||
db: 'leveldb',
|
||||
|
||||
@ -1,18 +1,13 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
var bcoin = require('bcoin');
|
||||
var argv = parseArg(process.argv);
|
||||
|
||||
var bcoin = require('bcoin')(argv.network);
|
||||
var utils = bcoin.utils;
|
||||
var assert = utils.assert;
|
||||
var Client = bcoin.http.client;
|
||||
|
||||
var argv = parseArg(process.argv);
|
||||
|
||||
if (argv.network)
|
||||
bcoin.protocol.network.set(argv.network);
|
||||
|
||||
var client = new Client(argv.url || 'localhost:8080', {
|
||||
setNetwork: argv.network == null
|
||||
});
|
||||
var client = new Client(argv.url || 'localhost:8080');
|
||||
|
||||
function getID() {
|
||||
if (process.env.BCOIN_WALLET_ID)
|
||||
|
||||
5
bin/node
5
bin/node
@ -1,11 +1,10 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
var bcoin = require('bcoin');
|
||||
var bcoin = require('bcoin')({ debug: true });
|
||||
var utils = bcoin.utils;
|
||||
var assert = utils.assert;
|
||||
|
||||
var node = bcoin.fullnode({
|
||||
debug: true,
|
||||
passphrase: 'node',
|
||||
prune: process.argv.indexOf('--prune') !== -1,
|
||||
useCheckpoints: process.argv.indexOf('--checkpoints') !== -1,
|
||||
@ -15,7 +14,7 @@ var node = bcoin.fullnode({
|
||||
});
|
||||
|
||||
node.on('error', function(err) {
|
||||
utils.debug(err.message);
|
||||
bcoin.debug(err.stack + '');
|
||||
});
|
||||
|
||||
node.open(function(err) {
|
||||
|
||||
@ -1,18 +1,17 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
var bcoin = require('bcoin');
|
||||
var bcoin = require('bcoin')({ debug: true });
|
||||
var utils = bcoin.utils;
|
||||
var assert = utils.assert;
|
||||
|
||||
var node = bcoin.spvnode({
|
||||
debug: true,
|
||||
passphrase: 'node',
|
||||
preload: process.argv.indexOf('--preload') !== -1,
|
||||
useCheckpoints: process.argv.indexOf('--checkpoints') !== -1
|
||||
});
|
||||
|
||||
node.on('error', function(err) {
|
||||
utils.debug(err.message);
|
||||
bcoin.debug(err.message);
|
||||
});
|
||||
|
||||
node.open(function(err) {
|
||||
|
||||
129
lib/bcoin.js
129
lib/bcoin.js
@ -1,133 +1,12 @@
|
||||
/**
|
||||
* bcoin - javascript bitcoin library
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License).
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
var bcoin = exports;
|
||||
var utils = require('./bcoin/utils');
|
||||
var assert = utils.assert;
|
||||
var fs;
|
||||
var Environment = require('./bcoin/env');
|
||||
|
||||
try {
|
||||
fs = require('f' + 's');
|
||||
} catch (e) {
|
||||
;
|
||||
}
|
||||
|
||||
bcoin.isBrowser =
|
||||
(typeof process !== 'undefined' && process.browser)
|
||||
|| typeof window !== 'undefined';
|
||||
|
||||
bcoin.prefix = process.env.BCOIN_PREFIX || process.env.HOME + '/.bcoin';
|
||||
bcoin.debugLogs = +process.env.BCOIN_DEBUG === 1;
|
||||
bcoin.debugFile = +process.env.BCOIN_DEBUGFILE !== 0;
|
||||
bcoin.profile = +process.env.BCOIN_PROFILE === 1;
|
||||
bcoin.fresh = +process.env.BCOIN_FRESH === 1;
|
||||
bcoin.useWorkers = +process.env.BCOIN_WORKERS > 0;
|
||||
|
||||
bcoin.ensurePrefix = function ensurePrefix() {
|
||||
if (bcoin.isBrowser)
|
||||
return;
|
||||
|
||||
if (bcoin._ensured)
|
||||
return;
|
||||
|
||||
bcoin._ensured = true;
|
||||
|
||||
if (bcoin.fresh && bcoin.prefix.indexOf('bcoin') !== -1)
|
||||
bcoin.rimraf(bcoin.prefix);
|
||||
|
||||
try {
|
||||
fs.statSync(bcoin.prefix);
|
||||
} catch (e) {
|
||||
fs.mkdirSync(bcoin.prefix, 0750);
|
||||
}
|
||||
module.exports = function BCoin(options) {
|
||||
return new Environment(options);
|
||||
};
|
||||
|
||||
bcoin.rimraf = function rimraf(file) {
|
||||
var cp;
|
||||
|
||||
if (bcoin.isBrowser)
|
||||
return;
|
||||
|
||||
cp = require('child_' + 'process');
|
||||
|
||||
assert(typeof file === 'string');
|
||||
assert(file !== '/');
|
||||
assert(file !== process.env.HOME);
|
||||
|
||||
cp.execFileSync('rm', ['-rf', file], { stdio: 'ignore' });
|
||||
};
|
||||
|
||||
bcoin.debug = function debug() {
|
||||
var args = Array.prototype.slice.call(arguments);
|
||||
var msg;
|
||||
|
||||
if (bcoin.debugLogs) {
|
||||
msg = utils.format(args, true);
|
||||
process.stdout.write(msg);
|
||||
}
|
||||
|
||||
if (bcoin.debugFile && !bcoin.isBrowser) {
|
||||
if (!bcoin._debug) {
|
||||
bcoin.ensurePrefix();
|
||||
bcoin._debug = fs.createWriteStream(
|
||||
bcoin.prefix + '/debug.log', { flags: 'a' });
|
||||
}
|
||||
msg = utils.format(args, false);
|
||||
bcoin._debug.write(process.pid + ': ' + msg);
|
||||
}
|
||||
};
|
||||
|
||||
bcoin.utils = utils;
|
||||
bcoin.utils.debug = bcoin.debug;
|
||||
bcoin.utils.ensurePrefix = bcoin.ensurePrefix;
|
||||
bcoin.bn = require('bn.js');
|
||||
bcoin.locker = require('./bcoin/locker');
|
||||
bcoin.reader = require('./bcoin/reader');
|
||||
bcoin.writer = require('./bcoin/writer');
|
||||
bcoin.profiler = require('./bcoin/profiler');
|
||||
bcoin.ec = require('./bcoin/ec');
|
||||
bcoin.lru = require('./bcoin/lru');
|
||||
bcoin.protocol = require('./bcoin/protocol');
|
||||
bcoin.bloom = require('./bcoin/bloom');
|
||||
bcoin.script = require('./bcoin/script');
|
||||
bcoin.input = require('./bcoin/input');
|
||||
bcoin.output = require('./bcoin/output');
|
||||
bcoin.coin = require('./bcoin/coin');
|
||||
bcoin.coins = require('./bcoin/coins');
|
||||
bcoin.coinview = require('./bcoin/coinview');
|
||||
bcoin.tx = require('./bcoin/tx');
|
||||
bcoin.mtx = require('./bcoin/mtx');
|
||||
bcoin.ldb = require('./bcoin/ldb');
|
||||
bcoin.txdb = require('./bcoin/txdb');
|
||||
bcoin.abstractblock = require('./bcoin/abstractblock');
|
||||
bcoin.compactblock = require('./bcoin/compactblock');
|
||||
bcoin.block = require('./bcoin/block');
|
||||
bcoin.merkleblock = require('./bcoin/merkleblock');
|
||||
bcoin.headers = require('./bcoin/headers');
|
||||
bcoin.ramdisk = require('./bcoin/ramdisk');
|
||||
bcoin.node = require('./bcoin/node');
|
||||
bcoin.spvnode = require('./bcoin/spvnode');
|
||||
bcoin.fullnode = require('./bcoin/fullnode');
|
||||
bcoin.chainblock = require('./bcoin/chainblock');
|
||||
bcoin.chaindb = require('./bcoin/chaindb');
|
||||
bcoin.chain = require('./bcoin/chain');
|
||||
bcoin.mempool = require('./bcoin/mempool');
|
||||
bcoin.keypair = require('./bcoin/keypair');
|
||||
bcoin.address = require('./bcoin/address');
|
||||
bcoin.walletdb = require('./bcoin/walletdb');
|
||||
bcoin.wallet = require('./bcoin/wallet');
|
||||
bcoin.peer = require('./bcoin/peer');
|
||||
bcoin.pool = require('./bcoin/pool');
|
||||
bcoin.hd = require('./bcoin/hd');
|
||||
bcoin.miner = require('./bcoin/miner');
|
||||
bcoin.http = !bcoin.isBrowser
|
||||
? require('./bcoin/ht' + 'tp')
|
||||
: null;
|
||||
bcoin.workers = bcoin.useWorkers && !bcoin.isBrowser
|
||||
? require('./bcoin/work' + 'ers')
|
||||
: null;
|
||||
|
||||
bcoin.protocol.network.set(process.env.BCOIN_NETWORK || 'main');
|
||||
|
||||
@ -1,11 +1,13 @@
|
||||
/**
|
||||
* abstractblock.js - abstract block object for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
var bcoin = require('../bcoin');
|
||||
var utils = require('./utils');
|
||||
module.exports = function(bcoin) {
|
||||
|
||||
var utils = bcoin.utils;
|
||||
var network = bcoin.protocol.network;
|
||||
|
||||
/**
|
||||
@ -104,4 +106,5 @@ AbstractBlock.prototype.__defineGetter__('rhash', function() {
|
||||
* Expose
|
||||
*/
|
||||
|
||||
module.exports = AbstractBlock;
|
||||
return AbstractBlock;
|
||||
};
|
||||
|
||||
@ -1,10 +1,12 @@
|
||||
/**
|
||||
* address.js - address object for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
var bcoin = require('../bcoin');
|
||||
module.exports = function(bcoin) {
|
||||
|
||||
var utils = bcoin.utils;
|
||||
var assert = utils.assert;
|
||||
var network = bcoin.protocol.network;
|
||||
@ -587,4 +589,5 @@ Address.fromJSON = function fromJSON(json, passphrase) {
|
||||
* Expose
|
||||
*/
|
||||
|
||||
module.exports = Address;
|
||||
return Address;
|
||||
};
|
||||
|
||||
@ -1,10 +1,12 @@
|
||||
/**
|
||||
* block.js - block object for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
var bcoin = require('../bcoin');
|
||||
module.exports = function(bcoin) {
|
||||
|
||||
var bn = require('bn.js');
|
||||
var utils = require('./utils');
|
||||
var assert = utils.assert;
|
||||
@ -473,4 +475,5 @@ Block.isBlock = function isBlock(obj) {
|
||||
* Expose
|
||||
*/
|
||||
|
||||
module.exports = Block;
|
||||
return Block;
|
||||
};
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
/**
|
||||
* bloom.js - bloom filter for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
/**
|
||||
* bst.js - iterative binary search tree for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
|
||||
@ -1,12 +1,14 @@
|
||||
/**
|
||||
* chain.js - blockchain management for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
module.exports = function(bcoin) {
|
||||
|
||||
var EventEmitter = require('events').EventEmitter;
|
||||
|
||||
var bcoin = require('../bcoin');
|
||||
var bn = require('bn.js');
|
||||
var constants = bcoin.protocol.constants;
|
||||
var network = bcoin.protocol.network;
|
||||
@ -66,12 +68,12 @@ Chain.prototype._init = function _init() {
|
||||
if (self.height < 400000)
|
||||
return;
|
||||
|
||||
utils.debug('Block %s (%d) added to chain (%s)',
|
||||
bcoin.debug('Block %s (%d) added to chain (%s)',
|
||||
utils.revHex(entry.hash), entry.height, getHost());
|
||||
});
|
||||
|
||||
this.on('competitor', function(block, entry) {
|
||||
utils.debug('Heads up: Competing chain at height %d:'
|
||||
bcoin.debug('Heads up: Competing chain at height %d:'
|
||||
+ ' tip-height=%d competitor-height=%d'
|
||||
+ ' tip-hash=%s competitor-hash=%s'
|
||||
+ ' tip-chainwork=%s competitor-chainwork=%s'
|
||||
@ -88,17 +90,17 @@ Chain.prototype._init = function _init() {
|
||||
});
|
||||
|
||||
this.on('resolved', function(block, entry) {
|
||||
utils.debug('Orphan %s (%d) was resolved (%s)',
|
||||
bcoin.debug('Orphan %s (%d) was resolved (%s)',
|
||||
utils.revHex(entry.hash), entry.height, getHost());
|
||||
});
|
||||
|
||||
this.on('checkpoint', function(block, data) {
|
||||
utils.debug('Hit checkpoint block %s (%d) (%s)',
|
||||
bcoin.debug('Hit checkpoint block %s (%d) (%s)',
|
||||
utils.revHex(data.checkpoint), data.height, getHost());
|
||||
});
|
||||
|
||||
this.on('fork', function(block, data) {
|
||||
utils.debug(
|
||||
bcoin.debug(
|
||||
'Fork at height %d: expected=%s received=%s checkpoint=%s',
|
||||
data.height,
|
||||
utils.revHex(data.expected),
|
||||
@ -107,36 +109,36 @@ Chain.prototype._init = function _init() {
|
||||
getHost()
|
||||
);
|
||||
if (data.checkpoint)
|
||||
utils.debug('WARNING: Block failed a checkpoint.');
|
||||
bcoin.debug('WARNING: Block failed a checkpoint.');
|
||||
});
|
||||
|
||||
this.on('invalid', function(block, data) {
|
||||
utils.debug(
|
||||
bcoin.debug(
|
||||
'Invalid block at height %d: hash=%s (%s)',
|
||||
data.height,
|
||||
utils.revHex(data.hash),
|
||||
getHost()
|
||||
);
|
||||
if (data.chain) {
|
||||
utils.debug(
|
||||
bcoin.debug(
|
||||
'Peer is sending an invalid continuation chain (%s)',
|
||||
getHost());
|
||||
} else if (data.seen) {
|
||||
utils.debug('Peer is sending an invalid chain (%s)', getHost());
|
||||
bcoin.debug('Peer is sending an invalid chain (%s)', getHost());
|
||||
}
|
||||
});
|
||||
|
||||
this.on('exists', function(block, data) {
|
||||
utils.debug('Already have block %s (%s)',
|
||||
bcoin.debug('Already have block %s (%s)',
|
||||
data.height, getHost());
|
||||
});
|
||||
|
||||
this.on('orphan', function(block, data) {
|
||||
utils.debug('Handled orphan %s (%s)', utils.revHex(data.hash), getHost());
|
||||
bcoin.debug('Handled orphan %s (%s)', utils.revHex(data.hash), getHost());
|
||||
});
|
||||
|
||||
this.on('purge', function(count, size) {
|
||||
utils.debug('Warning: %d (%dmb) orphans cleared!', count, utils.mb(size));
|
||||
bcoin.debug('Warning: %d (%dmb) orphans cleared!', count, utils.mb(size));
|
||||
});
|
||||
|
||||
this.db.on('add entry', function(entry) {
|
||||
@ -155,7 +157,7 @@ Chain.prototype._init = function _init() {
|
||||
self.emit('remove block', block);
|
||||
});
|
||||
|
||||
utils.debug('Chain is loading.');
|
||||
bcoin.debug('Chain is loading.');
|
||||
|
||||
self.db.open(function(err) {
|
||||
if (err)
|
||||
@ -182,7 +184,7 @@ Chain.prototype._init = function _init() {
|
||||
return self.emit('error', err);
|
||||
|
||||
if (result)
|
||||
utils.debug('Segwit is active.');
|
||||
bcoin.debug('Segwit is active.');
|
||||
|
||||
self.loaded = true;
|
||||
self.emit('open');
|
||||
@ -231,9 +233,9 @@ Chain.prototype._preload = function _preload(callback) {
|
||||
return callback();
|
||||
|
||||
if (network.type !== 'main')
|
||||
return callback(new Error('Electrum.org only offers `main` headers.'));
|
||||
return callback();
|
||||
|
||||
utils.debug('Loading %s', url);
|
||||
bcoin.debug('Loading %s', url);
|
||||
|
||||
function parseHeader(buf) {
|
||||
var headers = bcoin.protocol.parser.parseBlockHeaders(buf);
|
||||
@ -362,7 +364,7 @@ Chain.prototype._preload = function _preload(callback) {
|
||||
save(entry);
|
||||
|
||||
if ((height + 1) % 50000 === 0)
|
||||
utils.debug('Received %d headers from electrum.org.', height + 1);
|
||||
bcoin.debug('Received %d headers from electrum.org.', height + 1);
|
||||
|
||||
lastEntry = entry;
|
||||
height++;
|
||||
@ -928,7 +930,7 @@ Chain.prototype._setBestChain = function _setBestChain(entry, block, callback) {
|
||||
|
||||
// A higher fork has arrived.
|
||||
// Time to reorganize the chain.
|
||||
utils.debug('WARNING: Reorganizing chain.');
|
||||
bcoin.debug('WARNING: Reorganizing chain.');
|
||||
return this._reorganize(entry, block, done);
|
||||
};
|
||||
|
||||
@ -2056,4 +2058,5 @@ Chain.prototype.checkLocks = function checkLocks(tx, flags, entry, callback, for
|
||||
* Expose
|
||||
*/
|
||||
|
||||
module.exports = Chain;
|
||||
return Chain;
|
||||
};
|
||||
|
||||
@ -1,10 +1,12 @@
|
||||
/**
|
||||
* chainblock.js - chainblock object for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
var bcoin = require('../bcoin');
|
||||
module.exports = function(bcoin) {
|
||||
|
||||
var bn = require('bn.js');
|
||||
var constants = bcoin.protocol.constants;
|
||||
var network = bcoin.protocol.network;
|
||||
@ -311,4 +313,5 @@ ChainBlock.isChainBlock = function isChainBlock(obj) {
|
||||
* Expose
|
||||
*/
|
||||
|
||||
module.exports = ChainBlock;
|
||||
return ChainBlock;
|
||||
};
|
||||
|
||||
@ -1,12 +1,14 @@
|
||||
/**
|
||||
* chaindb.js - blockchain data management for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
module.exports = function(bcoin) {
|
||||
|
||||
var EventEmitter = require('events').EventEmitter;
|
||||
|
||||
var bcoin = require('../bcoin');
|
||||
var network = bcoin.protocol.network;
|
||||
var utils = require('./utils');
|
||||
var assert = utils.assert;
|
||||
@ -68,7 +70,7 @@ ChainDB.prototype._init = function _init() {
|
||||
writeBufferSize: 8 << 20
|
||||
});
|
||||
|
||||
utils.debug('Starting chain load.');
|
||||
bcoin.debug('Starting chain load.');
|
||||
|
||||
this.db.open(function(err) {
|
||||
if (err)
|
||||
@ -78,7 +80,7 @@ ChainDB.prototype._init = function _init() {
|
||||
if (err)
|
||||
return self.emit('error', err);
|
||||
|
||||
utils.debug('Chain successfully loaded.');
|
||||
bcoin.debug('Chain successfully loaded.');
|
||||
|
||||
self.loaded = true;
|
||||
self.emit('open');
|
||||
@ -1487,4 +1489,5 @@ NullCache.prototype.reset = function reset() {};
|
||||
* Expose
|
||||
*/
|
||||
|
||||
module.exports = ChainDB;
|
||||
return ChainDB;
|
||||
};
|
||||
|
||||
@ -1,11 +1,13 @@
|
||||
/**
|
||||
* coin.js - coin object for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
module.exports = function(bcoin) {
|
||||
|
||||
var bn = require('bn.js');
|
||||
var bcoin = require('../bcoin');
|
||||
var utils = require('./utils');
|
||||
var assert = utils.assert;
|
||||
var network = bcoin.protocol.network;
|
||||
@ -205,4 +207,5 @@ Coin.isCoin = function isCoin(obj) {
|
||||
* Expose
|
||||
*/
|
||||
|
||||
module.exports = Coin;
|
||||
return Coin;
|
||||
};
|
||||
|
||||
@ -1,10 +1,12 @@
|
||||
/**
|
||||
* coins.js - coins object for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
var bcoin = require('../bcoin');
|
||||
module.exports = function(bcoin) {
|
||||
|
||||
var utils = bcoin.utils;
|
||||
var assert = utils.assert;
|
||||
var constants = bcoin.protocol.constants;
|
||||
@ -194,4 +196,5 @@ Coins.fromRaw = function fromRaw(buf, hash) {
|
||||
* Expose
|
||||
*/
|
||||
|
||||
module.exports = Coins;
|
||||
return Coins;
|
||||
};
|
||||
|
||||
@ -1,10 +1,12 @@
|
||||
/**
|
||||
* coinview.js - coinview object for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
var bcoin = require('../bcoin');
|
||||
module.exports = function(bcoin) {
|
||||
|
||||
var utils = bcoin.utils;
|
||||
var assert = utils.assert;
|
||||
var constants = bcoin.protocol.constants;
|
||||
@ -101,4 +103,5 @@ CoinView.prototype.toArray = function toArray() {
|
||||
* Expose
|
||||
*/
|
||||
|
||||
module.exports = CoinView;
|
||||
return CoinView;
|
||||
};
|
||||
|
||||
@ -1,10 +1,12 @@
|
||||
/**
|
||||
* compactblock.js - compact block object for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
var bcoin = require('../bcoin');
|
||||
module.exports = function(bcoin) {
|
||||
|
||||
var bn = require('bn.js');
|
||||
var utils = require('./utils');
|
||||
var assert = utils.assert;
|
||||
@ -48,8 +50,15 @@ CompactBlock.prototype.toBlock = function toBlock() {
|
||||
return block;
|
||||
};
|
||||
|
||||
CompactBlock.isCompactBlock = function isCompactBlock(block) {
|
||||
return block
|
||||
&& block.type === 'compactblock'
|
||||
&& typeof block.toBlock === 'function';
|
||||
};
|
||||
|
||||
/**
|
||||
* Expose
|
||||
*/
|
||||
|
||||
module.exports = CompactBlock;
|
||||
return CompactBlock;
|
||||
};
|
||||
|
||||
@ -1,17 +1,17 @@
|
||||
/**
|
||||
* ec.js - ecdsa wrapper for secp256k1 and elliptic
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
var bcoin = require('../bcoin');
|
||||
var elliptic = require('elliptic');
|
||||
var utils = require('./utils');
|
||||
var assert = utils.assert;
|
||||
var ec = exports;
|
||||
var crypto, secp256k1;
|
||||
|
||||
if (!bcoin.isBrowser)
|
||||
if (!utils.isBrowser)
|
||||
crypto = require('cry' + 'pto');
|
||||
|
||||
try {
|
||||
@ -91,7 +91,7 @@ ec.verify = function verify(msg, sig, key, historical) {
|
||||
return ec.elliptic.verify(msg, sig, key);
|
||||
} catch (e) {
|
||||
// if (!ec.publicKeyVerify(key))
|
||||
// utils.debug('Public key is invalid.');
|
||||
// bcoin.debug('Public key is invalid.');
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
202
lib/bcoin/env.js
Normal file
202
lib/bcoin/env.js
Normal file
@ -0,0 +1,202 @@
|
||||
/**
|
||||
* env.js - environment for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License).
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
var utils = require('./utils');
|
||||
var assert = utils.assert;
|
||||
var fs;
|
||||
|
||||
try {
|
||||
fs = require('f' + 's');
|
||||
} catch (e) {
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* Environment
|
||||
*/
|
||||
|
||||
function Environment(options) {
|
||||
if (!(this instanceof Environment))
|
||||
return new Environment(options);
|
||||
|
||||
if (!options)
|
||||
options = {};
|
||||
|
||||
if (typeof options === 'string')
|
||||
options = { network: options };
|
||||
|
||||
this.options = options;
|
||||
|
||||
this.isBrowser =
|
||||
(typeof process !== 'undefined' && process.browser)
|
||||
|| typeof window !== 'undefined';
|
||||
|
||||
this.prefix = process.env.BCOIN_PREFIX
|
||||
|| options.prefix
|
||||
|| process.env.HOME + '/.bcoin';
|
||||
|
||||
this.debugLogs = options.debug;
|
||||
|
||||
if (process.env.BCOIN_DEBUG != null)
|
||||
this.debugLogs = +process.env.BCOIN_DEBUG === 1;
|
||||
|
||||
this.debugFile = options.debugFile;
|
||||
|
||||
if (options.debugFile == null)
|
||||
this.debugFile = true;
|
||||
|
||||
if (process.env.BCOIN_DEBUGFILE != null) {
|
||||
if (process.env.BCOIN_DEBUGFILE === '0'
|
||||
|| process.env.BCOIN_DEBUGFILE === '1') {
|
||||
this.debugFile = +process.env.BCOIN_DEBUGFILE !== 0;
|
||||
} else {
|
||||
this.debugFile = process.env.BCOIN_DEBUGFILE;
|
||||
}
|
||||
}
|
||||
|
||||
if (this.debugFile && typeof this.debugFile !== 'string')
|
||||
this.debugFile = this.prefix + '/debug.log'
|
||||
|
||||
this.profile = options.profile;
|
||||
|
||||
if (process.env.BCOIN_PROFILE != null)
|
||||
this.profile = +process.env.BCOIN_PROFILE === 1;
|
||||
|
||||
this.fresh = options.fresh;
|
||||
|
||||
if (process.env.BCOIN_FRESH != null)
|
||||
this.fresh = +process.env.BCOIN_FRESH === 1;
|
||||
|
||||
this.useWorkers = options.useWorkers;
|
||||
|
||||
if (process.env.BCOIN_USE_WORKERS != null)
|
||||
this.useWorkers = +process.env.BCOIN_USE_WORKERS === 1;
|
||||
|
||||
this.useWorkers = options.maxWorkers;
|
||||
|
||||
if (process.env.BCOIN_MAX_WORKERS != null)
|
||||
this.maxWorkers = +process.env.BCOIN_MAX_WORKERS;
|
||||
|
||||
this.workerTimeout = options.workerTimeout;
|
||||
|
||||
if (process.env.BCOIN_WORKER_TIMEOUT != null)
|
||||
this.workerTimeout = +process.env.BCOIN_WORKER_TIMEOUT;
|
||||
|
||||
this.networkType = process.env.BCOIN_NETWORK
|
||||
|| options.network
|
||||
|| 'main';
|
||||
|
||||
this.bn = require('bn.js');
|
||||
this.utils = require('./utils');
|
||||
this.locker = require('./locker');
|
||||
this.reader = require('./reader');
|
||||
this.writer = require('./writer');
|
||||
this.ec = require('./ec');
|
||||
this.lru = require('./lru');
|
||||
this.bloom = require('./bloom');
|
||||
this.bst = require('./bst');
|
||||
|
||||
this.protocol = require('./protocol')(this);
|
||||
this.profiler = require('./profiler')(this);
|
||||
this.ldb = require('./ldb')(this);
|
||||
this.script = require('./script')(this);
|
||||
this.stack = this.script.stack;
|
||||
this.witness = this.script.witness;
|
||||
this.input = require('./input')(this);
|
||||
this.output = require('./output')(this);
|
||||
this.coin = require('./coin')(this);
|
||||
this.coins = require('./coins')(this);
|
||||
this.coinview = require('./coinview')(this);
|
||||
this.tx = require('./tx')(this);
|
||||
this.mtx = require('./mtx')(this);
|
||||
this.txdb = require('./txdb')(this);
|
||||
this.abstractblock = require('./abstractblock')(this);
|
||||
this.compactblock = require('./compactblock')(this);
|
||||
this.block = require('./block')(this);
|
||||
this.merkleblock = require('./merkleblock')(this);
|
||||
this.headers = require('./headers')(this);
|
||||
this.node = require('./node')(this);
|
||||
this.spvnode = require('./spvnode')(this);
|
||||
this.fullnode = require('./fullnode')(this);
|
||||
this.chainblock = require('./chainblock')(this);
|
||||
this.chaindb = require('./chaindb')(this);
|
||||
this.chain = require('./chain')(this);
|
||||
this.mempool = require('./mempool')(this);
|
||||
this.keypair = require('./keypair')(this);
|
||||
this.address = require('./address')(this);
|
||||
this.walletdb = require('./walletdb')(this);
|
||||
this.provider = this.walletdb.provider;
|
||||
this.wallet = require('./wallet')(this);
|
||||
this.peer = require('./peer')(this);
|
||||
this.pool = require('./pool')(this);
|
||||
this.hd = require('./hd')(this);
|
||||
this.miner = require('./miner')(this);
|
||||
this.minerblock = this.miner.minerblock;
|
||||
this.http = require('./http')(this);
|
||||
this.workers = this.useWorkers && !this.isBrowser
|
||||
? require('./work' + 'ers')(this)
|
||||
: null;
|
||||
}
|
||||
|
||||
Environment.prototype.ensurePrefix = function ensurePrefix() {
|
||||
if (this.isBrowser)
|
||||
return;
|
||||
|
||||
if (this._ensured)
|
||||
return;
|
||||
|
||||
this._ensured = true;
|
||||
|
||||
if (this.fresh && this.prefix.indexOf('bcoin') !== -1)
|
||||
this.rimraf(this.prefix);
|
||||
|
||||
try {
|
||||
fs.statSync(this.prefix);
|
||||
} catch (e) {
|
||||
fs.mkdirSync(this.prefix, 0750);
|
||||
}
|
||||
};
|
||||
|
||||
Environment.prototype.rimraf = function rimraf(file) {
|
||||
var cp;
|
||||
|
||||
if (this.isBrowser)
|
||||
return;
|
||||
|
||||
cp = require('child_' + 'process');
|
||||
|
||||
assert(typeof file === 'string');
|
||||
assert(file !== '/');
|
||||
assert(file !== process.env.HOME);
|
||||
|
||||
cp.execFileSync('rm', ['-rf', file], { stdio: 'ignore' });
|
||||
};
|
||||
|
||||
Environment.prototype.debug = function debug() {
|
||||
var args = Array.prototype.slice.call(arguments);
|
||||
var msg;
|
||||
|
||||
if (this.debugLogs) {
|
||||
msg = utils.format(args, true);
|
||||
process.stderr.write(msg);
|
||||
}
|
||||
|
||||
if (this.debugFile && !this.isBrowser) {
|
||||
if (!this._debug) {
|
||||
this.ensurePrefix();
|
||||
this._debug = fs.createWriteStream(this.debugFile, { flags: 'a' });
|
||||
}
|
||||
msg = utils.format(args, false);
|
||||
this._debug.write(process.pid + ': ' + msg);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Expose
|
||||
*/
|
||||
|
||||
module.exports = Environment;
|
||||
@ -1,10 +1,12 @@
|
||||
/**
|
||||
* fullnode.js - full node for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
var bcoin = require('../bcoin');
|
||||
module.exports = function(bcoin) {
|
||||
|
||||
var utils = require('./utils');
|
||||
var assert = utils.assert;
|
||||
|
||||
@ -155,7 +157,7 @@ Fullnode.prototype._init = function _init() {
|
||||
|
||||
self.loaded = true;
|
||||
self.emit('open');
|
||||
utils.debug('Node is loaded.');
|
||||
bcoin.debug('Node is loaded.');
|
||||
}
|
||||
|
||||
options = utils.merge({
|
||||
@ -245,7 +247,7 @@ Fullnode.prototype.createWallet = function createWallet(options, callback) {
|
||||
|
||||
assert(wallet);
|
||||
|
||||
utils.debug('Loaded wallet with id=%s address=%s',
|
||||
bcoin.debug('Loaded wallet with id=%s address=%s',
|
||||
wallet.id, wallet.getAddress());
|
||||
|
||||
self.pool.addWallet(wallet, function(err) {
|
||||
@ -413,4 +415,5 @@ Fullnode.prototype.getConfidence = function getConfidence(tx, callback) {
|
||||
* Expose
|
||||
*/
|
||||
|
||||
module.exports = Fullnode;
|
||||
return Fullnode;
|
||||
};
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
/**
|
||||
* hd.js - hd seeds and keys (BIP32, BIP39) for bcoin.
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
* https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki
|
||||
* https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki
|
||||
@ -46,18 +47,19 @@
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
module.exports = function(bcoin) {
|
||||
|
||||
/**
|
||||
* Modules
|
||||
*/
|
||||
|
||||
var bcoin = require('../bcoin');
|
||||
var bn = require('bn.js');
|
||||
var utils = require('./utils');
|
||||
var ec = require('./ec');
|
||||
var assert = utils.assert;
|
||||
var constants = bcoin.protocol.constants;
|
||||
var network = bcoin.protocol.network;
|
||||
var KeyPair = require('./keypair');
|
||||
var KeyPair = bcoin.keypair;
|
||||
var LRU = require('./lru');
|
||||
var BufferWriter = require('./writer');
|
||||
var BufferReader = require('./reader');
|
||||
@ -883,7 +885,7 @@ HDPrivateKey.prototype.toSecret = function toSecret() {
|
||||
* Expose
|
||||
*/
|
||||
|
||||
exports = HD;
|
||||
var exports = HD;
|
||||
|
||||
exports.seed = HDSeed;
|
||||
exports.priv = HDPrivateKey;
|
||||
@ -892,4 +894,5 @@ exports.privateKey = HDPrivateKey;
|
||||
exports.publicKey = HDPublicKey;
|
||||
exports.fromJSON = HDPrivateKey.fromJSON;
|
||||
|
||||
module.exports = HD;
|
||||
return exports;
|
||||
};
|
||||
|
||||
@ -1,10 +1,12 @@
|
||||
/**
|
||||
* headers.js - headers object for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
var bcoin = require('../bcoin');
|
||||
module.exports = function(bcoin) {
|
||||
|
||||
var utils = require('./utils');
|
||||
|
||||
/**
|
||||
@ -85,4 +87,5 @@ Headers.isHeaders = function isHeaders(obj) {
|
||||
* Expose
|
||||
*/
|
||||
|
||||
module.exports = Headers;
|
||||
return Headers;
|
||||
};
|
||||
|
||||
@ -1,11 +1,13 @@
|
||||
/**
|
||||
* client.js - http client for wallets
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
module.exports = function(bcoin) {
|
||||
|
||||
var EventEmitter = require('events').EventEmitter;
|
||||
var bcoin = require('../../bcoin');
|
||||
var network = bcoin.protocol.network;
|
||||
var utils = require('../utils');
|
||||
var request = require('./request');
|
||||
@ -53,10 +55,9 @@ Client.prototype._init = function _init() {
|
||||
|
||||
this.socket.on('open', function() {
|
||||
self.socket.on('version', function(info) {
|
||||
utils.debug('Connected to bcoin server: %s (%s)',
|
||||
bcoin.debug('Connected to bcoin server: %s (%s)',
|
||||
info.version, info.network);
|
||||
if (self.options.setNetwork)
|
||||
network.set(info.network);
|
||||
assert(info.network === network.type);
|
||||
});
|
||||
|
||||
self.socket.on('tx', function(tx, map) {
|
||||
@ -176,11 +177,8 @@ Client.prototype._request = function _request(method, endpoint, json, callback)
|
||||
if (err)
|
||||
return callback(err);
|
||||
|
||||
if (self.options.setNetwork) {
|
||||
networkType = res.headers['x-bcoin-network'];
|
||||
if (networkType && network.type !== networkType)
|
||||
network.set(networkType);
|
||||
}
|
||||
networkType = res.headers['x-bcoin-network'];
|
||||
assert(networkType === network.type);
|
||||
|
||||
if (res.statusCode === 404)
|
||||
return callback();
|
||||
@ -661,4 +659,5 @@ Client.prototype.getInfo = function getInfo(callback) {
|
||||
* Expose
|
||||
*/
|
||||
|
||||
module.exports = Client;
|
||||
return Client;
|
||||
};
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
/**
|
||||
* http.js - http server for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
@ -99,9 +100,9 @@ HTTPServer.prototype._initRouter = function _initRouter() {
|
||||
req.destroy();
|
||||
req.socket.destroy();
|
||||
} catch (e) {
|
||||
utils.debug(e.stack + '');
|
||||
self.emit('error', e);
|
||||
}
|
||||
utils.debug(err.stack + '');
|
||||
self.emit('error', err);
|
||||
}
|
||||
}
|
||||
|
||||
@ -111,8 +112,7 @@ HTTPServer.prototype._initRouter = function _initRouter() {
|
||||
done(e);
|
||||
}
|
||||
|
||||
utils.debug('Request from %s path=%s',
|
||||
req.socket.remoteAddress, req.pathname);
|
||||
self.emit('request', req, res);
|
||||
|
||||
parseBody(req, function(err) {
|
||||
var method, routes, i;
|
||||
@ -259,21 +259,23 @@ HTTPServer.prototype.del = function del(path, callback) {
|
||||
this.routes.del.push({ path: path, callback: callback });
|
||||
};
|
||||
|
||||
HTTPServer.prototype.address = function address() {
|
||||
return this.server.address();
|
||||
};
|
||||
|
||||
HTTPServer.prototype.listen = function listen(port, host, callback) {
|
||||
var self = this;
|
||||
this.server.listen(port, host, function(err) {
|
||||
var address;
|
||||
if (!callback) {
|
||||
if (err)
|
||||
throw err;
|
||||
return;
|
||||
}
|
||||
|
||||
if (err)
|
||||
throw err;
|
||||
return callback(err);
|
||||
|
||||
address = self.server.address();
|
||||
|
||||
utils.debug('Listening - host=%s port=%d',
|
||||
address.address, address.port);
|
||||
|
||||
if (callback)
|
||||
callback();
|
||||
return callback(null, self.address());
|
||||
});
|
||||
};
|
||||
|
||||
@ -299,7 +301,7 @@ function send(res, code, msg) {
|
||||
res.write(msg);
|
||||
res.end();
|
||||
} catch (e) {
|
||||
utils.debug('Write failed: %s', e.message);
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1,5 +1,21 @@
|
||||
exports.http = require('./http');
|
||||
exports.server = require('./server');
|
||||
exports.client = require('./client');
|
||||
exports.request = require('./request');
|
||||
exports.provider = require('./provider');
|
||||
/**
|
||||
* http/index.js - http for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
module.exports = function(bcoin) {
|
||||
bcoin.http = {};
|
||||
|
||||
bcoin.http.request = require('./request');
|
||||
bcoin.http.client = require('./client')(bcoin);
|
||||
bcoin.http.provider = require('./provider')(bcoin);
|
||||
|
||||
if (!bcoin.isBrowser) {
|
||||
bcoin.http.http = require('./ht' + 'tp');
|
||||
bcoin.http.server = require('./ser' + 'ver')(bcoin);
|
||||
}
|
||||
|
||||
return bcoin.http;
|
||||
};
|
||||
|
||||
@ -1,14 +1,17 @@
|
||||
/**
|
||||
* provider.js - http provider for wallets
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
module.exports = function(bcoin) {
|
||||
|
||||
var EventEmitter = require('events').EventEmitter;
|
||||
|
||||
var utils = require('../utils');
|
||||
var assert = utils.assert;
|
||||
var Client = require('./client');
|
||||
var Client = bcoin.http.client;
|
||||
|
||||
/**
|
||||
* Provider
|
||||
@ -133,4 +136,5 @@ Provider.prototype.zap = function zap(now, age, callback) {
|
||||
* Expose
|
||||
*/
|
||||
|
||||
module.exports = Provider;
|
||||
return Provider;
|
||||
};
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
/**
|
||||
* request.js - http request for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
|
||||
@ -1,14 +1,16 @@
|
||||
/**
|
||||
* server.js - http server for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
module.exports = function(bcoin) {
|
||||
|
||||
var EventEmitter = require('events').EventEmitter;
|
||||
var bcoin = require('../../bcoin');
|
||||
var constants = bcoin.protocol.constants;
|
||||
var network = bcoin.protocol.network;
|
||||
var HTTPServer = require('./http');
|
||||
var HTTPServer = bcoin.http.http;
|
||||
var utils = require('../utils');
|
||||
var assert = utils.assert;
|
||||
|
||||
@ -40,6 +42,11 @@ utils.inherits(NodeServer, EventEmitter);
|
||||
NodeServer.prototype._init = function _init() {
|
||||
var self = this;
|
||||
|
||||
this.server.on('request', function(req, res) {
|
||||
bcoin.debug('Request from %s path=%s',
|
||||
req.socket.remoteAddress, req.pathname);
|
||||
});
|
||||
|
||||
this.use(function(req, res, next, send) {
|
||||
res.setHeader('Access-Control-Allow-Origin', '*');
|
||||
res.setHeader('Access-Control-Allow-Credentials', 'true');
|
||||
@ -624,13 +631,16 @@ NodeServer.prototype.del = function del(path, callback) {
|
||||
|
||||
NodeServer.prototype.listen = function listen(port, host, callback) {
|
||||
var self = this;
|
||||
return this.server.listen(port, host, function(err) {
|
||||
return this.server.listen(port, host, function(err, address) {
|
||||
if (err) {
|
||||
if (callback)
|
||||
return callback(err);
|
||||
return self.emit('error', err);
|
||||
}
|
||||
|
||||
bcoin.debug('Listening - host=%s port=%d',
|
||||
address.address, address.port);
|
||||
|
||||
self.loaded = true;
|
||||
self.emit('open');
|
||||
|
||||
@ -643,4 +653,5 @@ NodeServer.prototype.listen = function listen(port, host, callback) {
|
||||
* Expose
|
||||
*/
|
||||
|
||||
module.exports = NodeServer;
|
||||
return NodeServer;
|
||||
};
|
||||
|
||||
@ -1,10 +1,12 @@
|
||||
/**
|
||||
* input.js - input object for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
var bcoin = require('../bcoin');
|
||||
module.exports = function(bcoin) {
|
||||
|
||||
var utils = require('./utils');
|
||||
var assert = utils.assert;
|
||||
var constants = bcoin.protocol.constants;
|
||||
@ -283,4 +285,5 @@ Input.isInput = function isInput(obj) {
|
||||
* Expose
|
||||
*/
|
||||
|
||||
module.exports = Input;
|
||||
return Input;
|
||||
};
|
||||
|
||||
@ -1,10 +1,12 @@
|
||||
/**
|
||||
* keypair.js - keypair object for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
var bcoin = require('../bcoin');
|
||||
module.exports = function(bcoin) {
|
||||
|
||||
var utils = require('./utils');
|
||||
var assert = utils.assert;
|
||||
var network = bcoin.protocol.network;
|
||||
@ -183,4 +185,5 @@ KeyPair.fromJSON = function fromJSON(json, passphrase) {
|
||||
* Expose
|
||||
*/
|
||||
|
||||
module.exports = KeyPair;
|
||||
return KeyPair;
|
||||
};
|
||||
|
||||
@ -1,14 +1,17 @@
|
||||
/**
|
||||
* ldb.js - global ldb tracker
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
var db = {};
|
||||
|
||||
module.exports = function(bcoin) {
|
||||
|
||||
var EventEmitter = require('events').EventEmitter;
|
||||
var bcoin = require('../bcoin');
|
||||
var utils = bcoin.utils;
|
||||
var network = bcoin.protocol.network;
|
||||
var db = {};
|
||||
|
||||
/**
|
||||
* LDB
|
||||
@ -206,9 +209,10 @@ LowlevelUp.prototype.approximateSize = function approximateSize(start, end, call
|
||||
* Expose
|
||||
*/
|
||||
|
||||
exports = ldb;
|
||||
var exports = ldb;
|
||||
exports.LowlevelUp = LowlevelUp;
|
||||
exports.destroy = destroy;
|
||||
exports.repair = repair;
|
||||
|
||||
module.exports = exports;
|
||||
return exports;
|
||||
};
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
/**
|
||||
* locker.js - lock and queue for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
@ -103,7 +104,7 @@ Locker.prototype.purgePending = function purgePending() {
|
||||
|
||||
assert(this.add);
|
||||
|
||||
utils.debug('Warning: %dmb of pending objects. Purging.',
|
||||
bcoin.debug('Warning: %dmb of pending objects. Purging.',
|
||||
utils.mb(this.pendingSize));
|
||||
|
||||
this.pending.forEach(function(obj) {
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
/**
|
||||
* lru.js - LRU cache for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
|
||||
@ -1,12 +1,14 @@
|
||||
/**
|
||||
* mempool.js - mempool for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
module.exports = function(bcoin) {
|
||||
|
||||
var EventEmitter = require('events').EventEmitter;
|
||||
|
||||
var bcoin = require('../bcoin');
|
||||
var bn = require('bn.js');
|
||||
var constants = bcoin.protocol.constants;
|
||||
var network = bcoin.protocol.network;
|
||||
@ -427,7 +429,7 @@ Mempool.prototype.addTX = function addTX(tx, callback, force) {
|
||||
'mempool full',
|
||||
0));
|
||||
}
|
||||
utils.debug('Added orphan %s to mempool.', tx.rhash);
|
||||
bcoin.debug('Added orphan %s to mempool.', tx.rhash);
|
||||
return self.storeOrphan(tx, callback);
|
||||
}
|
||||
|
||||
@ -465,7 +467,7 @@ Mempool.prototype.addUnchecked = function addUnchecked(tx, callback) {
|
||||
self.emit('tx', tx);
|
||||
self.emit('add tx', tx);
|
||||
|
||||
utils.debug('Added tx %s to the mempool.', tx.rhash);
|
||||
bcoin.debug('Added tx %s to the mempool.', tx.rhash);
|
||||
|
||||
self.resolveOrphans(tx, function(err, resolved) {
|
||||
if (err)
|
||||
@ -475,7 +477,7 @@ Mempool.prototype.addUnchecked = function addUnchecked(tx, callback) {
|
||||
self.verify(tx, function(err) {
|
||||
if (err) {
|
||||
if (err.type === 'VerifyError') {
|
||||
utils.debug('Could not resolved orphan %s: %s.',
|
||||
bcoin.debug('Could not resolved orphan %s: %s.',
|
||||
tx.rhash,
|
||||
err.message);
|
||||
return next();
|
||||
@ -488,7 +490,7 @@ Mempool.prototype.addUnchecked = function addUnchecked(tx, callback) {
|
||||
self.emit('error', err);
|
||||
return next();
|
||||
}
|
||||
utils.debug('Resolved orphan %s in mempool.', tx.rhash);
|
||||
bcoin.debug('Resolved orphan %s in mempool.', tx.rhash);
|
||||
next();
|
||||
});
|
||||
});
|
||||
@ -1221,4 +1223,5 @@ Mempool.prototype._removeUnchecked = function removeUnchecked(hash, callback, fo
|
||||
* Expose
|
||||
*/
|
||||
|
||||
module.exports = Mempool;
|
||||
return Mempool;
|
||||
};
|
||||
|
||||
@ -1,10 +1,12 @@
|
||||
/**
|
||||
* merkleblock.js - merkleblock object for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
var bcoin = require('../bcoin');
|
||||
module.exports = function(bcoin) {
|
||||
|
||||
var utils = require('./utils');
|
||||
|
||||
/**
|
||||
@ -280,4 +282,5 @@ MerkleBlock.fromBlock = function fromBlock(block, bloom) {
|
||||
* Expose
|
||||
*/
|
||||
|
||||
module.exports = MerkleBlock;
|
||||
return MerkleBlock;
|
||||
};
|
||||
|
||||
@ -1,10 +1,12 @@
|
||||
/**
|
||||
* miner.js - inefficient miner for bcoin (because we can)
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
var bcoin = require('../bcoin');
|
||||
module.exports = function(bcoin) {
|
||||
|
||||
var utils = require('./utils');
|
||||
var assert = utils.assert;
|
||||
var constants = bcoin.protocol.constants;
|
||||
@ -86,16 +88,16 @@ Miner.prototype._init = function _init() {
|
||||
});
|
||||
|
||||
this.on('block', function(block) {
|
||||
utils.debug(
|
||||
bcoin.debug(
|
||||
'Found block: %d (%s)',
|
||||
block.height,
|
||||
block.hash('hex'));
|
||||
// Emit the block hex as a failsafe (in case we can't send it)
|
||||
utils.debug('Raw: %s', utils.toHex(block.render()));
|
||||
bcoin.debug('Raw: %s', utils.toHex(block.render()));
|
||||
});
|
||||
|
||||
this.on('status', function(stat) {
|
||||
utils.debug(
|
||||
bcoin.debug(
|
||||
'hashrate=%dkhs hashes=%d target=%d height=%d best=%s',
|
||||
stat.hashrate / 1000 | 0,
|
||||
stat.hashes,
|
||||
@ -144,7 +146,7 @@ Miner.prototype.start = function start() {
|
||||
self.chain.add(block, function(err) {
|
||||
if (err) {
|
||||
if (err.type === 'VerifyError')
|
||||
utils.debug('%s could not be added to chain.', block.rhash);
|
||||
bcoin.debug('%s could not be added to chain.', block.rhash);
|
||||
self.emit('error', err);
|
||||
return self.start();
|
||||
}
|
||||
@ -504,6 +506,7 @@ function rcmp(a, b) {
|
||||
* Expose
|
||||
*/
|
||||
|
||||
exports = Miner;
|
||||
var exports = Miner;
|
||||
exports.minerblock = MinerBlock;
|
||||
module.exports = exports;
|
||||
return exports;
|
||||
};
|
||||
|
||||
@ -1,12 +1,13 @@
|
||||
/**
|
||||
* mtx.js - mutable transaction object for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
var bn = require('bn.js');
|
||||
module.exports = function(bcoin) {
|
||||
|
||||
var bcoin = require('../bcoin');
|
||||
var bn = require('bn.js');
|
||||
var utils = require('./utils');
|
||||
var assert = utils.assert;
|
||||
var constants = bcoin.protocol.constants;
|
||||
@ -1123,4 +1124,5 @@ MTX.isMTX = function isMTX(obj) {
|
||||
* Expose
|
||||
*/
|
||||
|
||||
module.exports = MTX;
|
||||
return MTX;
|
||||
};
|
||||
|
||||
@ -1,11 +1,13 @@
|
||||
/**
|
||||
* node.js - node object for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
module.exports = function(bcoin) {
|
||||
|
||||
var EventEmitter = require('events').EventEmitter;
|
||||
var bcoin = require('../bcoin');
|
||||
var network = bcoin.protocol.network;
|
||||
var utils = require('./utils');
|
||||
|
||||
@ -24,15 +26,6 @@ function Node(options) {
|
||||
|
||||
this.options = options;
|
||||
|
||||
if (this.options.debug != null)
|
||||
bcoin.debugLogs = this.options.debug;
|
||||
|
||||
if (this.options.debugFile != null)
|
||||
bcoin.debugFile = this.options.debugFile;
|
||||
|
||||
if (this.options.network)
|
||||
network.set(this.options.network);
|
||||
|
||||
this.network = network;
|
||||
this.mempool = null;
|
||||
this.pool = null;
|
||||
@ -47,4 +40,5 @@ utils.inherits(Node, EventEmitter);
|
||||
* Expose
|
||||
*/
|
||||
|
||||
module.exports = Node;
|
||||
return Node;
|
||||
};
|
||||
|
||||
@ -1,11 +1,13 @@
|
||||
/**
|
||||
* output.js - output object for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
module.exports = function(bcoin) {
|
||||
|
||||
var bn = require('bn.js');
|
||||
var bcoin = require('../bcoin');
|
||||
var utils = require('./utils');
|
||||
var assert = utils.assert;
|
||||
|
||||
@ -148,4 +150,5 @@ Output.isOutput = function isOutput(obj) {
|
||||
* Expose
|
||||
*/
|
||||
|
||||
module.exports = Output;
|
||||
return Output;
|
||||
};
|
||||
|
||||
@ -1,12 +1,14 @@
|
||||
/**
|
||||
* peer.js - peer object for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
module.exports = function(bcoin) {
|
||||
|
||||
var EventEmitter = require('events').EventEmitter;
|
||||
|
||||
var bcoin = require('../bcoin');
|
||||
var bn = require('bn.js');
|
||||
var utils = require('./utils');
|
||||
var assert = utils.assert;
|
||||
@ -142,7 +144,7 @@ Peer.prototype._init = function init() {
|
||||
});
|
||||
|
||||
this.parser.on('error', function(err) {
|
||||
utils.debug(err.stack + '');
|
||||
bcoin.debug(err.stack + '');
|
||||
self.sendReject(null, 'malformed', 'error parsing message', 100);
|
||||
self._error(err);
|
||||
// Something is wrong here.
|
||||
@ -211,12 +213,12 @@ Peer.prototype.createSocket = function createSocket(port, host) {
|
||||
socket = net.connect(port, host);
|
||||
}
|
||||
|
||||
utils.debug(
|
||||
bcoin.debug(
|
||||
'Connecting to %s:%d (priority=%s)',
|
||||
host, port, this.priority);
|
||||
|
||||
socket.on('connect', function() {
|
||||
utils.debug(
|
||||
bcoin.debug(
|
||||
'Connected to %s:%d (priority=%s)',
|
||||
host, port, self.priority);
|
||||
});
|
||||
@ -512,7 +514,7 @@ Peer.prototype._onPacket = function onPacket(packet) {
|
||||
this._emit(cmd, payload);
|
||||
break;
|
||||
default:
|
||||
utils.debug('Unknown packet: %s', cmd);
|
||||
bcoin.debug('Unknown packet: %s', cmd);
|
||||
this._emit(cmd, payload);
|
||||
break;
|
||||
}
|
||||
@ -555,7 +557,7 @@ Peer.prototype._handleUTXOs = function _handleUTXOs(payload) {
|
||||
payload.coins = payload.coins(function(coin) {
|
||||
return new bcoin.coin(coin);
|
||||
});
|
||||
utils.debug('Received %d utxos from %s.', payload.coins.length, this.host);
|
||||
bcoin.debug('Received %d utxos from %s.', payload.coins.length, this.host);
|
||||
this._emit('utxos', payload);
|
||||
};
|
||||
|
||||
@ -894,7 +896,7 @@ Peer.prototype._handleMempool = function _handleMempool() {
|
||||
for (i = 0; i < hashes.length; i++)
|
||||
items.push({ type: constants.inv.tx, hash: hashes[i] });
|
||||
|
||||
utils.debug('Sending mempool snapshot to %s.', self.host);
|
||||
bcoin.debug('Sending mempool snapshot to %s.', self.host);
|
||||
|
||||
self._write(self.framer.inv(items));
|
||||
});
|
||||
@ -923,13 +925,13 @@ Peer.prototype._handleGetData = function handleGetData(items) {
|
||||
}
|
||||
|
||||
if ((item.type & ~constants.invWitnessMask) !== entry.type) {
|
||||
utils.debug(
|
||||
bcoin.debug(
|
||||
'Peer %s requested an existing item with the wrong type.',
|
||||
this.host);
|
||||
continue;
|
||||
}
|
||||
|
||||
utils.debug(
|
||||
bcoin.debug(
|
||||
'Peer %s requested %s:%s as a %s packet.',
|
||||
this.host,
|
||||
entry.packetType,
|
||||
@ -1064,7 +1066,7 @@ Peer.prototype._handleGetData = function handleGetData(items) {
|
||||
if (err)
|
||||
self.emit('error', err);
|
||||
|
||||
utils.debug(
|
||||
bcoin.debug(
|
||||
'Served %d items to %s with getdata (notfound=%d).',
|
||||
items.length - notfound.length,
|
||||
self.host,
|
||||
@ -1104,7 +1106,7 @@ Peer.prototype._handleAddr = function handleAddr(addrs) {
|
||||
});
|
||||
}
|
||||
|
||||
utils.debug(
|
||||
bcoin.debug(
|
||||
'Recieved %d peers (seeds=%d, peers=%d).',
|
||||
addrs.length,
|
||||
this.pool.seeds.length,
|
||||
@ -1217,9 +1219,9 @@ Peer.prototype._handleAlert = function handleAlert(details) {
|
||||
var signature = details.signature;
|
||||
|
||||
if (!bcoin.ec.verify(hash, signature, network.alertKey)) {
|
||||
utils.debug('Peer %s sent a phony alert packet.', this.host);
|
||||
bcoin.debug('Peer %s sent a phony alert packet.', this.host);
|
||||
// Let's look at it because why not?
|
||||
utils.debug(details);
|
||||
bcoin.debug(details);
|
||||
this.setMisbehavior(100);
|
||||
return;
|
||||
}
|
||||
@ -1228,11 +1230,11 @@ Peer.prototype._handleAlert = function handleAlert(details) {
|
||||
};
|
||||
|
||||
Peer.prototype.getHeaders = function getHeaders(locator, stop) {
|
||||
utils.debug(
|
||||
bcoin.debug(
|
||||
'Requesting headers packet from %s with getheaders',
|
||||
this.host);
|
||||
|
||||
utils.debug('Height: %s, Hash: %s, Stop: %s',
|
||||
bcoin.debug('Height: %s, Hash: %s, Stop: %s',
|
||||
locator && locator.length ? this.chain._getCachedHeight(locator[0]) : null,
|
||||
locator && locator.length ? utils.revHex(locator[0]) : 0,
|
||||
stop ? utils.revHex(stop) : 0);
|
||||
@ -1241,11 +1243,11 @@ Peer.prototype.getHeaders = function getHeaders(locator, stop) {
|
||||
};
|
||||
|
||||
Peer.prototype.getBlocks = function getBlocks(locator, stop) {
|
||||
utils.debug(
|
||||
bcoin.debug(
|
||||
'Requesting inv packet from %s with getblocks',
|
||||
this.host);
|
||||
|
||||
utils.debug('Height: %s, Hash: %s, Stop: %s',
|
||||
bcoin.debug('Height: %s, Hash: %s, Stop: %s',
|
||||
locator && locator.length ? this.chain._getCachedHeight(locator[0]) : null,
|
||||
locator && locator.length ? utils.revHex(locator[0]) : 0,
|
||||
stop ? utils.revHex(stop) : 0);
|
||||
@ -1254,7 +1256,7 @@ Peer.prototype.getBlocks = function getBlocks(locator, stop) {
|
||||
};
|
||||
|
||||
Peer.prototype.getMempool = function getMempool() {
|
||||
utils.debug(
|
||||
bcoin.debug(
|
||||
'Requesting inv packet from %s with mempool',
|
||||
this.host);
|
||||
|
||||
@ -1262,7 +1264,7 @@ Peer.prototype.getMempool = function getMempool() {
|
||||
};
|
||||
|
||||
Peer.prototype.reject = function reject(details) {
|
||||
utils.debug(
|
||||
bcoin.debug(
|
||||
'Sending reject packet to %s',
|
||||
this.host);
|
||||
|
||||
@ -1285,4 +1287,5 @@ Peer.prototype.sendReject = function sendReject(obj, code, reason, score) {
|
||||
* Expose
|
||||
*/
|
||||
|
||||
module.exports = Peer;
|
||||
return Peer;
|
||||
};
|
||||
|
||||
@ -1,12 +1,14 @@
|
||||
/**
|
||||
* pool.js - peer management for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
module.exports = function(bcoin) {
|
||||
|
||||
var EventEmitter = require('events').EventEmitter;
|
||||
|
||||
var bcoin = require('../bcoin');
|
||||
var utils = require('./utils');
|
||||
var assert = utils.assert;
|
||||
var network = bcoin.protocol.network;
|
||||
@ -228,7 +230,7 @@ Pool.prototype._init = function _init() {
|
||||
self.getMempool();
|
||||
self.synced = true;
|
||||
self.emit('full');
|
||||
utils.debug('Chain is fully synced (height=%d).', self.chain.height);
|
||||
bcoin.debug('Chain is fully synced (height=%d).', self.chain.height);
|
||||
});
|
||||
|
||||
(this.options.wallets || []).forEach(function(wallet) {
|
||||
@ -264,19 +266,19 @@ Pool.prototype.resolveOrphan = function resolveOrphan(peer, top, orphan, callbac
|
||||
|
||||
// Was probably resolved.
|
||||
if (!orphan) {
|
||||
utils.debug('Orphan root was already resolved.');
|
||||
bcoin.debug('Orphan root was already resolved.');
|
||||
return callback();
|
||||
}
|
||||
|
||||
// If we're already processing the block
|
||||
// that would resolve this, ignore.
|
||||
// if (self.request.map[orphan.soil]) {
|
||||
// utils.debug('Already requested orphan "soil".');
|
||||
// bcoin.debug('Already requested orphan "soil".');
|
||||
// return callback();
|
||||
// }
|
||||
|
||||
// if (self.chain.hasPending(orphan.soil)) {
|
||||
// utils.debug('Already processing orphan "soil".');
|
||||
// bcoin.debug('Already processing orphan "soil".');
|
||||
// return callback();
|
||||
// }
|
||||
|
||||
@ -323,7 +325,7 @@ Pool.prototype.startServer = function startServer(callback) {
|
||||
|
||||
this.server.on('listening', function() {
|
||||
var data = self.server.address();
|
||||
utils.debug(
|
||||
bcoin.debug(
|
||||
'Bitcoin server listening on %s (port=%d)',
|
||||
data.address, data.port);
|
||||
});
|
||||
@ -359,7 +361,7 @@ Pool.prototype._startTimer = function _startTimer() {
|
||||
|
||||
if (self.peers.load) {
|
||||
self.peers.load.destroy();
|
||||
utils.debug('Timer ran out. Finding new loader peer.');
|
||||
bcoin.debug('Timer ran out. Finding new loader peer.');
|
||||
}
|
||||
}
|
||||
|
||||
@ -387,7 +389,7 @@ Pool.prototype._startInterval = function _startInterval() {
|
||||
if (self.chain.isFull())
|
||||
return;
|
||||
|
||||
utils.debug('Stall recovery: loading again.');
|
||||
bcoin.debug('Stall recovery: loading again.');
|
||||
// self._load();
|
||||
}
|
||||
|
||||
@ -422,7 +424,7 @@ Pool.prototype._addLoader = function _addLoader() {
|
||||
|
||||
assert(peer);
|
||||
|
||||
utils.debug('Added loader peer: %s', peer.host);
|
||||
bcoin.debug('Added loader peer: %s', peer.host);
|
||||
|
||||
this.peers.load = peer;
|
||||
this.peers.all.push(peer);
|
||||
@ -553,7 +555,7 @@ Pool.prototype._handleHeaders = function _handleHeaders(headers, peer, callback)
|
||||
if (headers.length === 0)
|
||||
return callback();
|
||||
|
||||
utils.debug(
|
||||
bcoin.debug(
|
||||
'Recieved %s headers from %s',
|
||||
headers.length,
|
||||
peer.host);
|
||||
@ -611,7 +613,7 @@ Pool.prototype._handleBlocks = function _handleBlocks(hashes, peer, callback) {
|
||||
if (hashes.length === 0)
|
||||
return callback();
|
||||
|
||||
utils.debug(
|
||||
bcoin.debug(
|
||||
'Recieved %s block hashes from %s',
|
||||
hashes.length,
|
||||
peer.host);
|
||||
@ -636,7 +638,7 @@ Pool.prototype._handleBlocks = function _handleBlocks(hashes, peer, callback) {
|
||||
|
||||
// Resolve orphan chain.
|
||||
if (self.chain.hasOrphan(hash)) {
|
||||
utils.debug('Peer sent a hash that is already a known orphan.');
|
||||
bcoin.debug('Peer sent a hash that is already a known orphan.');
|
||||
self.resolveOrphan(peer, null, hash, next);
|
||||
return;
|
||||
}
|
||||
@ -712,7 +714,7 @@ Pool.prototype._handleBlock = function _handleBlock(block, peer, callback) {
|
||||
// Someone is sending us blocks without
|
||||
// us requesting them.
|
||||
if (!requested) {
|
||||
utils.debug(
|
||||
bcoin.debug(
|
||||
'Recieved unrequested block: %s (%s)',
|
||||
block.rhash, peer.host);
|
||||
return callback();
|
||||
@ -745,7 +747,7 @@ Pool.prototype._handleBlock = function _handleBlock(block, peer, callback) {
|
||||
self.emit('chain-progress', self.chain.getProgress(), peer);
|
||||
|
||||
if (self.chain.total % 20 === 0) {
|
||||
utils.debug(
|
||||
bcoin.debug(
|
||||
'Status: tip=%s ts=%s height=%d blocks=%d orphans=%d active=%d'
|
||||
+ ' queue=%d target=%s peers=%d pending=%d highest=%d jobs=%d',
|
||||
block.rhash,
|
||||
@ -815,7 +817,7 @@ Pool.prototype._createPeer = function _createPeer(options) {
|
||||
? utils.revHex(utils.toHex(payload.data))
|
||||
: null;
|
||||
|
||||
utils.debug(
|
||||
bcoin.debug(
|
||||
'Reject (%s): msg=%s ccode=%s reason=%s data=%s',
|
||||
peer.host,
|
||||
payload.message,
|
||||
@ -827,8 +829,8 @@ Pool.prototype._createPeer = function _createPeer(options) {
|
||||
});
|
||||
|
||||
peer.on('alert', function(payload) {
|
||||
utils.debug('Received alert from: %s', peer.host);
|
||||
utils.debug(payload);
|
||||
bcoin.debug('Received alert from: %s', peer.host);
|
||||
bcoin.debug(payload);
|
||||
self.emit('alert', payload, peer);
|
||||
});
|
||||
|
||||
@ -887,7 +889,7 @@ Pool.prototype._createPeer = function _createPeer(options) {
|
||||
if (version.height > self.block.versionHeight)
|
||||
self.block.versionHeight = version.height;
|
||||
|
||||
utils.debug(
|
||||
bcoin.debug(
|
||||
'Received version from %s: version=%d height=%d agent=%s',
|
||||
peer.host, version.version, version.height, version.agent);
|
||||
|
||||
@ -1153,7 +1155,7 @@ Pool.prototype._removePeer = function _removePeer(peer) {
|
||||
this.peers.all.splice(i, 1);
|
||||
|
||||
if (this.peers.load === peer) {
|
||||
utils.debug('Removed loader peer (%s).', peer.host);
|
||||
bcoin.debug('Removed loader peer (%s).', peer.host);
|
||||
this.peers.load = null;
|
||||
}
|
||||
};
|
||||
@ -1300,12 +1302,12 @@ Pool.prototype.searchWallet = function(wallet, callback) {
|
||||
|
||||
self.chain.reset(height, function(err) {
|
||||
if (err) {
|
||||
utils.debug('Failed to reset height: %s', err.stack + '');
|
||||
bcoin.debug('Failed to reset height: %s', err.stack + '');
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
utils.debug('Wallet height: %s', height);
|
||||
utils.debug(
|
||||
bcoin.debug('Wallet height: %s', height);
|
||||
bcoin.debug(
|
||||
'Reverted chain to height=%d (%s)',
|
||||
self.chain.height,
|
||||
new Date(self.chain.tip.ts * 1000)
|
||||
@ -1322,12 +1324,12 @@ Pool.prototype.searchWallet = function(wallet, callback) {
|
||||
|
||||
self.chain.resetTime(ts, function(err) {
|
||||
if (err) {
|
||||
utils.debug('Failed to reset time: %s', err.stack + '');
|
||||
bcoin.debug('Failed to reset time: %s', err.stack + '');
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
utils.debug('Wallet time: %s', new Date(ts * 1000));
|
||||
utils.debug(
|
||||
bcoin.debug('Wallet time: %s', new Date(ts * 1000));
|
||||
bcoin.debug(
|
||||
'Reverted chain to height=%d (%s)',
|
||||
self.chain.height,
|
||||
new Date(self.chain.tip.ts * 1000)
|
||||
@ -1437,7 +1439,7 @@ Pool.prototype.getData = function getData(peer, type, hash, options, callback) {
|
||||
if (type === self.tx.type) {
|
||||
if (peer.queue.tx.length === 0) {
|
||||
utils.nextTick(function() {
|
||||
utils.debug(
|
||||
bcoin.debug(
|
||||
'Requesting %d/%d txs from %s with getdata',
|
||||
peer.queue.tx.length,
|
||||
self.request.activeTX,
|
||||
@ -1513,7 +1515,7 @@ Pool.prototype._sendRequests = function _sendRequests(peer) {
|
||||
return item.start();
|
||||
});
|
||||
|
||||
utils.debug(
|
||||
bcoin.debug(
|
||||
'Requesting %d/%d blocks from %s with getdata',
|
||||
items.length,
|
||||
this.request.activeBlocks,
|
||||
@ -1880,7 +1882,7 @@ Pool.prototype.setMisbehavior = function setMisbehavior(peer, score) {
|
||||
|
||||
if (peer.banScore >= constants.banScore) {
|
||||
this.peers.misbehaving[peer.host] = utils.now();
|
||||
utils.debug('Ban threshold exceeded for %s', peer.host);
|
||||
bcoin.debug('Ban threshold exceeded for %s', peer.host);
|
||||
peer.destroy();
|
||||
return true;
|
||||
}
|
||||
@ -1912,7 +1914,7 @@ Pool.prototype.isMisbehaving = function isMisbehaving(host) {
|
||||
|
||||
Pool.prototype.reject = function reject(peer, obj, code, reason, score) {
|
||||
if (obj) {
|
||||
utils.debug('Rejecting %s %s from %s: ccode=%s reason=%s',
|
||||
bcoin.debug('Rejecting %s %s from %s: ccode=%s reason=%s',
|
||||
obj.type, obj.hash('hex'), peer.host, code, reason);
|
||||
|
||||
peer.reject({
|
||||
@ -1921,7 +1923,7 @@ Pool.prototype.reject = function reject(peer, obj, code, reason, score) {
|
||||
data: obj.hash()
|
||||
});
|
||||
} else {
|
||||
utils.debug('Rejecting packet from %s: ccode=%s reason=%s',
|
||||
bcoin.debug('Rejecting packet from %s: ccode=%s reason=%s',
|
||||
peer.host, code, reason);
|
||||
|
||||
peer.reject({
|
||||
@ -2002,4 +2004,5 @@ LoadRequest.prototype.finish = function finish() {
|
||||
* Expose
|
||||
*/
|
||||
|
||||
module.exports = Pool;
|
||||
return Pool;
|
||||
};
|
||||
|
||||
@ -1,10 +1,14 @@
|
||||
/**
|
||||
* profiler.js - profiler for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
var bcoin = require('../bcoin');
|
||||
module.exports = function(bcoin) {
|
||||
|
||||
var exports = {};
|
||||
|
||||
var utils = require('./utils');
|
||||
var assert = utils.assert;
|
||||
var fs, profiler;
|
||||
@ -16,7 +20,7 @@ if (bcoin.profile && !bcoin.isBrowser) {
|
||||
|
||||
if (profiler) {
|
||||
utils.nextTick(function() {
|
||||
utils.debug('Starting node with profiler enabled.');
|
||||
bcoin.debug('Starting node with profiler enabled.');
|
||||
});
|
||||
}
|
||||
|
||||
@ -27,7 +31,7 @@ if (profiler) {
|
||||
function Profile(name) {
|
||||
if (profiler) {
|
||||
name = 'profile-' + (name ? name + '-' : '') + Profile.uid++;
|
||||
utils.debug('Starting CPU profile: %s', name);
|
||||
bcoin.debug('Starting CPU profile: %s', name);
|
||||
this.profile = profiler.startProfiling(name, true);
|
||||
this.name = name;
|
||||
}
|
||||
@ -63,7 +67,7 @@ Profile.prototype.save = function save(callback) {
|
||||
|
||||
assert(this.profile);
|
||||
|
||||
utils.debug('Saving CPU profile: %s', this.name);
|
||||
bcoin.debug('Saving CPU profile: %s', this.name);
|
||||
|
||||
return this.profile['export'](function(err, result) {
|
||||
var file;
|
||||
@ -87,7 +91,7 @@ Profile.prototype.save = function save(callback) {
|
||||
function Snapshot(name) {
|
||||
if (profiler) {
|
||||
name = 'snapshot-' + (name ? name + '-' : '') + Snapshot.uid++;
|
||||
utils.debug('Taking heap snapshot: %s', name);
|
||||
bcoin.debug('Taking heap snapshot: %s', name);
|
||||
this.snapshot = profiler.takeSnapshot(name);
|
||||
this.name = name;
|
||||
}
|
||||
@ -132,7 +136,7 @@ Snapshot.prototype.save = function save(callback) {
|
||||
|
||||
assert(this.snapshot);
|
||||
|
||||
utils.debug('Saving heap snapshot: %s', this.name);
|
||||
bcoin.debug('Saving heap snapshot: %s', this.name);
|
||||
|
||||
return this.snapshot['export'](function(err, result) {
|
||||
var file;
|
||||
@ -171,7 +175,7 @@ exports.snapshot = function snapshot(name, callback) {
|
||||
|
||||
if (bcoin.debugLogs) {
|
||||
mem = process.memoryUsage();
|
||||
utils.debug('Memory: rss=%dmb, js-heap=%d/%dmb native-heap=%dmb',
|
||||
bcoin.debug('Memory: rss=%dmb, js-heap=%d/%dmb native-heap=%dmb',
|
||||
utils.mb(mem.rss),
|
||||
utils.mb(mem.heapUsed),
|
||||
utils.mb(mem.heapTotal),
|
||||
@ -184,3 +188,6 @@ exports.snapshot = function snapshot(name, callback) {
|
||||
snapshot = new Snapshot(name);
|
||||
snapshot.save(callback);
|
||||
};
|
||||
|
||||
return exports;
|
||||
};
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
/**
|
||||
* constants.js - bitcoin constants for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
|
||||
@ -1,11 +1,13 @@
|
||||
/**
|
||||
* framer.js - packet framer for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
var bcoin = require('../../bcoin');
|
||||
var network = require('./network');
|
||||
module.exports = function(bcoin) {
|
||||
|
||||
var network = bcoin.protocol.network;
|
||||
var constants = require('./constants');
|
||||
var utils = require('../utils');
|
||||
var assert = utils.assert;
|
||||
@ -937,4 +939,5 @@ Framer.tx.virtualSize = function txVirtualSize(tx) {
|
||||
* Expose
|
||||
*/
|
||||
|
||||
module.exports = Framer;
|
||||
return Framer;
|
||||
};
|
||||
|
||||
@ -1,12 +1,17 @@
|
||||
/**
|
||||
* protocol/index.js - bitcoin protocol for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
var protocol = exports;
|
||||
module.exports = function(bcoin) {
|
||||
bcoin.protocol = {};
|
||||
|
||||
protocol.constants = require('./constants');
|
||||
protocol.framer = require('./framer');
|
||||
protocol.parser = require('./parser');
|
||||
protocol.network = require('./network');
|
||||
bcoin.protocol.constants = require('./constants');
|
||||
bcoin.protocol.network = require('./network').get(bcoin.networkType);
|
||||
bcoin.protocol.framer = require('./framer')(bcoin);
|
||||
bcoin.protocol.parser = require('./parser')(bcoin);
|
||||
|
||||
return bcoin.protocol;
|
||||
};
|
||||
|
||||
@ -1,11 +1,13 @@
|
||||
/**
|
||||
* network.js - bitcoin networks for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
var bn = require('bn.js');
|
||||
var utils = require('../utils');
|
||||
var assert = utils.assert;
|
||||
|
||||
/**
|
||||
* Network
|
||||
@ -14,13 +16,13 @@ var utils = require('../utils');
|
||||
var network = exports;
|
||||
var main, testnet, regtest, segnet3, segnet4;
|
||||
|
||||
network.set = function set(type) {
|
||||
var net = network[type];
|
||||
utils.merge(network, net);
|
||||
};
|
||||
|
||||
network.types = ['main', 'testnet', 'regtest', 'segnet3', 'segnet4'];
|
||||
|
||||
network.get = function get(type) {
|
||||
assert(network[type], 'Network not found.');
|
||||
return utils.merge({}, network, network[type]);
|
||||
};
|
||||
|
||||
/**
|
||||
* Main
|
||||
*/
|
||||
@ -145,7 +147,7 @@ main.deployments = {
|
||||
timeout: 1491004800 // April 1st, 2017
|
||||
}
|
||||
// bip109: {
|
||||
// bit: 28,
|
||||
// bit: 4,
|
||||
// startTime: 1453939200, // Jan 28th, 2016
|
||||
// timeout: 1514764800 // Jan 1st, 2018
|
||||
// }
|
||||
@ -494,7 +496,7 @@ segnet4.deployments = utils.merge({}, main.deployments, {
|
||||
timeout: 999999999999
|
||||
}
|
||||
// bip109: {
|
||||
// bit: 28,
|
||||
// bit: 4,
|
||||
// startTime: 1453939200, // Jan 28th, 2016
|
||||
// timeout: 1514764800 // Jan 1st, 2018
|
||||
// }
|
||||
@ -514,6 +516,10 @@ segnet4.genesis = {
|
||||
|
||||
segnet4.genesisBlock = '0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a7d719856ffff011e000000000101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000';
|
||||
|
||||
/**
|
||||
* Global
|
||||
*/
|
||||
|
||||
network.xprivkeys = {
|
||||
'76066276': 'main',
|
||||
'70615956': 'testnet',
|
||||
|
||||
@ -1,15 +1,17 @@
|
||||
/**
|
||||
* parser.js - packet parser for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
module.exports = function(bcoin) {
|
||||
|
||||
var EventEmitter = require('events').EventEmitter;
|
||||
var bcoin = require('../../bcoin');
|
||||
var utils = require('../utils');
|
||||
var assert = utils.assert;
|
||||
var constants = require('./constants');
|
||||
var network = require('./network');
|
||||
var network = bcoin.protocol.network;
|
||||
var BufferReader = require('../reader');
|
||||
|
||||
/**
|
||||
@ -256,7 +258,7 @@ Parser.prototype.parsePayload = function parsePayload(cmd, p) {
|
||||
case 'utxos':
|
||||
return Parser.parseUTXOs(p);
|
||||
default:
|
||||
utils.debug('Unknown packet: %s', cmd);
|
||||
bcoin.debug('Unknown packet: %s', cmd);
|
||||
return p;
|
||||
}
|
||||
};
|
||||
@ -1010,4 +1012,5 @@ Parser.parseAlert = function parseAlert(p) {
|
||||
* Expose
|
||||
*/
|
||||
|
||||
module.exports = Parser;
|
||||
return Parser;
|
||||
};
|
||||
|
||||
@ -1,79 +0,0 @@
|
||||
/**
|
||||
* ramdisk.js - file in ram for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
var utils = require('./utils');
|
||||
var assert = utils.assert;
|
||||
|
||||
/**
|
||||
* Ramdisk
|
||||
*/
|
||||
|
||||
function Ramdisk(fileData, size) {
|
||||
if (!(this instanceof Ramdisk))
|
||||
return new Ramdisk(fileData, size);
|
||||
|
||||
if (size == null) {
|
||||
size = fileData;
|
||||
fileData = new Buffer([]);
|
||||
}
|
||||
|
||||
assert(Buffer.isBuffer(fileData));
|
||||
assert(typeof size === 'number');
|
||||
|
||||
if (size < fileData.length)
|
||||
size = fileData.length + (fileData.length / 2 | 0);
|
||||
|
||||
this.size = fileData.length;
|
||||
this.heap = new Buffer(size);
|
||||
|
||||
fileData.copy(this.heap, 0, 0, fileData.length);
|
||||
}
|
||||
|
||||
Ramdisk.prototype.brk = function brk() {
|
||||
var heap = new Buffer(this.heap.length + (this.heap.length / 2 | 0));
|
||||
utils.debug('brk1(%d, %d)', this.heap.length, heap.length);
|
||||
this.heap.copy(heap, 0, 0, this.heap.length);
|
||||
utils.debug('brk2(%d, %d)', this.heap.length, heap.length);
|
||||
this.heap = heap;
|
||||
};
|
||||
|
||||
Ramdisk.prototype.write = function write(data, offset) {
|
||||
var added = Math.max(0, (offset + data.length) - this.size);
|
||||
|
||||
while (offset + data.length > this.heap.length)
|
||||
this.brk();
|
||||
|
||||
data.copy(this.heap, offset, 0, data.length);
|
||||
|
||||
this.size += added;
|
||||
|
||||
return data.length;
|
||||
};
|
||||
|
||||
Ramdisk.prototype.truncate = function truncate(size) {
|
||||
assert(size <= this.size);
|
||||
this.size = size;
|
||||
};
|
||||
|
||||
Ramdisk.prototype.read = function read(size, offset) {
|
||||
var data, ret;
|
||||
|
||||
if (offset + size > this.size)
|
||||
return;
|
||||
|
||||
data = this.heap.slice(offset, offset + size);
|
||||
ret = new Buffer(size);
|
||||
|
||||
data.copy(ret, 0, 0, data.length);
|
||||
|
||||
return ret;
|
||||
};
|
||||
|
||||
/**
|
||||
* Expose
|
||||
*/
|
||||
|
||||
module.exports = Ramdisk;
|
||||
@ -1,6 +1,7 @@
|
||||
/**
|
||||
* reader.js - buffer reader for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
|
||||
@ -1,10 +1,12 @@
|
||||
/**
|
||||
* script.js - script interpreter for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
var bcoin = require('../bcoin');
|
||||
module.exports = function(bcoin) {
|
||||
|
||||
var bn = require('bn.js');
|
||||
var constants = bcoin.protocol.constants;
|
||||
var utils = require('./utils');
|
||||
@ -545,10 +547,10 @@ Script.prototype.execute = function execute(stack, flags, tx, index, version) {
|
||||
return this.interpret(stack, flags, tx, index, version);
|
||||
} catch (e) {
|
||||
if (e.type === 'ScriptError') {
|
||||
utils.debug('Script error: %s.', e.message);
|
||||
bcoin.debug('Script error: %s.', e.message);
|
||||
} else {
|
||||
utils.debug('Script interpreter threw:');
|
||||
utils.debug(e.stack + '');
|
||||
bcoin.debug('Script interpreter threw:');
|
||||
bcoin.debug(e.stack + '');
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -2017,7 +2019,7 @@ Script.isValidKey = function isValidKey(key, flags) {
|
||||
|
||||
if (flags & constants.flags.VERIFY_STRICTENC) {
|
||||
if (!Script.isKeyEncoding(key)) {
|
||||
utils.debug('Script failed key encoding test.');
|
||||
bcoin.debug('Script failed key encoding test.');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -2060,21 +2062,21 @@ Script.isValidSignature = function isValidSignature(sig, flags) {
|
||||
|| (flags & constants.flags.VERIFY_LOW_S)
|
||||
|| (flags & constants.flags.VERIFY_STRICTENC)) {
|
||||
if (!Script.isSignatureEncoding(sig)) {
|
||||
utils.debug('Script does not have a proper signature encoding.');
|
||||
bcoin.debug('Script does not have a proper signature encoding.');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (flags & constants.flags.VERIFY_LOW_S) {
|
||||
if (!Script.isLowDER(sig)) {
|
||||
utils.debug('Script does not have a low DER.');
|
||||
bcoin.debug('Script does not have a low DER.');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (flags & constants.flags.VERIFY_STRICTENC) {
|
||||
if (!Script.isHashType(sig)) {
|
||||
utils.debug('Script does not have a valid hash type.');
|
||||
bcoin.debug('Script does not have a valid hash type.');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -2527,12 +2529,12 @@ Script.verifyProgram = function verifyProgram(witness, output, flags, tx, i) {
|
||||
|
||||
// Failure on version=0 (bad program data length)
|
||||
if (!program.type) {
|
||||
utils.debug('Malformed witness program.');
|
||||
bcoin.debug('Malformed witness program.');
|
||||
return false;
|
||||
}
|
||||
|
||||
if (program.version > 0) {
|
||||
utils.debug('Unknown witness program version: %s', program.version);
|
||||
bcoin.debug('Unknown witness program version: %s', program.version);
|
||||
// Anyone can spend (we can return true here
|
||||
// if we want to always relay these transactions).
|
||||
// Otherwise, if we want to act like an "old"
|
||||
@ -2822,4 +2824,5 @@ utils.inherits(ScriptError, Error);
|
||||
Script.witness = Witness;
|
||||
Script.stack = Stack;
|
||||
Script.error = ScriptError;
|
||||
module.exports = Script;
|
||||
return Script;
|
||||
};
|
||||
|
||||
@ -1,10 +1,12 @@
|
||||
/**
|
||||
* spvnode.js - spv node for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
var bcoin = require('../bcoin');
|
||||
module.exports = function(bcoin) {
|
||||
|
||||
var utils = require('./utils');
|
||||
var assert = utils.assert;
|
||||
|
||||
@ -109,7 +111,7 @@ SPVNode.prototype._init = function _init() {
|
||||
|
||||
self.loaded = true;
|
||||
self.emit('open');
|
||||
utils.debug('Node is loaded.');
|
||||
bcoin.debug('Node is loaded.');
|
||||
}
|
||||
|
||||
options = utils.merge({
|
||||
@ -191,7 +193,7 @@ SPVNode.prototype.createWallet = function createWallet(options, callback) {
|
||||
|
||||
assert(wallet);
|
||||
|
||||
utils.debug('Loaded wallet with id=%s address=%s',
|
||||
bcoin.debug('Loaded wallet with id=%s address=%s',
|
||||
wallet.id, wallet.getAddress());
|
||||
|
||||
self.pool.addWallet(wallet, function(err) {
|
||||
@ -211,4 +213,5 @@ SPVNode.prototype.getWallet = function getWallet(id, passphrase, callback) {
|
||||
* Expose
|
||||
*/
|
||||
|
||||
module.exports = SPVNode;
|
||||
return SPVNode;
|
||||
};
|
||||
|
||||
@ -1,12 +1,14 @@
|
||||
/**
|
||||
* tx.js - transaction object for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
module.exports = function(bcoin) {
|
||||
|
||||
var bn = require('bn.js');
|
||||
|
||||
var bcoin = require('../bcoin');
|
||||
var utils = require('./utils');
|
||||
var assert = utils.assert;
|
||||
var constants = bcoin.protocol.constants;
|
||||
@ -410,7 +412,7 @@ TX.prototype.verify = function verify(index, force, flags) {
|
||||
continue;
|
||||
|
||||
if (!input.coin) {
|
||||
utils.debug('Warning: Not all coins are available for tx.verify().');
|
||||
bcoin.debug('Warning: Not all coins are available for tx.verify().');
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -1402,4 +1404,5 @@ TX.isTX = function isTX(obj) {
|
||||
* Expose
|
||||
*/
|
||||
|
||||
module.exports = TX;
|
||||
return TX;
|
||||
};
|
||||
|
||||
@ -1,11 +1,13 @@
|
||||
/**
|
||||
* txdb.js - persistent transaction pool
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
module.exports = function(bcoin) {
|
||||
|
||||
var bn = require('bn.js');
|
||||
var bcoin = require('../bcoin');
|
||||
var utils = require('./utils');
|
||||
var assert = bcoin.utils.assert;
|
||||
var EventEmitter = require('events').EventEmitter;
|
||||
@ -1666,4 +1668,5 @@ TXPool.prototype.zap = function zap(address, now, age, callback, force) {
|
||||
* Expose
|
||||
*/
|
||||
|
||||
module.exports = TXPool;
|
||||
return TXPool;
|
||||
};
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
/**
|
||||
* utils.js - utils for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
@ -27,9 +28,6 @@ utils.nop = function() {};
|
||||
|
||||
utils.gc = !utils.isBrowser && typeof gc === 'function' ? gc : utils.nop;
|
||||
|
||||
if (utils.gc !== utils.nop)
|
||||
console.error('bcoin started with --expose-gc enabled.');
|
||||
|
||||
utils.slice = function slice(buf, start, end) {
|
||||
var clone;
|
||||
|
||||
@ -713,9 +711,6 @@ utils.print = function print() {
|
||||
return process.stdout.write(utils.format(args, true));
|
||||
};
|
||||
|
||||
utils.debug = utils.nop;
|
||||
utils.ensurePrefix = utils.nop;
|
||||
|
||||
utils.merge = function merge(target) {
|
||||
var args = Array.prototype.slice.call(arguments, 1);
|
||||
args.forEach(function(obj) {
|
||||
|
||||
@ -1,10 +1,12 @@
|
||||
/**
|
||||
* wallet.js - wallet object for bcoin
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
var bcoin = require('../bcoin');
|
||||
module.exports = function(bcoin) {
|
||||
|
||||
var EventEmitter = require('events').EventEmitter;
|
||||
var utils = require('./utils');
|
||||
var assert = utils.assert;
|
||||
@ -132,7 +134,7 @@ Wallet.prototype._init = function _init() {
|
||||
this.provider.setID(this.id);
|
||||
|
||||
this.on('error', function(err) {
|
||||
utils.debug('Wallet Error: %s', err.message);
|
||||
bcoin.debug('Wallet Error: %s', err.message);
|
||||
});
|
||||
|
||||
this.provider.on('error', function(err) {
|
||||
@ -1275,4 +1277,5 @@ Wallet.isWallet = function isWallet(obj) {
|
||||
* Expose
|
||||
*/
|
||||
|
||||
module.exports = Wallet;
|
||||
return Wallet;
|
||||
};
|
||||
|
||||
@ -1,12 +1,14 @@
|
||||
/**
|
||||
* walletdb.js - storage for wallets
|
||||
* Copyright (c) 2014-2015, Fedor Indutny (MIT License)
|
||||
* Copyright (c) 2014-2016, Christopher Jeffrey (MIT License).
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
module.exports = function(bcoin) {
|
||||
|
||||
var EventEmitter = require('events').EventEmitter;
|
||||
|
||||
var bcoin = require('../bcoin');
|
||||
var utils = require('./utils');
|
||||
var assert = utils.assert;
|
||||
var DUMMY = new Buffer([0]);
|
||||
@ -794,4 +796,8 @@ Provider.prototype.zap = function zap(wallet, address) {
|
||||
* Expose
|
||||
*/
|
||||
|
||||
module.exports = WalletDB;
|
||||
WalletDB.Provider = Provider;
|
||||
|
||||
return WalletDB;
|
||||
|
||||
};
|
||||
|
||||
@ -4,7 +4,8 @@
|
||||
* https://github.com/indutny/bcoin
|
||||
*/
|
||||
|
||||
var bcoin = require('../bcoin');
|
||||
module.exports = function(bcoin) {
|
||||
|
||||
var bn = require('bn.js');
|
||||
var constants = bcoin.protocol.constants;
|
||||
var utils = require('./utils');
|
||||
@ -12,7 +13,7 @@ var assert = utils.assert;
|
||||
var BufferWriter = require('./writer');
|
||||
var BufferReader = require('./reader');
|
||||
var cp = require('child_process');
|
||||
var workers = exports;
|
||||
var workers = {};
|
||||
|
||||
var HEADER_SIZE = 12;
|
||||
|
||||
@ -20,35 +21,36 @@ var HEADER_SIZE = 12;
|
||||
* Master
|
||||
*/
|
||||
|
||||
workers.MAX_WORKERS = +process.env.BCOIN_WORKERS || 6;
|
||||
workers.TIMEOUT = 10000;
|
||||
workers.MAX_WORKERS = bcoin.maxWorkers || 6;
|
||||
workers.TIMEOUT = bcoin.workerTimeout || 10000;
|
||||
workers.children = {};
|
||||
workers.uid = 0;
|
||||
|
||||
workers.spawn = function spawn(index) {
|
||||
var child;
|
||||
|
||||
utils.debug('Spawning worker process: %d', index);
|
||||
bcoin.debug('Spawning worker process: %d', index);
|
||||
|
||||
child = cp.spawn(process.argv[0], [__filename], {
|
||||
stdio: ['pipe', 'pipe', 'inherit'],
|
||||
env: utils.merge({}, process.env, {
|
||||
BCOIN_WORKER_ID: index + ''
|
||||
BCOIN_WORKER_ID: index + '',
|
||||
BCOIN_WORKER_OPTIONS: JSON.stringify(bcoin.options)
|
||||
})
|
||||
});
|
||||
|
||||
child.on('error', function(err) {
|
||||
utils.debug('Worker %d error: %s', index, err.message);
|
||||
bcoin.debug('Worker %d error: %s', index, err.message);
|
||||
});
|
||||
|
||||
child.on('exit', function(code) {
|
||||
utils.debug('Worker %d exited: %s', index, code);
|
||||
bcoin.debug('Worker %d exited: %s', index, code);
|
||||
if (workers.children[index] === child)
|
||||
delete workers.children[index];
|
||||
});
|
||||
|
||||
child.on('close', function() {
|
||||
utils.debug('Worker %d closed', index);
|
||||
bcoin.debug('Worker %d closed', index);
|
||||
if (workers.children[index] === child)
|
||||
delete workers.children[index];
|
||||
});
|
||||
@ -141,7 +143,6 @@ workers.listen = function listen() {
|
||||
return console.error.apply(console.error, arguments);
|
||||
};
|
||||
|
||||
utils.debug = bcoin.debug;
|
||||
utils.print = bcoin.debug;
|
||||
|
||||
process.stdin.on('data', parser(function(id, body) {
|
||||
@ -150,7 +151,7 @@ workers.listen = function listen() {
|
||||
try {
|
||||
res = workers[body.name].apply(workers[body.name], body.items);
|
||||
} catch (e) {
|
||||
utils.debug(e.stack + '');
|
||||
bcoin.debug(e.stack + '');
|
||||
return process.stdout.write(createPacket(id, null, [{
|
||||
message: e.message,
|
||||
stack: e.stack + ''
|
||||
@ -182,7 +183,7 @@ workers.mine = function mine(attempt) {
|
||||
dsha256: utils.dsha256
|
||||
});
|
||||
attempt.on('status', function(stat) {
|
||||
utils.debug(
|
||||
bcoin.debug(
|
||||
'hashrate=%dkhs hashes=%d target=%d height=%d best=%s',
|
||||
stat.hashrate / 1000 | 0,
|
||||
stat.hashes,
|
||||
@ -377,7 +378,7 @@ function parser(onPacket) {
|
||||
buf = [];
|
||||
waiting = HEADER_SIZE;
|
||||
read = 0;
|
||||
utils.debug('Bad magic number: %d', header.magic);
|
||||
bcoin.debug('Bad magic number: %d', header.magic);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -394,7 +395,7 @@ function parser(onPacket) {
|
||||
try {
|
||||
packet = parseBody(packet);
|
||||
} catch (e) {
|
||||
utils.debug(e.stack + '');
|
||||
bcoin.debug(e.stack + '');
|
||||
return;
|
||||
}
|
||||
|
||||
@ -410,5 +411,10 @@ function parser(onPacket) {
|
||||
};
|
||||
}
|
||||
|
||||
if (process.env.BCOIN_WORKER_ID)
|
||||
workers.listen();
|
||||
return workers;
|
||||
};
|
||||
|
||||
if (process.env.BCOIN_WORKER_ID) {
|
||||
var env = require('./env')(JSON.parse(process.env.BCOIN_WORKER_OPTIONS));
|
||||
env.workers.listen();
|
||||
}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
var assert = require('assert');
|
||||
var bn = require('bn.js');
|
||||
var bcoin = require('../');
|
||||
var bcoin = require('../')();
|
||||
|
||||
describe('Block', function() {
|
||||
var parser = bcoin.protocol.parser;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
var assert = require('assert');
|
||||
var bcoin = require('../');
|
||||
var bcoin = require('../')();
|
||||
|
||||
describe('Bloom', function() {
|
||||
it('should do proper murmur3', function() {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
// var assert = require('assert');
|
||||
var bn = require('bn.js');
|
||||
var bcoin = require('../');
|
||||
var bcoin = require('../')();
|
||||
var utils = bcoin.utils;
|
||||
var assert = utils.assert;
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
var bn = require('bn.js');
|
||||
var bcoin = require('../');
|
||||
var bcoin = require('../')();
|
||||
var constants = bcoin.protocol.constants;
|
||||
var utils = bcoin.utils;
|
||||
var assert = utils.assert;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
var assert = require('assert');
|
||||
var bcoin = require('../');
|
||||
var bcoin = require('../')();
|
||||
var constants = bcoin.protocol.constants;
|
||||
var utils = bcoin.utils;
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
var assert = require('assert');
|
||||
var bcoin = require('../');
|
||||
var bcoin = require('../')();
|
||||
var Script = bcoin.script;
|
||||
var Stack = bcoin.script.stack;
|
||||
var opcodes = bcoin.protocol.constants.opcodes;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
var assert = require('assert');
|
||||
var bn = require('bn.js');
|
||||
var bcoin = require('../');
|
||||
var bcoin = require('../')();
|
||||
|
||||
describe('TX', function() {
|
||||
var parser = bcoin.protocol.parser;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
var assert = require('assert');
|
||||
var bn = require('bn.js');
|
||||
var bcoin = require('../');
|
||||
var bcoin = require('../')();
|
||||
var utils = bcoin.utils;
|
||||
|
||||
describe('Utils', function() {
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
var bn = require('bn.js');
|
||||
var bcoin = require('../');
|
||||
var bcoin = require('../')();
|
||||
var constants = bcoin.protocol.constants;
|
||||
var utils = bcoin.utils;
|
||||
var assert = utils.assert;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user