@@ -26,21 +26,24 @@ SCRIPT_DIR="$(dirname "${BASH_SOURCE[0]}")"
2626
2727echo " Deploying all Warm Storage contracts"
2828
29- if [ -z " $RPC_URL " ]; then
30- echo " Error: RPC_URL is not set"
29+ if [ -z " $ETH_RPC_URL " ]; then
30+ echo " Error: ETH_RPC_URL is not set"
3131 exit 1
3232fi
3333
3434# Auto-detect chain ID from RPC
35- CHAIN_ID=$( cast chain-id --rpc-url " $RPC_URL " )
36- if [ -z " $CHAIN_ID " ]; then
37- echo " Error: Failed to detect chain ID from RPC"
38- exit 1
35+ if [ -z " $CHAIN " ]; then
36+ export CHAIN=$( cast chain-id)
37+ if [ -z " $CHAIN " ]; then
38+ echo " Error: Failed to detect chain ID from RPC"
39+ exit 1
40+ fi
3941fi
4042
4143# Set network-specific configuration based on chain ID
42- # See service_contracts/tools/README.md for deployment parameter documentation
43- case " $CHAIN_ID " in
44+ # NOTE: CHALLENGE_FINALITY should always be 150 in production for security.
45+ # Calibnet uses lower values for faster testing and development.
46+ case " $CHAIN " in
4447 " 314159" )
4548 NETWORK_NAME=" calibnet"
4649 # Network-specific addresses for calibnet
@@ -64,12 +67,12 @@ case "$CHAIN_ID" in
6467 echo " Supported networks:"
6568 echo " 314159 - Filecoin Calibration testnet"
6669 echo " 314 - Filecoin mainnet"
67- echo " Detected chain ID: $CHAIN_ID "
70+ echo " Detected chain ID: $CHAIN "
6871 exit 1
6972 ;;
7073esac
7174
72- echo " Detected Chain ID: $CHAIN_ID ($NETWORK_NAME )"
75+ echo " Detected Chain ID: $CHAIN ($NETWORK_NAME )"
7376
7477if [ " $DRY_RUN " != " true" ] && [ -z " $KEYSTORE " ]; then
7578 echo " Error: KEYSTORE is not set (required for actual deployment)"
@@ -172,13 +175,13 @@ if [ "$DRY_RUN" = "true" ]; then
172175 echo " 🧪 Using dummy SessionKeyRegistry address: $SESSION_KEY_REGISTRY_ADDRESS "
173176 fi
174177else
175- if [ -z " $KEYSTORE " ]; then
176- echo " Error: KEYSTORE is not set (required for actual deployment)"
178+ if [ -z " $ETH_KEYSTORE " ]; then
179+ echo " Error: ETH_KEYSTORE is not set (required for actual deployment)"
177180 exit 1
178181 fi
179182
180- ADDR=$( cast wallet address --keystore " $KEYSTORE " --password " $PASSWORD " )
181- NONCE=" $( cast nonce --rpc-url " $RPC_URL " " $ADDR " ) "
183+ ADDR=$( cast wallet address --password " $PASSWORD " )
184+ NONCE=" $( cast nonce " $ADDR " ) "
182185 BROADCAST_FLAG=" --broadcast"
183186 echo " Deploying contracts from address $ADDR "
184187 echo " 🚀 Will deploy and broadcast all transactions"
@@ -203,7 +206,8 @@ if [ "$DRY_RUN" = "true" ]; then
203206 exit 1
204207 fi
205208else
206- VERIFIER_IMPLEMENTATION_ADDRESS=$( forge create --rpc-url " $RPC_URL " --keystore " $KEYSTORE " --password " $PASSWORD " $BROADCAST_FLAG --nonce $NONCE --chain-id $CHAIN_ID lib/pdp/src/PDPVerifier.sol:PDPVerifier | grep " Deployed to" | awk ' {print $3}' )
209+ # forge and cast will read ETH_RPC_URL, ETH_KEYSTORE, PASSWORD, ETH_FROM from the environment
210+ VERIFIER_IMPLEMENTATION_ADDRESS=$( forge create --password " $PASSWORD " $BROADCAST_FLAG --nonce $NONCE lib/pdp/src/PDPVerifier.sol:PDPVerifier | grep " Deployed to" | awk ' {print $3}' )
207211 if [ -z " $VERIFIER_IMPLEMENTATION_ADDRESS " ]; then
208212 echo " Error: Failed to extract PDPVerifier contract address"
209213 exit 1
@@ -222,7 +226,7 @@ if [ "$DRY_RUN" = "true" ]; then
222226 PDP_VERIFIER_ADDRESS=" 0x2345678901234567890123456789012345678901" # Dummy address for dry-run
223227 echo " ✅ PDPVerifier proxy deployment planned"
224228else
225- PDP_VERIFIER_ADDRESS=$( forge create --rpc-url " $RPC_URL " --keystore " $KEYSTORE " -- password " $PASSWORD " $BROADCAST_FLAG --nonce $NONCE --chain-id $CHAIN_ID lib/pdp/src/ERC1967Proxy.sol:MyERC1967Proxy --constructor-args $VERIFIER_IMPLEMENTATION_ADDRESS $INIT_DATA | grep " Deployed to" | awk ' {print $3}' )
229+ PDP_VERIFIER_ADDRESS=$( forge create --password " $PASSWORD " $BROADCAST_FLAG --nonce $NONCE lib/pdp/src/ERC1967Proxy.sol:MyERC1967Proxy --constructor-args $VERIFIER_IMPLEMENTATION_ADDRESS $INIT_DATA | grep " Deployed to" | awk ' {print $3}' )
226230 if [ -z " $PDP_VERIFIER_ADDRESS " ]; then
227231 echo " Error: Failed to extract PDPVerifier proxy address"
228232 exit 1
@@ -244,7 +248,7 @@ if [ "$DRY_RUN" = "true" ]; then
244248 exit 1
245249 fi
246250else
247- PAYMENTS_CONTRACT_ADDRESS=$( forge create --rpc-url " $RPC_URL " --keystore " $KEYSTORE " -- password " $PASSWORD " $BROADCAST_FLAG --nonce $NONCE --chain-id $CHAIN_ID lib/fws-payments/src/Payments.sol:Payments | grep " Deployed to" | awk ' {print $3}' )
251+ PAYMENTS_CONTRACT_ADDRESS=$( forge create --password " $PASSWORD " $BROADCAST_FLAG --nonce $NONCE lib/fws-payments/src/Payments.sol:Payments | grep " Deployed to" | awk ' {print $3}' )
248252 if [ -z " $PAYMENTS_CONTRACT_ADDRESS " ]; then
249253 echo " Error: Failed to extract Payments contract address"
250254 exit 1
@@ -266,7 +270,7 @@ if [ "$DRY_RUN" = "true" ]; then
266270 exit 1
267271 fi
268272else
269- REGISTRY_IMPLEMENTATION_ADDRESS=$( forge create --rpc-url " $RPC_URL " --keystore " $KEYSTORE " -- password " $PASSWORD " $BROADCAST_FLAG --nonce $NONCE --chain-id $CHAIN_ID src/ServiceProviderRegistry.sol:ServiceProviderRegistry | grep " Deployed to" | awk ' {print $3}' )
273+ REGISTRY_IMPLEMENTATION_ADDRESS=$( forge create --password " $PASSWORD " $BROADCAST_FLAG --nonce $NONCE src/ServiceProviderRegistry.sol:ServiceProviderRegistry | grep " Deployed to" | awk ' {print $3}' )
270274 if [ -z " $REGISTRY_IMPLEMENTATION_ADDRESS " ]; then
271275 echo " Error: Failed to extract ServiceProviderRegistry implementation address"
272276 exit 1
@@ -285,7 +289,7 @@ if [ "$DRY_RUN" = "true" ]; then
285289 SERVICE_PROVIDER_REGISTRY_PROXY_ADDRESS=" 0x5678901234567890123456789012345678901234" # Dummy address for dry-run
286290 echo " ✅ ServiceProviderRegistry proxy deployment planned"
287291else
288- SERVICE_PROVIDER_REGISTRY_PROXY_ADDRESS=$( forge create --rpc-url " $RPC_URL " --keystore " $KEYSTORE " -- password " $PASSWORD " $BROADCAST_FLAG --nonce $NONCE --chain-id $CHAIN_ID lib/pdp/src/ERC1967Proxy.sol:MyERC1967Proxy --constructor-args $REGISTRY_IMPLEMENTATION_ADDRESS $REGISTRY_INIT_DATA | grep " Deployed to" | awk ' {print $3}' )
292+ SERVICE_PROVIDER_REGISTRY_PROXY_ADDRESS=$( forge create --password " $PASSWORD " $BROADCAST_FLAG --nonce $NONCE lib/pdp/src/ERC1967Proxy.sol:MyERC1967Proxy --constructor-args $REGISTRY_IMPLEMENTATION_ADDRESS $REGISTRY_INIT_DATA | grep " Deployed to" | awk ' {print $3}' )
289293 if [ -z " $SERVICE_PROVIDER_REGISTRY_PROXY_ADDRESS " ]; then
290294 echo " Error: Failed to extract ServiceProviderRegistry proxy address"
291295 exit 1
@@ -307,7 +311,7 @@ if [ "$DRY_RUN" = "true" ]; then
307311 SERVICE_PAYMENTS_IMPLEMENTATION_ADDRESS=" 0x6789012345678901234567890123456789012345" # Dummy address for dry-run
308312 echo " ✅ FilecoinWarmStorageService implementation deployment planned"
309313else
310- SERVICE_PAYMENTS_IMPLEMENTATION_ADDRESS=$( forge create --rpc-url " $RPC_URL " --keystore " $KEYSTORE " -- password " $PASSWORD " $BROADCAST_FLAG --nonce $NONCE --chain-id $CHAIN_ID src/FilecoinWarmStorageService.sol:FilecoinWarmStorageService --constructor-args $PDP_VERIFIER_ADDRESS $PAYMENTS_CONTRACT_ADDRESS $USDFC_TOKEN_ADDRESS $FILBEAM_BENEFICIARY_ADDRESS $SERVICE_PROVIDER_REGISTRY_PROXY_ADDRESS $SESSION_KEY_REGISTRY_ADDRESS | grep " Deployed to" | awk ' {print $3}' )
314+ SERVICE_PAYMENTS_IMPLEMENTATION_ADDRESS=$( forge create --password " $PASSWORD " $BROADCAST_FLAG --nonce $NONCE src/FilecoinWarmStorageService.sol:FilecoinWarmStorageService --constructor-args $PDP_VERIFIER_ADDRESS $PAYMENTS_CONTRACT_ADDRESS $USDFC_TOKEN_ADDRESS $FILBEAM_BENEFICIARY_ADDRESS $SERVICE_PROVIDER_REGISTRY_PROXY_ADDRESS $SESSION_KEY_REGISTRY_ADDRESS | grep " Deployed to" | awk ' {print $3}' )
311315 if [ -z " $SERVICE_PAYMENTS_IMPLEMENTATION_ADDRESS " ]; then
312316 echo " Error: Failed to extract FilecoinWarmStorageService contract address"
313317 exit 1
@@ -331,7 +335,7 @@ if [ "$DRY_RUN" = "true" ]; then
331335 WARM_STORAGE_SERVICE_ADDRESS=" 0x7890123456789012345678901234567890123456" # Dummy address for dry-run
332336 echo " ✅ FilecoinWarmStorageService proxy deployment planned"
333337else
334- WARM_STORAGE_SERVICE_ADDRESS=$( forge create --rpc-url " $RPC_URL " --keystore " $KEYSTORE " -- password " $PASSWORD " $BROADCAST_FLAG --nonce $NONCE --chain-id $CHAIN_ID lib/pdp/src/ERC1967Proxy.sol:MyERC1967Proxy --constructor-args $SERVICE_PAYMENTS_IMPLEMENTATION_ADDRESS $INIT_DATA | grep " Deployed to" | awk ' {print $3}' )
338+ WARM_STORAGE_SERVICE_ADDRESS=$( forge create --password " $PASSWORD " $BROADCAST_FLAG --nonce $NONCE lib/pdp/src/ERC1967Proxy.sol:MyERC1967Proxy --constructor-args $SERVICE_PAYMENTS_IMPLEMENTATION_ADDRESS $INIT_DATA | grep " Deployed to" | awk ' {print $3}' )
335339 if [ -z " $WARM_STORAGE_SERVICE_ADDRESS " ]; then
336340 echo " Error: Failed to extract FilecoinWarmStorageService proxy address"
337341 exit 1
@@ -389,3 +393,24 @@ echo "FilBeam controller address: $FILBEAM_CONTROLLER_ADDRESS"
389393echo " FilBeam beneficiary address: $FILBEAM_BENEFICIARY_ADDRESS "
390394echo " Service name: $SERVICE_NAME "
391395echo " Service description: $SERVICE_DESCRIPTION "
396+
397+ # Contract verification
398+ if [ " $DRY_RUN " = " false" ] && [ " ${AUTO_VERIFY:- true} " = " true" ]; then
399+ echo
400+ echo " 🔍 Starting automatic contract verification..."
401+
402+ pushd " $( dirname " $0 " ) /.." > /dev/null
403+ source tools/verify-contracts.sh
404+
405+ verify_contracts_batch \
406+ " $VERIFIER_IMPLEMENTATION_ADDRESS ,lib/pdp/src/PDPVerifier.sol:PDPVerifier" \
407+ " $PDP_VERIFIER_ADDRESS ,lib/pdp/src/ERC1967Proxy.sol:MyERC1967Proxy" \
408+ " $PAYMENTS_CONTRACT_ADDRESS ,lib/fws-payments/src/Payments.sol:Payments" \
409+ " $REGISTRY_IMPLEMENTATION_ADDRESS ,src/ServiceProviderRegistry.sol:ServiceProviderRegistry" \
410+ " $SERVICE_PROVIDER_REGISTRY_PROXY_ADDRESS ,lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol:ERC1967Proxy" \
411+ " $SERVICE_PAYMENTS_IMPLEMENTATION_ADDRESS ,src/FilecoinWarmStorageService.sol:FilecoinWarmStorageService" \
412+ " $WARM_STORAGE_SERVICE_ADDRESS ,lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol:ERC1967Proxy" \
413+ " $WARM_STORAGE_VIEW_ADDRESS ,src/FilecoinWarmStorageServiceStateView.sol:FilecoinWarmStorageServiceStateView"
414+
415+ popd > /dev/null
416+ fi
0 commit comments