aboutsummaryrefslogtreecommitdiffstats
path: root/bcoin.js
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2016-11-11 23:20:40 -0800
committerAdam Soltys <[email protected]>2016-12-26 14:22:39 -0800
commite92783c613fa4266b69f5d56257cf919c86182b7 (patch)
treea4454197f19142d2774e7c478c403de16e1a5dbb /bcoin.js
parenta3cc882cee6afcfa4b278e653b3927b0cf79df9a (diff)
downloadcoinos-server-e92783c613fa4266b69f5d56257cf919c86182b7.tar.gz
coinos-server-e92783c613fa4266b69f5d56257cf919c86182b7.zip
Use bcoin to watch all m/0/1 addresses and send email/sms notifications (fixes #49 #59)
Diffstat (limited to 'bcoin.js')
-rw-r--r--bcoin.js98
1 files changed, 82 insertions, 16 deletions
diff --git a/bcoin.js b/bcoin.js
index ece78ec3..a761f116 100644
--- a/bcoin.js
+++ b/bcoin.js
@@ -1,41 +1,107 @@
(function() {
- var bcoin, db;
+ var bcoin, config, db, twilio;
bcoin = require('bcoin');
+ config = require('./config');
+
db = require('./redis');
+ twilio = require('twilio');
+
module.exports = {
- init: function() {
- var addresses, chain, pool;
- addresses = {};
+ init: function(app) {
+ var chain, pool, users;
+ users = {};
chain = new bcoin.chain({
db: 'leveldb',
- location: __dirname + 'mainchain/mainchain.db',
+ name: 'spvchain',
+ location: __dirname + '/db/spvchain',
spv: true
});
pool = new bcoin.pool({
chain: chain,
- spv: true
+ spv: true,
+ size: 1,
+ maxPeers: 1,
+ seeds: ['dctrl.ca']
});
- 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.logger.level = 4;
+ return pool.open().then(function() {
+ db.keysAsync("user:*").then(function(keys) {
+ return Promise.all(keys.map(function(key) {
+ return db.hgetallAsync(key).then(function(user) {
+ console.log(key);
+ console.log(user);
+ if (user.address) {
+ pool.watchAddress(user.address);
+ return users[user.address] = {
+ email: user.email,
+ currency: user.currency,
+ symbol: user.symbol,
+ phone: user.phone
+ };
+ }
});
- });
+ }));
});
pool.connect();
pool.startSync();
pool.on('error', function(err) {
- debugger;
return console.log(err);
});
return pool.on('tx', function(tx) {
- return console.log(tx);
+ var address, client, i, len, output, ref, results, value;
+ console.log(tx);
+ ref = tx.outputs;
+ results = [];
+ for (i = 0, len = ref.length; i < len; i++) {
+ output = ref[i];
+ value = (output.value / 100000000).toFixed(8);
+ address = output.getAddress().toBase58();
+ if (Object.keys(users).includes(address)) {
+ app.render('payment', {
+ value: value,
+ address: address
+ }, function(err, html) {
+ debugger;
+ var content, from_email, helper, mail, request, sg, subject, to_email;
+ console.log(users[address]);
+ helper = require('sendgrid').mail;
+ from_email = new helper.Email('[email protected]');
+ to_email = new helper.Email(users[address].email);
+ subject = 'Received Payment';
+ content = new helper.Content('text/html', html);
+ mail = new helper.Mail(from_email, subject, to_email, content);
+ sg = require('sendgrid')(config.sendgrid_token);
+ request = sg.emptyRequest({
+ method: 'POST',
+ path: '/v3/mail/send',
+ body: mail.toJSON()
+ });
+ return sg.API(request, function(error, response) {
+ console.log(response.statusCode);
+ console.log(response.body);
+ return console.log(response.headers);
+ });
+ });
+ if (users[address].phone) {
+ client = new twilio.RestClient(config.twilio_sid, config.twilio_token);
+ results.push(client.messages.create({
+ to: user.phone,
+ from: config.twilio_number,
+ body: "You received a payment of " + value + " BTC"
+ }, function(err, message) {
+ return console.log(message.sid);
+ }));
+ } else {
+ results.push(void 0);
+ }
+ } else {
+ results.push(void 0);
+ }
+ }
+ return results;
});
});
}