316 lines
8.5 KiB
JavaScript
316 lines
8.5 KiB
JavaScript
/*!
|
|
* env.js - environment for bcoin
|
|
* Copyright (c) 2014-2015, Fedor Indutny (MIT License).
|
|
* Copyright (c) 2014-2017, Christopher Jeffrey (MIT License).
|
|
* https://github.com/bcoin-org/bcoin
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
var lazy = require('./utils/lazy');
|
|
|
|
/**
|
|
* A bcoin "environment" which exposes all
|
|
* constructors for primitives, the blockchain,
|
|
* mempool, wallet, etc. It also exposes a
|
|
* global worker pool.
|
|
* @exports Environment
|
|
* @constructor
|
|
* @property {Function} env - See {@link Environment}.
|
|
* @property {Function} require - See {@link module:utils/lazy}.
|
|
*
|
|
* @property {Function} bn - See {@url https://github.com/indutny/bn.js}.
|
|
* @property {Object} elliptic - See {@url https://github.com/indutny/elliptic}.
|
|
*
|
|
* @property {Object} bip70 - See {@link module:bip70}.
|
|
*
|
|
* @property {Object} blockchain - See {@link module:blockchain}.
|
|
* @property {Function} chain - See {@link module:blockchain.Chain}.
|
|
* @property {Function} chaindb - See {@link module:blockchain.ChainDB}.
|
|
* @property {Function} chainentry - See {@link module:blockchain.ChainEntry}.
|
|
*
|
|
* @property {Object} btc
|
|
* @property {Function} amount
|
|
* @property {Function} uri
|
|
*
|
|
* @property {Object} coins
|
|
* @property {Function} coinview
|
|
*
|
|
* @property {Object} crypto
|
|
* @property {Object} ec
|
|
* @property {Object} pk
|
|
* @property {Object} schnorr
|
|
*
|
|
* @property {Object} db
|
|
* @property {Object} ldb
|
|
*
|
|
* @property {Object} hd
|
|
*
|
|
* @property {Object} http
|
|
* @property {Object} rpc
|
|
*
|
|
* @property {Object} txmempool
|
|
* @property {Object} fees
|
|
* @property {Object} mempool
|
|
* @property {Object} mempoolentry
|
|
*
|
|
* @property {Object} mining
|
|
* @property {Object} miner
|
|
* @property {Object} minerblock
|
|
*
|
|
* @property {Object} net
|
|
* @property {Object} bip150
|
|
* @property {Object} bip151
|
|
* @property {Object} bip152
|
|
* @property {Object} dns
|
|
* @property {Object} packets
|
|
* @property {Object} peer
|
|
* @property {Object} pool
|
|
* @property {Object} tcp
|
|
*
|
|
* @property {Object} node
|
|
* @property {Object} config
|
|
* @property {Object} fullnode
|
|
* @property {Object} logger
|
|
* @property {Object} spvnode
|
|
*
|
|
* @property {Object} primitives
|
|
* @property {Object} address
|
|
* @property {Object} block
|
|
* @property {Object} coin
|
|
* @property {Object} headers
|
|
* @property {Object} input
|
|
* @property {Object} invitem
|
|
* @property {Object} keyring
|
|
* @property {Object} merkleblock
|
|
* @property {Object} mtx
|
|
* @property {Object} netaddress
|
|
* @property {Object} outpoint
|
|
* @property {Object} output
|
|
* @property {Object} tx
|
|
*
|
|
* @property {Object} protocol
|
|
* @property {Object} consensus
|
|
* @property {Object} errors
|
|
* @property {Object} network
|
|
* @property {Object} networks
|
|
* @property {Object} policy
|
|
* @property {Object} timedata
|
|
*
|
|
* @property {Object} txscript
|
|
* @property {Object} opcodes
|
|
* @property {Object} program
|
|
* @property {Object} script
|
|
* @property {Object} sigcache
|
|
* @property {Object} stack
|
|
* @property {Object} witness
|
|
*
|
|
* @property {Object} utils
|
|
* @property {Object} base32
|
|
* @property {Object} base58
|
|
* @property {Object} bloom
|
|
* @property {Object} co
|
|
* @property {Object} encoding
|
|
* @property {Object} lock
|
|
* @property {Object} reader
|
|
* @property {Object} staticwriter
|
|
* @property {Object} util
|
|
* @property {Object} writer
|
|
*
|
|
* @property {Object} wallet
|
|
* @property {Object} path
|
|
* @property {Object} walletkey
|
|
* @property {Object} walletdb
|
|
*
|
|
* @property {Object} workers
|
|
* @property {Object} workerpool
|
|
*/
|
|
|
|
function Environment() {
|
|
this.env = Environment;
|
|
this.require = lazy(require, this);
|
|
|
|
// BN
|
|
this.require('bn', 'bn.js');
|
|
this.require('elliptic', 'elliptic');
|
|
|
|
// Horrible BIP
|
|
this.require('bip70', './bip70');
|
|
|
|
// Blockchain
|
|
this.require('blockchain', './blockchain');
|
|
this.require('chain', './blockchain/chain');
|
|
this.require('chaindb', './blockchain/chaindb');
|
|
this.require('chainentry', './blockchain/chainentry');
|
|
|
|
// BTC
|
|
this.require('btc', './btc');
|
|
this.require('amount', './btc/amount');
|
|
this.require('uri', './btc/uri');
|
|
|
|
// Coins
|
|
this.require('coins', './coins');
|
|
this.require('coinview', './coins/coinview');
|
|
|
|
// Crypto
|
|
this.require('crypto', './crypto');
|
|
this.require('ec', './crypto/ec');
|
|
this.require('pk', './crypto/pk');
|
|
this.require('schnorr', './crypto/schnorr');
|
|
|
|
// DB
|
|
this.require('db', './db');
|
|
this.require('ldb', './db/ldb');
|
|
|
|
// HD
|
|
this.require('hd', './hd');
|
|
|
|
// HTTP
|
|
this.require('http', './http');
|
|
this.require('rpc', './http/rpc');
|
|
|
|
// Mempool
|
|
this.require('txmempool', './mempool');
|
|
this.require('fees', './mempool/fees');
|
|
this.require('mempool', './mempool/mempool');
|
|
this.require('mempoolentry', './mempool/mempoolentry');
|
|
|
|
// Miner
|
|
this.require('mining', './mining');
|
|
this.require('miner', './mining/miner');
|
|
this.require('template', './mining/template');
|
|
|
|
// Net
|
|
this.require('net', './net');
|
|
this.require('bip150', './net/bip150');
|
|
this.require('bip151', './net/bip151');
|
|
this.require('bip152', './net/bip152');
|
|
this.require('dns', './net/dns');
|
|
this.require('packets', './net/packets');
|
|
this.require('peer', './net/peer');
|
|
this.require('pool', './net/pool');
|
|
this.require('tcp', './net/tcp');
|
|
|
|
// Node
|
|
this.require('node', './node');
|
|
this.require('config', './node/config');
|
|
this.require('fullnode', './node/fullnode');
|
|
this.require('logger', './node/logger');
|
|
this.require('spvnode', './node/spvnode');
|
|
|
|
// Primitives
|
|
this.require('primitives', './primitives');
|
|
this.require('address', './primitives/address');
|
|
this.require('block', './primitives/block');
|
|
this.require('coin', './primitives/coin');
|
|
this.require('headers', './primitives/headers');
|
|
this.require('input', './primitives/input');
|
|
this.require('invitem', './primitives/invitem');
|
|
this.require('keyring', './primitives/keyring');
|
|
this.require('merkleblock', './primitives/merkleblock');
|
|
this.require('mtx', './primitives/mtx');
|
|
this.require('netaddress', './primitives/netaddress');
|
|
this.require('outpoint', './primitives/outpoint');
|
|
this.require('output', './primitives/output');
|
|
this.require('tx', './primitives/tx');
|
|
|
|
// Protocol
|
|
this.require('protocol', './protocol');
|
|
this.require('consensus', './protocol/consensus');
|
|
this.require('errors', './protocol/errors');
|
|
this.require('network', './protocol/network');
|
|
this.require('networks', './protocol/networks');
|
|
this.require('policy', './protocol/policy');
|
|
this.require('timedata', './protocol/timedata');
|
|
|
|
// Script
|
|
this.require('txscript', './script');
|
|
this.require('opcode', './script/opcode');
|
|
this.require('program', './script/program');
|
|
this.require('script', './script/script');
|
|
this.require('sigcache', './script/sigcache');
|
|
this.require('stack', './script/stack');
|
|
this.require('witness', './script/witness');
|
|
|
|
// Utils
|
|
this.require('utils', './utils');
|
|
this.require('base32', './utils/base32');
|
|
this.require('base58', './utils/base58');
|
|
this.require('bloom', './utils/bloom');
|
|
this.require('co', './utils/co');
|
|
this.require('encoding', './utils/encoding');
|
|
this.require('lock', './utils/lock');
|
|
this.require('reader', './utils/reader');
|
|
this.require('staticwriter', './utils/staticwriter');
|
|
this.require('util', './utils/util');
|
|
this.require('writer', './utils/writer');
|
|
|
|
// Wallet
|
|
this.require('wallet', './wallet');
|
|
this.require('path', './wallet/path');
|
|
this.require('walletkey', './wallet/walletkey');
|
|
this.require('walletdb', './wallet/walletdb');
|
|
this.require('walletplugin', './wallet/plugin');
|
|
|
|
// Workers
|
|
this.require('workers', './workers');
|
|
this.require('workerpool', './workers/workerpool');
|
|
}
|
|
|
|
/**
|
|
* Set the default network.
|
|
* @param {String} options
|
|
*/
|
|
|
|
Environment.prototype.set = function set(options) {
|
|
if (typeof options === 'string')
|
|
options = { network: options };
|
|
|
|
if (!options)
|
|
options = {};
|
|
|
|
if (options.network)
|
|
this.network.set(options.network);
|
|
|
|
this.workerpool.set(options);
|
|
|
|
if (options.sigcacheSize != null)
|
|
this.sigcache.resize(options.sigcacheSize);
|
|
|
|
return this;
|
|
};
|
|
|
|
/**
|
|
* Get the adjusted time of
|
|
* the default network.
|
|
* @returns {Number} Adjusted time.
|
|
*/
|
|
|
|
Environment.prototype.now = function now() {
|
|
return this.network.primary.now();
|
|
};
|
|
|
|
/**
|
|
* Cache all necessary modules.
|
|
*/
|
|
|
|
Environment.prototype.cache = function cache() {
|
|
this.bip70;
|
|
this.common;
|
|
this.crypto;
|
|
this.fullnode;
|
|
this.http;
|
|
this.spvnode;
|
|
};
|
|
|
|
/*
|
|
* Expose by converting `exports` to an
|
|
* Environment.
|
|
*/
|
|
|
|
exports.cache = Environment.prototype.cache;
|
|
exports.set = Environment.prototype.set;
|
|
exports.now = Environment.prototype.now;
|
|
|
|
Environment.call(exports);
|