fix: enqueue sweeping requests and loosen sweep polling
This commit is contained in:
parent
ecdc020113
commit
fa0ef6b053
3 changed files with 12 additions and 4 deletions
|
|
@ -806,8 +806,8 @@ function plugins (settings, deviceId) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function sweepHd () {
|
function sweepHd () {
|
||||||
const sql = `select id, crypto_code, hd_index from cash_out_txs
|
const sql = `SELECT id, crypto_code, hd_index FROM cash_out_txs
|
||||||
where hd_index is not null and not swept and status in ('confirmed', 'instant')`
|
WHERE hd_index IS NOT NULL AND NOT swept AND status IN ('confirmed', 'instant') AND created < now() - interval '1 week'`
|
||||||
|
|
||||||
return db.any(sql)
|
return db.any(sql)
|
||||||
.then(rows => Promise.all(rows.map(sweepHdRow)))
|
.then(rows => Promise.all(rows.map(sweepHdRow)))
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,8 @@ const { default: Common, Chain, Hardfork } = require('@ethereumjs/common')
|
||||||
const Tx = require('ethereumjs-tx')
|
const Tx = require('ethereumjs-tx')
|
||||||
const util = require('ethereumjs-util')
|
const util = require('ethereumjs-util')
|
||||||
const coins = require('@lamassu/coins')
|
const coins = require('@lamassu/coins')
|
||||||
|
const { default: PQueue } = require('p-queue')
|
||||||
|
|
||||||
const _pify = require('pify')
|
const _pify = require('pify')
|
||||||
const BN = require('../../../bn')
|
const BN = require('../../../bn')
|
||||||
const ABI = require('../../tokens')
|
const ABI = require('../../tokens')
|
||||||
|
|
@ -48,6 +50,11 @@ const logInfuraCall = call => {
|
||||||
logger.info(`Calling web3 method ${call} via Infura. Current count for this session: ${JSON.stringify(infuraCalls)}`)
|
logger.info(`Calling web3 method ${call} via Infura. Current count for this session: ${JSON.stringify(infuraCalls)}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const SWEEP_QUEUE = new PQueue({
|
||||||
|
concurrency: 3,
|
||||||
|
interval: 250,
|
||||||
|
})
|
||||||
|
|
||||||
function connect (url) {
|
function connect (url) {
|
||||||
web3.setProvider(new web3.providers.HttpProvider(url))
|
web3.setProvider(new web3.providers.HttpProvider(url))
|
||||||
}
|
}
|
||||||
|
|
@ -236,13 +243,14 @@ function sweep (account, cryptoCode, hdIndex, settings, operatorId) {
|
||||||
const wallet = paymentHdNode(account).deriveChild(hdIndex).getWallet()
|
const wallet = paymentHdNode(account).deriveChild(hdIndex).getWallet()
|
||||||
const fromAddress = wallet.getChecksumAddressString()
|
const fromAddress = wallet.getChecksumAddressString()
|
||||||
|
|
||||||
return confirmedBalance(fromAddress, cryptoCode)
|
return SWEEP_QUEUE.add(() => confirmedBalance(fromAddress, cryptoCode)
|
||||||
.then(r => {
|
.then(r => {
|
||||||
if (r.eq(0)) return
|
if (r.eq(0)) return
|
||||||
|
|
||||||
return generateTx(defaultAddress(account), wallet, r, true, cryptoCode)
|
return generateTx(defaultAddress(account), wallet, r, true, cryptoCode)
|
||||||
.then(signedTx => pify(web3.eth.sendSignedTransaction)(signedTx))
|
.then(signedTx => pify(web3.eth.sendSignedTransaction)(signedTx))
|
||||||
})
|
})
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
function newAddress (account, info, tx, settings, operatorId) {
|
function newAddress (account, info, tx, settings, operatorId) {
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ const processBatches = require('./tx-batching-processing')
|
||||||
const INCOMING_TX_INTERVAL = 30 * T.seconds
|
const INCOMING_TX_INTERVAL = 30 * T.seconds
|
||||||
const LIVE_INCOMING_TX_INTERVAL = 5 * T.seconds
|
const LIVE_INCOMING_TX_INTERVAL = 5 * T.seconds
|
||||||
const UNNOTIFIED_INTERVAL = 10 * T.seconds
|
const UNNOTIFIED_INTERVAL = 10 * T.seconds
|
||||||
const SWEEP_HD_INTERVAL = T.minute
|
const SWEEP_HD_INTERVAL = 5 * T.minute
|
||||||
const TRADE_INTERVAL = 60 * T.seconds
|
const TRADE_INTERVAL = 60 * T.seconds
|
||||||
const PONG_INTERVAL = 10 * T.seconds
|
const PONG_INTERVAL = 10 * T.seconds
|
||||||
const LOGS_CLEAR_INTERVAL = 1 * T.day
|
const LOGS_CLEAR_INTERVAL = 1 * T.day
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue