try locking txs table
This commit is contained in:
parent
71e5ec64f5
commit
5cfc2ba491
4 changed files with 61 additions and 3 deletions
52
dev/double-spend-scenario.js
Normal file
52
dev/double-spend-scenario.js
Normal file
|
|
@ -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)
|
||||||
|
})
|
||||||
|
*/
|
||||||
|
|
@ -311,6 +311,8 @@ exports.trade = function trade(session, rawTrade, cb) {
|
||||||
currencyCode: rawTrade.currency
|
currencyCode: rawTrade.currency
|
||||||
};
|
};
|
||||||
|
|
||||||
|
console.log('****************** DEBUG2 *****************')
|
||||||
|
console.log(db.addOutgoingPending)
|
||||||
async.parallel([
|
async.parallel([
|
||||||
async.apply(db.addOutgoingPending, session, tx.currencyCode, tx.toAddress),
|
async.apply(db.addOutgoingPending, session, tx.currencyCode, tx.toAddress),
|
||||||
async.apply(db.recordBill, session, rawTrade)
|
async.apply(db.recordBill, session, rawTrade)
|
||||||
|
|
|
||||||
|
|
@ -181,6 +181,7 @@ function billsAndTxs(client, session, cb) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function computeSendAmount(tx, totals) {
|
function computeSendAmount(tx, totals) {
|
||||||
|
console.log('DEBUG10')
|
||||||
var fiatRemaining = (tx.fiat || totals.billsFiat) - totals.txFiat;
|
var fiatRemaining = (tx.fiat || totals.billsFiat) - totals.txFiat;
|
||||||
var satoshisRemaining = (tx.satoshis || totals.billsSatoshis) -
|
var satoshisRemaining = (tx.satoshis || totals.billsSatoshis) -
|
||||||
totals.txSatoshis;
|
totals.txSatoshis;
|
||||||
|
|
@ -303,6 +304,8 @@ function insertTx(client, session, incoming, tx, satoshis, fiat, stage,
|
||||||
tx.error
|
tx.error
|
||||||
];
|
];
|
||||||
|
|
||||||
|
console.log('DEBUG11')
|
||||||
|
|
||||||
query(client, getInsertQuery('transactions', fields, true), values,
|
query(client, getInsertQuery('transactions', fields, true), values,
|
||||||
function(err, results) {
|
function(err, results) {
|
||||||
if (err) return cb(err);
|
if (err) return cb(err);
|
||||||
|
|
@ -347,6 +350,7 @@ exports.addOutgoingTx = function addOutgoingTx(session, tx, cb) {
|
||||||
if (cerr) return cb(cerr);
|
if (cerr) return cb(cerr);
|
||||||
async.series([
|
async.series([
|
||||||
async.apply(silentQuery, client, 'BEGIN'),
|
async.apply(silentQuery, client, 'BEGIN'),
|
||||||
|
async.apply(silentQuery, client, 'LOCK TABLE transactions NOWAIT'),
|
||||||
async.apply(insertOutgoingCompleteTx, client, session, tx),
|
async.apply(insertOutgoingCompleteTx, client, session, tx),
|
||||||
async.apply(removePendingTx, client, session),
|
async.apply(removePendingTx, client, session),
|
||||||
async.apply(buildOutgoingTx, client, session, tx)
|
async.apply(buildOutgoingTx, client, session, tx)
|
||||||
|
|
@ -357,7 +361,7 @@ exports.addOutgoingTx = function addOutgoingTx(session, tx, cb) {
|
||||||
}
|
}
|
||||||
silentQuery(client, 'COMMIT', [], function() {
|
silentQuery(client, 'COMMIT', [], function() {
|
||||||
done();
|
done();
|
||||||
var toSend = results[3];
|
var toSend = results[4];
|
||||||
cb(null, toSend);
|
cb(null, toSend);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -192,7 +192,7 @@ describe('Plugins', function() {
|
||||||
describe('Send Bitcoins', function() {
|
describe('Send Bitcoins', function() {
|
||||||
|
|
||||||
before(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) {
|
it('should send bitcoins successfully', function(done) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue