11import { HardhatRuntimeEnvironment } from "hardhat/types" ;
22import { DeployFunction } from "hardhat-deploy/types" ;
33import getContractAddress from "../../deploy-helpers/getContractAddress" ;
4+ import { ethers } from "hardhat" ;
45
56enum SenderChains {
67 ARBITRUM = 42161 ,
78 ARBITRUM_SEPOLIA = 421614 ,
89 HARDHAT = 31337 ,
910}
11+
1012const paramsByChainId = {
1113 ARBITRUM : {
1214 epochPeriod : 3600 , // 1 hours
@@ -16,41 +18,65 @@ const paramsByChainId = {
1618 } ,
1719 HARDHAT : {
1820 epochPeriod : 600 , // 10 minutes
21+ routerAddress : ethers . constants . AddressZero ,
1922 } ,
2023} ;
2124
22- // TODO: use deterministic deployments
2325const deployInbox : DeployFunction = async ( hre : HardhatRuntimeEnvironment ) => {
2426 const { ethers, deployments, getNamedAccounts, getChainId, config } = hre ;
2527 const { deploy } = deployments ;
26- const chainId = Number ( await getChainId ( ) ) ;
27- const { providers } = ethers ;
2828
29- const deployer = ( await getNamedAccounts ( ) ) . deployer ;
30- console . log ( "deployer: %s" , deployer ) ;
29+ // fallback to hardhat node signers on local network
30+ const deployer = ( await getNamedAccounts ( ) ) . deployer ?? ( await hre . ethers . getSigners ( ) ) [ 0 ] . address ;
31+ const chainId = Number ( await getChainId ( ) ) ;
3132
3233 const { epochPeriod } = paramsByChainId [ SenderChains [ chainId ] ] ;
3334
34- const routerNetworks = {
35- ARBITRUM : config . networks . mainnet ,
36- ARBITRUM_SEPOLIA : config . networks . sepolia ,
37- HARDHAT : config . networks . localhost ,
38- } ;
35+ // Hack to predict the deployment address on the sender chain.
36+ // TODO: use deterministic deployments
3937
4038 // ----------------------------------------------------------------------------------------------
39+ const hardhatDeployer = async ( ) => {
40+ let nonce = await ethers . provider . getTransactionCount ( deployer ) ;
41+
42+ const arbitrumBridgeAddress = getContractAddress ( deployer , nonce + 5 ) ;
43+
44+ const arbSysMock = await deploy ( "ArbSysMock" , {
45+ from : deployer ,
46+ contract : "ArbSysMockWithBridge" ,
47+ args : [ arbitrumBridgeAddress ] ,
48+ log : true ,
49+ } ) ;
4150
42- const routerChainProvider = new providers . JsonRpcProvider ( routerNetworks [ SenderChains [ chainId ] ] . url ) ;
43- let nonceRouter = await routerChainProvider . getTransactionCount ( deployer ) ;
51+ const routerAddress = getContractAddress ( deployer , nonce + 6 ) ;
52+ console . log ( "calculated future router for nonce %d: %s" , nonce + 6 , routerAddress ) ;
4453
45- const routerAddress = getContractAddress ( deployer , nonceRouter ) ;
46- console . log ( "calculated future router for nonce %d: %s" , nonceRouter , routerAddress ) ;
54+ const receiverGateway = await deployments . get ( "ArbToGnosisReceiverGateway" ) ;
55+ const veaInbox = await deploy ( "VeaInboxArbToGnosis" , {
56+ from : deployer ,
57+ contract : "VeaInboxArbToGnosisMock" ,
58+ args : [ epochPeriod , routerAddress , arbSysMock . address ] ,
59+ log : true ,
60+ } ) ;
4761
48- await deploy ( "VeaInboxArbToGnosis" + ( chainId === 42161 ? "" : "Testnet" ) , {
49- contract : "VeaInboxArbToGnosis" ,
50- from : deployer ,
51- args : [ epochPeriod , routerAddress ] ,
52- log : true ,
53- } ) ;
62+ await deploy ( "ArbToGnosisSenderGateway" , {
63+ from : deployer ,
64+ contract : "SenderGatewayMock" ,
65+ args : [ veaInbox . address , receiverGateway . address ] ,
66+ gasLimit : 4000000 ,
67+ log : true ,
68+ } ) ;
69+ } ;
70+
71+ // ----------------------------------------------------------------------------------------------
72+ const liveDeployer = async ( ) => { } ;
73+
74+ // ----------------------------------------------------------------------------------------------
75+ if ( chainId === 31337 ) {
76+ await hardhatDeployer ( ) ;
77+ } else {
78+ await liveDeployer ( ) ;
79+ }
5480} ;
5581
5682deployInbox . tags = [ "ArbToGnosisInbox" ] ;
0 commit comments