Skip to content

Commit 513403d

Browse files
Coin 685 test v1 forwarder contract deployment
2 parents 7ede5be + 578b590 commit 513403d

File tree

5 files changed

+100
-3
lines changed

5 files changed

+100
-3
lines changed

.github/workflows/deploy_and_release.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ jobs:
1919
MAINNET_PRIVATE_KEY_FOR_CONTRACT_DEPLOYMENT: ${{ secrets.MAINNET_PRIVATE_KEY_FOR_CONTRACT_DEPLOYMENT }}
2020
TESTNET_PRIVATE_KEY_FOR_CONTRACT_DEPLOYMENT: ${{ secrets.TESTNET_PRIVATE_KEY_FOR_CONTRACT_DEPLOYMENT }}
2121
PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT: ${{ secrets.PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT }}
22+
PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT_BACKUP: ${{ secrets.PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT_BACKUP }}
2223
QUICKNODE_ETH_MAINNET_API_KEY: ${{ secrets.QUICKNODE_ETH_MAINNET_API_KEY }}
2324
QUICKNODE_ETH_HOLESKY_API_KEY: ${{ secrets.QUICKNODE_ETH_HOLESKY_API_KEY }}
2425
QUICKNODE_ARBITRUM_SEPOLIA_API_KEY: ${{ secrets.QUICKNODE_ARBITRUM_SEPOLIA_API_KEY }}
@@ -68,6 +69,7 @@ jobs:
6869
MAINNET_PRIVATE_KEY_FOR_CONTRACT_DEPLOYMENT: ${{ secrets.MAINNET_PRIVATE_KEY_FOR_CONTRACT_DEPLOYMENT }}
6970
TESTNET_PRIVATE_KEY_FOR_CONTRACT_DEPLOYMENT: ${{ secrets.TESTNET_PRIVATE_KEY_FOR_CONTRACT_DEPLOYMENT }}
7071
PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT: ${{ secrets.PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT }}
72+
PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT_BACKUP: ${{ secrets.PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT_BACKUP }}
7173
QUICKNODE_ETH_HOLESKY_API_KEY: ${{ secrets.QUICKNODE_ETH_HOLESKY_API_KEY }}
7274
QUICKNODE_ARBITRUM_SEPOLIA_API_KEY: ${{ secrets.QUICKNODE_ARBITRUM_SEPOLIA_API_KEY }}
7375
QUICKNODE_OPTIMISM_SEPOLIA_API_KEY: ${{ secrets.QUICKNODE_OPTIMISM_SEPOLIA_API_KEY }}
@@ -125,6 +127,7 @@ jobs:
125127
MAINNET_PRIVATE_KEY_FOR_CONTRACT_DEPLOYMENT: ${{ secrets.MAINNET_PRIVATE_KEY_FOR_CONTRACT_DEPLOYMENT }}
126128
TESTNET_PRIVATE_KEY_FOR_CONTRACT_DEPLOYMENT: ${{ secrets.TESTNET_PRIVATE_KEY_FOR_CONTRACT_DEPLOYMENT }}
127129
PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT: ${{ secrets.PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT }}
130+
PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT_BACKUP: ${{ secrets.PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT_BACKUP }}
128131
QUICKNODE_ETH_MAINNET_API_KEY: ${{ secrets.QUICKNODE_ETH_MAINNET_API_KEY }}
129132
ETHERSCAN_API_KEY: ${{ secrets.ETHERSCAN_API_KEY }}
130133
ALCHEMY_POLYGON_API_KEY: ${{ secrets.ALCHEMY_POLYGON_API_KEY }}

.github/workflows/push.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ jobs:
2727
MAINNET_PRIVATE_KEY_FOR_CONTRACT_DEPLOYMENT: ${{ secrets.MAINNET_PRIVATE_KEY_FOR_CONTRACT_DEPLOYMENT }}
2828
TESTNET_PRIVATE_KEY_FOR_CONTRACT_DEPLOYMENT: ${{ secrets.TESTNET_PRIVATE_KEY_FOR_CONTRACT_DEPLOYMENT }}
2929
PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT: ${{ secrets.PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT }}
30+
PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT_BACKUP: ${{ secrets.PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT_BACKUP }}
3031
QUICKNODE_ETH_MAINNET_API_KEY: ${{ secrets.QUICKNODE_ETH_MAINNET_API_KEY }}
3132
QUICKNODE_ETH_HOLESKY_API_KEY: ${{ secrets.QUICKNODE_ETH_HOLESKY_API_KEY }}
3233
QUICKNODE_ARBITRUM_SEPOLIA_API_KEY: ${{ secrets.QUICKNODE_ARBITRUM_SEPOLIA_API_KEY }}

