Skip to content

Commit 0dc67c1

Browse files
authored
chore: add utility function to check eip1559 compliance (#1041)
1 parent ae5862a commit 0dc67c1

File tree

5 files changed

+40
-25
lines changed

5 files changed

+40
-25
lines changed

packages/ethereum-storage/src/ethereum-tx-submitter.ts

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { requestHashSubmitterArtifact } from '@requestnetwork/smart-contracts';
44
import { RequestOpenHashSubmitter } from '@requestnetwork/smart-contracts/types';
55
import { SubmitterProps } from './ethereum-storage-ethers';
66
import { GasFeeDefiner } from './gas-fee-definer';
7-
import { SimpleLogger } from '@requestnetwork/utils';
7+
import { SimpleLogger, isEip1559Supported } from '@requestnetwork/utils';
88

99
/**
1010
* Handles the submission of a hash on the request HashSubmitter contract
@@ -32,14 +32,7 @@ export class EthereumTransactionSubmitter {
3232
}
3333

3434
async initialize(): Promise<void> {
35-
try {
36-
await this.provider.send('eth_feeHistory', [1, 'latest', []]);
37-
} catch (e) {
38-
this.logger.warn(
39-
'This RPC provider does not support the "eth_feeHistory" method: switching to legacy gas price',
40-
);
41-
this.enableEip1559 = false;
42-
}
35+
this.enableEip1559 = await isEip1559Supported(this.provider, this.logger);
4336
}
4437

4538
/** Submits an IPFS hash, with fees according to `ipfsSize` */

packages/smart-contracts/scripts-create2/contract-setup/adminTasks.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,12 @@ import * as artifacts from '../../src/lib';
44
import { BigNumber, Overrides, Wallet } from 'ethers';
55
import { HardhatRuntimeEnvironmentExtended } from '../types';
66
import { parseUnits } from 'ethers/lib/utils';
7-
import { estimateGasFees, getCeloProvider, getDefaultProvider } from '@requestnetwork/utils';
7+
import {
8+
estimateGasFees,
9+
isEip1559Supported,
10+
getCeloProvider,
11+
getDefaultProvider,
12+
} from '@requestnetwork/utils';
813

914
// Fees: 0.5%
1015
export const REQUEST_SWAP_FEES = 5;
@@ -249,12 +254,9 @@ export const getSignerAndGasFees = async (
249254
}
250255
const signer = new hre.ethers.Wallet(hre.config.xdeploy.signer).connect(provider);
251256

252-
let txOverrides;
253-
try {
254-
txOverrides = await estimateGasFees({ provider });
255-
} catch (err) {
256-
txOverrides = {};
257-
}
257+
const txOverrides = (await isEip1559Supported(provider))
258+
? await estimateGasFees({ provider })
259+
: {};
258260

259261
return {
260262
signer,

packages/smart-contracts/scripts-create2/xdeployer.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
import { HardhatRuntimeEnvironmentExtended, IDeploymentParams, IDeploymentResult } from './types';
22
import { requestDeployer } from '../src/lib';
33
import { Overrides } from 'ethers';
4-
import { estimateGasFees, getCeloProvider, getDefaultProvider } from '@requestnetwork/utils';
4+
import {
5+
estimateGasFees,
6+
getCeloProvider,
7+
getDefaultProvider,
8+
isEip1559Supported,
9+
} from '@requestnetwork/utils';
510

611
const ZERO_ETH_INPUT = 0;
712

@@ -71,17 +76,12 @@ export const xdeploy = async (
7176
let receipt = undefined;
7277
let deployed = false;
7378
let error = undefined;
74-
let txOverrides: Overrides;
79+
let txOverrides: Overrides = {};
7580

76-
try {
81+
if (await isEip1559Supported(provider, console)) {
7782
txOverrides = await estimateGasFees({ provider });
78-
const gasLimit = hre.config.xdeploy.gasLimit;
79-
txOverrides.gasLimit = gasLimit;
80-
} catch (e) {
81-
// NOTE: On some networks utils.estimateGasFees do not work
82-
txOverrides = {};
83-
console.log('Cannot estimate gasLimit');
8483
}
84+
txOverrides.gasLimit = hre.config.xdeploy.gasLimit;
8585

8686
try {
8787
const createReceipt = await (

packages/utils/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ export {
4242
export {
4343
setProviderFactory,
4444
initPaymentDetectionApiKeys,
45+
isEip1559Supported,
4546
getDefaultProvider,
4647
getCeloProvider,
4748
networkRpcs,

packages/utils/src/providers.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { LogTypes } from '@requestnetwork/types';
2+
13
import { providers, constants } from 'ethers';
24

35
type ProviderFactory = (network: string | undefined) => providers.Provider | string;
@@ -147,9 +149,26 @@ const getCeloProvider = (): providers.Provider => {
147149
return provider;
148150
};
149151

152+
const isEip1559Supported = async (
153+
provider: providers.Provider | providers.JsonRpcProvider,
154+
logger?: LogTypes.ILogger,
155+
): Promise<boolean> => {
156+
try {
157+
await (provider as providers.JsonRpcProvider).send('eth_feeHistory', [1, 'latest', []]);
158+
return true;
159+
} catch (e) {
160+
logger &&
161+
logger.warn(
162+
'This RPC provider does not support the "eth_feeHistory" method: switching to legacy gas price',
163+
);
164+
return false;
165+
}
166+
};
167+
150168
export {
151169
setProviderFactory,
152170
initPaymentDetectionApiKeys,
171+
isEip1559Supported,
153172
getDefaultProvider,
154173
getCeloProvider,
155174
networkRpcs,

0 commit comments

Comments
 (0)