diff --git a/packages/ethereum-storage/src/ethereum-tx-submitter.ts b/packages/ethereum-storage/src/ethereum-tx-submitter.ts index 672d4503f8..947ddb9322 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,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 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 344126d209..fed72e576f 100644 --- a/packages/smart-contracts/scripts-create2/contract-setup/adminTasks.ts +++ b/packages/smart-contracts/scripts-create2/contract-setup/adminTasks.ts @@ -4,7 +4,12 @@ import * as artifacts from '../../src/lib'; import { BigNumber, Overrides, Wallet } from 'ethers'; import { HardhatRuntimeEnvironmentExtended } from '../types'; import { parseUnits } from 'ethers/lib/utils'; -import { estimateGasFees, getCeloProvider, getDefaultProvider } from '@requestnetwork/utils'; +import { + estimateGasFees, + isEip1559Supported, + getCeloProvider, + getDefaultProvider, +} from '@requestnetwork/utils'; // Fees: 0.5% export const REQUEST_SWAP_FEES = 5; @@ -249,12 +254,9 @@ export const getSignerAndGasFees = async ( } const signer = new hre.ethers.Wallet(hre.config.xdeploy.signer).connect(provider); - let txOverrides; - try { - txOverrides = await estimateGasFees({ provider }); - } catch (err) { - txOverrides = {}; - } + const txOverrides = (await isEip1559Supported(provider)) + ? await estimateGasFees({ provider }) + : {}; return { signer, diff --git a/packages/smart-contracts/scripts-create2/xdeployer.ts b/packages/smart-contracts/scripts-create2/xdeployer.ts index c9026faf4a..c7861c0d70 100644 --- a/packages/smart-contracts/scripts-create2/xdeployer.ts +++ b/packages/smart-contracts/scripts-create2/xdeployer.ts @@ -1,7 +1,12 @@ import { HardhatRuntimeEnvironmentExtended, IDeploymentParams, IDeploymentResult } from './types'; import { requestDeployer } from '../src/lib'; import { Overrides } from 'ethers'; -import { estimateGasFees, getCeloProvider, getDefaultProvider } from '@requestnetwork/utils'; +import { + estimateGasFees, + getCeloProvider, + getDefaultProvider, + isEip1559Supported, +} from '@requestnetwork/utils'; const ZERO_ETH_INPUT = 0; @@ -71,17 +76,12 @@ export const xdeploy = async ( let receipt = undefined; let deployed = false; let error = undefined; - let txOverrides: Overrides; + let txOverrides: Overrides = {}; - try { + if (await isEip1559Supported(provider, console)) { txOverrides = await 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/index.ts b/packages/utils/src/index.ts index 2d28f79455..36b60a4adb 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -42,6 +42,7 @@ export { export { setProviderFactory, initPaymentDetectionApiKeys, + isEip1559Supported, getDefaultProvider, getCeloProvider, networkRpcs, diff --git a/packages/utils/src/providers.ts b/packages/utils/src/providers.ts index 93c2e73b68..1022a39555 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,26 @@ const getCeloProvider = (): providers.Provider => { return provider; }; +const isEip1559Supported = async ( + provider: providers.Provider | providers.JsonRpcProvider, + logger?: LogTypes.ILogger, +): Promise => { + try { + await (provider as providers.JsonRpcProvider).send('eth_feeHistory', [1, 'latest', []]); + return true; + } catch (e) { + logger && + logger.warn( + 'This RPC provider does not support the "eth_feeHistory" method: switching to legacy gas price', + ); + return false; + } +}; + export { setProviderFactory, initPaymentDetectionApiKeys, + isEip1559Supported, getDefaultProvider, getCeloProvider, networkRpcs,