From a3cc882cee6afcfa4b278e653b3927b0cf79df9a Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Sat, 22 Oct 2016 16:43:51 -0700 Subject: wip --- app.js | 24 ++---------------------- bcoin.js | 44 ++++++++++++++++++++++++++++++++++++++++++++ package.json | 2 +- public/js/wallet.coffee | 1 + public/js/wallet.js | 1 + src/app.coffee | 26 +++----------------------- src/bcoin.coffee | 38 ++++++++++++++++++++++++++++++++++++++ util/set_addresses.coffee | 23 +++++++++++++++++++++++ views/users/wallet.html | 4 ++++ 9 files changed, 117 insertions(+), 46 deletions(-) create mode 100644 bcoin.js create mode 100644 src/bcoin.coffee create mode 100644 util/set_addresses.coffee diff --git a/app.js b/app.js index acbc9cb4..85654598 100644 --- a/app.js +++ b/app.js @@ -1,5 +1,5 @@ (function() { - var RedisStore, app, authorize, bcoin, bodyParser, cache, config, cookieParser, express, fetchRates, fs, passport, path, proxy, proxyContext, proxyMiddleware, proxyOptions, request, session, sessionStore, sessions, startBcoin, transactions, users, + var RedisStore, app, authorize, bodyParser, cache, config, cookieParser, express, fetchRates, fs, passport, path, proxy, proxyContext, proxyMiddleware, proxyOptions, request, session, sessionStore, sessions, startBcoin, transactions, users, indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; request = require('request'); @@ -18,8 +18,6 @@ fs = require('fs'); - bcoin = require('bcoin').set('testnet'); - proxyMiddleware = require('http-proxy-middleware'); sessions = require("./routes/sessions")(passport); @@ -126,25 +124,7 @@ })(); (startBcoin = function() { - var chain, pool; - chain = new bcoin.chain({ - db: 'leveldb', - location: process.env.HOME + '/chain.db', - spv: true - }); - pool = new bcoin.pool({ - chain: chain, - spv: true - }); - return pool.open(function(err) { - pool.watchAddress('mhwWUZAmP4ycvwj4DdfGRy2JNRwDXeuwtj'); - pool.connect(); - pool.startSync(); - pool.on('error', function(err) {}); - return pool.on('tx', function(tx) { - return console.log(tx); - }); - }); + return require('./bcoin').init(); })(); app.get('/', cache, sessions["new"]); diff --git a/bcoin.js b/bcoin.js new file mode 100644 index 00000000..ece78ec3 --- /dev/null +++ b/bcoin.js @@ -0,0 +1,44 @@ +(function() { + var bcoin, db; + + bcoin = require('bcoin'); + + db = require('./redis'); + + module.exports = { + init: function() { + var addresses, chain, pool; + addresses = {}; + chain = new bcoin.chain({ + db: 'leveldb', + location: __dirname + 'mainchain/mainchain.db', + spv: true + }); + pool = new bcoin.pool({ + chain: chain, + spv: true + }); + return pool.open(function(err) { + db.keys("user:*", function(err, users) { + return users.map(function(key) { + return db.hgetall(key, function(err, user) { + addresses[user.address] = user.username; + pool.watchAddress(user.address); + return console.log(user.address); + }); + }); + }); + pool.connect(); + pool.startSync(); + pool.on('error', function(err) { + debugger; + return console.log(err); + }); + return pool.on('tx', function(tx) { + return console.log(tx); + }); + }); + } + }; + +}).call(this); diff --git a/package.json b/package.json index 9f907a10..160a298b 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "bcoin": "git+https://github.com/bcoin-org/bcoin.git#0ca843e3cabd4920546a9947f15954e2b7ede195", "bcryptjs": "^2.3.0", "bip39": "^2.2.0", + "bitcoinjs-lib": "^2.3.0", "bluebird": "^3.4.6", "body-parser": "^1.5.0", "browser-sync": "^2.11.0", @@ -38,7 +39,6 @@ "grunt": "^1.0.1", "grunt-browser-sync": "^2.2.0", "grunt-browserify": "^5.0.0", - "grunt-coffeeify": "^0.1.3", "grunt-contrib-coffee": "^1.0.0", "grunt-contrib-less": "^1.1.0", "grunt-contrib-watch": "^1.0.0", diff --git a/public/js/wallet.coffee b/public/js/wallet.coffee index 6fa0bac1..a5ba6efb 100644 --- a/public/js/wallet.coffee +++ b/public/js/wallet.coffee @@ -237,6 +237,7 @@ getUser = -> $('#pubkey').val(user.pubkey) $('#privkey').val(user.privkey) $('#address').val(user.address) + $('.address').html(user.address) $('#unit').html(user.unit) $('#currency_toggle').html(user.unit) $('#amount').attr('step', 0.00000001 * multiplier()) diff --git a/public/js/wallet.js b/public/js/wallet.js index cd513202..dd10b22f 100644 --- a/public/js/wallet.js +++ b/public/js/wallet.js @@ -278,6 +278,7 @@ $('#pubkey').val(user.pubkey); $('#privkey').val(user.privkey); $('#address').val(user.address); + $('.address').html(user.address); $('#unit').html(user.unit); $('#currency_toggle').html(user.unit); $('#amount').attr('step', 0.00000001 * multiplier()); diff --git a/src/app.coffee b/src/app.coffee index 1c11fa05..d51eaa99 100644 --- a/src/app.coffee +++ b/src/app.coffee @@ -6,9 +6,7 @@ path = require('path') passport = require('./passport') config = require('./config') fs = require('fs') -bcoin = require('bcoin').set('testnet') proxyMiddleware = require('http-proxy-middleware') - sessions = require("./routes/sessions")(passport) transactions = require("./routes/transactions") users = require("./routes/users")(sessions) @@ -17,6 +15,7 @@ session = require('express-session') RedisStore = require('connect-redis')(session) sessionStore = new RedisStore(require('./redis').host, ttl: 172800) + proxyContext = '/blockcypher' proxyOptions = target: 'https://api.blockcypher.com' @@ -76,27 +75,8 @@ do fetchRates = -> ) setTimeout(fetchRates, 120000) -do startBcoin = -> - chain = new bcoin.chain( - db: 'leveldb' - location: process.env.HOME + '/chain.db' - spv: true - ) - - pool = new bcoin.pool( - chain: chain - spv: true - ) - - pool.open((err) -> - pool.watchAddress('mhwWUZAmP4ycvwj4DdfGRy2JNRwDXeuwtj') - - pool.connect() - pool.startSync() - - pool.on('error', (err) -> return) - pool.on('tx', (tx) -> console.log(tx)) - ) +do startBcoin = -> + require('./bcoin').init() app.get('/', cache, sessions.new) diff --git a/src/bcoin.coffee b/src/bcoin.coffee new file mode 100644 index 00000000..31bd7ca1 --- /dev/null +++ b/src/bcoin.coffee @@ -0,0 +1,38 @@ +bcoin = require('bcoin') +db = require('./redis') + +module.exports = + init: -> + addresses = {} + + chain = new bcoin.chain( + db: 'leveldb' + location: __dirname + 'mainchain/mainchain.db' + spv: true + ) + + pool = new bcoin.pool( + chain: chain + spv: true + ) + + pool.open((err) -> + db.keys("user:*", (err, users) -> + users.map((key) -> + db.hgetall(key, (err, user) -> + addresses[user.address] = user.username + pool.watchAddress(user.address) + console.log(user.address) + ) + ) + ) + + pool.connect() + pool.startSync() + + pool.on('error', (err) -> + debugger + console.log(err) + ) + pool.on('tx', (tx) -> console.log(tx)) + ) diff --git a/util/set_addresses.coffee b/util/set_addresses.coffee new file mode 100644 index 00000000..d87cf72d --- /dev/null +++ b/util/set_addresses.coffee @@ -0,0 +1,23 @@ +db = require('../redis') +bitcoin = require('bitcoinjs-lib') + +db.keys('user:*', (err, keys) -> + for key in keys + do (key) -> + db.hgetall(key, (err, user) -> + address = '' + try + bitcoin.address.fromBase58Check(user.pubkey) + address = user.pubkey + catch + try + master = bitcoin.HDNode.fromBase58(user.pubkey) + child = master.derive(0).derive(0) + address = child.getAddress().toString() + catch + db.del(key) + + if address + db.hmset(key, address: address) + ) +) diff --git a/views/users/wallet.html b/views/users/wallet.html index a7d850e1..22c6ffbe 100644 --- a/views/users/wallet.html +++ b/views/users/wallet.html @@ -9,6 +9,10 @@

Wallet

+
+ Your address is +
+