aboutsummaryrefslogtreecommitdiffstats
path: root/src/bcoin.coffee
blob: d0a8a089395b06c2b25ec37d725c20778752ea32 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
bcoin = require('bcoin')
config = require('./config')
db = require('./redis')
twilio = require('twilio')

module.exports =
  init: (app) ->
    users = {}

    chain = new bcoin.chain(
      db: 'leveldb'
      name: 'spvchain'
      location: __dirname + '/db/spvchain'
      spv: true
    )

    pool = new bcoin.pool(
      chain: chain
      spv: true
      size: 1
      maxPeers: 1
      seeds: ['dctrl.ca']
    )

    # pool.logger.level = 4

    pool.open().then(->
      db.keysAsync("user:*").then((keys) ->
        Promise.all(keys.map((key) ->
          db.hgetallAsync(key).then((user) ->
            if user.address
              pool.watchAddress(user.address)
              users[user.address] = 
                email: user.email
                currency: user.currency
                symbol: user.symbol
                phone: user.phone
          )
        ))
      )

      pool.connect()
      pool.startSync()

      pool.on('error', (err) -> 
        console.log(err)
      )

      pool.on('tx', (tx) ->
        for output in tx.outputs
          value = (output.value / 100000000).toFixed(8)
          address = output.getAddress().toBase58()
          if Object.keys(users).includes(address)
            app.render('payment', { value: value, address: address }, (err, html) ->
              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()
              )

              sg.API(request, (error, response) ->
                console.log(response.statusCode)
                console.log(response.body)
                console.log(response.headers)
              )
            )

            if users[address].phone
              client = new twilio.RestClient(config.twilio_sid, config.twilio_token)

              client.messages.create(
                to: user.phone
                from: config.twilio_number
                body: "You received a payment of #{value} BTC"
              , (err, message) ->
                console.log(message.sid)
              )
      )
    )