Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor deployment scripts #48

Open
wants to merge 9 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 55 additions & 11 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,11 +1,55 @@
DEPLOY_RPC_URL=https://sepolia.drpc.org
STARKNET_CORE_ADDRESS=0xE2Bb56ee936fd6433DC0F6e7e3b8365C906AA057
L2_RECIPIENT_ADDRESS=
AGGREGATORS_FACTORY_ADDRESS=
ETHERSCAN_API_KEY=
PRIVATE_KEY=
PARENT_HASH_FETCHER=

OFFLINE=true
ALCHEMY_URL=https://eth-goerli.g.alchemy.com/v2/
ALCHEMY_URL_MAINNET=https://eth-goerli.g.alchemy.com/v2/
# ETHEREUM

L1_PRIVATE_KEY=
L1_ETHERSCAN_API_KEY=

# mainnet
L1_MAINNET_CHAINID=1
L1_MAINNET_RPC=
L1_MAINNET_AGGREGATORS_FACTORY=0x5C189aEdEcBc07830B64Ec8CAE51ce38E4365286

# sepolia
L1_SEPOLIA_CHAINID=11155111
L1_SEPOLIA_RPC=
L1_SEPOLIA_AGGREGATORS_FACTORY=0x70C61dd17b7207B450Cb7DeDC92C1707A07a1213

# ZKSYNC

ZKSYNC_PRIVATE_KEY=
ZKSYNC_ETHERSCAN_API_KEY=

# sepolia
ZKSYNC_SEPOLIA_CHAINID=300
ZKSYNC_SEPOLIA_RPC=https://sepolia.era.zksync.dev
ZKSYNC_SEPOLIA_MAILBOX=0x9A6DE0f62Aa270A8bCB1e2610078650D539B1Ef9
ZKSYNC_SEPOLIA_VERIFIER=https://explorer.sepolia.era.zksync.dev/contract_verification

# OPTIMISM

OPTIMISM_PRIVATE_KEY=
OPTIMISM_ETHERSCAN_API_KEY=

# sepolia
OPTIMISM_SEPOLIA_CHAINID=11155420
OPTIMISM_SEPOLIA_RPC=
OPTIMISM_SEPOLIA_ETHERSCAN_API_URL=https://api-sepolia-optimistic.etherscan.io/api
OPTIMISM_SEPOLIA_ETHERSCAN_BROWSER_URL=https://sepolia-optimism.etherscan.io/
OPTIMISM_SEPOLIA_CROSS_DOMAIN_MESSENGER=0x58Cc85b8D04EA49cC6DBd3CbFFd00B4B8D6cb3ef

# ARBITRUM

ARBITRUM_PRIVATE_KEY=
ARBITRUM_ETHERSCAN_API_KEY=

# sepolia
ARBITRUM_SEPOLIA_CHAINID=421614
ARBITRUM_SEPOLIA_RPC=
ARBITRUM_SEPOLIA_ETHERSCAN_API_URL=https://api-sepolia.arbiscan.io/api
ARBITRUM_SEPOLIA_ETHERSCAN_BROWSER_URL=https://sepolia.arbiscan.io/
ARBITRUM_SEPOLIA_INBOX=0xaAe29B0366299461418F5324a79Afc425BE5ae21

# STARKNET

STARKNET_SEPOLIA_CORE_ADDRESS=0xE2Bb56ee936fd6433DC0F6e7e3b8365C906AA057
STARKNET_MAINNET_CORE_ADDRESS=0xc662c410C0ECf747543f5bA90660f6ABeBD9C8c4
STARKNET_RECIPIENT_ADDRESS=
21 changes: 21 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,24 @@ broadcast

artifacts-zk/
cache-zk/

node_modules
.env

# Hardhat files
/cache
/artifacts
cache_hardhat/
cache_hardhat-zk/
deployments-zk/

# TypeChain files
/typechain
/typechain-types

# solidity-coverage files
/coverage
/coverage.json

# Hardhat Ignition default folder for deployments against a local node
ignition/deployments/chain-31337
14 changes: 13 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ forge install

# Running tests requires .env to be configured
forge test

