diff --git a/package.json b/package.json index c0a1a64..7fa71bf 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "dependencies": { "async-mutex": "^0.2.4", "ethers": "^5.0.17", - "gas-price-oracle": "^0.2.0", + "gas-price-oracle": "^0.2.2", "web3-core-promievent": "^1.3.0" }, "devDependencies": { diff --git a/src/Transaction.js b/src/Transaction.js index b632d3e..6341f02 100644 --- a/src/Transaction.js +++ b/src/Transaction.js @@ -66,6 +66,7 @@ class Transaction { if (!tx.gasLimit) { tx.gasLimit = await this._wallet.estimateGas(tx) tx.gasLimit = Math.floor(tx.gasLimit * this.config.GAS_LIMIT_MULTIPLIER) + tx.gasLimit = Math.min(tx.gasLimit, this.config.BLOCK_GAS_LIMIT) } tx.nonce = this.tx.nonce // can be different from `this.manager._nonce` tx.gasPrice = Math.max(this.tx.gasPrice, tx.gasPrice || 0) // start no less than current tx gas price @@ -115,10 +116,16 @@ class Transaction { * @private */ async _prepare() { + if (!this.config.BLOCK_GAS_LIMIT) { + const lastBlock = await this._provider.getBlock('latest') + this.config.BLOCK_GAS_LIMIT = Math.floor(lastBlock.gasLimit.toNumber() * 0.95) + } + if (!this.tx.gasLimit || this.config.ESTIMATE_GAS) { const gas = await this._wallet.estimateGas(this.tx) if (!this.tx.gasLimit) { - this.tx.gasLimit = Math.floor(gas * this.config.GAS_LIMIT_MULTIPLIER) + const gasLimit = Math.floor(gas * this.config.GAS_LIMIT_MULTIPLIER) + this.tx.gasLimit = Math.min(gasLimit, this.config.BLOCK_GAS_LIMIT) } } if (!this.tx.gasPrice) { diff --git a/src/TxManager.js b/src/TxManager.js index 7de0582..00a5198 100644 --- a/src/TxManager.js +++ b/src/TxManager.js @@ -14,6 +14,7 @@ const defaultConfig = { CONFIRMATIONS: 8, ESTIMATE_GAS: true, THROW_ON_REVERT: true, + BLOCK_GAS_LIMIT: null, } class TxManager { diff --git a/test/TxManager.test.js b/test/TxManager.test.js index aeb8816..a8e461e 100644 --- a/test/TxManager.test.js +++ b/test/TxManager.test.js @@ -10,7 +10,7 @@ describe('TxManager', () => { privateKey: PRIVATE_KEY, rpcUrl: RPC_URL, config: { - CONFIRMATIONS: 3, + CONFIRMATIONS: 1, GAS_BUMP_INTERVAL: 1000 * 15, }, }) diff --git a/yarn.lock b/yarn.lock index 75502f9..0e2abfb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1141,10 +1141,10 @@ functional-red-black-tree@^1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= -gas-price-oracle@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/gas-price-oracle/-/gas-price-oracle-0.2.0.tgz#981926c96089497115113162b03151aacfe44a5a" - integrity sha512-2+mMyunV/pMJrmKl/IeEtX860NaE/bQ7H4D8PO2dc0OQd8ZAj/e4WJ+C9F/uOeG3dwm8SEFjofOvcYRHeGxo/Q== +gas-price-oracle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/gas-price-oracle/-/gas-price-oracle-0.2.2.tgz#32c57a9aa6bc69152be96812880232efebfecbc6" + integrity sha512-I4+rLbc7C1vgYXV+cYY0MKeqdZVna2hXpNfD2fcIvf/wIgvtIYmG9gsmhiaYGSgOE2RSPUs2xf/W4K2nJOoNuQ== dependencies: axios "^0.19.2" bignumber.js "^9.0.0"