diff --git a/lib/plugins.js b/lib/plugins.js index 2cab2f40..0fc35c42 100644 --- a/lib/plugins.js +++ b/lib/plugins.js @@ -359,7 +359,7 @@ exports.sendCoins = function sendCoins (rawTx) { return executeTx(rawTx) } -exports.cashOut = function cashOut (tx) { +exports.cashOut = function cashOut (deviceId, tx) { const cryptoCode = tx.cryptoCode || 'BTC' const walletPlugin = walletPlugins[cryptoCode] @@ -379,7 +379,7 @@ exports.cashOut = function cashOut (tx) { if (err) return reject(err) const newTx = R.assoc('toAddress', address, tx) - return db.addInitialIncoming(newTx, address) + return db.addInitialIncoming(deviceId, newTx, address) .then(() => resolve(address)) }) })) @@ -781,9 +781,7 @@ exports.fetchPhoneTx = function fetchPhoneTx (phone) { }) } -exports.fetchTx = function fetchTx (session) { - return db.fetchTx(session) -} +exports.fetchTx = db.fetchTx exports.requestDispense = function requestDispense (tx) { return db.addDispenseRequest(tx) @@ -805,7 +803,7 @@ function sweepHD (row) { .then(txHash => { if (txHash) { logger.debug('[%s] Swept address with tx: %s', cryptoCode, txHash) - return db.markSwept(row.session_id) + return db.markSwept(row.tx_id) } }) .catch(err => logger.error('[%s] Sweep error: %s', cryptoCode, err.message)) diff --git a/lib/postgresql_interface.js b/lib/postgresql_interface.js index fd858276..61dddbdd 100644 --- a/lib/postgresql_interface.js +++ b/lib/postgresql_interface.js @@ -82,16 +82,16 @@ exports.recordDeviceEvent = function recordDeviceEvent (deviceId, event) { } // NOTE: This will fail if we have already sent coins because there will be -// a unique cash_in_txs record in the table already keyed by sessionId. -exports.addOutgoingTx = function addOutgoingTx (fingerprint, tx) { - const fields = ['session_id', 'device_fingerprint', 'to_address', +// a unique cash_in_txs record in the table already keyed by txId. +exports.addOutgoingTx = function addOutgoingTx (deviceId, tx) { + const fields = ['tx_id', 'device_id', 'to_address', 'crypto_atoms', 'crypto_code', 'currency_code', 'fiat', 'tx_hash', 'fee', 'phone', 'error' ] const values = [ - tx.sessionId, - fingerprint, + tx.id, + deviceId, tx.toAddress, tx.cryptoAtoms.toString(), tx.cryptoCode, @@ -107,19 +107,19 @@ exports.addOutgoingTx = function addOutgoingTx (fingerprint, tx) { } exports.sentCoins = function sentCoins (tx, toSend, fee, error, txHash) { - const sql = `update cash_in_txs set tx_hash=$1, error=$2 where session_id=$3` - return db.none(sql, [txHash, error, tx.sessionId]) + const sql = `update cash_in_txs set tx_hash=$1, error=$2 where tx_id=$3` + return db.none(sql, [txHash, error, tx.id]) } -exports.addInitialIncoming = function addInitialIncoming (session, tx) { - const fields = ['session_id', 'device_fingerprint', 'to_address', +exports.addInitialIncoming = function addInitialIncoming (deviceId, tx) { + const fields = ['tx_id', 'device_id', 'to_address', 'crypto_atoms', 'crypto_code', 'currency_code', 'fiat', 'tx_hash', 'phone', 'error' ] const values = [ - session.id, - session.fingerprint, + tx.id, + deviceId, tx.toAddress, tx.cryptoAtoms.toString(), tx.cryptoCode, @@ -133,9 +133,9 @@ exports.addInitialIncoming = function addInitialIncoming (session, tx) { return db.none(getInsertQuery('cash_out_txs', fields), values) } -function insertDispense (session, tx, cartridges) { +function insertDispense (deviceId, tx, cartridges) { const fields = [ - 'device_fingerprint', 'session_id', + 'device_id', 'tx_id', 'dispense1', 'reject1', 'count1', 'dispense2', 'reject2', 'count2', 'refill', 'error' @@ -150,7 +150,7 @@ function insertDispense (session, tx, cartridges) { const count1 = cartridges[0].count const count2 = cartridges[1].count const values = [ - session.fingerprint, tx.sessionId, + deviceId, tx.id, dispense1, reject1, count1, dispense2, reject2, count2, false, tx.error ] @@ -167,11 +167,11 @@ exports.addIncomingPhone = function addIncomingPhone (tx, notified) { return db.result(sql, values) .then(results => { const noPhone = results.rowCount === 0 - const sql2 = 'insert into cash_out_actions (session_id, action) values ($1, $2)' + const sql2 = 'insert into cash_out_actions (tx_id, action) values ($1, $2)' if (noPhone) return {noPhone: noPhone} - return db.none(sql2, [tx.txId, 'addedPhone']) + return db.none(sql2, [tx.id, 'addedPhone']) .then(() => ({noPhone: noPhone})) }) } @@ -182,14 +182,14 @@ function normalizeTx (tx) { tx.txHash = tx.tx_hash tx.cryptoCode = tx.crypto_code tx.cryptoAtoms = new BigNumber(tx.crypto_atoms) - tx.sessionId = tx.session_id + tx.id = tx.tx_id tx.to_address = undefined tx.currency_code = undefined tx.tx_hash = undefined tx.crypto_code = undefined tx.satoshis = undefined - tx.session_id = undefined + tx.tx_id = undefined // Eventually turn this into BigDecimal, for now, integer tx.fiat = parseInt(tx.fiat, 10) @@ -212,35 +212,35 @@ exports.fetchPhoneTxs = function fetchPhoneTxs (phone, dispenseTimeout) { .then(rows => normalizeTxs(rows)) } -exports.fetchTx = function fetchTx (session) { - const sql = 'SELECT * FROM cash_out_txs WHERE session_id=$1' +exports.fetchTx = function fetchTx (txId) { + const sql = 'SELECT * FROM cash_out_txs WHERE tx_id=$1' - return db.one(sql, [session.id]) + return db.one(sql, [txId]) .then(row => normalizeTx(row)) } exports.addDispenseRequest = function addDispenseRequest (tx) { - const sql = 'update cash_out_txs set dispensed=$1 where session_id=$2 and dispensed=$3' - const values = [true, tx.sessionId, false] + const sql = 'update cash_out_txs set dispensed=$1 where tx_id=$2 and dispensed=$3' + const values = [true, tx.id, false] return db.result(sql, values) .then(results => { const alreadyDispensed = results.rowCount === 0 if (alreadyDispensed) return {dispense: false, reason: 'alreadyDispensed'} - const sql2 = 'insert into cash_out_actions (session_id, action) values ($1, $2)' + const sql2 = 'insert into cash_out_actions (tx_id, action) values ($1, $2)' - return db.none(sql2, [tx.sessionId, 'dispenseRequested']) + return db.none(sql2, [tx.id, 'dispenseRequested']) .then(() => ({dispense: true})) }) } -exports.addDispense = function addDispense (session, tx, cartridges) { - return insertDispense(session, tx, cartridges) +exports.addDispense = function addDispense (deviceId, tx, cartridges) { + return insertDispense(deviceId, tx, cartridges) .then(() => { - const sql2 = 'insert into cash_out_actions (session_id, action) values ($1, $2)' + const sql2 = 'insert into cash_out_actions (tx_id, action) values ($1, $2)' - return db.none(sql2, [tx.sessionId, 'dispensed']) + return db.none(sql2, [tx.id, 'dispensed']) }) } @@ -321,8 +321,8 @@ exports.updateTxStatus = function updateTxStatus (tx, status) { const tmSRD = new TransactionMode({tiLevel: isolationLevel.serializable}) function transaction (t) { - const sql = 'select status, confirmation_time from cash_out_txs where session_id=$1' - return t.one(sql, [tx.sessionId]) + const sql = 'select status, confirmation_time from cash_out_txs where tx_id=$1' + return t.one(sql, [tx.id]) .then(row => { const newStatus = ratchetStatus(row.status, status) if (row.status === newStatus) return @@ -331,10 +331,10 @@ exports.updateTxStatus = function updateTxStatus (tx, status) { (newStatus === 'instant' || newStatus === 'confirmed') const sql2 = setConfirmationTime - ? 'UPDATE cash_out_txs SET status=$1, confirmation_time=now() WHERE session_id=$2' - : 'UPDATE cash_out_txs SET status=$1 WHERE session_id=$2' + ? 'UPDATE cash_out_txs SET status=$1, confirmation_time=now() WHERE tx_id=$2' + : 'UPDATE cash_out_txs SET status=$1 WHERE tx_id=$2' - const values2 = [newStatus, tx.sessionId] + const values2 = [newStatus, tx.id] return t.none(sql2, values2) .then(() => ({status: newStatus})) @@ -349,12 +349,12 @@ exports.updateTxStatus = function updateTxStatus (tx, status) { .then(r => { if (!r) return - const sql3 = 'insert into cash_out_actions (session_id, action) values ($1, $2)' - return db.none(sql3, [tx.sessionId, r.status]) + const sql3 = 'insert into cash_out_actions (tx_id, action) values ($1, $2)' + return db.none(sql3, [tx.id, r.status]) .then(() => { if (r.status === 'confirmed') { - const sql4 = `update cash_out_hds set confirmed=true where session_id=$1` - return db.none(sql4, [tx.sessionId]) + const sql4 = `update cash_out_hds set confirmed=true where tx_id=$1` + return db.none(sql4, [tx.id]) } }) }) @@ -366,19 +366,19 @@ exports.updateRedeem = function updateRedeem (txId) { return db.none(sql, values) .then(() => { - const sql2 = 'insert into cash_out_actions (session_id, action) values ($1, $2)' + const sql2 = 'insert into cash_out_actions (tx_id, action) values ($1, $2)' return db.none(sql2, [txId, 'redeem']) }) } exports.updateNotify = function updateNotify (tx) { - const sql = 'UPDATE cash_out_txs SET notified=$1 WHERE session_id=$2' - const values = [true, tx.sessionId] + const sql = 'UPDATE cash_out_txs SET notified=$1 WHERE tx_id=$2' + const values = [true, tx.id] return db.none(sql, values) .then(() => { - const sql2 = 'insert into cash_out_actions (session_id, action) values ($1, $2)' - return db.none(sql2, [tx.sessionId, 'notified']) + const sql2 = 'insert into cash_out_actions (tx_id, action) values ($1, $2)' + return db.none(sql2, [tx.id, 'notified']) }) } @@ -435,15 +435,15 @@ exports.cacheResponse = function (deviceId, txId, path, method, body) { return db.none(sql, values) } -exports.nextCashOutSerialHD = function nextCashOutSerialHD (sessionId, cryptoCode) { +exports.nextCashOutSerialHD = function nextCashOutSerialHD (txId, cryptoCode) { const sql = `select hd_serial from cash_out_hds where crypto_code=$1 order by hd_serial desc limit 1` const attempt = () => db.oneOrNone(sql, [cryptoCode]) .then(row => { const serialNumber = row ? row.hd_serial + 1 : 0 - const fields2 = ['session_id', 'crypto_code', 'hd_serial'] + const fields2 = ['tx_id', 'crypto_code', 'hd_serial'] const sql2 = getInsertQuery('cash_out_hds', fields2) - const values2 = [sessionId, cryptoCode, serialNumber] + const values2 = [txId, cryptoCode, serialNumber] return db.none(sql2, values2) .then(() => serialNumber) }) @@ -453,7 +453,7 @@ exports.nextCashOutSerialHD = function nextCashOutSerialHD (sessionId, cryptoCod exports.fetchLiveHD = function fetchLiveHD () { const sql = `select * from cash_out_txs, cash_out_hds - where cash_out_txs.session_id=cash_out_hds.session_id + where cash_out_txs.tx_id=cash_out_hds.tx_id and status=$1 and swept=$2 and ((extract(epoch from (now() - cash_out_txs.created))) * 1000)<$3` @@ -471,7 +471,7 @@ exports.fetchOldHD = function fetchLiveHD () { return db.any(sql) } -exports.markSwept = function markSwept (sessionId) { - const sql = `update cash_out_hds set swept=$1 where session_id=$2` - return db.none(sql, [true, sessionId]) +exports.markSwept = function markSwept (txId) { + const sql = `update cash_out_hds set swept=$1 where tx_id=$2` + return db.none(sql, [true, txId]) } diff --git a/lib/routes.js b/lib/routes.js index 42503427..1a903798 100644 --- a/lib/routes.js +++ b/lib/routes.js @@ -155,7 +155,7 @@ function cashOut (req, res) { const tx = req.body tx.cryptoAtoms = new BigNumber(tx.cryptoAtoms) - return plugins.cashOut(tx) + return plugins.cashOut(getDeviceId(req), tx) .then(cryptoAddress => res.json({toAddress: cryptoAddress})) .catch(err => { res.json({ @@ -167,7 +167,7 @@ function cashOut (req, res) { } function dispenseAck (req, res) { - plugins.dispenseAck(req.body) + plugins.dispenseAck(getDeviceId(req), req.body) res.json({success: true}) }