feat(dualWay): WIP; new plugin type and initial sell structure chunks added

This commit is contained in:
Damian Mee 2014-11-09 04:33:01 +01:00
parent 54e7565d3f
commit 0c0fb74dcd
3 changed files with 92 additions and 28 deletions

View file

@ -16,8 +16,7 @@ var tickerPlugin = null;
var traderPlugin = null;
var walletPlugin = null;
var idVerifierPlugin = null;
var blockchainUtil = null;
var infoPlugin = null;
var currentlyUsedPlugins = {};
@ -53,8 +52,9 @@ function loadPlugin(name, config) {
var moduleMethods = {
ticker: [ 'ticker' ],
trader: [ 'balance', 'purchase', 'sell' ],
wallet: [ 'balance', 'sendBitcoins' ],
idVerifier: [ 'verifyUser', 'verifyTransaction' ]
wallet: [ 'balance', 'sendBitcoins', 'newAddress' ],
idVerifier: [ 'verifyUser', 'verifyTransaction' ],
info: [ 'getLastTx', 'getTxStatus' ]
};
var plugin = null;
@ -168,9 +168,10 @@ exports.configure = function configure(config) {
'idVerifier'
);
// NOTE: temp solution
if (blockchainUtil === null)
blockchainUtil = require('./blockchain_util');
infoPlugin = loadOrConfigPlugin(
infoPlugin,
'info'
);
};
exports.getCachedConfig = function getCachedConfig() {
return cachedConfig;
@ -305,8 +306,9 @@ function _monitorAddress(address, cb) {
var interval = 300; // TODO make config
function checkAddress(_cb) {
blockchainUtil.addressReceived(address, confs, function(err, _received) {
infoPlugin.getLastTx(address, function(err, tx) {
if (err) logger.error(err);
if (_received > 0) received = _received;
setTimeout(_cb, interval);
});
@ -326,7 +328,7 @@ function _monitorAddress(address, cb) {
async.doUntil(checkAddress, test, handler);
}
function _waitDeposit(deviceFingerprint, tx) {
function _awaitDeposit(deviceFingerprint, tx) {
_monitorAddress(tx.toAddress, function(err, received) {
var status = 'fullDeposit';
@ -346,24 +348,84 @@ function _waitDeposit(deviceFingerprint, tx) {
});
}
function _monitorTx(deviceFingerprint, tx) {
infoPlugin.getTxStatus(tx.txHash, function(err, txStatus) {
if (err)
return setTimeout(_monitorTx, 300, [deviceFingerprint, tx]);
if (!txStatus || txStatus === 'fullDeposit')
return setTimeout(_monitorTx, 300, [deviceFingerprint, tx]);
if (txStatus.status === 'confirmedDeposit')
return db.changeTxStatus(tx.txId, 'confirmedDeposit');
if (txStatus.status === 'authorizedDeposit') {
logger.info('Proceeding with confidence level:' + txStatus.confidence);
db.changeTxStatus(tx.txId, 'confirmedDeposit');
}
});
}
function _monitorAddress(deviceFingerprint, tx) {
infoPlugin.getLastTx(tx.toAddress, function(err, txInfo) {
if (err) {
logger.error(err);
return setTimeout(_monitorAddress, 300, [deviceFingerprint, tx]);
}
// no tx occured at all or deposit address was reused; some previous tx was returned
if (!txInfo || txInfo.tsReceived < tx.created)
return setTimeout(_monitorAddress, 300, [deviceFingerprint, tx]);
// enough was sent
if (txInfo.amount >= tx.satoshis) {
tx.txHash = txInfo.txHash;
// tx is already confirmed
if (txInfo.confirmations > 0)
return db.changeTxStatus(tx.txId, 'confirmedDeposit', {
hash: tx.txHash
});
// warn about dangerous TX
if (txInfo.fees === 0)
logger.warn('TXs w/o fee can take forever to confirm!');
// update tx status and save txHash
db.changeTxStatus(tx.txId, 'fullDeposit', {
hash: tx.txHash
});
// start monitoring TX
_monitorTx(deviceFingerprint, tx);
}
});
}
exports.cashOut = function cashOut(deviceFingerprint, tx, cb) {
var tmpInfo = {
label: 'TX ' + Date.now(),
account: 'deposit'
};
walletPlugin.newAddress('deposit', function(err, address) {
if (err) return cb(new Error(err));
walletPlugin.newAddress(tmpInfo, function(err, address) {
if (err)
return cb(new Error(err));
tx.toAddress = address;
// WARN: final db structure will determine if we can use this method
tx.tx_type = 'sell';
db.insertTx(deviceFingerprint, tx, function(err) {
if (err) return cb(new Error(err));
if (err)
return cb(new Error(err));
_waitDeposit(deviceFingerprint, tx);
// start watching address for incoming txs
_awaitDeposit(deviceFingerprint, tx);
// return address to the machine
return cb(null, address);
// NOTE: logic here will depend on a way we want to handle those txs
});
});
};