- 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
120 lines
4.8 KiB
Bash
Executable File
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."
|