#!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" PROJECT_ROOT="$(cd "$REPO_ROOT/.." && pwd)" BUNDLE_JSON="$REPO_ROOT/config/optimism-cronos-dodo-4-pools-execution-bundle.json" OUT_DIR="$PROJECT_ROOT/reports/status" OUT_JSON="$OUT_DIR/optimism-cronos-dodo-4-pools-execution-bundle-latest.json" OUT_MD="$OUT_DIR/optimism-cronos-dodo-4-pools-execution-bundle-latest.md" source "$REPO_ROOT/scripts/lib/deployment/dotenv.sh" load_deployment_env --repo-root "$REPO_ROOT" mkdir -p "$OUT_DIR" json_escape() { jq -Rn --arg v "${1:-}" '$v' } resolve_env_from_list() { local joined="$1" local value="" local key IFS='|' read -r -a _keys <<< "$joined" for key in "${_keys[@]}"; do if [[ -n "${!key:-}" ]]; then value="${!key}" break fi done printf '%s' "$value" } code_status() { local rpc="$1" local address="$2" if [[ -z "$rpc" || -z "$address" ]]; then printf 'missing' return fi local code="" code="$(cast code --rpc-url "$rpc" "$address" 2>/dev/null || true)" if [[ -n "$code" && "$code" != "0x" ]]; then printf 'has_code' else printf 'no_code' fi } symbol_call() { local rpc="$1" local address="$2" local value value="$(cast call --rpc-url "$rpc" "$address" "symbol()(string)" 2>/dev/null || true)" value="${value#\"}" value="${value%\"}" printf '%s' "$value" } json_file="$(mktemp)" md_file="$(mktemp)" generated_at="$(date -u +"%Y-%m-%dT%H:%M:%SZ")" { echo "{" echo " \"generatedAt\": $(json_escape "$generated_at")," echo " \"bundle\": $(jq '.bundleName' "$BUNDLE_JSON")," echo " \"chains\": [" } >"$json_file" { echo "# Optimism/Cronos DODO 4-Pool Execution Bundle" echo echo "Generated at: \`$generated_at\`" echo echo "This bundle covers the four remaining \`configured_no_code\` DODO PMM pools:" echo echo "- Optimism: \`cWUSDC/USDC\`, \`cWUSDT/USDT\`" echo "- Cronos: \`cWUSDC/USDC\`, \`cWUSDT/USDT\`" echo echo "Execution posture:" echo echo "- DODO vending-machine addresses are present in env." echo "- Compliant \`cWUSDT\` / \`cWUSDC\` token contracts have bytecode on both chains." echo "- The expected pool addresses still have no code on both chains." echo "- The canonical quote anchors for Optimism/Cronos are the chain-native official USDT/USDC addresses below." } >"$md_file" first_chain=1 while IFS= read -r chain_row; do chain_id="$(jq -r '.chainId' <<<"$chain_row")" network="$(jq -r '.network' <<<"$chain_row")" integration_env="$(jq -r '.integrationEnv' <<<"$chain_row")" dvm_env="$(jq -r '.dodoVendingMachineEnv' <<<"$chain_row")" rpc_envs_joined="$(jq -r '.rpcEnv | join("|")' <<<"$chain_row")" rpc="$(resolve_env_from_list "$rpc_envs_joined")" dvm="${!dvm_env:-}" integration="${!integration_env:-}" official_usdc_env="$(jq -r '.official.USDC.env' <<<"$chain_row")" official_usdc_default="$(jq -r '.official.USDC.default' <<<"$chain_row")" official_usdt_env="$(jq -r '.official.USDT.env' <<<"$chain_row")" official_usdt_default="$(jq -r '.official.USDT.default' <<<"$chain_row")" official_usdc="${!official_usdc_env:-$official_usdc_default}" official_usdt="${!official_usdt_env:-$official_usdt_default}" cwusdc_env="$(jq -r '.compliant.cWUSDC.env' <<<"$chain_row")" cwusdt_env="$(jq -r '.compliant.cWUSDT.env' <<<"$chain_row")" cwusdc="${!cwusdc_env:-}" cwusdt="${!cwusdt_env:-}" integration_status="$(code_status "$rpc" "$integration")" dvm_status="$(code_status "$rpc" "$dvm")" official_usdc_status="$(code_status "$rpc" "$official_usdc")" official_usdt_status="$(code_status "$rpc" "$official_usdt")" cwusdc_status="$(code_status "$rpc" "$cwusdc")" cwusdt_status="$(code_status "$rpc" "$cwusdt")" pool_usdc_expected="$(jq -r '.pairs[] | select(.pair=="cWUSDC/USDC") | .expectedPoolAddress' <<<"$chain_row")" pool_usdt_expected="$(jq -r '.pairs[] | select(.pair=="cWUSDT/USDT") | .expectedPoolAddress' <<<"$chain_row")" pool_usdc_status="$(code_status "$rpc" "$pool_usdc_expected")" pool_usdt_status="$(code_status "$rpc" "$pool_usdt_expected")" forge_profile="default" if [[ "$chain_id" == "25" ]]; then forge_profile="cronos_legacy" fi deploy_cmd=$(cat <>"$json_file" fi first_chain=0 cat >>"$json_file" <>"$md_file" done < <(jq -c '.chains[]' "$BUNDLE_JSON") { echo echo " ]" echo "}" } >>"$json_file" jq . "$json_file" >"$OUT_JSON" mv "$md_file" "$OUT_MD" rm -f "$json_file" echo "Wrote:" echo " $OUT_JSON" echo " $OUT_MD"