chore: .gitignore and README updates
Made-with: Cursor
This commit is contained in:
@@ -28,6 +28,14 @@ if [[ ${#CHAIN_FILTER[@]} -eq 0 && -n "${DEPLOY_PMM_L2S_FILTER:-}" ]]; then
|
||||
for n in $DEPLOY_PMM_L2S_FILTER; do n="$(normalize_chain_name "$n")"; [[ -n "$n" ]] && CHAIN_FILTER+=("$n"); done
|
||||
fi
|
||||
|
||||
forge_profile_for_chain() {
|
||||
local chain_id="$1"
|
||||
case "$chain_id" in
|
||||
25) printf '%s' "cronos_legacy" ;;
|
||||
*) printf '%s' "${FOUNDRY_PROFILE:-default}" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
CHAINS=(
|
||||
"BSC:56:BSC_RPC_URL"
|
||||
"POLYGON:137:POLYGON_MAINNET_RPC"
|
||||
@@ -35,18 +43,25 @@ CHAINS=(
|
||||
"OPTIMISM:10:OPTIMISM_MAINNET_RPC"
|
||||
"ARBITRUM:42161:ARBITRUM_MAINNET_RPC"
|
||||
"AVALANCHE:43114:AVALANCHE_RPC_URL"
|
||||
"CRONOS:25:CRONOS_RPC_URL"
|
||||
"CRONOS:25:CRONOS_RPC_URL|CRONOS_RPC"
|
||||
"GNOSIS:100:GNOSIS_MAINNET_RPC"
|
||||
"CELO:42220:CELO_MAINNET_RPC"
|
||||
)
|
||||
|
||||
for entry in "${CHAINS[@]}"; do
|
||||
IFS=: read -r name chain_id rpc_var <<< "$entry"
|
||||
IFS=: read -r name chain_id rpc_vars <<< "$entry"
|
||||
if [[ ${#CHAIN_FILTER[@]} -gt 0 ]] && [[ ! " ${CHAIN_FILTER[*]} " =~ " $name " ]]; then continue; fi
|
||||
|
||||
rpc="${!rpc_var:-}"
|
||||
rpc=""
|
||||
IFS='|' read -r -a rpc_candidates <<< "$rpc_vars"
|
||||
for rpc_var in "${rpc_candidates[@]}"; do
|
||||
if [[ -n "${!rpc_var:-}" ]]; then
|
||||
rpc="${!rpc_var}"
|
||||
break
|
||||
fi
|
||||
done
|
||||
if [[ -z "$rpc" ]]; then
|
||||
echo "Skip $name (chain $chain_id): $rpc_var not set"
|
||||
echo "Skip $name (chain $chain_id): none of ${rpc_vars} set"
|
||||
continue
|
||||
fi
|
||||
|
||||
@@ -85,12 +100,15 @@ for entry in "${CHAINS[@]}"; do
|
||||
echo "WARN $name: using global OFFICIAL_USDC_ADDRESS fallback; set ${usdc_var} or ${usdc_var_alt} for chain-specific safety"
|
||||
fi
|
||||
|
||||
forge_profile="$(forge_profile_for_chain "$chain_id")"
|
||||
echo "=== Deploying DODOPMMIntegration on $name (chain $chain_id) ==="
|
||||
echo "Using Foundry profile: $forge_profile"
|
||||
DODO_VENDING_MACHINE_ADDRESS="$dvm" \
|
||||
OFFICIAL_USDT_ADDRESS="$usdt" \
|
||||
OFFICIAL_USDC_ADDRESS="$usdc" \
|
||||
COMPLIANT_USDT_ADDRESS="$compliant_usdt" \
|
||||
COMPLIANT_USDC_ADDRESS="$compliant_usdc" \
|
||||
FOUNDRY_PROFILE="$forge_profile" \
|
||||
forge script script/dex/DeployDODOPMMIntegration.s.sol:DeployDODOPMMIntegration \
|
||||
--rpc-url "$rpc" \
|
||||
--chain-id "$chain_id" \
|
||||
|
||||
@@ -259,7 +259,7 @@ run_deploy_cw() {
|
||||
fi
|
||||
local gas_opt=""
|
||||
[[ "$chain_id" == "42161" && -n "${ARBITRUM_GAS_PRICE:-}" ]] && gas_opt="--with-gas-price ${ARBITRUM_GAS_PRICE}"
|
||||
run_cmd "${deploy_opts:+$deploy_opts }CW_BRIDGE_ADDRESS=$bridge forge script script/deploy/DeployCWTokens.s.sol:DeployCWTokens --rpc-url \"$rpc\" --chain-id \"$chain_id\" --broadcast --private-key \"\$PRIVATE_KEY\" --legacy ${gas_opt} -vvv" || true
|
||||
run_cmd "${deploy_opts:+$deploy_opts }CW_BRIDGE_ADDRESS=$bridge CW_STRICT_MODE=${CW_STRICT_MODE:-1} CW_FREEZE_OPERATIONAL_ROLES=${CW_FREEZE_OPERATIONAL_ROLES:-1} forge script script/deploy/DeployCWTokens.s.sol:DeployCWTokens --rpc-url \"$rpc\" --chain-id \"$chain_id\" --broadcast --private-key \"\$PRIVATE_KEY\" --legacy ${gas_opt} -vvv" || true
|
||||
echo " → Set CWUSDT_*, CWUSDC_*, CWEURC_*, CWEURT_*, CWGBPC_*, CWGBPT_*, CWAUDC_*, CWJPYC_*, CWCHFC_*, CWCADC_*, CWXAUC_*, CWXAUT_* in .env from script output."
|
||||
}
|
||||
|
||||
|
||||
@@ -32,13 +32,42 @@ run_or_echo() {
|
||||
}
|
||||
|
||||
ensure_rpc() { local rpc="$1"; type ensure_infura_rpc_url &>/dev/null && [[ -n "$rpc" ]] && rpc=$(ensure_infura_rpc_url "$rpc"); echo "$rpc"; }
|
||||
get_token_balance() {
|
||||
local token="$1" owner="$2" rpc="$3"
|
||||
cast call "${token,,}" "balanceOf(address)(uint256)" "${owner,,}" --rpc-url "$rpc" 2>/dev/null || echo "0"
|
||||
}
|
||||
has_sufficient_link() {
|
||||
local token="$1" owner="$2" rpc="$3" needed="$4"
|
||||
local bal
|
||||
bal=$(get_token_balance "$token" "$owner" "$rpc")
|
||||
bal="${bal%% *}"
|
||||
[[ "$bal" =~ ^[0-9]+$ ]] || bal="0"
|
||||
python3 - <<PY
|
||||
bal = int("$bal")
|
||||
needed = int("$needed")
|
||||
raise SystemExit(0 if bal >= needed else 1)
|
||||
PY
|
||||
}
|
||||
print_skip() {
|
||||
local label="$1" token="$2" owner="$3" rpc="$4" needed="$5"
|
||||
local bal
|
||||
bal=$(get_token_balance "$token" "$owner" "$rpc")
|
||||
echo " Skipped (insufficient LINK balance: have ${bal%% *}, need $needed)"
|
||||
}
|
||||
|
||||
if [[ -z "$PRIVATE_KEY" ]]; then
|
||||
echo "ERROR: PRIVATE_KEY not set" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
DEPLOYER_ADDR=$(cast wallet address --private-key "$PRIVATE_KEY" 2>/dev/null || true)
|
||||
if [[ -z "$DEPLOYER_ADDR" ]]; then
|
||||
echo "ERROR: could not derive deployer address from PRIVATE_KEY" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Funding CCIP bridges with LINK (amount per bridge: $LINK_AMOUNT_WEI wei)"
|
||||
echo "Deployer: $DEPLOYER_ADDR"
|
||||
echo ""
|
||||
|
||||
# Chain 138 (Besu: gas estimation often fails; use explicit legacy gas like manual cast)
|
||||
@@ -48,8 +77,20 @@ if [[ -n "${RPC_URL_138:-}" && -n "${LINK_TOKEN_CHAIN138:-${LINK_TOKEN:-}}" ]];
|
||||
rpc=$(ensure_rpc "$RPC_URL_138")
|
||||
echo "Chain 138 (RPC: ${rpc%%\?*}...)"
|
||||
_gas138="--legacy --gas-limit 250000 --gas-price 2000000000"
|
||||
[[ -n "${CCIPWETH9_BRIDGE_CHAIN138:-}" ]] && run_or_echo "cast send $link \"transfer(address,uint256)\" ${CCIPWETH9_BRIDGE_CHAIN138,,} $LINK_AMOUNT_WEI --rpc-url \"$rpc\" --private-key \"\$PRIVATE_KEY\" $_gas138"
|
||||
[[ -n "${CCIPWETH10_BRIDGE_CHAIN138:-}" ]] && run_or_echo "cast send $link \"transfer(address,uint256)\" ${CCIPWETH10_BRIDGE_CHAIN138,,} $LINK_AMOUNT_WEI --rpc-url \"$rpc\" --private-key \"\$PRIVATE_KEY\" $_gas138"
|
||||
if [[ -n "${CCIPWETH9_BRIDGE_CHAIN138:-}" ]]; then
|
||||
if has_sufficient_link "$link" "$DEPLOYER_ADDR" "$rpc" "$LINK_AMOUNT_WEI"; then
|
||||
run_or_echo "cast send $link \"transfer(address,uint256)\" ${CCIPWETH9_BRIDGE_CHAIN138,,} $LINK_AMOUNT_WEI --rpc-url \"$rpc\" --private-key \"\$PRIVATE_KEY\" $_gas138"
|
||||
else
|
||||
print_skip "CHAIN138/WETH9" "$link" "$DEPLOYER_ADDR" "$rpc" "$LINK_AMOUNT_WEI"
|
||||
fi
|
||||
fi
|
||||
if [[ -n "${CCIPWETH10_BRIDGE_CHAIN138:-}" ]]; then
|
||||
if has_sufficient_link "$link" "$DEPLOYER_ADDR" "$rpc" "$LINK_AMOUNT_WEI"; then
|
||||
run_or_echo "cast send $link \"transfer(address,uint256)\" ${CCIPWETH10_BRIDGE_CHAIN138,,} $LINK_AMOUNT_WEI --rpc-url \"$rpc\" --private-key \"\$PRIVATE_KEY\" $_gas138"
|
||||
else
|
||||
print_skip "CHAIN138/WETH10" "$link" "$DEPLOYER_ADDR" "$rpc" "$LINK_AMOUNT_WEI"
|
||||
fi
|
||||
fi
|
||||
echo ""
|
||||
fi
|
||||
|
||||
@@ -58,8 +99,20 @@ if [[ -n "${ETHEREUM_MAINNET_RPC:-}" && -n "${MAINNET_LINK_TOKEN:-${CCIP_ETH_LIN
|
||||
link="${MAINNET_LINK_TOKEN:-$CCIP_ETH_LINK_TOKEN}"
|
||||
rpc=$(ensure_rpc "$ETHEREUM_MAINNET_RPC")
|
||||
echo "Ethereum Mainnet"
|
||||
[[ -n "${MAINNET_CCIP_WETH9_BRIDGE:-}" ]] && run_or_echo "cast send $link \"transfer(address,uint256)\" $MAINNET_CCIP_WETH9_BRIDGE $LINK_AMOUNT_WEI --rpc-url \"$rpc\" --private-key \"\$PRIVATE_KEY\" --legacy"
|
||||
[[ -n "${MAINNET_CCIP_WETH10_BRIDGE:-}" ]] && run_or_echo "cast send $link \"transfer(address,uint256)\" $MAINNET_CCIP_WETH10_BRIDGE $LINK_AMOUNT_WEI --rpc-url \"$rpc\" --private-key \"\$PRIVATE_KEY\" --legacy"
|
||||
if [[ -n "${MAINNET_CCIP_WETH9_BRIDGE:-}" ]]; then
|
||||
if has_sufficient_link "$link" "$DEPLOYER_ADDR" "$rpc" "$LINK_AMOUNT_WEI"; then
|
||||
run_or_echo "cast send $link \"transfer(address,uint256)\" $MAINNET_CCIP_WETH9_BRIDGE $LINK_AMOUNT_WEI --rpc-url \"$rpc\" --private-key \"\$PRIVATE_KEY\" --legacy"
|
||||
else
|
||||
print_skip "ETH/WETH9" "$link" "$DEPLOYER_ADDR" "$rpc" "$LINK_AMOUNT_WEI"
|
||||
fi
|
||||
fi
|
||||
if [[ -n "${MAINNET_CCIP_WETH10_BRIDGE:-}" ]]; then
|
||||
if has_sufficient_link "$link" "$DEPLOYER_ADDR" "$rpc" "$LINK_AMOUNT_WEI"; then
|
||||
run_or_echo "cast send $link \"transfer(address,uint256)\" $MAINNET_CCIP_WETH10_BRIDGE $LINK_AMOUNT_WEI --rpc-url \"$rpc\" --private-key \"\$PRIVATE_KEY\" --legacy"
|
||||
else
|
||||
print_skip "ETH/WETH10" "$link" "$DEPLOYER_ADDR" "$rpc" "$LINK_AMOUNT_WEI"
|
||||
fi
|
||||
fi
|
||||
echo ""
|
||||
fi
|
||||
|
||||
@@ -89,8 +142,20 @@ for label in BSC POLYGON BASE OPTIMISM ARBITRUM AVALANCHE CRONOS GNOSIS CELO WEM
|
||||
[[ -z "$addr9" && -z "$addr10" ]] && continue
|
||||
|
||||
echo "$label"
|
||||
[[ -n "$addr9" ]] && run_or_echo "cast send ${link,,} \"transfer(address,uint256)\" ${addr9,,} $LINK_AMOUNT_WEI --rpc-url \"$rpc\" --private-key \"\$PRIVATE_KEY\" --legacy"
|
||||
[[ -n "$addr10" ]] && run_or_echo "cast send ${link,,} \"transfer(address,uint256)\" ${addr10,,} $LINK_AMOUNT_WEI --rpc-url \"$rpc\" --private-key \"\$PRIVATE_KEY\" --legacy"
|
||||
if [[ -n "$addr9" ]]; then
|
||||
if has_sufficient_link "$link" "$DEPLOYER_ADDR" "$rpc" "$LINK_AMOUNT_WEI"; then
|
||||
run_or_echo "cast send ${link,,} \"transfer(address,uint256)\" ${addr9,,} $LINK_AMOUNT_WEI --rpc-url \"$rpc\" --private-key \"\$PRIVATE_KEY\" --legacy"
|
||||
else
|
||||
print_skip "$label/WETH9" "$link" "$DEPLOYER_ADDR" "$rpc" "$LINK_AMOUNT_WEI"
|
||||
fi
|
||||
fi
|
||||
if [[ -n "$addr10" ]]; then
|
||||
if has_sufficient_link "$link" "$DEPLOYER_ADDR" "$rpc" "$LINK_AMOUNT_WEI"; then
|
||||
run_or_echo "cast send ${link,,} \"transfer(address,uint256)\" ${addr10,,} $LINK_AMOUNT_WEI --rpc-url \"$rpc\" --private-key \"\$PRIVATE_KEY\" --legacy"
|
||||
else
|
||||
print_skip "$label/WETH10" "$link" "$DEPLOYER_ADDR" "$rpc" "$LINK_AMOUNT_WEI"
|
||||
fi
|
||||
fi
|
||||
echo ""
|
||||
done
|
||||
|
||||
|
||||
@@ -125,6 +125,9 @@ fi
|
||||
while IFS=$'\t' read -r base_sym quote_sym; do
|
||||
add_pair "$base_sym" "$quote_sym"
|
||||
done < <(jq -r '.explicitPairs[]? | [.baseSymbol, .quoteSymbol] | @tsv' "$CONFIG_JSON")
|
||||
while IFS=$'\t' read -r base_sym quote_sym; do
|
||||
add_pair "$base_sym" "$quote_sym"
|
||||
done < <(jq -r '.plannedPairs[]? | [.baseSymbol, .quoteSymbol] | @tsv' "$CONFIG_JSON")
|
||||
|
||||
echo "=== Chain 138 PMM Desired-State Inventory ==="
|
||||
echo "Config: $CONFIG_JSON"
|
||||
|
||||
@@ -137,6 +137,9 @@ fi
|
||||
while IFS=$'\t' read -r base_sym quote_sym; do
|
||||
add_pair "$base_sym" "$quote_sym"
|
||||
done < <(jq -r '.explicitPairs[]? | [.baseSymbol, .quoteSymbol] | @tsv' "$CONFIG_JSON")
|
||||
while IFS=$'\t' read -r base_sym quote_sym; do
|
||||
add_pair "$base_sym" "$quote_sym"
|
||||
done < <(jq -r '.plannedPairs[]? | [.baseSymbol, .quoteSymbol] | @tsv' "$CONFIG_JSON")
|
||||
|
||||
zero_addr='0x0000000000000000000000000000000000000000'
|
||||
created=0
|
||||
|
||||
@@ -1,7 +1,18 @@
|
||||
#!/usr/bin/env bash
|
||||
# Verify all four Cronos contracts via Etherscan-style API.
|
||||
# Uses explorer-api.cronos.org (module/action, solidity-standard-json-input).
|
||||
# Run from smom-dbis-138/
|
||||
# Cronos (chain 25): confirm deployments and prepare manual verification.
|
||||
#
|
||||
# Cronos Explorer moved off legacy Etherscan-compatible POST endpoints on the
|
||||
# public /mainnet/api route (404 on contract verification). Etherscan multichain
|
||||
# v2 does not list Cronos chain id 25. Foundry forge verify-contract therefore
|
||||
# cannot submit verification to Cronos reliably from CI.
|
||||
#
|
||||
# This script: (1) checks bytecode on RPC, (2) optionally exports Standard-JSON
|
||||
# inputs for the web UI, (3) prints links to the manual runbook.
|
||||
#
|
||||
# Run from smom-dbis-138/: ./scripts/deployment/verify-cronos-contracts.sh
|
||||
#
|
||||
# Optional: CRONOS_EXPORT_SOURCES=1 — run export-cronos-verification-sources.sh
|
||||
# Optional: CRONOS_REQUIRE_BYTECODE=1 — exit 1 if any listed address has no code (default: 1)
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
@@ -25,66 +36,56 @@ elif [[ -n "${REPO_ROOT:-}" && -f "$REPO_ROOT/.env" ]]; then
|
||||
set +a
|
||||
fi
|
||||
|
||||
RPC="${CRONOS_RPC_URL:-https://evm.cronos.org}"
|
||||
REQUIRE_CODE="${CRONOS_REQUIRE_BYTECODE:-1}"
|
||||
|
||||
if [ -z "${CRONOSCAN_API_KEY:-}" ]; then
|
||||
echo "ERROR: CRONOSCAN_API_KEY not set. Set in .env (from explorer.cronos.org/register)."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
export CRONOSCAN_API_KEY
|
||||
|
||||
echo "Cronos verification (Etherscan-style API)"
|
||||
echo " API: https://explorer-api.cronos.org/mainnet/api"
|
||||
echo " Chain: cronos (from foundry.toml)"
|
||||
echo "Cronos verification (Chain 25)"
|
||||
echo " RPC: $RPC"
|
||||
echo " Explorer: https://explorer.cronos.org"
|
||||
echo " Manual UI: https://explorer.cronos.org/verifyContract"
|
||||
echo ""
|
||||
echo "Note: Automated forge/etherscan verification is not supported against the current"
|
||||
echo " Cronos Explorer API (see docs/04-configuration/CRONOS_EXPLORER_OPERATIONS.md)."
|
||||
echo ""
|
||||
|
||||
verify() {
|
||||
local addr="$1"
|
||||
local contract="$2"
|
||||
local extra_args="${3:-}"
|
||||
echo "Verifying $contract at $addr..."
|
||||
# shellcheck disable=SC2086
|
||||
if forge verify-contract \
|
||||
"$addr" "$contract" \
|
||||
--chain cronos \
|
||||
--etherscan-api-key "$CRONOSCAN_API_KEY" \
|
||||
--skip-is-verified-check \
|
||||
$extra_args \
|
||||
--watch 2>&1; then
|
||||
echo " ✓ $contract verified"
|
||||
else
|
||||
echo " ✗ $contract verification failed"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
CONTRACTS=(
|
||||
"0x99B3511A2d315A497C8112C1fdd8D508d4B1E506:WETH9"
|
||||
"0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6:WETH10"
|
||||
"0x3Cc23d086fCcbAe1e5f3FE2bA4A263E1D27d8Cab:CCIPWETH9Bridge"
|
||||
"0x105F8A15b819948a89153505762444Ee9f324684:CCIPWETH10Bridge"
|
||||
)
|
||||
|
||||
FAIL=0
|
||||
|
||||
# WETH9 - no constructor args
|
||||
verify "0x99B3511A2d315A497C8112C1fdd8D508d4B1E506" "contracts/tokens/WETH.sol:WETH" || FAIL=$((FAIL+1))
|
||||
|
||||
# WETH10 - no constructor args
|
||||
verify "0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6" "contracts/tokens/WETH10.sol:WETH10" || FAIL=$((FAIL+1))
|
||||
|
||||
# CCIPWETH9Bridge - constructor(router, weth9, linkToken)
|
||||
verify "0x3Cc23d086fCcbAe1e5f3FE2bA4A263E1D27d8Cab" "contracts/ccip/CCIPWETH9Bridge.sol:CCIPWETH9Bridge" \
|
||||
"--constructor-args $(cast abi-encode 'constructor(address,address,address)' 0xE26B0A098D861d5C7d9434aD471c0572Ca6EAa67 0x99B3511A2d315A497C8112C1fdd8D508d4B1E506 0x8c80A01F461f297Df7F9DA3A4f740D7297C8Ac85)" || FAIL=$((FAIL+1))
|
||||
|
||||
# CCIPWETH10Bridge - constructor(router, weth10, linkToken)
|
||||
verify "0x105F8A15b819948a89153505762444Ee9f324684" "contracts/ccip/CCIPWETH10Bridge.sol:CCIPWETH10Bridge" \
|
||||
"--constructor-args $(cast abi-encode 'constructor(address,address,address)' 0xE26B0A098D861d5C7d9434aD471c0572Ca6EAa67 0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6 0x8c80A01F461f297Df7F9DA3A4f740D7297C8Ac85)" || FAIL=$((FAIL+1))
|
||||
|
||||
echo "On-chain bytecode:"
|
||||
for entry in "${CONTRACTS[@]}"; do
|
||||
addr="${entry%%:*}"
|
||||
name="${entry##*:}"
|
||||
code=$(cast code "$addr" --rpc-url "$RPC" 2>/dev/null || echo "0x")
|
||||
if [[ "${#code}" -gt 10 ]]; then
|
||||
echo " ✓ $name $addr"
|
||||
else
|
||||
echo " ✗ $name $addr — no bytecode"
|
||||
FAIL=$((FAIL + 1))
|
||||
fi
|
||||
done
|
||||
echo ""
|
||||
if [ "$FAIL" -eq 0 ]; then
|
||||
echo "All four Cronos contracts verified."
|
||||
exit 0
|
||||
else
|
||||
echo "$FAIL contract(s) failed."
|
||||
echo ""
|
||||
echo "Manual verification (recommended):"
|
||||
echo " 1. ./scripts/deployment/export-cronos-verification-sources.sh"
|
||||
echo " 2. Open https://explorer.cronos.org/verifyContract"
|
||||
echo " 3. Follow docs/deployment/CRONOS_VERIFICATION_RUNBOOK.md"
|
||||
|
||||
if [[ "${CRONOS_EXPORT_SOURCES:-0}" == "1" ]] && [[ -x "$SCRIPT_DIR/export-cronos-verification-sources.sh" ]]; then
|
||||
echo "Regenerating Standard-JSON inputs (.cronos-verify/)..."
|
||||
bash "$SCRIPT_DIR/export-cronos-verification-sources.sh" || true
|
||||
echo ""
|
||||
fi
|
||||
|
||||
echo "Next steps (manual verification required):"
|
||||
echo " 1. docs/deployment/CRONOS_VERIFICATION_RUNBOOK.md"
|
||||
echo " 2. Or: ./scripts/deployment/export-cronos-verification-sources.sh"
|
||||
echo " then upload each *_standard_input.json at https://explorer.cronos.org/verifyContract"
|
||||
echo ""
|
||||
|
||||
if [[ "$REQUIRE_CODE" == "1" ]] && [[ "$FAIL" -gt 0 ]]; then
|
||||
echo "ERROR: $FAIL contract(s) missing bytecode on $RPC" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "verify-cronos-contracts.sh finished (deployment OK; verification is manual on Cronos)."
|
||||
exit 0
|
||||
|
||||
Reference in New Issue
Block a user