Merge pull request #1285 from chaotixkilla/fix-optimize-eth-sweeping

Optimize ETH sweeping
This commit is contained in:
Rafael Taranto 2022-07-12 15:55:24 +01:00 committed by GitHub
commit 37752aac70
3 changed files with 12 additions and 4 deletions

View file

@ -805,8 +805,8 @@ function plugins (settings, deviceId) {
}
function sweepHd () {
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')`
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') AND created < now() - interval '1 week'`
return db.any(sql)
.then(rows => Promise.all(rows.map(sweepHdRow)))

View file

@ -8,6 +8,8 @@ const { FeeMarketEIP1559Transaction } = require('@ethereumjs/tx')
const { default: Common, Chain, Hardfork } = require('@ethereumjs/common')
const util = require('ethereumjs-util')
const coins = require('@lamassu/coins')
const { default: PQueue } = require('p-queue')
const pify = require('pify')
const BN = require('../../../bn')
const ABI = require('../../tokens')
@ -33,6 +35,11 @@ module.exports = {
checkBlockchainStatus
}
const SWEEP_QUEUE = new PQueue({
concurrency: 3,
interval: 250,
})
function connect (url) {
web3.setProvider(new web3.providers.HttpProvider(url))
}
@ -173,13 +180,14 @@ function sweep (account, cryptoCode, hdIndex, settings, operatorId) {
const wallet = paymentHdNode(account).deriveChild(hdIndex).getWallet()
const fromAddress = wallet.getChecksumAddressString()
return confirmedBalance(fromAddress, cryptoCode)
return SWEEP_QUEUE.add(() => confirmedBalance(fromAddress, cryptoCode)
.then(r => {
if (r.eq(0)) return
return generateTx(defaultAddress(account), wallet, r, true, cryptoCode)
.then(signedTx => pify(web3.eth.sendSignedTransaction)(signedTx))
})
)
}
function newAddress (account, info, tx, settings, operatorId) {

View file

@ -24,7 +24,7 @@ const LIVE_INCOMING_TX_INTERVAL = 5 * T.seconds
const INCOMING_TX_INTERVAL_FILTER = 1 * T.minute
const LIVE_INCOMING_TX_INTERVAL_FILTER = 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 PONG_INTERVAL = 10 * T.seconds
const LOGS_CLEAR_INTERVAL = 1 * T.day