From 7dd395672a45efb462d7811a0d0a3425a252460a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Salgado?= Date: Tue, 2 Aug 2022 22:10:26 +0100 Subject: [PATCH 1/3] fix: add a margin of 0.001% on sweeping transactions to ensure higher success rate --- bin/lamassu-eth-sweep-to-new-wallet | 2 +- lib/plugins/wallet/geth/base.js | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/bin/lamassu-eth-sweep-to-new-wallet b/bin/lamassu-eth-sweep-to-new-wallet index 8cb2ec6b..57fb4f0b 100644 --- a/bin/lamassu-eth-sweep-to-new-wallet +++ b/bin/lamassu-eth-sweep-to-new-wallet @@ -263,7 +263,7 @@ settingsLoader.loadLatest() } const opts = { - chainId: 3, + chainId: 1, nonce: 0, includesFee: true } diff --git a/lib/plugins/wallet/geth/base.js b/lib/plugins/wallet/geth/base.js index 44a3cbb7..d17878ef 100644 --- a/lib/plugins/wallet/geth/base.js +++ b/lib/plugins/wallet/geth/base.js @@ -10,6 +10,7 @@ const Tx = require('ethereumjs-tx') const { default: PQueue } = require('p-queue') const util = require('ethereumjs-util') const coins = require('@lamassu/coins') +const { BigNumber } = require('bignumber.js') const _pify = require('pify') const BN = require('../../../bn') @@ -205,7 +206,7 @@ function generateTx (_toAddress, wallet, amount, includesFee, cryptoCode) { lastUsedNonces[fromAddress] = txCount const toSend = includesFee - ? amount.minus(gasPrice.times(gas)) + ? new BN(amount.times(0.99999).toFixed(0, BigNumber.ROUND_DOWN)).minus(gasPrice.times(gas)) : amount const maxPriorityFeePerGas = new BN(web3.utils.toWei('2.5', 'gwei')) // web3 default value From 60ae126712d5363bc3ddf5d45769fa468d739ea3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Salgado?= Date: Wed, 3 Aug 2022 19:24:39 +0100 Subject: [PATCH 2/3] fix: ETH fees --- lib/plugins/wallet/geth/base.js | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/lib/plugins/wallet/geth/base.js b/lib/plugins/wallet/geth/base.js index d17878ef..0e9f9cba 100644 --- a/lib/plugins/wallet/geth/base.js +++ b/lib/plugins/wallet/geth/base.js @@ -205,18 +205,20 @@ function generateTx (_toAddress, wallet, amount, includesFee, cryptoCode) { .then(([gas, gasPrice, txCount, baseFeePerGas]) => { lastUsedNonces[fromAddress] = txCount - const toSend = includesFee - ? new BN(amount.times(0.99999).toFixed(0, BigNumber.ROUND_DOWN)).minus(gasPrice.times(gas)) - : amount - const maxPriorityFeePerGas = new BN(web3.utils.toWei('2.5', 'gwei')) // web3 default value - const maxFeePerGas = new BN(2).times(baseFeePerGas).plus(maxPriorityFeePerGas) + const neededPriority = new BN(web3.utils.toWei('2.0', 'gwei')) + const maxFeePerGas = baseFeePerGas.plus(neededPriority) + const newGasPrice = BigNumber.minimum(maxFeePerGas, baseFeePerGas.plus(maxPriorityFeePerGas)) + + const toSend = includesFee + ? new BN(amount).minus(newGasPrice.times(gas)) + : amount const rawTx = { chainId: 1, nonce: txCount, - maxPriorityFeePerGas: web3.utils.toHex(web3.utils.toWei(maxPriorityFeePerGas.toString(), 'gwei')), - maxFeePerGas: web3.utils.toHex(web3.utils.toWei(maxFeePerGas.toString(), 'gwei')), + maxPriorityFeePerGas: web3.utils.toHex(maxPriorityFeePerGas), + maxFeePerGas: web3.utils.toHex(maxFeePerGas), gasLimit: hex(gas), to: toAddress, from: fromAddress, From f5279df8f4aa57910ca33162f676413494c2387a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Salgado?= Date: Thu, 4 Aug 2022 18:04:14 +0100 Subject: [PATCH 3/3] fix: remove duplicate import --- lib/plugins/wallet/geth/base.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/plugins/wallet/geth/base.js b/lib/plugins/wallet/geth/base.js index 0e9f9cba..fb06a26a 100644 --- a/lib/plugins/wallet/geth/base.js +++ b/lib/plugins/wallet/geth/base.js @@ -10,7 +10,6 @@ const Tx = require('ethereumjs-tx') const { default: PQueue } = require('p-queue') const util = require('ethereumjs-util') const coins = require('@lamassu/coins') -const { BigNumber } = require('bignumber.js') const _pify = require('pify') const BN = require('../../../bn') @@ -208,7 +207,7 @@ function generateTx (_toAddress, wallet, amount, includesFee, cryptoCode) { const maxPriorityFeePerGas = new BN(web3.utils.toWei('2.5', 'gwei')) // web3 default value const neededPriority = new BN(web3.utils.toWei('2.0', 'gwei')) const maxFeePerGas = baseFeePerGas.plus(neededPriority) - const newGasPrice = BigNumber.minimum(maxFeePerGas, baseFeePerGas.plus(maxPriorityFeePerGas)) + const newGasPrice = BN.minimum(maxFeePerGas, baseFeePerGas.plus(maxPriorityFeePerGas)) const toSend = includesFee ? new BN(amount).minus(newGasPrice.times(gas))