From ea021c78f026bbdaf1ac72d9b6879124aa7a9d94 Mon Sep 17 00:00:00 2001 From: Benedict Chan Date: Tue, 11 Nov 2014 11:16:02 -0800 Subject: [PATCH] fixed examples and added yesterday api --- example/checkbalance.js | 31 ++++++++++++++--- example/createwallet.js | 67 +++++++++++++++++++++++++++++-------- example/listtransactions.js | 62 +++++++++++++++++++++++----------- example/market.js | 29 ++++++++++++---- src/bitgo.js | 19 +++++++++++ 5 files changed, 162 insertions(+), 46 deletions(-) diff --git a/example/checkbalance.js b/example/checkbalance.js index 9b50449fe3..aec58afad3 100644 --- a/example/checkbalance.js +++ b/example/checkbalance.js @@ -6,13 +6,34 @@ var BitGoJS = require('../src/index.js'); +if (process.argv.length < 5) { + console.log("usage:\n\t" + process.argv[0] + " " + process.argv[1] + "
"); + process.exit(-1); +} + +var user = process.argv[2]; +var password = process.argv[3]; +var otp = process.argv[4]; + var addressToCheck = 'mwfZSo1rwkxvU5axMEYQJkgEb1qgw8geQ9'; -if (process.argv.length > 2) { - addressToCheck = process.argv[2]; +if (process.argv.length > 5) { + addressToCheck = process.argv[5]; } var bitgo = new BitGoJS.BitGo(); -bitgo.wallets().get({type: 'bitcoin', address: addressToCheck}, function(err, wallet) { - if (err) { console.log(err); process.exit(-1); } - console.log("Balance is: " + (wallet.balance() / 1e8).toFixed(4)); + +// First, Authenticate +bitgo.authenticate(user, password, otp, function(err, result) { + if (err) { + console.dir(err); + throw new Error("Could not auth!"); + } + console.log("Logged in!" ); + + // Now get the Balance + bitgo.wallets().get({type: 'bitcoin', address: addressToCheck}, function(err, wallet) { + if (err) { console.log(err); process.exit(-1); } + console.log("Balance is: " + (wallet.balance() / 1e8).toFixed(4)); + }); }); + diff --git a/example/createwallet.js b/example/createwallet.js index f11ce0d361..f4b55f2a28 100644 --- a/example/createwallet.js +++ b/example/createwallet.js @@ -22,29 +22,55 @@ var createWallet = function() { var userKey = bitgo.keychains().create(); var backupKey = bitgo.keychains().create(); + // First create the user key var options = { label: 'key1', xpub: userKey.xpub, encryptedXprv: bitgo.encrypt(password, userKey.xprv) }; bitgo.keychains().add(options, function(err, keychain) { - if (err) { throw err; } + if (err) { + console.dir(err); + throw new Error("Could not create the user keychain"); + } + console.log("User keychain xPub: " + userKey.xpub); + + // Now create the backup key var options = { label: 'key2', xpub: backupKey.xpub }; bitgo.keychains().add(options, function(err, keychain) { - if (err) { throw err; } - var options = { - label: 'new wallet', - m: 2, - n: 3, - keychains: [userKey.xpub, backupKey.xpub] - }; - bitgo.wallets().add(options, function(err, wallet) { - if (err) { throw err; } - console.log("Wallet Created!"); - console.dir(wallet); + if (err) { + console.dir(err); + throw new Error("Could not create the backup keychain"); + } + console.log("Backup keychain xPub: " + backupKey.xpub); + + // Now tell BitGo to create their server side key + bitgo.keychains().createBitGo({}, function(err, keychain) { + if (err) { + throw new Error("Could not create 3rd keychain on BitGo"); + } + console.log("BitGo service keychain xPub: " + keychain.xpub); + + var options = { + label: 'new wallet', + m: 2, + n: 3, + keychains: [ + { xpub: userKey.xpub }, + { xpub: backupKey.xpub }, + { xpub: keychain.xpub} ] + }; + bitgo.wallets().add(options, function (err, wallet) { + if (err) { + console.dir(err); + throw new Error("Could not add wallet on BitGo"); + } + console.log("Wallet Created!"); + console.dir(wallet); + }); }); }); }); @@ -53,10 +79,23 @@ var createWallet = function() { } } +// Authenticate first bitgo.authenticate(user, password, otp, function(err, result) { if (err) { console.dir(err); + throw new Error("Could not authenticate!"); } - console.log("Creating wallet: " ); - createWallet(); + + console.log("Unlock account: " ); + bitgo.unlock(otp, function(err) { + if (err) { + console.dir(err); + throw new Error("Could not unlock!"); + } + + console.log("Creating wallet: " ); + // Actually create wallet here + createWallet(); + }) + }); diff --git a/example/listtransactions.js b/example/listtransactions.js index ac07e39d75..f81d99348a 100644 --- a/example/listtransactions.js +++ b/example/listtransactions.js @@ -6,33 +6,55 @@ var BitGoJS = require('../src/index.js'); + +if (process.argv.length < 5) { + console.log("usage:\n\t" + process.argv[0] + " " + process.argv[1] + "
"); + process.exit(-1); +} + +var user = process.argv[2]; +var password = process.argv[3]; +var otp = process.argv[4]; + var addressToCheck = 'mwfZSo1rwkxvU5axMEYQJkgEb1qgw8geQ9'; -if (process.argv.length > 2) { - addressToCheck = process.argv[2]; +if (process.argv.length > 5) { + addressToCheck = process.argv[5]; } var bitgo = new BitGoJS.BitGo(); -bitgo.wallets().get({type: 'bitcoin', address: addressToCheck}, function(err, wallet) { - if (err) { console.log(err); process.exit(-1); } - console.log("Balance is: " + (wallet.balance() / 1e8).toFixed(4)); - wallet.transactions({}, function(err, result) { +// First, Authenticate +bitgo.authenticate(user, password, otp, function(err, result) { + if (err) { + console.dir(err); + throw new Error("Could not auth!"); + } + console.log("Logged in!" ); + + // Now get the wallet + bitgo.wallets().get({type: 'bitcoin', address: addressToCheck}, function(err, wallet) { if (err) { console.log(err); process.exit(-1); } - for (var index = 0; index < result.transactions.length; ++index) { - var tx = result.transactions[index]; - var output = tx.date; - - var value = 0; - for (var entriesIndex = 0; entriesIndex < tx.entries.length; ++entriesIndex) { - if (tx.entries[entriesIndex].account === wallet.address()) { - value += tx.entries[entriesIndex].value; + console.log("Balance is: " + (wallet.balance() / 1e8).toFixed(4)); + + // Now get the transactions + wallet.transactions({}, function(err, result) { + if (err) { console.log(err); process.exit(-1); } + for (var index = 0; index < result.transactions.length; ++index) { + var tx = result.transactions[index]; + var output = tx.date; + + var value = 0; + for (var entriesIndex = 0; entriesIndex < tx.entries.length; ++entriesIndex) { + if (tx.entries[entriesIndex].account === wallet.address()) { + value += tx.entries[entriesIndex].value; + } } - } - var verb = (value > 0) ? 'received' : 'sent'; + var verb = (value > 0) ? 'received' : 'sent'; - output += ' ' + verb + ' ' + (value / 1e8).toFixed(8) + 'BTC'; - console.log(output); - } + output += ' ' + verb + ' ' + (value / 1e8).toFixed(8) + 'BTC'; + console.log(output); + } + }); }); -}); +}); \ No newline at end of file diff --git a/example/market.js b/example/market.js index cb2ecf49c7..d3bd6ef5d1 100644 --- a/example/market.js +++ b/example/market.js @@ -7,14 +7,29 @@ var BitGoJS = require('../src/index.js'); var bitgo = new BitGoJS.BitGo(); -bitgo.market(function(err, market) { +var market = null; +var yesterday = null; + +// Get latest market data +bitgo.market(function(err, res) { if (err) { throw err; } - var changeSinceYesterday = (market.last - market.yesterday.last).toFixed(2); - var direction = changeSinceYesterday > 0 ? "up" : "down"; - changeSinceYesterday = Math.abs(changeSinceYesterday); - console.log( - "Market Price: $" + market.last + + market = res; + + // Get yesterday's data + bitgo.yesterday(function(err, res) { + if (err) { + throw err; + } + yesterday = res; + + // Now print out some market information + var changeSinceYesterday = (market.latest.currencies.USD.last - yesterday.currencies.USD.last).toFixed(2); + var direction = changeSinceYesterday > 0 ? "up" : "down"; + changeSinceYesterday = Math.abs(changeSinceYesterday); + console.log( + "Market Price (USD): $" + market.latest.currencies.USD.last + " (" + direction + " $" + changeSinceYesterday + " from yesterday)"); -}); + }); +}); \ No newline at end of file diff --git a/src/bitgo.js b/src/bitgo.js index 8d520614b4..7376375921 100644 --- a/src/bitgo.js +++ b/src/bitgo.js @@ -115,6 +115,25 @@ BitGo.prototype.market = function(callback) { }); }; +// +// market data yesterday +// Get market data from yesterday +// +BitGo.prototype.yesterday = function(callback) { + if (typeof(callback) != 'function') { + throw new Error('invalid argument'); + } + + this.get(this.url('/market/yesterday')) + .end(function(err, res) { + if (err) { + return callback(err); + } + callback(null, res.body); + }); +}; + + // // authenticate // Login to the bitgo system.