mirror of
https://github.com/scroll-tech/scroll.git
synced 2026-01-14 16:37:56 -05:00
Co-authored-by: Haichen Shen <shenhaichen@gmail.com> Co-authored-by: Thegaram <th307q@gmail.com> Co-authored-by: colin <102356659+colinlyguo@users.noreply.github.com>
104 lines
6.4 KiB
Markdown
104 lines
6.4 KiB
Markdown
# Deployment scripts of Scroll contracts
|
|
|
|
## Deployment using Hardhat
|
|
|
|
The scripts should run as below sequence:
|
|
|
|
```bash
|
|
export layer1=l1geth # change to actual network name
|
|
export layer2=l2geth # change to actual network name
|
|
export owner=0x0000000000000000000000000000000000000000 # change to actual owner
|
|
|
|
# deploy contracts in layer 1
|
|
npx hardhat --network $layer1 run scripts/deploy_proxy_admin.ts
|
|
npx hardhat --network $layer1 run scripts/deploy_scroll_chain.ts
|
|
env CONTRACT_NAME=L1ScrollMessenger npx hardhat run --network $layer1 scripts/deploy_proxy_contract.ts
|
|
env CONTRACT_NAME=L1GatewayRouter npx hardhat run --network $layer1 scripts/deploy_proxy_contract.ts
|
|
env CONTRACT_NAME=L1StandardERC20Gateway npx hardhat run --network $layer1 scripts/deploy_proxy_contract.ts
|
|
env CONTRACT_NAME=L1CustomERC20Gateway npx hardhat run --network $layer1 scripts/deploy_proxy_contract.ts
|
|
env CONTRACT_NAME=L1ERC721Gateway npx hardhat run --network $layer1 scripts/deploy_proxy_contract.ts
|
|
env CONTRACT_NAME=L1ERC1155Gateway npx hardhat run --network $layer1 scripts/deploy_proxy_contract.ts
|
|
env CONTRACT_NAME=L1ETHGateway npx hardhat run --network $layer1 scripts/deploy_proxy_contract.ts
|
|
env CONTRACT_NAME=L1WETHGateway npx hardhat run --network $layer1 scripts/deploy_proxy_contract.ts
|
|
|
|
# deploy contracts in layer 2, note: l2_messenger is predeployed
|
|
npx hardhat --network $layer2 run scripts/deploy_proxy_admin.ts
|
|
npx hardhat --network $layer2 run scripts/deploy_l2_messenger.ts
|
|
npx hardhat --network $layer2 run scripts/deploy_l2_token_factory.ts
|
|
env CONTRACT_NAME=L2GatewayRouter npx hardhat run --network $layer2 scripts/deploy_proxy_contract.ts
|
|
env CONTRACT_NAME=L2StandardERC20Gateway npx hardhat run --network $layer2 scripts/deploy_proxy_contract.ts
|
|
env CONTRACT_NAME=L2CustomERC20Gateway npx hardhat run --network $layer2 scripts/deploy_proxy_contract.ts
|
|
env CONTRACT_NAME=L2ERC721Gateway npx hardhat run --network $layer2 scripts/deploy_proxy_contract.ts
|
|
env CONTRACT_NAME=L2ERC1155Gateway npx hardhat run --network $layer2 scripts/deploy_proxy_contract.ts
|
|
env CONTRACT_NAME=L2ETHGateway npx hardhat run --network $layer2 scripts/deploy_proxy_contract.ts
|
|
env CONTRACT_NAME=L2WETHGateway npx hardhat run --network $layer2 scripts/deploy_proxy_contract.ts
|
|
|
|
# initalize contracts in layer 1, should set proper bash env variables first
|
|
npx hardhat --network $layer1 run scripts/initialize_l1_erc20_gateway.ts
|
|
npx hardhat --network $layer1 run scripts/initialize_l1_gateway_router.ts
|
|
npx hardhat --network $layer1 run scripts/initialize_scroll_chain.ts
|
|
npx hardhat --network $layer1 run scripts/initialize_l1_messenger.ts
|
|
npx hardhat --network $layer1 run scripts/initialize_l1_custom_erc20_gateway.ts
|
|
npx hardhat --network $layer1 run scripts/initialize_l1_erc1155_gateway.ts
|
|
npx hardhat --network $layer1 run scripts/initialize_l1_erc721_gateway.ts
|
|
|
|
# initalize contracts in layer 2, should set proper bash env variables first
|
|
npx hardhat --network $layer2 run scripts/initialize_l2_erc20_gateway.ts
|
|
npx hardhat --network $layer2 run scripts/initialize_l2_gateway_router.ts
|
|
npx hardhat --network $layer2 run scripts/initialize_l2_custom_erc20_gateway.ts
|
|
npx hardhat --network $layer2 run scripts/initialize_l2_erc1155_gateway.ts
|
|
npx hardhat --network $layer2 run scripts/initialize_l2_erc721_gateway.ts
|
|
npx hardhat --network $layer2 run scripts/initialize_l2_token_factory.ts
|
|
|
|
# transfer ownership in layer 1
|
|
env CONTRACT_NAME=ProxyAdmin CONTRACT_OWNER=$owner npx hardhat run --network $layer1 scripts/transfer_ownership.ts
|
|
env CONTRACT_NAME=L1ScrollMessenger CONTRACT_OWNER=$owner npx hardhat run --network $layer1 scripts/transfer_ownership.ts
|
|
env CONTRACT_NAME=ZKRollup CONTRACT_OWNER=$owner npx hardhat run --network $layer1 scripts/transfer_ownership.ts
|
|
env CONTRACT_NAME=L1GatewayRouter CONTRACT_OWNER=$owner npx hardhat run --network $layer1 scripts/transfer_ownership.ts
|
|
env CONTRACT_NAME=L1CustomERC20Gateway CONTRACT_OWNER=$owner npx hardhat run --network $layer1 scripts/transfer_ownership.ts
|
|
env CONTRACT_NAME=L1ERC721Gateway CONTRACT_OWNER=$owner npx hardhat run --network $layer1 scripts/transfer_ownership.ts
|
|
env CONTRACT_NAME=L1ERC1155Gateway CONTRACT_OWNER=$owner npx hardhat run --network $layer1 scripts/transfer_ownership.ts
|
|
# transfer ownership in layer 2
|
|
env CONTRACT_NAME=ProxyAdmin CONTRACT_OWNER=$owner npx hardhat run --network $layer2 scripts/transfer_ownership.ts
|
|
env CONTRACT_NAME=L2ScrollMessenger CONTRACT_OWNER=$owner npx hardhat run --network $layer2 scripts/transfer_ownership.ts
|
|
env CONTRACT_NAME=L2GatewayRouter CONTRACT_OWNER=$owner npx hardhat run --network $layer2 scripts/transfer_ownership.ts
|
|
env CONTRACT_NAME=L2CustomERC20Gateway CONTRACT_OWNER=$owner npx hardhat run --network $layer2 scripts/transfer_ownership.ts
|
|
env CONTRACT_NAME=L2ERC721Gateway CONTRACT_OWNER=$owner npx hardhat run --network $layer2 scripts/transfer_ownership.ts
|
|
env CONTRACT_NAME=L2ERC1155Gateway CONTRACT_OWNER=$owner npx hardhat run --network $layer2 scripts/transfer_ownership.ts
|
|
```
|
|
|
|
Reference testnet [run_deploy_contracts.sh](https://github.com/scroll-tech/testnet/blob/staging/run_deploy_contracts.sh) for details.
|
|
|
|
## Deployment using Foundry
|
|
|
|
Note: The Foundry scripts take parameters like `CHAIN_ID_L2` and `L1_ZK_ROLLUP_PROXY_ADDR` as environment variables.
|
|
|
|
```bash
|
|
# allexport
|
|
$ set -a
|
|
|
|
$ cat .env
|
|
CHAIN_ID_L2="5343541"
|
|
SCROLL_L1_RPC="http://localhost:8543"
|
|
SCROLL_L2_RPC="http://localhost:8545"
|
|
L1_DEPLOYER_PRIVATE_KEY="0x0000000000000000000000000000000000000000000000000000000000000001"
|
|
L2_DEPLOYER_PRIVATE_KEY="0x0000000000000000000000000000000000000000000000000000000000000002"
|
|
L1_ROLLUP_OPERATOR_ADDR="0x1111111111111111111111111111111111111111"
|
|
|
|
$ source .env
|
|
|
|
# Deploy L1 contracts
|
|
# Note: We extract the logged addresses as environment variables.
|
|
$ OUTPUT=$(forge script scripts/foundry/DeployL1BridgeContracts.s.sol:DeployL1BridgeContracts --rpc-url $SCROLL_L1_RPC --broadcast); echo $OUTPUT
|
|
$ echo "$OUTPUT" | grep -Eo "(L1)_.*" > .env.l1_addresses
|
|
$ source .env.l1_addresses
|
|
|
|
# Deploy L2 contracts
|
|
$ OUTPUT=$(forge script scripts/foundry/DeployL2BridgeContracts.s.sol:DeployL2BridgeContracts --rpc-url $SCROLL_L2_RPC --broadcast); echo $OUTPUT
|
|
$ echo "$OUTPUT" | grep -Eo "(L2)_.*" > .env.l2_addresses
|
|
$ source .env.l2_addresses
|
|
|
|
# Initialize contracts
|
|
$ forge script scripts/foundry/InitializeL1BridgeContracts.s.sol:InitializeL1BridgeContracts --rpc-url $SCROLL_L1_RPC --broadcast
|
|
$ forge script scripts/foundry/InitializeL2BridgeContracts.s.sol:InitializeL2BridgeContracts --rpc-url $SCROLL_L2_RPC --broadcast
|
|
``` |