From 2b41f588143d0f2a0851583d8d91b6b9e76805c2 Mon Sep 17 00:00:00 2001 From: Leo Sollier Date: Tue, 3 Jan 2023 19:02:07 +0100 Subject: [PATCH 1/5] chore: add utility function to check eip1559 compliance --- .../ethereum-storage/src/ethereum-tx-submitter.ts | 9 +-------- .../scripts-create2/contract-setup/adminTasks.ts | 9 +++------ .../smart-contracts/scripts-create2/xdeployer.ts | 11 +++-------- packages/utils/src/providers.ts | 15 +++++++++++++++ 4 files changed, 22 insertions(+), 22 deletions(-) diff --git a/packages/ethereum-storage/src/ethereum-tx-submitter.ts b/packages/ethereum-storage/src/ethereum-tx-submitter.ts index 1e8233b56..f3018894e 100644 --- a/packages/ethereum-storage/src/ethereum-tx-submitter.ts +++ b/packages/ethereum-storage/src/ethereum-tx-submitter.ts @@ -32,14 +32,7 @@ export class EthereumTransactionSubmitter { } async initialize(): Promise { - try { - await this.provider.send('eth_feeHistory', [1, 'latest', []]); - } catch (e) { - this.logger.warn( - 'This RPC provider does not support the "eth_feeHistory" method: switching to legacy gas price', - ); - this.enableEip1559 = false; - } + this.enableEip1559 = await Utils.isEip1559Supported(this.provider, this.logger); } /** Submits an IPFS hash, with fees according to `ipfsSize` */ diff --git a/packages/smart-contracts/scripts-create2/contract-setup/adminTasks.ts b/packages/smart-contracts/scripts-create2/contract-setup/adminTasks.ts index f6445261e..7bd3a5ae3 100644 --- a/packages/smart-contracts/scripts-create2/contract-setup/adminTasks.ts +++ b/packages/smart-contracts/scripts-create2/contract-setup/adminTasks.ts @@ -249,12 +249,9 @@ export const getSignerAndGasFees = async ( } const signer = new hre.ethers.Wallet(hre.config.xdeploy.signer).connect(provider); - let txOverrides; - try { - txOverrides = await utils.estimateGasFees({ provider }); - } catch (err) { - txOverrides = {}; - } + const txOverrides = (await utils.isEip1559Supported(provider, console)) + ? await utils.estimateGasFees({ provider }) + : {}; return { signer, diff --git a/packages/smart-contracts/scripts-create2/xdeployer.ts b/packages/smart-contracts/scripts-create2/xdeployer.ts index c8e8e0088..37a6f607e 100644 --- a/packages/smart-contracts/scripts-create2/xdeployer.ts +++ b/packages/smart-contracts/scripts-create2/xdeployer.ts @@ -71,17 +71,12 @@ export const xdeploy = async ( let receipt = undefined; let deployed = false; let error = undefined; - let txOverrides: Overrides; + let txOverrides: Overrides = {}; - try { + if (await utils.isEip1559Supported(provider, console)) { txOverrides = await utils.estimateGasFees({ provider }); - const gasLimit = hre.config.xdeploy.gasLimit; - txOverrides.gasLimit = gasLimit; - } catch (e) { - // NOTE: On some networks utils.estimateGasFees do not work - txOverrides = {}; - console.log('Cannot estimate gasLimit'); } + txOverrides.gasLimit = hre.config.xdeploy.gasLimit; try { const createReceipt = await ( diff --git a/packages/utils/src/providers.ts b/packages/utils/src/providers.ts index 13cdc1046..041e1a34a 100644 --- a/packages/utils/src/providers.ts +++ b/packages/utils/src/providers.ts @@ -1,3 +1,5 @@ +import { LogTypes } from '@requestnetwork/types'; + import { providers, constants } from 'ethers'; type ProviderFactory = (network: string | undefined) => providers.Provider | string; @@ -147,9 +149,22 @@ const getCeloProvider = (): providers.Provider => { return provider; }; +const isEip1559Supported = async (provider: any, logger: LogTypes.ILogger): Promise => { + try { + await provider.send('eth_feeHistory', [1, 'latest', []]); + return true; + } catch (e) { + logger.warn( + 'This RPC provider does not support the "eth_feeHistory" method: switching to legacy gas price', + ); + return false; + } +}; + export default { setProviderFactory, initPaymentDetectionApiKeys, + isEip1559Supported, getDefaultProvider, getCeloProvider, networkRpcs, From 83aa1b5fc15896f8229eddacd5d3ae366d91e5cb Mon Sep 17 00:00:00 2001 From: Leo Sollier Date: Wed, 18 Jan 2023 13:16:18 +0100 Subject: [PATCH 2/5] make logging optional --- .../scripts-create2/contract-setup/adminTasks.ts | 2 +- packages/utils/src/providers.ts | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/smart-contracts/scripts-create2/contract-setup/adminTasks.ts b/packages/smart-contracts/scripts-create2/contract-setup/adminTasks.ts index 8b9828503..fed72e576 100644 --- a/packages/smart-contracts/scripts-create2/contract-setup/adminTasks.ts +++ b/packages/smart-contracts/scripts-create2/contract-setup/adminTasks.ts @@ -254,7 +254,7 @@ export const getSignerAndGasFees = async ( } const signer = new hre.ethers.Wallet(hre.config.xdeploy.signer).connect(provider); - const txOverrides = (await isEip1559Supported(provider, console)) + const txOverrides = (await isEip1559Supported(provider)) ? await estimateGasFees({ provider }) : {}; diff --git a/packages/utils/src/providers.ts b/packages/utils/src/providers.ts index 535bb1de7..0fa4f5311 100644 --- a/packages/utils/src/providers.ts +++ b/packages/utils/src/providers.ts @@ -151,15 +151,16 @@ const getCeloProvider = (): providers.Provider => { const isEip1559Supported = async ( provider: providers.Web3Provider, - logger: LogTypes.ILogger, + logger?: LogTypes.ILogger, ): Promise => { try { await provider.send('eth_feeHistory', [1, 'latest', []]); return true; } catch (e) { - logger.warn( - 'This RPC provider does not support the "eth_feeHistory" method: switching to legacy gas price', - ); + logger && + logger.warn( + 'This RPC provider does not support the "eth_feeHistory" method: switching to legacy gas price', + ); return false; } }; From 181c3c332c2acbbdf9406980894f15b558a66380 Mon Sep 17 00:00:00 2001 From: Leo Sollier Date: Wed, 18 Jan 2023 13:22:46 +0100 Subject: [PATCH 3/5] update provider type --- packages/utils/src/providers.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/utils/src/providers.ts b/packages/utils/src/providers.ts index 0fa4f5311..8c56cc48b 100644 --- a/packages/utils/src/providers.ts +++ b/packages/utils/src/providers.ts @@ -150,7 +150,7 @@ const getCeloProvider = (): providers.Provider => { }; const isEip1559Supported = async ( - provider: providers.Web3Provider, + provider: providers.JsonRpcProvider, logger?: LogTypes.ILogger, ): Promise => { try { From a96b09fc08b145972aa9f971b4c092e4030a8ea9 Mon Sep 17 00:00:00 2001 From: Leo Sollier Date: Wed, 18 Jan 2023 13:30:22 +0100 Subject: [PATCH 4/5] fix build --- packages/utils/src/providers.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/utils/src/providers.ts b/packages/utils/src/providers.ts index 8c56cc48b..1022a3955 100644 --- a/packages/utils/src/providers.ts +++ b/packages/utils/src/providers.ts @@ -150,11 +150,11 @@ const getCeloProvider = (): providers.Provider => { }; const isEip1559Supported = async ( - provider: providers.JsonRpcProvider, + provider: providers.Provider | providers.JsonRpcProvider, logger?: LogTypes.ILogger, ): Promise => { try { - await provider.send('eth_feeHistory', [1, 'latest', []]); + await (provider as providers.JsonRpcProvider).send('eth_feeHistory', [1, 'latest', []]); return true; } catch (e) { logger && From b4e6a03fc4cdc40ce1a801a7c840088374a85c16 Mon Sep 17 00:00:00 2001 From: Leo Sollier Date: Wed, 18 Jan 2023 14:00:26 +0100 Subject: [PATCH 5/5] fix imports --- packages/ethereum-storage/src/ethereum-tx-submitter.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/ethereum-storage/src/ethereum-tx-submitter.ts b/packages/ethereum-storage/src/ethereum-tx-submitter.ts index 14766da44..947ddb932 100644 --- a/packages/ethereum-storage/src/ethereum-tx-submitter.ts +++ b/packages/ethereum-storage/src/ethereum-tx-submitter.ts @@ -4,7 +4,7 @@ import { requestHashSubmitterArtifact } from '@requestnetwork/smart-contracts'; import { RequestOpenHashSubmitter } from '@requestnetwork/smart-contracts/types'; import { SubmitterProps } from './ethereum-storage-ethers'; import { GasFeeDefiner } from './gas-fee-definer'; -import { SimpleLogger } from '@requestnetwork/utils'; +import { SimpleLogger, isEip1559Supported } from '@requestnetwork/utils'; /** * Handles the submission of a hash on the request HashSubmitter contract @@ -32,7 +32,7 @@ export class EthereumTransactionSubmitter { } async initialize(): Promise { - this.enableEip1559 = await Utils.isEip1559Supported(this.provider, this.logger); + this.enableEip1559 = await isEip1559Supported(this.provider, this.logger); } /** Submits an IPFS hash, with fees according to `ipfsSize` */