1+ #! /bin/sh
2+
3+ # extract values from config file
4+ config_file=" ./volume/config.toml"
5+ CHAIN_ID_L1=$( grep -E " ^CHAIN_ID_L1 =" " $config_file " | sed ' s/ *= */=/' | cut -d' =' -f2-)
6+ CHAIN_ID_L2=$( grep -E " ^CHAIN_ID_L2 =" " $config_file " | sed ' s/ *= */=/' | cut -d' =' -f2-)
7+ RPC_URI_L1=$( grep -E " ^RPC_URI_L1 =" " $config_file " | sed ' s/ *= */=/' | cut -d' =' -f2- | tr -d ' "' )
8+ RPC_URI_L2=$( grep -E " ^RPC_URI_L2 =" " $config_file " | sed ' s/ *= */=/' | cut -d' =' -f2- | tr -d ' "' )
9+ VERIFIER_TYPE_L1=$( grep -E " ^VERIFIER_TYPE_L1 =" " $config_file " | sed ' s/ *= */=/' | cut -d' =' -f2- | tr -d ' "' )
10+ VERIFIER_TYPE_L2=$( grep -E " ^VERIFIER_TYPE_L2 =" " $config_file " | sed ' s/ *= */=/' | cut -d' =' -f2- | tr -d ' "' )
11+ EXPLORER_URI_L1=$( grep -E " ^EXPLORER_URI_L1 =" " $config_file " | sed ' s/ *= */=/' | cut -d' =' -f2- | tr -d ' "' )
12+ EXPLORER_URI_L2=$( grep -E " ^EXPLORER_URI_L2 =" " $config_file " | sed ' s/ *= */=/' | cut -d' =' -f2- | tr -d ' "' )
13+ EXPLORER_API_KEY_L1=$( grep -E " ^EXPLORER_API_KEY_L1 =" " $config_file " | sed ' s/ *= */=/' | cut -d' =' -f2- | tr -d ' "' )
14+ EXPLORER_API_KEY_L2=$( grep -E " ^EXPLORER_API_KEY_L2 =" " $config_file " | sed ' s/ *= */=/' | cut -d' =' -f2- | tr -d ' "' )
15+ ALTERNATIVE_GAS_TOKEN_ENABLED=$( grep -E " ^ALTERNATIVE_GAS_TOKEN_ENABLED =" " $config_file " | sed ' s/ *= */=/' | cut -d' =' -f2-)
16+ TEST_ENV_MOCK_FINALIZE_ENABLED=$( grep -E " ^TEST_ENV_MOCK_FINALIZE_ENABLED =" " $config_file " | sed ' s/ *= */=/' | cut -d' =' -f2-)
17+
18+ # extract contract name and address
19+ extract_contract_info () {
20+ contract_name=$( cut -d " =" -f 1 <<< " $line" | tr -d ' "' )
21+ contract_addr=$( cut -d " =" -f 2 <<< " $line" | tr -d ' "' | tr -d ' ' )
22+ }
23+
24+ get_source_code_name () {
25+ # specially handle the case where alternative gas token is enabled
26+ if [[ " $ALTERNATIVE_GAS_TOKEN_ENABLED " == " true" && " $1 " =~ ^(L1_SCROLL_MESSENGER_IMPLEMENTATION_ADDR| L2_TX_FEE_VAULT_ADDR)$ ]]; then
27+ case " $1 " in
28+ L1_SCROLL_MESSENGER_IMPLEMENTATION_ADDR) echo L1ScrollMessengerNonETH ;;
29+ L2_TX_FEE_VAULT_ADDR) echo L2TxFeeVaultWithGasToken ;;
30+ * )
31+ esac
32+ # specially handle the case where mock finalize is enabled
33+ elif [[ " $TEST_ENV_MOCK_FINALIZE_ENABLED " == " true" && " $1 " =~ ^(L1_SCROLL_CHAIN_IMPLEMENTATION_ADDR)$ ]]; then
34+ case " $1 " in
35+ L1_SCROLL_CHAIN_IMPLEMENTATION_ADDR) echo ScrollChainMockFinalize ;;
36+ * )
37+ esac
38+ else
39+ case " $1 " in
40+ L1_WETH_ADDR) echo WrappedEther ;;
41+ L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR) echo EmptyContract ;;
42+ L1_PROXY_ADMIN_ADDR) echo ProxyAdminSetOwner ;;
43+ L1_WHITELIST_ADDR) echo Whitelist ;;
44+ L1_SCROLL_CHAIN_PROXY_ADDR) echo TransparentUpgradeableProxy ;;
45+ L1_SCROLL_MESSENGER_PROXY_ADDR) echo TransparentUpgradeableProxy ;;
46+ L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION_ADDR) echo EnforcedTxGateway ;;
47+ L1_ENFORCED_TX_GATEWAY_PROXY_ADDR) echo TransparentUpgradeableProxy ;;
48+ L1_ZKEVM_VERIFIER_V2_ADDR) echo ZkEvmVerifierV2 ;;
49+ L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR ) echo MultipleVersionRollupVerifierSetOwner ;;
50+ L1_MESSAGE_QUEUE_IMPLEMENTATION_ADDR) echo L1MessageQueueWithGasPriceOracle ;;
51+ L1_MESSAGE_QUEUE_PROXY_ADDR) echo TransparentUpgradeableProxy ;;
52+ L1_SCROLL_CHAIN_IMPLEMENTATION_ADDR) echo ScrollChain ;;
53+ L1_GATEWAY_ROUTER_IMPLEMENTATION_ADDR) echo L1GatewayRouter ;;
54+ L1_GATEWAY_ROUTER_PROXY_ADDR) echo TransparentUpgradeableProxy ;;
55+ L1_ETH_GATEWAY_PROXY_ADDR) echo TransparentUpgradeableProxy ;;
56+ L1_WETH_GATEWAY_PROXY_ADDR) echo TransparentUpgradeableProxy ;;
57+ L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR) echo TransparentUpgradeableProxy ;;
58+ L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR) echo TransparentUpgradeableProxy ;;
59+ L1_ERC721_GATEWAY_PROXY_ADDR) echo TransparentUpgradeableProxy ;;
60+ L1_ERC1155_GATEWAY_PROXY_ADDR) echo TransparentUpgradeableProxy ;;
61+ L2_MESSAGE_QUEUE_ADDR) echo L2MessageQueue ;;
62+ L1_GAS_PRICE_ORACLE_ADDR) echo L1GasPriceOracle ;;
63+ L1_GAS_TOKEN_GATEWAY_IMPLEMENTATION_ADDR) echo L1GasTokenGateway ;;
64+ L1_GAS_TOKEN_GATEWAY_PROXY_ADDR) echo TransparentUpgradeableProxy ;;
65+ L1_WRAPPED_TOKEN_GATEWAY_ADDR) echo L1WrappedTokenGateway ;;
66+ L2_WHITELIST_ADDR) echo Whitelist ;;
67+ L2_WETH_ADDR) echo WrappedEther ;;
68+ L2_TX_FEE_VAULT_ADDR) echo L2TxFeeVault ;;
69+ L2_PROXY_ADMIN_ADDR) echo ProxyAdminSetOwner ;;
70+ L2_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR) echo EmptyContract ;;
71+ L2_SCROLL_MESSENGER_PROXY_ADDR) echo TransparentUpgradeableProxy ;;
72+ L2_ETH_GATEWAY_PROXY_ADDR) echo TransparentUpgradeableProxy ;;
73+ L2_WETH_GATEWAY_PROXY_ADDR) echo TransparentUpgradeableProxy ;;
74+ L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR) echo TransparentUpgradeableProxy ;;
75+ L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR) echo TransparentUpgradeableProxy ;;
76+ L2_ERC721_GATEWAY_PROXY_ADDR) echo TransparentUpgradeableProxy ;;
77+ L2_ERC1155_GATEWAY_PROXY_ADDR) echo TransparentUpgradeableProxy ;;
78+ L2_SCROLL_STANDARD_ERC20_ADDR) echo ScrollStandardERC20 ;;
79+ L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR) echo ScrollStandardERC20FactorySetOwner ;;
80+ L1_SCROLL_MESSENGER_IMPLEMENTATION_ADDR) echo L1ScrollMessenger ;;
81+ L1_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR) echo L1StandardERC20Gateway ;;
82+ L1_ETH_GATEWAY_IMPLEMENTATION_ADDR) echo L1ETHGateway ;;
83+ L1_WETH_GATEWAY_IMPLEMENTATION_ADDR) echo L1WETHGateway ;;
84+ L1_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR) echo L1CustomERC20Gateway ;;
85+ L1_ERC721_GATEWAY_IMPLEMENTATION_ADDR) echo L1ERC721Gateway ;;
86+ L1_ERC1155_GATEWAY_IMPLEMENTATION_ADDR ) echo L1ERC1155Gateway ;;
87+ L2_SCROLL_MESSENGER_IMPLEMENTATION_ADDR) echo L2ScrollMessenger ;;
88+ L2_GATEWAY_ROUTER_IMPLEMENTATION_ADDR) echo L2GatewayRouter ;;
89+ L2_GATEWAY_ROUTER_PROXY_ADDR) echo TransparentUpgradeableProxy ;;
90+ L2_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR) echo L2StandardERC20Gateway ;;
91+ L2_ETH_GATEWAY_IMPLEMENTATION_ADDR) echo L2ETHGateway ;;
92+ L2_WETH_GATEWAY_IMPLEMENTATION_ADDR) echo L2WETHGateway ;;
93+ L2_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR) echo L2CustomERC20Gateway ;;
94+ L2_ERC721_GATEWAY_IMPLEMENTATION_ADDR) echo L2ERC721Gateway ;;
95+ L2_ERC1155_GATEWAY_IMPLEMENTATION_ADDR) echo L2ERC1155Gateway ;;
96+ * ) echo " " ;; # default: return void string
97+ esac
98+ fi
99+ }
100+
101+ # read the file line by line
102+ while IFS= read -r line; do
103+ extract_contract_info " $line "
104+
105+ # get contracts deployment layer
106+ if [[ " $contract_name " =~ ^L1 ]]; then
107+ layer=" L1"
108+ elif [[ " $contract_name " =~ ^L2 ]]; then
109+ layer=" L2"
110+ # specially handle contract_name L1_GAS_PRICE_ORACLE_ADDR
111+ if [[ " $contract_name " == " L1_GAS_PRICE_ORACLE_ADDR" ]]; then
112+ layer=" L1"
113+ fi
114+ else
115+ echo " wrong contract name, not starts with L1 or L2, contract_name: $contract_name "
116+ continue
117+ fi
118+
119+ source_code_name=$( get_source_code_name $contract_name )
120+
121+ # skip if source_code_name or contract_addr is empty
122+ if [[ -z $source_code_name || -z $contract_addr ]]; then
123+ echo " empty source_code_name: $source_code_name or contract_addr: $contract_addr "
124+ continue
125+ fi
126+
127+ # verify contract
128+ echo " "
129+ echo " verifing contract $contract_name with address $contract_addr on $layer "
130+ EXTRA_PARAMS=" "
131+ if [[ " $layer " == " L1" ]]; then
132+ if [[ " $VERIFIER_TYPE_L1 " == " etherscan" ]]; then
133+ EXTRA_PARAMS=" --api-key $EXPLORER_API_KEY_L1 "
134+ elif [[ " $VERIFIER_TYPE_L1 " == " blockscout" ]]; then
135+ EXTRA_PARAMS=" --verifier-url ${EXPLORER_URI_L1} /api/ --verifier $VERIFIER_TYPE_L1 "
136+ elif [[ " $VERIFIER_TYPE_L1 " == " sourcify" ]]; then
137+ EXTRA_PARAMS=" --api-key $EXPLORER_API_KEY_L1 --verifier-url $EXPLORER_URI_L1 --verifier $VERIFIER_TYPE_L1 "
138+ fi
139+ forge verify-contract $contract_addr $source_code_name --rpc-url $RPC_URI_L1 --chain-id $CHAIN_ID_L1 --watch --guess-constructor-args --skip-is-verified-check $EXTRA_PARAMS
140+ elif [[ " $layer " == " L2" ]]; then
141+ if [[ " $VERIFIER_TYPE_L2 " == " etherscan" ]]; then
142+ EXTRA_PARAMS=" --api-key $EXPLORER_API_KEY_L2 "
143+ elif [[ " $VERIFIER_TYPE_L2 " == " blockscout" ]]; then
144+ EXTRA_PARAMS=" --verifier-url ${EXPLORER_URI_L2} /api/ --verifier $VERIFIER_TYPE_L2 "
145+ elif [[ " $VERIFIER_TYPE_L2 " == " sourcify" ]]; then
146+ EXTRA_PARAMS=" --api-key $EXPLORER_API_KEY_L2 --verifier-url $EXPLORER_URI_L2 --verifier $VERIFIER_TYPE_L2 "
147+ fi
148+ forge verify-contract $contract_addr $source_code_name --rpc-url $RPC_URI_L2 --chain-id $CHAIN_ID_L2 --watch --guess-constructor-args --skip-is-verified-check $EXTRA_PARAMS
149+ fi
150+ done < ./volume/config-contracts.toml
0 commit comments