# Compile with hardhat
npx hardhat compile
```

## Contracts Overview
Expand All @@ -49,7 +52,16 @@ However, the contracts are designed to be chain-agnostic and can be used with an

## Deployment

`pnpm run deploy`
`pnpm run deploy:CONNECTION`

Possible connections:

- `11155111_to_11155111` - sepolia -> sepolia
- `11155111_to_300` - sepolia -> zkSyncSepolia
- `11155111_to_11155420` - sepolia -> op sepolia
- `11155111_to_421614` - sepolia -> arbitrum sepolia

If not all contracts were verified, run `pnpm run verify:CONNECTION`.

## Documentation

Expand Down
6 changes: 2 additions & 4 deletions foundry.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ remappings = [
"forge-std/=lib/forge-std/src/",
"@openzeppelin/=lib/openzeppelin-contracts/",
"solidity-mmr/=lib/solidity-mmr/src/",
"@optimism/libraries=src/lib/external",
"@optimism/libraries/=src/lib/external/",
]
out = 'out'
libs = ['lib']
Expand All @@ -18,6 +18,4 @@ evm_version = "shanghai"
sepolia = "https://sepolia.drpc.org"

[etherscan]
goerli = { key = "${ETHERSCAN_API_KEY}" }

# See more config options https://github.com/foundry-rs/foundry/tree/master/config
zksync_sepolia = { key = "${OPTIMISM_ETHERSCAN_API_KEY}", url = "https://explorer.sepolia.era.zksync.dev/contract_verification", chain = "300" }
97 changes: 97 additions & 0 deletions hardhat.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
import { HardhatUserConfig } from "hardhat/config";
import "@nomicfoundation/hardhat-toolbox";
import "@matterlabs/hardhat-zksync-deploy";
import "@matterlabs/hardhat-zksync-solc";
import "@nomicfoundation/hardhat-foundry";
import "@matterlabs/hardhat-zksync-verify";
import "@nomicfoundation/hardhat-verify";
import { config as dotEnvConfig } from "dotenv";

dotEnvConfig();

const config: HardhatUserConfig = {
zksolc: {},
solidity: {
version: "0.8.20",
settings: {
viaIR: true,
optimizer: {
enabled: true,
details: {
yulDetails: {
optimizerSteps: "u",
},
},
},
},
},
paths: {
sources: "src",
deployPaths: "script",
},
etherscan: {
apiKey: {
sepolia: process.env.L1_ETHERSCAN_API_KEY as string,
zkSyncSepolia: process.env.ZKSYNC_ETHERSCAN_API_KEY as string,
optimismSepolia: process.env.OPTIMISM_ETHERSCAN_API_KEY as string,
arbitrumSepolia: process.env.ARBITRUM_ETHERSCAN_API_KEY as string,
apeChainSepolia: process.env.APE_CHAIN_ETHERSCAN_API_KEY as string,
},
customChains: [
{
network: "optimismSepolia",
chainId: parseInt(process.env.OPTIMISM_SEPOLIA_CHAINID as string),
urls: {
apiURL: process.env.OPTIMISM_SEPOLIA_ETHERSCAN_API_URL as string,
browserURL: process.env
.OPTIMISM_SEPOLIA_ETHERSCAN_BROWSER_URL as string,
},
},
{
network: "arbitrumSepolia",
chainId: parseInt(process.env.ARBITRUM_SEPOLIA_CHAINID as string),
urls: {
apiURL: process.env.ARBITRUM_SEPOLIA_ETHERSCAN_API_URL as string,
browserURL: process.env
.ARBITRUM_SEPOLIA_ETHERSCAN_BROWSER_URL as string,
},
},
{
network: "apeChainSepolia",
chainId: parseInt(process.env.APE_CHAIN_SEPOLIA_CHAINID as string),
urls: {
apiURL: process.env.APE_CHAIN_SEPOLIA_ETHERSCAN_API_URL as string,
browserURL: process.env
.APE_CHAIN_SEPOLIA_ETHERSCAN_BROWSER_URL as string,
},
},
],
},
defaultNetwork: "zkSyncSepolia",
networks: {
sepolia: {
url: process.env.L1_SEPOLIA_RPC,
accounts: [process.env.L1_PRIVATE_KEY as string],
},
zkSyncSepolia: {
url: process.env.ZKSYNC_SEPOLIA_RPC,
accounts: [process.env.ZKSYNC_PRIVATE_KEY as string],
ethNetwork: process.env.L1_SEPOLIA_RPC,
zksync: true,
verifyURL: process.env.ZKSYNC_SEPOLIA_VERIFIER,
},
optimismSepolia: {
url: process.env.OPTIMISM_SEPOLIA_RPC,
accounts: [process.env.OPTIMISM_PRIVATE_KEY as string],
},
arbitrumSepolia: {
url: process.env.ARBITRUM_SEPOLIA_RPC,
accounts: [process.env.ARBITRUM_PRIVATE_KEY as string],
},
apeChainSepolia: {
url: process.env.APE_CHAIN_SEPOLIA_RPC,
accounts: [process.env.APE_CHAIN_PRIVATE_KEY as string],
},
},
};
export default config;
30 changes: 24 additions & 6 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,23 +6,41 @@
"license": "GPL-3.0",
"scripts": {
"preinstall": "npx only-allow pnpm",
"deploy:NativeParentHashesFetcher": "source .env; forge script script/Deploy_NativeParentHashesFetcher.s.sol:Deploy_NativeParentHashesFetcher --rpc-url $DEPLOY_RPC_URL --broadcast --verify -vvvv",
"deploy:L1ToL1MessagesSender": "source .env; forge script script/Deploy_L1ToL1MessagesSender.s.sol:Deploy_L1ToL1MessagesSender --rpc-url $DEPLOY_RPC_URL --broadcast --verify -vvvv",
"deploy:L1ToStarknetMessagesSender": "source .env; forge script script/Deploy_L1ToStarknetMessagesSender.s.sol:Deploy_L1ToStarknetMessagesSender --rpc-url $DEPLOY_RPC_URL --broadcast --verify -vvvv"
"deploy:11155111_to_300": "bash script/Deploy_11155111_to_300.sh",
"deploy:11155111_to_11155111": "npx hardhat run script/Deploy_11155111_to_11155111.ts --network sepolia",
"deploy:11155111_to_11155420": "bash script/Deploy_11155111_to_11155420.sh",
"deploy:11155111_to_421614": "bash script/Deploy_11155111_to_421614.sh",
"deploy:11155111_to_33111": "bash script/Deploy_11155111_to_33111.sh",
"verify:11155111_to_300": "bash script/Verify_11155111_to_300.sh",
"verify:11155111_to_11155111": "bash script/Verify_11155111_to_11155111.sh",
"verify:11155111_to_11155420": "bash script/Verify_11155111_to_11155420.sh",
"verify:11155111_to_421614": "bash script/Verify_11155111_to_421614.sh",
"verify:11155111_to_33111": "bash script/Verify_11155111_to_33111.sh"
},
"dependencies": {
"@accumulators/hashers": "^4.2.3",
"@accumulators/memory": "^4.2.3",
"@accumulators/merkle-mountain-range": "^4.2.3",
"@nomicfoundation/hardhat-toolbox": "^5.0.0",
"axios": "^1.6.2",
"ethers": "^5.7.2",
"rlp": "2.2.7"
},
"devDependencies": {
"@matterlabs/hardhat-zksync-deploy": "^1.5.0",
"@matterlabs/hardhat-zksync-solc": "^1.2.1",
"@matterlabs/hardhat-zksync-verify": "^1.6.0",
"@matterlabs/zksync-contracts": "^0.6.1",
"@nomicfoundation/hardhat-foundry": "^1.1.2",
"@nomicfoundation/hardhat-verify": "^2.0.9",
"custom-env": "^2.0.2",
"dotenv": "^16.3.1",
"ethers": "^6.13.2",
"hardhat": "^2.22.8",
"only-allow": "^1.2.1",
"prettier": "^3.1.1",
"prettier-plugin-solidity": "^1.2.0"
"prettier-plugin-solidity": "^1.2.0",
"ts-node": "^10.9.2",
"typescript": "^5.5.4",
"zksync-ethers": "^6.11.2"
}
}
}
Loading