diff --git a/examples/client.js b/docs/Examples/client-api.js similarity index 85% rename from examples/client.js rename to docs/Examples/client-api.js index 816ce92e..2dbf1d0e 100644 --- a/examples/client.js +++ b/docs/Examples/client-api.js @@ -1,12 +1,13 @@ 'use strict'; -const encoding = require('bcoin/lib/utils/encoding'); -const co = require('bcoin/lib/utils/co'); -const Outpoint = require('bcoin/lib/primitives/outpoint'); -const MTX = require('bcoin/lib/primitives/mtx'); -const HTTP = require('bcoin/lib/http'); -const FullNode = require('bcoin/lib/node/fullnode'); -const plugin = require('bcoin/lib/wallet/plugin'); +const bcoin = require('../..'); +const encoding = bcoin.encoding; +const co = bcoin.co; +const Outpoint = bcoin.outpoint; +const MTX = bcoin.mtx; +const HTTP = bcoin.http; +const FullNode = bcoin.fullnode; +const plugin = bcoin.wallet.plugin; const node = new FullNode({ network: 'regtest', @@ -113,4 +114,7 @@ async function callNodeApi() { console.log(tx); await callNodeApi(); -})(); +})().catch((err) => { + console.error(err.stack); + process.exit(1); +}); diff --git a/examples/peer.js b/docs/Examples/connect-to-peer.js similarity index 73% rename from examples/peer.js rename to docs/Examples/connect-to-peer.js index e397ad73..321cd141 100644 --- a/examples/peer.js +++ b/docs/Examples/connect-to-peer.js @@ -1,10 +1,11 @@ 'use strict'; -// Usage: $ node ./examples/peer.js [ip]:[port] +// Usage: $ node ./docs/Examples/connect-to-peer.js [ip]:[port] -const Peer = require('bcoin/lib/net/peer'); -const NetAddress = require('bcoin/lib/primitives/netaddress'); -const Network = require('bcoin/lib/protocol/network'); +const bcoin = require('../..'); +const Peer = bcoin.peer; +const NetAddress = bcoin.netaddress; +const Network = bcoin.network; const network = Network.get('testnet'); const peer = Peer.fromOptions({ @@ -17,6 +18,8 @@ const peer = Peer.fromOptions({ const addr = NetAddress.fromHostname(process.argv[2], 'testnet'); +console.log(`Connecting to ${addr.hostname}`); + peer.connect(addr); peer.tryOpen(); diff --git a/docs/Examples/connect-to-the-p2p-network.js b/docs/Examples/connect-to-the-p2p-network.js index e9b852ac..8024fa66 100644 --- a/docs/Examples/connect-to-the-p2p-network.js +++ b/docs/Examples/connect-to-the-p2p-network.js @@ -92,4 +92,7 @@ const tpool = new Pool({ console.log('Saw testnet transaction:'); console.log(tx); }); -})(); +})().catch((err) => { + console.error(err.stack); + process.exit(1); +}); diff --git a/docs/Examples/create-a-blockchain-and-mempool.js b/docs/Examples/create-a-blockchain-and-mempool.js index 13d3f88c..1c3d4280 100644 --- a/docs/Examples/create-a-blockchain-and-mempool.js +++ b/docs/Examples/create-a-blockchain-and-mempool.js @@ -36,4 +36,7 @@ const miner = new Miner({ console.log(block); await chain.add(block); console.log('Added block!'); -})(); +})().catch((err) => { + console.error(err.stack); + process.exit(1); +}); diff --git a/examples/tx.js b/docs/Examples/create-sign-tx.js similarity index 98% rename from examples/tx.js rename to docs/Examples/create-sign-tx.js index c88effe3..6661626c 100644 --- a/examples/tx.js +++ b/docs/Examples/create-sign-tx.js @@ -2,7 +2,7 @@ /* eslint new-cap: "off" */ -const bcoin = require('bcoin'); +const bcoin = require('../..'); const assert = require('assert'); (async () => { diff --git a/docs/Examples/fullnode-and-wallet.js b/docs/Examples/fullnode-and-wallet.js index 15283214..50d64198 100644 --- a/docs/Examples/fullnode-and-wallet.js +++ b/docs/Examples/fullnode-and-wallet.js @@ -1,6 +1,6 @@ 'use strict'; const bcoin = require('../..').set('main'); -const WalletDB = bcoin.walletdb; +const walletPlugin = bcoin.wallet.plugin; const node = bcoin.fullnode({ checkpoints: true, @@ -9,6 +9,8 @@ const node = bcoin.fullnode({ logLevel: 'info' }); +node.use(walletPlugin); + // We get a lot of errors sometimes, // usually from peers hanging up on us. // Just ignore them for now. @@ -30,8 +32,7 @@ const newReceiving = 'AddressHere'; type: 'pubkeyhash' }; - console.log(node); - const walletdb = new WalletDB(); + const walletdb = node.require('walletdb'); await walletdb.open(); const wallet = await walletdb.create(options); @@ -76,4 +77,7 @@ const newReceiving = 'AddressHere'; node.chain.on('full', () => { node.mempool.getHistory().then(console.log); }); -})(); +})().catch((err) => { + console.error(err.stack); + process.exit(1); +}); diff --git a/examples/node.js b/docs/Examples/fullnode.js similarity index 73% rename from examples/node.js rename to docs/Examples/fullnode.js index e9f2694e..c63ec67e 100644 --- a/examples/node.js +++ b/docs/Examples/fullnode.js @@ -1,6 +1,7 @@ 'use strict'; -const FullNode = require('bcoin/lib/node/fullnode'); +const bcoin = require('../..'); +const FullNode = bcoin.fullnode; const node = new FullNode({ network: 'testnet', @@ -21,4 +22,7 @@ const node = new FullNode({ }); node.startSync(); -})(); +})().catch((err) => { + console.error(err.stack); + process.exit(1); +}); diff --git a/docs/Examples/get-tx-from-chain.js b/docs/Examples/get-tx-from-chain.js new file mode 100644 index 00000000..925feba6 --- /dev/null +++ b/docs/Examples/get-tx-from-chain.js @@ -0,0 +1,48 @@ +'use strict'; + +const path = require('path'); +const bcoin = require('../..'); +const Chain = bcoin.chain; +const Logger = bcoin.logger; +const util = bcoin.util; + +const HOME = process.env.HOME; + +// Setup logger to see what's Bcoin doing. +const logger = new Logger({ + level: 'debug' +}); + +// Create chain for testnet, specify chain directory +const chain = new Chain({ + logger: logger, + network: 'testnet', + db: 'leveldb', + prefix: path.join(HOME, '.bcoin/testnet'), + indexTX: true, + indexAddress: true +}); + +(async () => { + await logger.open(); + await chain.open(); + + console.log('Current height:', chain.height); + + const entry = await chain.getEntry(50000); + console.log('Block at 50k:', entry); + + // eslint-disable-next-line max-len + const txhash = '7f5990b008a2d0fc006d13b15e25d05ff30fadab656d49a5c6afea0e0d0b458c'; + const txmeta = await chain.db.getMeta(util.revHex(txhash)); + console.log(`Tx with hash ${txhash}:`, txmeta); + + // eslint-disable-next-line max-len + const bhash = '00000000077eacdd2c803a742195ba430a6d9545e43128ba55ec3c80beea6c0c'; + const block = await chain.db.getBlock(util.revHex(bhash)); + + console.log(`Block with hash ${bhash}:`, block); +})().catch((err) => { + console.error(err.stack); + process.exit(1); +}); diff --git a/examples/miner.js b/docs/Examples/miner-configs.js similarity index 70% rename from examples/miner.js rename to docs/Examples/miner-configs.js index 2ef5ee7f..b6ad820b 100644 --- a/examples/miner.js +++ b/docs/Examples/miner-configs.js @@ -1,9 +1,10 @@ 'use strict'; -const KeyRing = require('bcoin/lib/primitives/keyring'); -const WorkerPool = require('bcoin/lib/workers/workerpool'); -const Chain = require('bcoin/lib/blockchain/chain'); -const Miner = require('bcoin/lib/mining/miner'); +const bcoin = require('../..'); +const KeyRing = bcoin.keyring; +const WorkerPool = bcoin.workerpool; +const Chain = bcoin.chain; +const Miner = bcoin.miner; const key = KeyRing.generate('regtest'); @@ -31,7 +32,7 @@ const miner = new Miner({ console.log('Block template:'); console.log(tmpl); - const job = await miner.cpu.createJob(); + const job = await miner.createJob(); const block = await job.mineAsync(); console.log('Mined block:'); @@ -42,4 +43,7 @@ const miner = new Miner({ console.log('New tip:'); console.log(chain.tip); -})(); +})().catch((err) => { + console.error(err.stack); + process.exit(1); +}); diff --git a/examples/plugin.js b/docs/Examples/peers-plugin.js similarity index 87% rename from examples/plugin.js rename to docs/Examples/peers-plugin.js index 78f4371d..fb788182 100644 --- a/examples/plugin.js +++ b/docs/Examples/peers-plugin.js @@ -1,6 +1,7 @@ 'use strict'; -const FullNode = require('bcoin/lib/node/fullnode'); +const bcoin = require('../..'); +const FullNode = bcoin.fullnode; function MyPlugin(node) { this.node = node; @@ -52,4 +53,7 @@ node.use(MyPlugin); }); node.startSync(); -})(); +})().catch((err) => { + console.error(err.stack); + process.exit(1); +}); diff --git a/docs/Examples/spv-sync-wallet.js b/docs/Examples/spv-sync-wallet.js index bd622aa0..75f5992d 100644 --- a/docs/Examples/spv-sync-wallet.js +++ b/docs/Examples/spv-sync-wallet.js @@ -1,10 +1,12 @@ 'use strict'; -const bcoin = require('../..').set('testnet'); +const bcoin = require('../..'); const Chain = bcoin.chain; const Pool = bcoin.pool; const WalletDB = bcoin.walletdb; +bcoin.set('testnet'); + // SPV chains only store the chain headers. const chain = Chain({ db: 'leveldb', @@ -48,4 +50,7 @@ const walletdb = new WalletDB({ db: 'memory' }); console.log('Balance updated.'); console.log(bcoin.amount.btc(balance.unconfirmed)); }); -})(); +})().catch((err) => { + console.error(err.stack); + process.exit(1); +}); diff --git a/examples/wallet.js b/docs/Examples/wallet.js similarity index 75% rename from examples/wallet.js rename to docs/Examples/wallet.js index 92bf8e3a..fc066e14 100644 --- a/examples/wallet.js +++ b/docs/Examples/wallet.js @@ -1,9 +1,10 @@ 'use strict'; -const random = require('bcoin/lib/crypto/random'); -const WalletDB = require('bcoin/lib/wallet/walletdb'); -const MTX = require('bcoin/lib/primitives/mtx'); -const Outpoint = require('bcoin/lib/primitives/outpoint'); +const bcoin = require('../..'); +const random = bcoin.crypto.random; +const WalletDB = bcoin.walletdb; +const MTX = bcoin.mtx; +const Outpoint = bcoin.outpoint; function dummy() { const hash = random.randomBytes(32).toString('hex'); @@ -42,4 +43,7 @@ const walletdb = new WalletDB({ console.log('Added transaction'); console.log(wtx); -})(); +})().catch((err) => { + console.error(err.stack); + process.exit(1); +}); diff --git a/docs/README.md b/docs/README.md index 6c743f6e..76f8cdab 100644 --- a/docs/README.md +++ b/docs/README.md @@ -13,10 +13,18 @@ Welcome to the bcoin docs! - [REST and RPC API][rest-rpc] ## Code Examples +- [Simple Fullnode][example-simple-fullnode] +- [Connect to Peer][example-connect-peer] - [Connecting to the P2P Network][example-p2p] - [Creating a Blockchain and Mempool][example-blockchain] -- [Fullnode Object][example-fullnode] +- [Wallet with Dummy TX][example-wallet-dummy] +- [Fullnode Object][example-fullnode-wallet] - [SPV Sync][example-spv] +- [Plugin Example][example-peers-plugin] +- [Client API Usage][example-client-api] +- [Miner with WorkerPool][example-miner-configs] +- [Create and Sign TX][example-tx-create-sign] +- [Get Transaction from Chain][example-tx-chain] ## Advanced - [Working with transactions][work-transactions] @@ -38,5 +46,13 @@ Welcome to the bcoin docs! [example-p2p]: Examples/connect-to-the-p2p-network.js [example-blockchain]: Examples/create-a-blockchain-and-mempool.js -[example-fullnode]: Examples/fullnode-and-wallet.js +[example-fullnode-wallet]: Examples/fullnode-and-wallet.js [example-spv]: Examples/spv-sync-wallet.js +[example-wallet-dummy]: Examples/wallet.js +[example-peers-plugin]: Examples/peers-plugin.js +[example-client-api]: Examples/client-api.js +[example-miner-configs]: Examples/miner-configs.js +[example-connect-peer]: Examples/connect-to-peer.js +[example-simple-fullnode]: Examples/fullnode.js +[example-tx-create-sign]: Examples/create-sign-tx.js +[example-tx-from-chain]: Examples/get-tx-from-chain.js diff --git a/examples/chain.js b/examples/chain.js deleted file mode 100644 index 37068d9c..00000000 --- a/examples/chain.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -const Chain = require('bcoin/lib/blockchain/chain'); - -const chain = new Chain({ - network: 'testnet' -}); - -(async () => { - await chain.open(); - - const entry = await chain.getEntry(0); - - console.log(entry); -})();