From a1ec1bfff1579f14a847315f2e8e4982d18e0619 Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Sat, 19 Nov 2016 06:29:59 -0800 Subject: [PATCH] modules: refactor indexes. --- lib/chain/index.js | 2 +- lib/crypto/index.js | 47 +++++++++- lib/db/index.js | 8 +- lib/env.js | 191 +++++++++++++++++++++-------------------- lib/net/index.js | 10 +-- lib/node/index.js | 2 +- lib/protocol/index.js | 2 +- lib/utils/index.js | 26 +++++- lib/wallet/index.js | 3 + lib/workers/index.js | 5 +- lib/workers/workers.js | 2 - test/block-test.js | 3 +- test/bloom-test.js | 14 +-- 13 files changed, 192 insertions(+), 123 deletions(-) diff --git a/lib/chain/index.js b/lib/chain/index.js index cfe2e3f2..c1db8eef 100644 --- a/lib/chain/index.js +++ b/lib/chain/index.js @@ -5,4 +5,4 @@ exports.ChainDB = require('./chaindb'); exports.ChainEntry = require('./chainentry'); exports.Coins = require('./coins'); exports.CoinView = require('./coinview'); -exports.compressor = require('./compress'); +exports.compress = require('./compress'); diff --git a/lib/crypto/index.js b/lib/crypto/index.js index 7959f4cc..64b30b43 100644 --- a/lib/crypto/index.js +++ b/lib/crypto/index.js @@ -1,3 +1,48 @@ 'use strict'; -module.exports = require('./crypto'); +var crypto = require('./crypto'); + +exports.crypto = crypto; +exports.hash = crypto.hash; +exports.ripemd160 = crypto.ripemd160; +exports.sha1 = crypto.sha1; +exports.sha256 = crypto.sha256; +exports.hash160 = crypto.hash160; +exports.hash256 = crypto.hash256; +exports.checksum = crypto.checksum; +exports.hmac = crypto.hmac; +exports.pbkdf2 = crypto.pbkdf2; +exports.pbkdf2Async = crypto.pbkdf2Async; +exports.scrypt = crypto.scrypt; +exports.scryptAsync = crypto.scryptAsync; +exports.hkdfExtract = crypto.hkdfExtract; +exports.hkdfExpand = crypto.hkdfExpand; +exports.buildMerkleTree = crypto.buildMerkleTree; +exports.getMerkleRoot = crypto.getMerkleRoot; +exports.getMerkleBranch = crypto.getMerkleBranch; +exports.checkMerkleBranch = crypto.checkMerkleBranch; +exports.encipher = crypto.encipher; +exports.decipher = crypto.decipher; +exports.ccmp = crypto.ccmp; +exports.ceq = crypto.ceq; +exports.cleanse = crypto.cleanse; +exports.randomBytes = crypto.randomBytes; +exports.randomInt = crypto.randomInt; +exports.randomRange = crypto.randomRange; + +exports.chachapoly = require('./chachapoly'); +exports.ChaCha20 = exports.chachapoly.ChaCha20; +exports.Poly1305 = exports.chachapoly.Poly1305; +exports.AEAD = exports.chachapoly.AEAD; + +exports.pk = require('./pk'); +exports.dsa = exports.pk.rsa; +exports.rsa = exports.pk.dsa; +exports.ecdsa = exports.pk.ecdsa; + +exports.ec = require('./ec'); + +exports.schnorr = require('./schnorr'); + +exports.siphash = require('./siphash'); +exports.siphash256 = exports.siphash.siphash256; diff --git a/lib/db/index.js b/lib/db/index.js index fba991a5..c956573a 100644 --- a/lib/db/index.js +++ b/lib/db/index.js @@ -1,11 +1,5 @@ 'use strict'; -var utils = require('../utils/utils'); - -exports.ldb = require('./ldb'); - -if (utils.isBrowser) - exports.level = require('./level'); - +exports.LDB = require('./ldb'); exports.LowlevelUp = require('./lowlevelup'); exports.RBT = require('./rbt'); diff --git a/lib/env.js b/lib/env.js index 53c2865a..32af716e 100644 --- a/lib/env.js +++ b/lib/env.js @@ -111,110 +111,115 @@ function Environment() { // BN this.require('bn', 'bn.js'); + this.require('elliptic', 'elliptic'); - // Protocol - this.require('constants', './protocol/constants'); - this.require('networks', './protocol/networks'); - this.require('network', './protocol/network'); + // Horrible BIP + this.require('bip70', './bip70'); - // Utils - this.require('utils', './utils/utils'); - this.require('btcutils', './utils/btcutils'); - this.require('locker', './utils/locker'); - this.require('reader', './utils/reader'); - this.require('writer', './utils/writer'); - this.require('lru', './utils/lru'); - this.require('bloom', './utils/bloom'); - this.require('uri', './utils/uri'); - this.require('errors', './utils/errors'); - this.require('co', './utils/co'); - this.require('base58', './utils/base58'); - this.require('asn1', './utils/asn1'); - this.require('pem', './utils/pem'); - this.require('protobuf', './utils/protobuf'); + // Chain + this.require('blockchain', './chain'); // -> blockchain? + this.require('chain', './chain/chain'); + this.require('chaindb', './chain/chaindb'); + this.require('chainentry', './chain/chainentry'); // Crypto - this.require('crypto', './crypto/crypto'); + this.require('crypto', './crypto'); this.require('ec', './crypto/ec'); + this.require('pk', './crypto/pk'); this.require('schnorr', './crypto/schnorr'); // DB - this.require('lowlevelup', './db/lowlevelup'); + this.require('db', './db'); this.require('ldb', './db/ldb'); - this.require('rbt', './db/rbt'); - - // Script - this.require('script', './script/script'); - this.require('opcode', './script/opcode'); - this.require('stack', './script/stack'); - this.require('witness', './script/witness'); - this.require('program', './script/program'); - - // Primitives - this.require('address', './primitives/address'); - this.require('outpoint', './primitives/outpoint'); - this.require('input', './primitives/input'); - this.require('output', './primitives/output'); - this.require('coin', './primitives/coin'); - this.require('invitem', './primitives/invitem'); - this.require('tx', './primitives/tx'); - this.require('mtx', './primitives/mtx'); - this.require('block', './primitives/block'); - this.require('merkleblock', './primitives/merkleblock'); - this.require('headers', './primitives/headers'); - this.require('keyring', './primitives/keyring'); - this.require('netaddress', './primitives/netaddress'); // HD - this.require('hd', './hd/hd'); - - // Node - this.require('logger', './node/logger'); - this.require('config', './node/config'); - this.require('node', './node/node'); - this.require('spvnode', './node/spvnode'); - this.require('fullnode', './node/fullnode'); - - // Net - this.require('time', './net/timedata'); - this.require('packets', './net/packets'); - this.require('bip150', './net/bip150'); - this.require('bip151', './net/bip151'); - this.require('bip152', './net/bip152'); - this.require('peer', './net/peer'); - this.require('pool', './net/pool'); - - // Chain - this.require('chainentry', './chain/chainentry'); - this.require('chaindb', './chain/chaindb'); - this.require('chain', './chain/chain'); - - // Mempool - this.require('fees', './mempool/fees'); - this.require('mempool', './mempool/mempool'); - this.require('mempoolentry', './mempool/mempoolentry'); - - // Miner - this.require('miner', './miner/miner'); - this.require('minerblock', './miner/minerblock'); - - // Wallet - this.require('wallet', './wallet/wallet'); - this.require('account', './wallet/account'); - this.require('walletdb', './wallet/walletdb'); - this.require('path', './wallet/path'); - this.require('masterkey', './wallet/masterkey'); - this.require('walletkey', './wallet/walletkey'); + this.require('hd', './hd'); // HTTP this.require('http', './http'); this.require('rpc', './http/rpc'); - // Workers - this.require('workers', './workers/workers'); + // Mempool + this.require('txmempool', './mempool'); // -> txmempool? + this.require('fees', './mempool/fees'); + this.require('mempool', './mempool/mempool'); + this.require('mempoolentry', './mempool/mempoolentry'); - // Horrible BIP - this.require('bip70', './bip70'); + // Miner + this.require('mining', './miner'); // -> mining? + this.require('miner', './miner/miner'); + this.require('minerblock', './miner/minerblock'); + + // Net + this.require('net', './net'); + this.require('bip150', './net/bip150'); + this.require('bip151', './net/bip151'); + this.require('bip152', './net/bip152'); + this.require('packets', './net/packets'); + this.require('peer', './net/peer'); + this.require('pool', './net/pool'); + this.require('time', './net/timedata'); // -> time? + + // 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'); // -> wire? + this.require('wire', './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('constants', './protocol/constants'); + this.require('network', './protocol/network'); + this.require('networks', './protocol/networks'); + + // Script + this.require('scripting', './script'); // -> scripting? + 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('common', './utils'); // -> common + this.require('base58', './utils/base58'); + this.require('btcutils', './utils/btcutils'); + this.require('co', './utils/co'); + this.require('reader', './utils/reader'); + this.require('uri', './utils/uri'); + this.require('utils', './utils/utils'); + this.require('writer', './utils/writer'); + + // Wallet + this.require('wallet', './wallet'); + this.require('account', './wallet/account'); + this.require('path', './wallet/path'); + this.require('masterkey', './wallet/masterkey'); + this.require('walletkey', './wallet/walletkey'); + this.require('walletdb', './wallet/walletdb'); + + // Workers + this.require('workers', './workers'); + this.require('workerpool', './workers/workers'); // -> workerpool } /** @@ -232,7 +237,7 @@ Environment.prototype.set = function set(options) { if (options.network) this.network.set(options.network); - this.workers.set(options); + this.workerpool.set(options); if (options.sigcacheSize != null) this.sigcache.resize(options.sigcacheSize); @@ -254,12 +259,12 @@ Environment.prototype.now = function now() { */ Environment.prototype.cache = function cache() { - this.fullnode; - this.spvnode; - this.http; - this.schnorr; - this.uri; this.bip70; + this.common; + this.crypto; + this.fullnode; + this.http; + this.spvnode; }; /* diff --git a/lib/net/index.js b/lib/net/index.js index 0c072e06..b57fb87c 100644 --- a/lib/net/index.js +++ b/lib/net/index.js @@ -1,12 +1,12 @@ 'use strict'; -exports.bip150 = require('./bip150'); -exports.bip151 = require('./bip151'); -exports.bip152 = require('./bip152'); -exports.Framer = require('./framer'); +exports.BIP150 = require('./bip150'); +exports.BIP151 = require('./bip151'); +exports.BIP152 = require('./bip152'); exports.packets = require('./packets'); +exports.Framer = require('./framer'); exports.Parser = require('./parser'); exports.Peer = require('./peer'); exports.Pool = require('./pool'); -exports.ProxySocket = require('./proxysocket'); +exports.tcp = require('./tcp'); exports.time = require('./timedata'); diff --git a/lib/node/index.js b/lib/node/index.js index dde64cf7..3edaae4d 100644 --- a/lib/node/index.js +++ b/lib/node/index.js @@ -1,7 +1,7 @@ 'use strict'; exports.config = require('./config'); -exports.Fullnode = require('./fullnode'); +exports.FullNode = require('./fullnode'); exports.Logger = require('./logger'); exports.Node = require('./node'); exports.SPVNode = require('./spvnode'); diff --git a/lib/protocol/index.js b/lib/protocol/index.js index cf5a4c6a..7cca81e7 100644 --- a/lib/protocol/index.js +++ b/lib/protocol/index.js @@ -1,5 +1,5 @@ 'use strict'; exports.constants = require('./constants'); -exports.network = require('./network'); exports.networks = require('./networks'); +exports.Network = require('./network'); diff --git a/lib/utils/index.js b/lib/utils/index.js index e5f268a6..f10db4ed 100644 --- a/lib/utils/index.js +++ b/lib/utils/index.js @@ -1,3 +1,27 @@ 'use strict'; -module.exports = require('./utils'); +exports.ASN1 = require('./asn1'); +exports.AsyncObject = require('./async'); +exports.base58 = require('./base58'); +exports.Bloom = require('./bloom'); +exports.RollingFilter = exports.Bloom.Rolling; +exports.btcutils = require('./btcutils'); +exports.co = require('./co'); +exports.encoding = require('./encoding'); +exports.errors = require('./errors'); +exports.IP = require('./ip'); +exports.lazy = require('./lazy'); +exports.Locker = require('./locker'); +exports.MappedLocker = exports.Locker.Mapped; +exports.LRU = require('./lru'); +exports.murmur3 = require('./murmur3'); +exports.nextTick = require('./nexttick'); +exports.nfkd = require('./nfkd'); +exports.PEM = require('./pem'); +exports.protobuf = require('./protobuf'); +exports.ProtoWriter = exports.protobuf.ProtoWriter; +exports.ProtoReader = exports.protobuf.ProtoReader; +exports.BufferReader = require('./reader'); +exports.uri = require('./uri'); +exports.utils = require('./utils'); +exports.BufferWriter = require('./writer'); diff --git a/lib/wallet/index.js b/lib/wallet/index.js index 483c7cf8..09bedff0 100644 --- a/lib/wallet/index.js +++ b/lib/wallet/index.js @@ -1,8 +1,11 @@ 'use strict'; +exports.common = require('./common'); exports.Account = require('./account'); +exports.layout = require('./layout'); exports.MasterKey = require('./masterkey'); exports.Path = require('./path'); +exports.records = require('./records'); exports.TXDB = require('./txdb'); exports.WalletDB = require('./walletdb'); exports.Wallet = require('./wallet'); diff --git a/lib/workers/index.js b/lib/workers/index.js index fffe0191..d88a2ed6 100644 --- a/lib/workers/index.js +++ b/lib/workers/index.js @@ -1,7 +1,6 @@ 'use strict'; exports.jobs = require('./jobs'); -exports.Worker = require('./worker'); -exports.Workers = require('./workers'); -exports.Parser = require('./parser'); exports.Framer = require('./framer'); +exports.Parser = require('./parser'); +exports.WorkerPool = require('./workers'); diff --git a/lib/workers/workers.js b/lib/workers/workers.js index 8e798cf2..d51c9224 100644 --- a/lib/workers/workers.js +++ b/lib/workers/workers.js @@ -707,5 +707,3 @@ exports.set({ exports.WorkerPool = WorkerPool; exports.Worker = Worker; -exports.Framer = Framer; -exports.Parser = Parser; diff --git a/test/block-test.js b/test/block-test.js index de45de3d..d7705b3f 100644 --- a/test/block-test.js +++ b/test/block-test.js @@ -5,6 +5,7 @@ var bcoin = require('../').set('main'); var utils = bcoin.utils; var btcutils = require('../lib/utils/btcutils'); var crypto = require('../lib/crypto/crypto'); +var Bloom = require('../lib/utils/bloom'); var constants = bcoin.constants; var network = bcoin.networks; var assert = require('assert'); @@ -129,7 +130,7 @@ describe('Block', function() { }); it('should create a merkle block', function() { - var filter = bcoin.bloom.fromRate(1000, 0.01, constants.filterFlags.NONE); + var filter = Bloom.fromRate(1000, 0.01, constants.filterFlags.NONE); var item1 = '8e7445bbb8abd4b3174d80fa4c409fea6b94d96b'; var item2 = '047b00000078da0dca3b0ec2300c00d0ab4466ed10' + 'e763272c6c9ca052972c69e3884a9022084215e2eef' diff --git a/test/bloom-test.js b/test/bloom-test.js index b5136ba6..cabdf17c 100644 --- a/test/bloom-test.js +++ b/test/bloom-test.js @@ -3,6 +3,8 @@ var bcoin = require('../').set('main'); var utils = bcoin.utils; var crypto = require('../lib/crypto/crypto'); +var Bloom = require('../lib/utils/bloom'); +var murmur3 = require('../lib/utils/murmur3'); var constants = bcoin.constants; var assert = require('assert'); @@ -16,8 +18,6 @@ describe('Bloom', function() { + '0000000001000000800000080000000'; it('should do proper murmur3', function() { - var murmur3 = bcoin.bloom.murmur3; - function mm(str, seed, expect, enc) { assert.equal(murmur3(new Buffer(str, enc || 'ascii'), seed), expect); } @@ -46,7 +46,7 @@ describe('Bloom', function() { }); it('should test and add stuff', function() { - var b = new bcoin.bloom(512, 10, 156); + var b = new Bloom(512, 10, 156); b.add('hello', 'ascii'); assert(b.test('hello', 'ascii')); @@ -62,7 +62,7 @@ describe('Bloom', function() { }); it('should serialize to the correct format', function() { - var filter = new bcoin.bloom(952, 6, 3624314491, constants.filterFlags.NONE); + var filter = new Bloom(952, 6, 3624314491, constants.filterFlags.NONE); var item1 = '8e7445bbb8abd4b3174d80fa4c409fea6b94d96b'; var item2 = '047b00000078da0dca3b0ec2300c00d0ab4466ed10' + 'e763272c6c9ca052972c69e3884a9022084215e2eef' @@ -73,7 +73,7 @@ describe('Bloom', function() { }); it('should handle 1m ops with regular filter', function() { - var filter = bcoin.bloom.fromRate(210000, 0.00001, -1); + var filter = Bloom.fromRate(210000, 0.00001, -1); filter.tweak = 0xdeadbeef; // ~1m operations for (var i = 0; i < 1000; i++) { @@ -89,7 +89,7 @@ describe('Bloom', function() { }); it('should handle 1m ops with rolling filter', function() { - var filter = new bcoin.bloom.Rolling(210000, 0.00001); + var filter = new Bloom.Rolling(210000, 0.00001); filter.tweak = 0xdeadbeef; // ~1m operations for (var i = 0; i < 1000; i++) { @@ -105,7 +105,7 @@ describe('Bloom', function() { }); it('should handle rolling generations', function() { - var filter = new bcoin.bloom.Rolling(50, 0.00001); + var filter = new Bloom.Rolling(50, 0.00001); filter.tweak = 0xdeadbeee; for (var i = 0; i < 25; i++) { var str = 'foobar' + i;