Files
smom-dbis-138/scripts/deployment/build-optimism-cronos-dodo-4-pools-bundle.sh
defiQUG f3d2961b97
Some checks failed
CI/CD Pipeline / Lint and Format (push) Failing after 46s
CI/CD Pipeline / Terraform Validation (push) Failing after 35s
CI/CD Pipeline / Kubernetes Validation (push) Successful in 37s
Deploy ChainID 138 / Deploy ChainID 138 (push) Failing after 1m50s
HYBX OMNL TypeScript & anchor / token-aggregation build + reconcile artifact (push) Failing after 2m19s
Validation / validate-genesis (push) Successful in 51s
Validation / validate-terraform (push) Failing after 39s
Validation / validate-kubernetes (push) Failing after 10s
CI/CD Pipeline / Solidity Contracts (push) Failing after 12m56s
Validation / validate-smart-contracts (push) Failing after 12s
CI/CD Pipeline / Security Scanning (push) Failing after 15m52s
Validation / validate-security (push) Failing after 10m59s
Validation / validate-documentation (push) Failing after 17s
Validate Token List / validate (push) Failing after 30s
OMNL reconcile anchor / Run omnl:reconcile and upload artifacts (push) Failing after 26s
Verify Deployment / Verify Deployment (push) Failing after 56s
feat: add hybx omnl stack and gas pmm tooling
2026-04-24 12:56:40 -07:00

285 lines
9.0 KiB
Bash
Executable File

#!/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 <<EOF
cd $REPO_ROOT
DODO_VENDING_MACHINE_ADDRESS=$dvm \\
OFFICIAL_USDT_ADDRESS=$official_usdt \\
OFFICIAL_USDC_ADDRESS=$official_usdc \\
COMPLIANT_USDT_ADDRESS=$cwusdt \\
COMPLIANT_USDC_ADDRESS=$cwusdc \\
FOUNDRY_PROFILE=$forge_profile \\
forge script script/dex/DeployDODOPMMIntegration.s.sol:DeployDODOPMMIntegration \\
--rpc-url $rpc \\
--chain-id $chain_id \\
--broadcast \\
--private-key "\$PRIVATE_KEY" \\
-vvv
jq -r '.transactions[] | select(.transactionType=="CREATE" and .contractName=="DODOPMMIntegration") | .contractAddress' \\
broadcast/DeployDODOPMMIntegration.s.sol/$chain_id/run-latest.json
EOF
)
create_cmd=$(cat <<EOF
cd $REPO_ROOT
DODO_PMM_INTEGRATION_ADDRESS=\${$integration_env:-REPLACE_WITH_DEPLOYED_INTEGRATION} \\
RPC_URL=$rpc \\
COMPLIANT_USDT_ADDRESS=$cwusdt \\
COMPLIANT_USDC_ADDRESS=$cwusdc \\
OFFICIAL_USDT_ADDRESS=$official_usdt \\
OFFICIAL_USDC_ADDRESS=$official_usdc \\
PRIVATE_KEY="\$PRIVATE_KEY" \\
bash scripts/setup-dodo-pools.sh
EOF
)
verify_cmd=$(cat <<EOF
cast code --rpc-url $rpc $pool_usdc_expected
cast code --rpc-url $rpc $pool_usdt_expected
cast call --rpc-url $rpc \${$integration_env:-REPLACE_WITH_DEPLOYED_INTEGRATION} 'pools(address,address)(address)' $cwusdc $official_usdc
cast call --rpc-url $rpc \${$integration_env:-REPLACE_WITH_DEPLOYED_INTEGRATION} 'pools(address,address)(address)' $cwusdt $official_usdt
EOF
)
if [[ $first_chain -eq 0 ]]; then
echo "," >>"$json_file"
fi
first_chain=0
cat >>"$json_file" <<EOF
{
"chainId": $chain_id,
"network": $(json_escape "$network"),
"rpc": $(json_escape "$rpc"),
"integrationEnv": $(json_escape "$integration_env"),
"integrationAddress": $(json_escape "$integration"),
"integrationStatus": $(json_escape "$integration_status"),
"dodoVendingMachine": {
"env": $(json_escape "$dvm_env"),
"address": $(json_escape "$dvm"),
"status": $(json_escape "$dvm_status")
},
"officialTokens": {
"USDC": {
"env": $(json_escape "$official_usdc_env"),
"address": $(json_escape "$official_usdc"),
"status": $(json_escape "$official_usdc_status"),
"symbol": $(json_escape "$(symbol_call "$rpc" "$official_usdc")")
},
"USDT": {
"env": $(json_escape "$official_usdt_env"),
"address": $(json_escape "$official_usdt"),
"status": $(json_escape "$official_usdt_status"),
"symbol": $(json_escape "$(symbol_call "$rpc" "$official_usdt")")
}
},
"compliantTokens": {
"cWUSDC": {
"env": $(json_escape "$cwusdc_env"),
"address": $(json_escape "$cwusdc"),
"status": $(json_escape "$cwusdc_status"),
"symbol": $(json_escape "$(symbol_call "$rpc" "$cwusdc")")
},
"cWUSDT": {
"env": $(json_escape "$cwusdt_env"),
"address": $(json_escape "$cwusdt"),
"status": $(json_escape "$cwusdt_status"),
"symbol": $(json_escape "$(symbol_call "$rpc" "$cwusdt")")
}
},
"pairs": [
{
"pair": "cWUSDC/USDC",
"expectedPoolAddress": $(json_escape "$pool_usdc_expected"),
"poolCodeStatus": $(json_escape "$pool_usdc_status")
},
{
"pair": "cWUSDT/USDT",
"expectedPoolAddress": $(json_escape "$pool_usdt_expected"),
"poolCodeStatus": $(json_escape "$pool_usdt_status")
}
],
"commands": {
"deployIntegration": $(json_escape "$deploy_cmd"),
"createPools": $(json_escape "$create_cmd"),
"verifyPools": $(json_escape "$verify_cmd")
}
}
EOF
{
echo
echo "## $network ($chain_id)"
echo
echo "| Item | Address | Status |"
echo "| --- | --- | --- |"
echo "| DODO vending machine | \`$dvm\` | \`$dvm_status\` |"
echo "| Integration env \`$integration_env\` | \`${integration:-unset}\` | \`$integration_status\` |"
echo "| Official USDC | \`$official_usdc\` | \`$official_usdc_status\` |"
echo "| Official USDT | \`$official_usdt\` | \`$official_usdt_status\` |"
echo "| cWUSDC | \`$cwusdc\` | \`$cwusdc_status\` |"
echo "| cWUSDT | \`$cwusdt\` | \`$cwusdt_status\` |"
echo "| Pool cWUSDC/USDC | \`$pool_usdc_expected\` | \`$pool_usdc_status\` |"
echo "| Pool cWUSDT/USDT | \`$pool_usdt_expected\` | \`$pool_usdt_status\` |"
echo
echo "Deploy integration:"
echo
echo '```bash'
echo "$deploy_cmd"
echo '```'
echo
echo "Create pools:"
echo
echo '```bash'
echo "$create_cmd"
echo '```'
echo
echo "Verify pools:"
echo
echo '```bash'
echo "$verify_cmd"
echo '```'
} >>"$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"