Skip to content

Commit 9e8521b

Browse files
refactor: modify deploy script
1 parent 4f36d02 commit 9e8521b

File tree

3 files changed

+140
-90
lines changed

3 files changed

+140
-90
lines changed

hardhat.config.ts

Lines changed: 111 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,117 @@ const {
2727
BSCSCAN_API_KEY,
2828
ARBISCAN_API_KEY,
2929
OPTIMISTIC_ETHERSCAN_API_KEY,
30-
ZKSYNC_EXPLORER_API_KEY
30+
ZKSYNC_EXPLORER_API_KEY,
31+
NETWORK_NAME
3132
} = process.env;
3233

34+
if (!NETWORK_NAME) {
35+
console.error(
36+
'Error: No network specified. Please specify the network name in environment variable "NETWORK_NAME"'
37+
);
38+
process.exit(1);
39+
}
40+
41+
interface NetworkConfig {
42+
url: string;
43+
accounts: string[];
44+
}
45+
46+
interface ApiKeyConfig {
47+
[key: string]: string;
48+
}
49+
50+
const networkConfigs: { [key: string]: NetworkConfig } = {
51+
eth: {
52+
url: `https://ethereum-rpc.publicnode.com`,
53+
accounts: [`${PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT}`]
54+
},
55+
hteth: {
56+
url: `https://rpc.holesky.ethpandaops.io/`,
57+
accounts: [`${PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT_BACKUP}`]
58+
},
59+
polygon: {
60+
url: `https://polygon-rpc.com/`,
61+
accounts: [`${PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT}`]
62+
},
63+
tpolygon: {
64+
// https://polygon-amoy.g.alchemy.com
65+
url: `https://polygon-amoy-bor-rpc.publicnode.com`,
66+
accounts: [`${PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT}`]
67+
},
68+
bsc: {
69+
url: `https://bsc-dataseed1.binance.org/`,
70+
accounts: [`${PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT}`]
71+
},
72+
tbsc: {
73+
url: `https://data-seed-prebsc-1-s1.binance.org:8545/`,
74+
accounts: [`${PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT}`]
75+
},
76+
tarbeth: {
77+
url: `${QUICKNODE_ARBITRUM_SEPOLIA_API_KEY}`,
78+
accounts: [
79+
`${PRIVATE_KEY_FOR_V1_WALLET_CONTRACT_DEPLOYMENT}`,
80+
`${PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT_BACKUP}`
81+
]
82+
},
83+
arbeth: {
84+
url: `${QUICKNODE_ARBITRUM_ONE_API_KEY}`,
85+
accounts: [
86+
`${PRIVATE_KEY_FOR_V1_WALLET_CONTRACT_DEPLOYMENT}`,
87+
`${PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT_BACKUP}`
88+
]
89+
},
90+
topeth: {
91+
url: `${QUICKNODE_OPTIMISM_SEPOLIA_API_KEY}`,
92+
accounts: [
93+
`${PRIVATE_KEY_FOR_V1_WALLET_CONTRACT_DEPLOYMENT}`,
94+
`${PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT_BACKUP}`
95+
]
96+
},
97+
opeth: {
98+
url: `${QUICKNODE_OPTIMISM_API_KEY}`,
99+
accounts: [
100+
`${PRIVATE_KEY_FOR_V1_WALLET_CONTRACT_DEPLOYMENT}`,
101+
`${PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT_BACKUP}`
102+
]
103+
},
104+
tzketh: {
105+
url: `${QUICKNODE_ZKSYNC_SEPOLIA_API_KEY}`,
106+
accounts: [`${PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT}`]
107+
}
108+
};
109+
110+
const apiKeyConfigs: ApiKeyConfig = {
111+
eth: `${ETHERSCAN_API_KEY}`,
112+
hteth: `${ETHERSCAN_API_KEY}`,
113+
polygon: `${POLYGONSCAN_API_KEY}`,
114+
tpolygon: `${POLYGONSCAN_API_KEY}`,
115+
bsc: `${BSCSCAN_API_KEY}`,
116+
tbsc: `${BSCSCAN_API_KEY}`,
117+
arbeth: `${ARBISCAN_API_KEY}`,
118+
tarbeth: `${ARBISCAN_API_KEY}`,
119+
opeth: `${OPTIMISTIC_ETHERSCAN_API_KEY}`,
120+
topeth: `${OPTIMISTIC_ETHERSCAN_API_KEY}`,
121+
zksync: `${ZKSYNC_EXPLORER_API_KEY}`,
122+
tzksync: `${ZKSYNC_EXPLORER_API_KEY}`
123+
};
124+
125+
const getNetworkConfig = (network: string): NetworkConfig => {
126+
return networkConfigs[network];
127+
};
128+
129+
const getApiKeyConfig = (network: string): string => {
130+
return apiKeyConfigs[network];
131+
};
132+
133+
const createDynamicNetworkConfig = (
134+
network: string
135+
): { [key: string]: NetworkConfig } => {
136+
const dynamicNetwork: { [key: string]: NetworkConfig } = {};
137+
dynamicNetwork[network] = getNetworkConfig(network);
138+
return dynamicNetwork;
139+
};
140+
33141
const config: HardhatUserConfig = {
34142
solidity: {
35143
compilers: [
@@ -65,89 +173,14 @@ const config: HardhatUserConfig = {
65173
})),
66174
loggingEnabled: false
67175
},
68-
eth: {
69-
url: `https://ethereum-rpc.publicnode.com`,
70-
accounts: [`${PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT}`]
71-
},
72-
hteth: {
73-
url: `https://rpc.holesky.ethpandaops.io/`,
74-
accounts: [`${PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT_BACKUP}`]
75-
},
76-
matic: {
77-
url: `https://polygon-rpc.com/`,
78-
accounts: [`${PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT}`]
79-
},
80-
tmatic: {
81-
// https://polygon-amoy.g.alchemy.com
82-
url: `https://polygon-amoy-bor-rpc.publicnode.com`,
83-
accounts: [`${PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT}`]
84-
},
85-
bsc: {
86-
url: `https://bsc-dataseed1.binance.org/`,
87-
accounts: [`${PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT}`]
88-
},
89-
tbsc: {
90-
url: `https://data-seed-prebsc-1-s1.binance.org:8545/`,
91-
accounts: [`${PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT}`]
92-
},
93-
tarbeth: {
94-
url: `${QUICKNODE_ARBITRUM_SEPOLIA_API_KEY}`,
95-
accounts: [
96-
`${PRIVATE_KEY_FOR_V1_WALLET_CONTRACT_DEPLOYMENT}`,
97-
`${PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT_BACKUP}`
98-
]
99-
},
100-
arbeth: {
101-
url: `${QUICKNODE_ARBITRUM_ONE_API_KEY}`,
102-
accounts: [
103-
`${PRIVATE_KEY_FOR_V1_WALLET_CONTRACT_DEPLOYMENT}`,
104-
`${PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT_BACKUP}`
105-
]
106-
},
107-
topeth: {
108-
url: `${QUICKNODE_OPTIMISM_SEPOLIA_API_KEY}`,
109-
accounts: [
110-
`${PRIVATE_KEY_FOR_V1_WALLET_CONTRACT_DEPLOYMENT}`,
111-
`${PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT_BACKUP}`
112-
]
113-
},
114-
opeth: {
115-
url: `${QUICKNODE_OPTIMISM_API_KEY}`,
116-
accounts: [
117-
`${PRIVATE_KEY_FOR_V1_WALLET_CONTRACT_DEPLOYMENT}`,
118-
`${PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT_BACKUP}`
119-
]
120-
},
121-
tzketh: {
122-
url: `${QUICKNODE_ZKSYNC_SEPOLIA_API_KEY}`,
123-
accounts: [`${PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT}`]
124-
}
176+
...createDynamicNetworkConfig(NETWORK_NAME.toLowerCase())
125177
},
126178
gasReporter: {
127179
enabled: process.env.REPORT_GAS !== undefined,
128180
currency: 'USD'
129181
},
130182
etherscan: {
131-
apiKey: {
132-
//ethereum
133-
mainnet: `${ETHERSCAN_API_KEY}`,
134-
goerli: `${ETHERSCAN_API_KEY}`,
135-
holesky: `${ETHERSCAN_API_KEY}`,
136-
//polygon
137-
polygon: `${POLYGONSCAN_API_KEY}`,
138-
polygonAmoy: `${POLYGONSCAN_API_KEY}`,
139-
bscTestnet: `${BSCSCAN_API_KEY}`,
140-
bsc: `${BSCSCAN_API_KEY}`,
141-
// arbitrum
142-
arbitrumOne: `${ARBISCAN_API_KEY}`,
143-
arbitrumSepolia: `${ARBISCAN_API_KEY}`,
144-
// optimism
145-
optimisticEthereum: `${OPTIMISTIC_ETHERSCAN_API_KEY}`,
146-
optimisticSepolia: `${OPTIMISTIC_ETHERSCAN_API_KEY}`,
147-
// zksync
148-
zksync: `${ZKSYNC_EXPLORER_API_KEY}`,
149-
zksyncSepolia: `${ZKSYNC_EXPLORER_API_KEY}`
150-
},
183+
apiKey: getApiKeyConfig(NETWORK_NAME.toLowerCase()),
151184
customChains: [
152185
{
153186
network: 'holesky',

scripts/deploy.ts

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,29 @@ async function main() {
1111
forwarderFactory: ''
1212
};
1313

14+
const version = await new Promise((resolve) => {
15+
console.log(
16+
'In case of new coins like arbeth, opeth, zketh, use version v4. \n' +
17+
'If we have to deploy contracts for the older coins like eth, avax, polygon, use version v1 or v2'
18+
);
19+
const stdin = process.openStdin();
20+
console.log('Choose the version (v1/v2/v4): ');
21+
stdin.addListener('data', function (d) {
22+
const answer = d.toString().trim();
23+
if (answer.toLowerCase() === 'v1') {
24+
resolve('v1');
25+
} else if (answer.toLowerCase() === 'v2') {
26+
resolve('v2');
27+
} else if (answer.toLowerCase() === 'v2') {
28+
resolve('v4');
29+
} else {
30+
console.error('Please select the correct version');
31+
process.exit(1);
32+
}
33+
stdin.removeAllListeners('data');
34+
});
35+
});
36+
1437
const feeData = await ethers.provider.getFeeData();
1538
const gasParams = {
1639
gasPrice: feeData.gasPrice
@@ -20,8 +43,12 @@ async function main() {
2043

2144
let walletImplementationContractName = '';
2245
let walletFactoryContractName = 'WalletFactory';
23-
let forwarderContractName = 'Forwarder';
24-
let forwarderFactoryContractName = 'ForwarderFactory';
46+
let forwarderContractName =
47+
version === 'v1' || version === 'v2' ? 'Forwarder' : 'ForwarderV4';
48+
let forwarderFactoryContractName =
49+
version === 'v1' || version === 'v2'
50+
? 'ForwarderFactory'
51+
: 'ForwarderFactoryV4';
2552
let contractPath = `contracts/WalletSimple.sol:WalletSimple`;
2653
const chainId = await deployer.getChainId();
2754
switch (chainId) {
@@ -31,44 +58,34 @@ async function main() {
3158
//hteth
3259
case 17000:
3360
walletImplementationContractName = 'WalletSimple';
34-
forwarderContractName = 'ForwarderV4';
35-
forwarderFactoryContractName = 'ForwarderFactoryV4';
3661
contractPath = `contracts/${walletImplementationContractName}.sol:${walletImplementationContractName}`;
3762
break;
3863
//matic
3964
case 137:
4065
//tmatic
4166
case 80002:
4267
walletImplementationContractName = 'WalletSimple';
43-
forwarderContractName = 'ForwarderV4';
44-
forwarderFactoryContractName = 'ForwarderFactoryV4';
4568
contractPath = `contracts/${walletImplementationContractName}.sol:${walletImplementationContractName}`;
4669
break;
4770
// bsc
4871
case 56:
4972
// tbsc
5073
case 97:
5174
walletImplementationContractName = 'WalletSimple';
52-
forwarderContractName = 'ForwarderV4';
53-
forwarderFactoryContractName = 'ForwarderFactoryV4';
5475
contractPath = `contracts/${walletImplementationContractName}.sol:${walletImplementationContractName}`;
5576
break;
5677
// arbeth
5778
case 42161:
5879
// tarbeth
5980
case 421614:
6081
walletImplementationContractName = 'WalletSimple';
61-
forwarderContractName = 'Forwarder';
62-
forwarderFactoryContractName = 'ForwarderFactory';
6382
contractPath = `contracts/${walletImplementationContractName}.sol:${walletImplementationContractName}`;
6483
break;
6584
// opeth
6685
case 10:
6786
// topeth
6887
case 11155420:
6988
walletImplementationContractName = 'WalletSimple';
70-
forwarderContractName = 'Forwarder';
71-
forwarderFactoryContractName = 'ForwarderFactory';
7289
contractPath = `contracts/${walletImplementationContractName}.sol:${walletImplementationContractName}`;
7390
break;
7491
// zketh

scripts/deployDynamic.ts

Whitespace-only changes.

0 commit comments

Comments
 (0)