Skip to content

Commit dc44c45

Browse files
authored
Merge pull request #15 from lidofinance/feat/hardfork
feat: use hardfork from env variable
2 parents 34454a6 + e80de51 commit dc44c45

File tree

8 files changed

+90
-117
lines changed

8 files changed

+90
-117
lines changed

.github/workflows/build_and_push_image.yml

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ jobs:
2929
username: ${{ github.repository_owner }}
3030
password: ${{ secrets.GITHUB_TOKEN }}
3131

32+
# Mainnet
33+
3234
- name: Build and push mainnet fork image
3335
uses: docker/build-push-action@v6.1.0
3436
with:
@@ -39,16 +41,6 @@ jobs:
3941
build-args: |
4042
HH_CONFIG=hardhat.config.mainnet-fork.ts
4143
42-
- name: Build and push hoodi fork image
43-
uses: docker/build-push-action@v6.1.0
44-
with:
45-
context: .
46-
platforms: linux/amd64,linux/arm64
47-
push: true
48-
tags: ghcr.io/lidofinance/hardhat-node:${{ github.ref_name }}-hoodi-fork
49-
build-args: |
50-
HH_CONFIG=hardhat.config.hoodi-fork.ts
51-
5244
- name: Build and push mainnet scratch image
5345
uses: docker/build-push-action@v6.1.0
5446
with:
@@ -59,12 +51,14 @@ jobs:
5951
build-args: |
6052
HH_CONFIG=hardhat.config.mainnet-scratch.ts
6153
62-
- name: Build and push mainnet shanghai image
54+
# Hoodi
55+
56+
- name: Build and push hoodi fork image
6357
uses: docker/build-push-action@v6.1.0
6458
with:
6559
context: .
6660
platforms: linux/amd64,linux/arm64
6761
push: true
68-
tags: ghcr.io/lidofinance/hardhat-node:${{ github.ref_name }}-shanghai
62+
tags: ghcr.io/lidofinance/hardhat-node:${{ github.ref_name }}-hoodi-fork
6963
build-args: |
70-
HH_CONFIG=hardhat.config.mainnet-fork-shanghai.ts
64+
HH_CONFIG=hardhat.config.hoodi-fork.ts

base.config.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import { HardhatUserConfig } from "hardhat/config";
2+
3+
const baseConfig: HardhatUserConfig = {
4+
solidity: "0.8.25",
5+
mocha: { timeout: 5 * 60 * 1000 },
6+
keystores: { path: "keystores" },
7+
networks: {
8+
hardhat: {
9+
initialBaseFeePerGas: 0,
10+
accounts: { count: 30 },
11+
},
12+
},
13+
};
14+
15+
export const createConfig = (
16+
overrides: Partial<HardhatUserConfig> = {}
17+
): HardhatUserConfig => ({
18+
...baseConfig,
19+
...overrides,
20+
networks: {
21+
...baseConfig.networks,
22+
...overrides.networks,
23+
hardhat: {
24+
...baseConfig.networks?.hardhat,
25+
...overrides.networks?.hardhat,
26+
},
27+
},
28+
});

hardhat.config.hoodi-fork.ts

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,15 @@
11
import "dotenv/config";
2-
import { HardhatUserConfig } from "hardhat/config";
3-
import "@nomicfoundation/hardhat-ethers";
42

53
import networks from "./src/networks";
64

7-
const config: HardhatUserConfig = {
8-
solidity: "0.8.25",
5+
import { createConfig } from "./base.config";
6+
7+
export default createConfig({
98
networks: {
109
hardhat: {
1110
...networks.maybeChainIdConfig(560048),
12-
initialBaseFeePerGas: 0,
13-
accounts: {
14-
count: 30,
15-
},
16-
forking: {
17-
url: networks.rpcUrl("eth", "hoodi"),
18-
},
11+
...networks.hardforkConfig(),
12+
forking: { url: networks.rpcUrl("eth", "hoodi") },
1913
},
2014
},
21-
mocha: {
22-
timeout: 5 * 60 * 1000,
23-
},
24-
keystores: {
25-
path: "keystores",
26-
},
27-
};
28-
export default config;
15+
});

hardhat.config.mainnet-fork-shanghai.ts

Lines changed: 0 additions & 29 deletions
This file was deleted.

hardhat.config.mainnet-fork.ts

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,15 @@
11
import "dotenv/config";
2-
import { HardhatUserConfig } from "hardhat/config";
3-
import "@nomicfoundation/hardhat-ethers";
42

53
import networks from "./src/networks";
64

7-
const config: HardhatUserConfig = {
8-
solidity: "0.8.25",
5+
import { createConfig } from "./base.config";
6+
7+
export default createConfig({
98
networks: {
109
hardhat: {
1110
...networks.maybeChainIdConfig(1),
12-
initialBaseFeePerGas: 0,
13-
accounts: {
14-
count: 30,
15-
},
16-
forking: {
17-
url: networks.rpcUrl("eth", "mainnet"),
18-
},
11+
...networks.hardforkConfig(),
12+
forking: { url: networks.rpcUrl("eth", "mainnet") },
1913
},
2014
},
21-
mocha: {
22-
timeout: 5 * 60 * 1000,
23-
},
24-
keystores: {
25-
path: "keystores",
26-
},
27-
};
28-
export default config;
15+
});

