From 89667c3e3eb031225c1e6202f9bf90cc72d19bb3 Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Fri, 24 Mar 2017 13:52:58 -0700 Subject: [PATCH] examples: add examples. --- examples/chain.js | 19 ++++++++++++++++++ examples/miner.js | 38 +++++++++++++++++++++++++++++++++++ examples/peer.js | 45 ++++++++++++++++++++++++++++++++++++++++++ examples/wallet.js | 49 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 151 insertions(+) create mode 100644 examples/chain.js create mode 100644 examples/miner.js create mode 100644 examples/peer.js create mode 100644 examples/wallet.js diff --git a/examples/chain.js b/examples/chain.js new file mode 100644 index 00000000..a194b001 --- /dev/null +++ b/examples/chain.js @@ -0,0 +1,19 @@ +'use strict'; + +var Chain = require('bcoin/lib/blockchain/chain'); + +var chain = new Chain({ + network: 'testnet' +}); + +async function main() { + var entry; + + await chain.open(); + + entry = await chain.getEntry(0); + + console.log(entry); +} + +main(); diff --git a/examples/miner.js b/examples/miner.js new file mode 100644 index 00000000..92725335 --- /dev/null +++ b/examples/miner.js @@ -0,0 +1,38 @@ +'use strict'; + +var Chain = require('bcoin/lib/blockchain/chain'); +var Miner = require('bcoin/lib/mining/miner'); + +var chain = new Chain({ + network: 'regtest' +}); + +var miner = new Miner({ + chain: chain, + addresses: ['mfWxJ45yp2SFn7UciZyNpvDKrzbhyfKrY8'], + coinbaseFlags: 'my-miner' +}); + +async function main() { + var tmpl, job, block; + + await miner.open(); + + tmpl = await miner.createBlock(); + + console.log('Block template:'); + console.log(tmpl); + + job = await miner.cpu.createJob(); + block = await job.mineAsync(); + + console.log('Mined block:'); + console.log(block); + + await chain.add(block); + + console.log('New tip:'); + console.log(chain.tip); +} + +main(); diff --git a/examples/peer.js b/examples/peer.js new file mode 100644 index 00000000..110b4200 --- /dev/null +++ b/examples/peer.js @@ -0,0 +1,45 @@ +'use strict'; + +// Usage: $ node ./examples/peer.js [ip]:[port] + +var Peer = require('bcoin/lib/net/peer'); +var NetAddress = require('bcoin/lib/primitives/netaddress'); +var Network = require('bcoin/lib/protocol/network'); +var network = Network.get('testnet'); +var peer, addr; + +peer = Peer.fromOptions({ + network: 'testnet', + agent: 'my-subversion', + hasWitness: function() { + return false; + } +}); + +addr = NetAddress.fromHostname(process.argv[2], 'testnet'); + +peer.connect(addr); +peer.tryOpen(); + +peer.on('error', function(err) { + console.error(err); +}); + +peer.on('packet', function(msg) { + console.log(msg); + + if (msg.cmd === 'block') { + console.log('Block!'); + console.log(msg.block.toBlock()); + return; + } + + if (msg.cmd === 'inv') { + peer.getData(msg.items); + return; + } +}); + +peer.on('open', function() { + peer.getBlock([network.genesis.hash]); +}); diff --git a/examples/wallet.js b/examples/wallet.js new file mode 100644 index 00000000..dbec0667 --- /dev/null +++ b/examples/wallet.js @@ -0,0 +1,49 @@ +'use strict'; + +var crypto = require('bcoin/lib/crypto/crypto'); +var WalletDB = require('bcoin/lib/wallet/walletdb'); +var MTX = require('bcoin/lib/primitives/mtx'); +var Outpoint = require('bcoin/lib/primitives/outpoint'); +var walletdb; + +function dummy() { + var hash = crypto.randomBytes(32).toString('hex'); + return new Outpoint(hash, 0); +} + +walletdb = new WalletDB({ + network: 'testnet', + db: 'memory' +}); + +async function main() { + var wallet, acct, mtx, tx, wtx; + + await walletdb.open(); + + wallet = await walletdb.create(); + + console.log('Created wallet'); + console.log(wallet); + + acct = await wallet.createAccount({ + name: 'foo' + }); + + console.log('Created account'); + console.log(acct); + + mtx = new MTX(); + mtx.addOutpoint(dummy()); + mtx.addOutput(acct.getReceive(), 50460); + tx = mtx.toTX(); + + await walletdb.addTX(tx); + + wtx = await wallet.getTX(tx.hash('hex')); + + console.log('Added transaction'); + console.log(wtx); +} + +main();