hardhat.config.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ const {
1414
TESTNET_PRIVATE_KEY_FOR_CONTRACT_DEPLOYMENT,
1515
PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT,
1616
QUICKNODE_ETH_MAINNET_API_KEY,
17-
QUICKNODE_ETH_HOLESKY_API_KEY,
17+
PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT_BACKUP,
1818
QUICKNODE_ARBITRUM_SEPOLIA_API_KEY,
1919
QUICKNODE_OPTIMISM_SEPOLIA_API_KEY,
2020
QUICKNODE_ARBITRUM_ONE_API_KEY,
@@ -70,7 +70,7 @@ const config: HardhatUserConfig = {
7070
},
7171
hteth: {
7272
url: `https://rpc.holesky.ethpandaops.io/`,
73-
accounts: [`${PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT}`]
73+
accounts: [`${PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT_BACKUP}`]
7474
},
7575
matic: {
7676
url: `https://polygon-mainnet.g.alchemyapi.io/v2/${ALCHEMY_POLYGON_API_KEY}`,

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
},
1111
"scripts": {
1212
"deploy-prod": "hardhat run scripts/deploy.ts --network",
13-
"deploy-test": "hardhat run scripts/deploy.ts --network",
13+
"deploy-test": "hardhat run scripts/deployV1Forwarder.ts --network",
1414
"test": "hardhat test",
1515
"coverage": "hardhat coverage",
1616
"solhint": "./node_modules/.bin/solhint --fix 'contracts/**/*.sol'",

scripts/deployV1Forwarder.ts

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
import { use } from 'chai';
2+
import { ethers } from 'hardhat';
3+
const hre = require('hardhat');
4+
const fs = require('fs');
5+
6+
async function main() {
7+
const output = {
8+
forwarderImplementation: '',
9+
forwarderFactory: ''
10+
};
11+
12+
const feeData = await ethers.provider.getFeeData();
13+
const gasParams = {
14+
gasPrice: feeData.gasPrice
15+
};
16+
17+
const [deployer] = await ethers.getSigners();
18+
19+
let forwarderContractName = 'Forwarder';
20+
let forwarderFactoryContractName = 'ForwarderFactory';
21+
22+
const Forwarder = await ethers.getContractFactory(forwarderContractName);
23+
const forwarder = await Forwarder.deploy(gasParams);
24+
await forwarder.deployed();
25+
output.forwarderImplementation = forwarder.address;
26+
console.log(`${forwarderContractName} deployed at ` + forwarder.address);
27+
28+
const ForwarderFactory = await ethers.getContractFactory(
29+
forwarderFactoryContractName
30+
);
31+
const forwarderFactory = await ForwarderFactory.deploy(
32+
forwarder.address,
33+
gasParams
34+
);
35+
await forwarderFactory.deployed();
36+
output.forwarderFactory = forwarderFactory.address;
37+
console.log(
38+
`${forwarderFactoryContractName} deployed at ` + forwarderFactory.address
39+
);
40+
41+
fs.writeFileSync('output.json', JSON.stringify(output));
42+
43+
// Wait 5 minutes. It takes some time for the etherscan backend to index the transaction and store the contract.
44+
console.log('Waiting for 5 minutes before verifying.....');
45+
await new Promise((r) => setTimeout(r, 1000 * 300));
46+
47+
// We have to wait for a minimum of 10 block confirmations before we can call the etherscan api to verify
48+
await forwarder.deployTransaction.wait(10);
49+
await forwarderFactory.deployTransaction.wait(10);
50+
51+
console.log('Done waiting, verifying');
52+
await verifyContract(forwarderContractName, forwarder.address, []);
53+
await verifyContract(forwarderFactoryContractName, forwarderFactory.address, [
54+
forwarder.address
55+
]);
56+
console.log('Contracts verified');
57+
}
58+
59+
async function verifyContract(
60+
contractName: string,
61+
contractAddress: string,
62+
constructorArguments: string[],
63+
contract?: string
64+
) {
65+
try {
66+
const verifyContractArgs: {
67+
address: string;
68+
constructorArguments: string[];
69+
contract?: string;
70+
} = {
71+
address: contractAddress,
72+
constructorArguments: constructorArguments
73+
};
74+
75+
if (contract) {
76+
verifyContractArgs.contract = contract;
77+
}
78+
79+
await hre.run('verify:verify', verifyContractArgs);
80+
} catch (e) {
81+
// @ts-ignore
82+
// We get a failure API response if the source code has already been uploaded, don't throw in this case.
83+
if (!e.message.includes('Reason: Already Verified')) {
84+
throw e;
85+
}
86+
}
87+
console.log(`Verified ${contractName} on Etherscan!`);
88+
}
89+
90+
main().catch((error) => {
91+
console.error(error);
92+
process.exitCode = 1;
93+
});

0 commit comments

Comments
 (0)