diff options
| author | Adam Soltys <[email protected]> | 2020-04-06 21:05:49 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2020-04-11 21:29:24 -0700 |
| commit | 6837b7d9d480517775dc5901a99baed01c730e80 (patch) | |
| tree | 28cd27557b2387ed57dae11620d8ef06cfb72476 | |
| parent | e9b8303212f1e463ad6927e1b3df404a4358db96 (diff) | |
| download | coinos-server-6837b7d9d480517775dc5901a99baed01c730e80.tar.gz coinos-server-6837b7d9d480517775dc5901a99baed01c730e80.zip | |
support receiving liquid assets
| -rw-r--r-- | db/index.js | 17 | ||||
| -rw-r--r-- | db/models/accounts.js | 9 | ||||
| -rw-r--r-- | routes/liquid/receive.js | 31 |
3 files changed, 50 insertions, 7 deletions
diff --git a/db/index.js b/db/index.js index b411a8ef..bb94fb98 100644 --- a/db/index.js +++ b/db/index.js @@ -8,12 +8,13 @@ db = new Sequelize(conf.database, conf.username, conf.password, { dialectOptions: { multipleStatements: true } }); +require("./models/accounts.js"); require("./models/invoices.js"); require("./models/payments.js"); require("./models/users.js"); -db["User"].hasMany(db["Payment"], { - as: "payments", +db["User"].hasMany(db["Account"], { + as: "accounts", foreignKey: "user_id" }); @@ -22,7 +23,12 @@ db["User"].hasMany(db["Invoice"], { foreignKey: "user_id" }); -db["Payment"].belongsTo(db["User"], { +db["User"].hasMany(db["Payment"], { + as: "payments", + foreignKey: "user_id" +}); + +db["Account"].belongsTo(db["User"], { as: "user", foreignKey: "user_id" }); @@ -31,3 +37,8 @@ db["Invoice"].belongsTo(db["User"], { as: "user", foreignKey: "user_id" }); + +db["Payment"].belongsTo(db["User"], { + as: "user", + foreignKey: "user_id" +}); diff --git a/db/models/accounts.js b/db/models/accounts.js index 57c9e82a..aeaf8d5e 100644 --- a/db/models/accounts.js +++ b/db/models/accounts.js @@ -55,6 +55,15 @@ const attributes = { comment: null, field: "balance" }, + pending: { + type: DataTypes.DOUBLE, + allowNull: true, + defaultValue: null, + primaryKey: false, + autoIncrement: false, + comment: null, + field: "pending" + }, }; const options = { diff --git a/routes/liquid/receive.js b/routes/liquid/receive.js index 68189e38..ff58f1c4 100644 --- a/routes/liquid/receive.js +++ b/routes/liquid/receive.js @@ -22,7 +22,7 @@ zmqRawTx.on("message", async (topic, message, sequence) => { tx.vout.map(async o => { if (!(o.scriptPubKey && o.scriptPubKey.addresses)) return; - const { asset } = o.asset; + const { asset } = o; const value = toSats(o.value); const address = o.scriptPubKey.addresses[0]; @@ -47,7 +47,30 @@ zmqRawTx.on("message", async (topic, message, sequence) => { let confirmed = 0; - user.pending += value; + if (asset === config.liquid.btcasset) { + user.pending += value; + } else { + const params = { + user_id: user.id, + asset, + }; + + const account = await db.Account.findOne({ + where: params + }); + + console.log("params", params); + if (account) { + account.pending += value; + await account.save(); + } else { + params.balance = 0; + params.pending = value; + l.info("creating", params); + await db.Account.create(params); + } + } + user.confidential = await lq.getNewAddress(); user.liquid = (await lq.getAddressInfo( user.confidential @@ -72,7 +95,7 @@ zmqRawTx.on("message", async (topic, message, sequence) => { }); payments.push(blinded.txid); - l.info("liquid detected", user.username, value); + l.info("liquid detected", user.username, asset, value); emit(user.username, "payment", payment); } }) @@ -112,7 +135,7 @@ setInterval(async () => { let user = await p.getUser(); - const asset = await db.Asset.findOne({ + const asset = await db.Account.findOne({ where: { user_id: user.id, asset: p.asset |
