diff --git a/dev/double-spend-scenario.js b/dev/double-spend-scenario.js new file mode 100644 index 00000000..73e112c3 --- /dev/null +++ b/dev/double-spend-scenario.js @@ -0,0 +1,52 @@ +var db = require('../lib/postgresql_interface') +var connectionString = 'postgres://lamassu:lamassu@localhost/lamassu' +db.init(connectionString) + +var session = { + id: '6ede611c-cd03-11e5-88ee-2b5fcfdb0bc2', + fingerprint: 'xx:xx' +} +var tx = { + fiat: 40, + satoshis: 6980000, + toAddress: '1xxx', + currencyCode: 'CAD', + incoming: false +} + +var tx2 = { + fiat: 0, + satoshis: 6980000, + toAddress: '1xxx', + currencyCode: 'CAD', + incoming: false +} + +db.addOutgoingTx(session, tx, function (err, res) { + console.log('DEBUG1') + console.log(err) + console.log(res) +}) + +setTimeout(function () { + db.addOutgoingTx(session, tx2, function (err, res) { + console.log('DEBUG2') + console.log(err) + console.log(res) + }) +}, 1000) + +var bills = { + uuid: 'c630338c-cd03-11e5-a9df-dbc9be2e9fbb', + currency: 'CAD', + toAddress: '1xxx', + deviceTime: Date.now(), + satoshis: 6980000, + fiat: 40 +} + +/* +db.recordBill(session, bills, function (err) { + console.log(err) +}) +*/ diff --git a/lib/plugins.js b/lib/plugins.js index 0867c43c..a6519956 100644 --- a/lib/plugins.js +++ b/lib/plugins.js @@ -121,7 +121,7 @@ function loadOrConfigPlugin(pluginHandle, pluginType, currency, pluginHandle = loadPlugin(currentName, pluginConfig); currentlyUsedPlugins[pluginType] = currentName logger.debug('plugin(%s) loaded: %s', pluginType, pluginHandle.NAME || - currentName); + currentName); } } @@ -311,6 +311,8 @@ exports.trade = function trade(session, rawTrade, cb) { currencyCode: rawTrade.currency }; + console.log('****************** DEBUG2 *****************') + console.log(db.addOutgoingPending) async.parallel([ async.apply(db.addOutgoingPending, session, tx.currencyCode, tx.toAddress), async.apply(db.recordBill, session, rawTrade) diff --git a/lib/postgresql_interface.js b/lib/postgresql_interface.js index e969f3d8..86935f2b 100644 --- a/lib/postgresql_interface.js +++ b/lib/postgresql_interface.js @@ -181,6 +181,7 @@ function billsAndTxs(client, session, cb) { } function computeSendAmount(tx, totals) { + console.log('DEBUG10') var fiatRemaining = (tx.fiat || totals.billsFiat) - totals.txFiat; var satoshisRemaining = (tx.satoshis || totals.billsSatoshis) - totals.txSatoshis; @@ -303,6 +304,8 @@ function insertTx(client, session, incoming, tx, satoshis, fiat, stage, tx.error ]; + console.log('DEBUG11') + query(client, getInsertQuery('transactions', fields, true), values, function(err, results) { if (err) return cb(err); @@ -347,6 +350,7 @@ exports.addOutgoingTx = function addOutgoingTx(session, tx, cb) { if (cerr) return cb(cerr); async.series([ async.apply(silentQuery, client, 'BEGIN'), + async.apply(silentQuery, client, 'LOCK TABLE transactions NOWAIT'), async.apply(insertOutgoingCompleteTx, client, session, tx), async.apply(removePendingTx, client, session), async.apply(buildOutgoingTx, client, session, tx) @@ -357,7 +361,7 @@ exports.addOutgoingTx = function addOutgoingTx(session, tx, cb) { } silentQuery(client, 'COMMIT', [], function() { done(); - var toSend = results[3]; + var toSend = results[4]; cb(null, toSend); }); }); diff --git a/test/plugins.js b/test/plugins.js index bf8aeaa4..206a7e41 100644 --- a/test/plugins.js +++ b/test/plugins.js @@ -192,7 +192,7 @@ describe('Plugins', function() { describe('Send Bitcoins', function() { before(function() { - plugins.trade({currency: 'USD', satoshis: 1e7}, db.FINGERPRINT_NEW); + plugins.trade('123', {currency: 'USD', satoshis: 1e7, toAddress: '1xxx'}, function() {}); }); it('should send bitcoins successfully', function(done) {