diff options
| author | Adam Soltys <[email protected]> | 2020-03-11 15:10:40 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2020-03-11 15:10:40 -0700 |
| commit | c0888fab024cc9f7c99812bfabf9d7774312dbf7 (patch) | |
| tree | cad95683af97432f6092a2c2bae10fbb7a588db5 /liquidPayments.js | |
| parent | bf2b51f0c2ae9b8f0f330dde6411e45fc0da8a25 (diff) | |
| download | coinos-server-c0888fab024cc9f7c99812bfabf9d7774312dbf7.tar.gz coinos-server-c0888fab024cc9f7c99812bfabf9d7774312dbf7.zip | |
refactor
Diffstat (limited to 'liquidPayments.js')
| -rw-r--r-- | liquidPayments.js | 145 |
1 files changed, 0 insertions, 145 deletions
diff --git a/liquidPayments.js b/liquidPayments.js deleted file mode 100644 index 3c2a12f4..00000000 --- a/liquidPayments.js +++ /dev/null @@ -1,145 +0,0 @@ -const reverse = require("buffer-reverse"); -const zmq = require("zeromq"); -const config = require("./config"); -const Sequelize = require("sequelize"); -const BitcoinCore = require("bitcoin-core"); -const bitcoin = require("elementsjs-lib"); -const l = require("pino")(); - -const zmqRawBlock = zmq.socket("sub"); -zmqRawBlock.connect(config.liquid.zmqrawblock); -zmqRawBlock.subscribe("rawblock"); - -const zmqRawTx = zmq.socket("sub"); -zmqRawTx.connect("tcp://127.0.0.1:18603"); -zmqRawTx.subscribe("rawtx"); - -let NETWORK = bitcoin.networks[config.bitcoin.network === "mainnet" ? "bitcoin" : config.bitcoin.network]; -const bc = new BitcoinCore(config.liquid); - -const toSats = n => parseInt((n * 100000000).toFixed()) - -module.exports = (app, db, addresses, payments, emit) => { - zmqRawTx.on("message", async (topic, message, sequence) => { - const hex = message.toString("hex"); - const unblinded = await bc.unblindRawTransaction(hex); - const tx = await bc.decodeRawTransaction(unblinded.hex); - const blinded = await bc.decodeRawTransaction(hex); - if (payments.includes(blinded.txid)) return; - - Promise.all( - tx.vout.map(async o => { - if (!(o.scriptPubKey && o.scriptPubKey.addresses)) return; - const value = toSats(o.value); - const address = o.scriptPubKey.addresses[0]; - - if (Object.keys(addresses).includes(address)) { - let user = await db.User.findOne({ - where: { - username: addresses[address] - } - }); - - let invoices = await db.Payment.findAll({ - limit: 1, - where: { - address, - received: null, - amount: { - [Sequelize.Op.gt]: 0 - } - }, - order: [["id", "DESC"]] - }); - - let tip = null; - if (invoices.length) tip = invoices[0].tip; - - let confirmed = 0; - - user.pending += value; - user.confidential = await bc.getNewAddress(); - user.liquid = (await bc.getAddressInfo(user.confidential)).unconfidential; - - await user.save(); - emit(user.username, "user", user); - - addresses[user.liquid] = user.username; - - const payment = await db.Payment.create({ - user_id: user.id, - hash: blinded.txid, - amount: value, - currency: user.currency, - rate: app.get("rates")[user.currency], - received: true, - tip, - confirmed, - address, - asset: 'LBTC', - }); - payments.push(blinded.txid); - - l.info("liquid detected", user.username, value); - emit(user.username, "payment", payment); - } - }) - ); - }); - - let queue = {}; - - zmqRawBlock.on("message", async (topic, message, sequence) => { - const payments = await db.Payment.findAll({ - where: { confirmed: 0 } - }); - - const hashes = payments.map(p => p.hash); - - const block = bitcoin.Block.fromHex(message.toString("hex"), true); - const hash = await bc.getBlockHash(block.height); - const json = await bc.getBlock(hash, 2); - - json.tx.map(tx => { - if (hashes.includes(tx.txid)) queue[tx.txid] = 1; - }); - }); - - setInterval(async () => { - let arr = Object.keys(queue); - - for (let i = 0; i < arr.length; i++) { - let hash = arr[i]; - - let p = await db.Payment.findOne({ - include: [{ model: db.User, as: "user" }], - where: { hash, confirmed: 0, received: 1 } - }) - - p.confirmed = 1; - - let user = await p.getUser(); - user.balance += p.amount; - user.pending -= Math.min(user.pending, p.amount); - l.info("liquid confirmed", user.username, p.amount); - emit(user.username, "user", user); - - await user.save(); - await p.save(); - - let payments = await db.Payment.findAll({ - where: { - user_id: user.id, - received: { - [Sequelize.Op.ne]: null - }, - }, - order: [['id', 'DESC']], - limit: 12 - }); - - emit(user.username, "payments", payments); - delete queue[hash]; - } - }, 1000); -}; |