hardhat.config.mainnet-scratch.ts

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,14 @@
11
import "dotenv/config";
2-
import { HardhatUserConfig } from "hardhat/config";
3-
import "@nomicfoundation/hardhat-ethers";
2+
43
import networks from "./src/networks";
54

6-
const config: HardhatUserConfig = {
7-
solidity: "0.8.25",
5+
import { createConfig } from "./base.config";
6+
7+
export default createConfig({
88
networks: {
99
hardhat: {
1010
...networks.maybeChainIdConfig(1),
11-
initialBaseFeePerGas: 0,
12-
accounts: {
13-
count: 30,
14-
},
11+
...networks.hardforkConfig(),
1512
},
1613
},
17-
};
18-
export default config;
14+
});

src/env.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@ function DONT_SET_CHAIN_ID() {
3434
return Boolean(process.env["DONT_SET_CHAIN_ID"]);
3535
}
3636

37+
function HARDFORK() {
38+
return process.env["HARDFORK"] || "cancun";
39+
}
40+
3741
export default {
3842
ETH_RPC_URL,
3943
ARB_RPC_URL,
@@ -44,4 +48,5 @@ export default {
4448
LOCAL_OPT_RPC_URL,
4549
ALCHEMY_TOKEN,
4650
DONT_SET_CHAIN_ID,
51+
HARDFORK,
4752
};

src/networks.ts

Lines changed: 32 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3,36 +3,13 @@ import env from "./env";
33
export type ChainName = "eth" | "arb" | "opt";
44
export type NetworkName = "mainnet" | "hoodi";
55

6-
/**
7-
* Returns the RPC url for the given network name
8-
*/
9-
function url(chainName: ChainName, networkName: NetworkName): string {
10-
const url =
11-
rpcUrl(chainName) ||
12-
infuraUrl(chainName, networkName) ||
13-
alchemyUrl(chainName, networkName);
14-
if (!url) {
15-
throw new Error(
16-
"RPC node credential was not provided. Please, set one of RPC_URL, INFURA_TOKEN or ALCHEMY_TOKEN env variables"
17-
);
18-
}
19-
return url;
20-
}
21-
22-
function rpcUrl(chainName: ChainName) {
6+
function getChainRpcUrl(chainName: ChainName) {
237
if (chainName === "eth") return env.ETH_RPC_URL();
248
if (chainName === "arb") return env.ARB_RPC_URL();
259
if (chainName === "opt") return env.OPT_RPC_URL();
2610
}
2711

28-
function maybeChainIdConfig(chainId: number) {
29-
if (env.DONT_SET_CHAIN_ID()) {
30-
return {};
31-
}
32-
return { chainId };
33-
}
34-
35-
function infuraUrl(chainName: ChainName, networkName: NetworkName) {
12+
function getInfuraUrl(chainName: ChainName, networkName: NetworkName) {
3613
const infuraToken = env.INFURA_TOKEN();
3714
const infuraNetworkDomain =
3815
chainName === "eth" && networkName === "mainnet"
@@ -43,14 +20,42 @@ function infuraUrl(chainName: ChainName, networkName: NetworkName) {
4320
: undefined;
4421
}
4522

46-
function alchemyUrl(chainName: ChainName, networkName: NetworkName) {
23+
function getAlchemyUrl(chainName: ChainName, networkName: NetworkName) {
4724
const alchemyToken = env.ALCHEMY_TOKEN();
4825
return alchemyToken
4926
? `https://${chainName}-${networkName}.g.alchemy.com/v2/${alchemyToken}`
5027
: undefined;
5128
}
5229

30+
/**
31+
* Returns the RPC url for the given network name
32+
*/
33+
function rpcUrl(chainName: ChainName, networkName: NetworkName): string {
34+
const url =
35+
getChainRpcUrl(chainName) ||
36+
getInfuraUrl(chainName, networkName) ||
37+
getAlchemyUrl(chainName, networkName);
38+
if (!url) {
39+
throw new Error(
40+
"RPC node credential was not provided. Please, set one of RPC_URL, INFURA_TOKEN or ALCHEMY_TOKEN env variables"
41+
);
42+
}
43+
return url;
44+
}
45+
46+
function maybeChainIdConfig(chainId: number) {
47+
if (env.DONT_SET_CHAIN_ID()) {
48+
return {};
49+
}
50+
return { chainId };
51+
}
52+
53+
function hardforkConfig() {
54+
return { hardfork: env.HARDFORK() };
55+
}
56+
5357
export default {
54-
rpcUrl: url,
58+
rpcUrl,
59+
hardforkConfig,
5560
maybeChainIdConfig,
5661
};

0 commit comments

Comments
 (0)