Files
proxmox/scripts/verify/check-cross-chain-flash-infra-chain138.sh
defiQUG dbd517b279 Sync workspace: config, docs, scripts, CI, operator rules, and submodule pointers.
- Update dbis_core, cross-chain-pmm-lps, explorer-monorepo, metamask-integration, pr-workspace/chains
- Omit embedded publish git dirs and empty placeholders from index

Made-with: Cursor
2026-04-12 06:12:20 -07:00

120 lines
4.8 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
# Verify the deployed Chain 138 cross-chain flash infrastructure:
# - UniversalCCIPFlashBridgeAdapter
# - CrossChainFlashRepayReceiver
# - CrossChainFlashVaultCreditReceiver
#
# Checks:
# 1. Bytecode exists at all three addresses.
# 2. The adapter points at the expected UniversalCCIPBridge.
# 3. Both receivers point at the expected CCIP router.
# 4. Blockscout reports all three contracts as source-verified (unless skipped).
#
# Optional env overrides:
# RPC_URL_138
# FLASH_UNIVERSAL_CCIP_BRIDGE
# FLASH_CCIP_ROUTER
# CROSS_CHAIN_FLASH_BRIDGE_ADAPTER
# CROSS_CHAIN_FLASH_REPAY_RECEIVER
# CROSS_CHAIN_FLASH_VAULT_CREDIT_RECEIVER
# BLOCKSCOUT_API_BASE
# SKIP_BLOCKSCOUT=1
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)"
if [[ -f "${PROJECT_ROOT}/scripts/lib/load-project-env.sh" ]]; then
# shellcheck source=/dev/null
source "${PROJECT_ROOT}/scripts/lib/load-project-env.sh"
fi
RPC_URL="${RPC_URL_138:-http://192.168.11.211:8545}"
EXPECTED_BRIDGE="${FLASH_UNIVERSAL_CCIP_BRIDGE:-${UNIVERSAL_CCIP_BRIDGE:-0xCd42e8eD79Dc50599535d1de48d3dAFa0BE156F8}}"
EXPECTED_ROUTER="${FLASH_CCIP_ROUTER:-${CCIP_ROUTER:-${CCIP_ROUTER_ADDRESS:-${CCIP_ROUTER_CHAIN138:-0x42DAb7b888Dd382bD5Adcf9E038dBF1fD03b4817}}}}"
ADAPTER="${CROSS_CHAIN_FLASH_BRIDGE_ADAPTER:-0xBe9e0B2d4cF6A3b2994d6f2f0904D2B165eB8ffC}"
REPAY_RECEIVER="${CROSS_CHAIN_FLASH_REPAY_RECEIVER:-0xD084b68cB4B1ef2cBA09CF99FB1B6552fd9b4859}"
VAULT_CREDIT_RECEIVER="${CROSS_CHAIN_FLASH_VAULT_CREDIT_RECEIVER:-0x89F7a1fcbBe104BeE96Da4b4b6b7d3AF85f7E661}"
BLOCKSCOUT_API_BASE="${BLOCKSCOUT_API_BASE:-https://explorer.d-bis.org/api/v2}"
SKIP_BLOCKSCOUT="${SKIP_BLOCKSCOUT:-0}"
log() {
printf '%s\n' "$*"
}
ok() {
printf '[ok] %s\n' "$*"
}
fail() {
printf '[fail] %s\n' "$*" >&2
exit 1
}
require_command() {
command -v "$1" >/dev/null 2>&1 || fail "Missing required command: $1"
}
require_command cast
have_command() {
command -v "$1" >/dev/null 2>&1
}
check_code() {
local label="$1"
local address="$2"
local code
code="$(cast code --rpc-url "${RPC_URL}" "${address}")" || fail "Failed to read bytecode for ${label}."
[[ -n "${code}" && "${code}" != "0x" ]] || fail "${label} has no bytecode at ${address}."
ok "${label} bytecode present at ${address}."
}
check_blockscout_verified() {
local label="$1"
local address="$2"
local response
local is_verified
response="$(curl -fsS "${BLOCKSCOUT_API_BASE}/smart-contracts/${address}")" || fail "Failed to query Blockscout for ${label}."
is_verified="$(jq -r '.is_verified // false' <<<"${response}")" || fail "Failed to parse Blockscout response for ${label}."
[[ "${is_verified}" == "true" ]] || fail "${label} is not source-verified on Blockscout."
ok "${label} is source-verified on Blockscout."
}
log "Chain 138 cross-chain flash infrastructure verification"
log "RPC: ${RPC_URL}"
log "Expected bridge: ${EXPECTED_BRIDGE}"
log "Expected router: ${EXPECTED_ROUTER}"
log
check_code "UniversalCCIPFlashBridgeAdapter" "${ADAPTER}"
check_code "CrossChainFlashRepayReceiver" "${REPAY_RECEIVER}"
check_code "CrossChainFlashVaultCreditReceiver" "${VAULT_CREDIT_RECEIVER}"
bridge_value="$(cast call --rpc-url "${RPC_URL}" "${ADAPTER}" "universalBridge()(address)")" || fail "Failed to read adapter bridge."
[[ "${bridge_value,,}" == "${EXPECTED_BRIDGE,,}" ]] || fail "Adapter bridge mismatch: expected ${EXPECTED_BRIDGE}, got ${bridge_value}."
ok "Adapter points at UniversalCCIPBridge ${bridge_value}."
repay_router="$(cast call --rpc-url "${RPC_URL}" "${REPAY_RECEIVER}" "ccipRouter()(address)")" || fail "Failed to read repay receiver router."
[[ "${repay_router,,}" == "${EXPECTED_ROUTER,,}" ]] || fail "Repay receiver router mismatch: expected ${EXPECTED_ROUTER}, got ${repay_router}."
ok "Repay receiver points at CCIP router ${repay_router}."
vault_router="$(cast call --rpc-url "${RPC_URL}" "${VAULT_CREDIT_RECEIVER}" "ccipRouter()(address)")" || fail "Failed to read vault credit receiver router."
[[ "${vault_router,,}" == "${EXPECTED_ROUTER,,}" ]] || fail "Vault credit receiver router mismatch: expected ${EXPECTED_ROUTER}, got ${vault_router}."
ok "Vault credit receiver points at CCIP router ${vault_router}."
if [[ "${SKIP_BLOCKSCOUT}" == "1" ]]; then
log "Skipping Blockscout verification checks (SKIP_BLOCKSCOUT=1)."
elif have_command curl && have_command jq; then
check_blockscout_verified "UniversalCCIPFlashBridgeAdapter" "${ADAPTER}"
check_blockscout_verified "CrossChainFlashRepayReceiver" "${REPAY_RECEIVER}"
check_blockscout_verified "CrossChainFlashVaultCreditReceiver" "${VAULT_CREDIT_RECEIVER}"
else
log "Skipping Blockscout verification checks (curl and/or jq not available)."
fi
log
log "Result: Chain 138 cross-chain flash infrastructure looks healthy."