Files
proxmox/scripts/deployment/deploy-gru-v2-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

137 lines
5.0 KiB
Bash

#!/usr/bin/env bash
# Deploy fresh source-aligned GRU c* V2 USD tokens to Chain 138 and stage them in UniversalAssetRegistry.
#
# Usage:
# bash scripts/deployment/deploy-gru-v2-chain138.sh
# bash scripts/deployment/deploy-gru-v2-chain138.sh --dry-run
#
# Defaults:
# - INITIAL_SUPPLY=0
# - FORWARD_CANONICAL=1
# - REGISTER_IN_GRU=1
# - GOVERNANCE_CONTROLLER from env or canonical Chain 138 inventory
# - per-token metadata/disclosure/reporting URIs can be exported from
# scripts/deployment/publish-gru-v2-chain138-metadata-to-ipfs.sh
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
SMOM_ROOT="${PROJECT_ROOT}/smom-dbis-138"
DRY_RUN=0
for arg in "$@"; do
case "$arg" in
--dry-run) DRY_RUN=1 ;;
*)
echo "Unknown argument: $arg" >&2
exit 2
;;
esac
done
if [[ -f "${PROJECT_ROOT}/scripts/lib/load-project-env.sh" ]]; then
set +eu
# shellcheck source=../lib/load-project-env.sh
source "${PROJECT_ROOT}/scripts/lib/load-project-env.sh" 2>/dev/null || true
set -euo pipefail
fi
: "${PRIVATE_KEY:?PRIVATE_KEY is required}"
RPC_URL_138="${RPC_URL_138:-http://192.168.11.211:8545}"
UNIVERSAL_ASSET_REGISTRY="${UNIVERSAL_ASSET_REGISTRY:-0xAEE4b7fBe82E1F8295951584CBc772b8BBD68575}"
GOVERNANCE_CONTROLLER="${GOVERNANCE_CONTROLLER:-0xA6891D5229f2181a34D4FF1B515c3Aa37dd90E0e}"
INITIAL_SUPPLY="${INITIAL_SUPPLY:-0}"
FORWARD_CANONICAL="${FORWARD_CANONICAL:-1}"
REGISTER_IN_GRU="${REGISTER_IN_GRU:-1}"
DEPLOY_CUSDT_V2="${DEPLOY_CUSDT_V2:-1}"
DEPLOY_CUSDC_V2="${DEPLOY_CUSDC_V2:-1}"
GAS_PRICE_WEI="${GAS_PRICE_WEI:-1000000000}"
if ! command -v cast >/dev/null 2>&1; then
echo "cast is required for nonce preflight checks" >&2
exit 1
fi
deployer_address="$(cast wallet address --private-key "$PRIVATE_KEY" 2>/dev/null)"
latest_nonce="$(cast rpc --rpc-url "$RPC_URL_138" eth_getTransactionCount "$deployer_address" latest | tr -d '\"')"
pending_nonce="$(cast rpc --rpc-url "$RPC_URL_138" eth_getTransactionCount "$deployer_address" pending | tr -d '\"')"
if [[ "$latest_nonce" != "$pending_nonce" ]]; then
echo "Refusing GRU v2 deploy: deployer has pending transactions." >&2
echo "deployer=$deployer_address latest_nonce=$latest_nonce pending_nonce=$pending_nonce" >&2
echo "Resolve or replace the pending transaction set before retrying." >&2
exit 1
fi
CMD=(
forge script script/deploy/DeployAndStageCompliantFiatTokensV2ForChain.s.sol
--rpc-url "$RPC_URL_138"
--broadcast
--private-key "$PRIVATE_KEY"
--with-gas-price "$GAS_PRICE_WEI"
)
echo "=== GRU v2 Chain 138 deploy ==="
echo "RPC_URL_138=$RPC_URL_138"
echo "UNIVERSAL_ASSET_REGISTRY=$UNIVERSAL_ASSET_REGISTRY"
echo "GOVERNANCE_CONTROLLER=$GOVERNANCE_CONTROLLER"
echo "INITIAL_SUPPLY=$INITIAL_SUPPLY"
echo "FORWARD_CANONICAL=$FORWARD_CANONICAL"
echo "REGISTER_IN_GRU=$REGISTER_IN_GRU"
echo "DEPLOY_CUSDT_V2=$DEPLOY_CUSDT_V2"
echo "DEPLOY_CUSDC_V2=$DEPLOY_CUSDC_V2"
echo "DEPLOYER=$deployer_address"
echo "NONCE_LATEST=$latest_nonce"
echo "NONCE_PENDING=$pending_nonce"
echo "CUSDT_V2_TOKEN_URI=${CUSDT_V2_TOKEN_URI:-}"
echo "CUSDC_V2_TOKEN_URI=${CUSDC_V2_TOKEN_URI:-}"
if [[ "$DRY_RUN" == "1" ]]; then
printf '[DRY_RUN] (cd %s && ' "$SMOM_ROOT"
printf 'INITIAL_SUPPLY=%q FORWARD_CANONICAL=%q REGISTER_IN_GRU=%q GOVERNANCE_CONTROLLER=%q UNIVERSAL_ASSET_REGISTRY=%q DEPLOY_CUSDT_V2=%q DEPLOY_CUSDC_V2=%q GAS_PRICE_WEI=%q ' \
"$INITIAL_SUPPLY" "$FORWARD_CANONICAL" "$REGISTER_IN_GRU" "$GOVERNANCE_CONTROLLER" "$UNIVERSAL_ASSET_REGISTRY" "$DEPLOY_CUSDT_V2" "$DEPLOY_CUSDC_V2" "$GAS_PRICE_WEI"
printf 'CUSDT_V2_TOKEN_URI=%q CUSDT_V2_REGULATORY_DISCLOSURE_URI=%q CUSDT_V2_REPORTING_URI=%q ' \
"${CUSDT_V2_TOKEN_URI:-}" "${CUSDT_V2_REGULATORY_DISCLOSURE_URI:-}" "${CUSDT_V2_REPORTING_URI:-}"
printf 'CUSDC_V2_TOKEN_URI=%q CUSDC_V2_REGULATORY_DISCLOSURE_URI=%q CUSDC_V2_REPORTING_URI=%q ' \
"${CUSDC_V2_TOKEN_URI:-}" "${CUSDC_V2_REGULATORY_DISCLOSURE_URI:-}" "${CUSDC_V2_REPORTING_URI:-}"
printed=()
skip_next=0
for arg in "${CMD[@]}"; do
if [[ "$skip_next" == "1" ]]; then
printed+=("<hidden>")
skip_next=0
continue
fi
if [[ "$arg" == "--private-key" ]]; then
printed+=("$arg")
skip_next=1
continue
fi
printed+=("$arg")
done
printf '%q ' "${printed[@]}"
printf ')\n'
exit 0
fi
(
cd "$SMOM_ROOT"
INITIAL_SUPPLY="$INITIAL_SUPPLY" \
FORWARD_CANONICAL="$FORWARD_CANONICAL" \
REGISTER_IN_GRU="$REGISTER_IN_GRU" \
DEPLOY_CUSDT_V2="$DEPLOY_CUSDT_V2" \
DEPLOY_CUSDC_V2="$DEPLOY_CUSDC_V2" \
GOVERNANCE_CONTROLLER="$GOVERNANCE_CONTROLLER" \
UNIVERSAL_ASSET_REGISTRY="$UNIVERSAL_ASSET_REGISTRY" \
GAS_PRICE_WEI="$GAS_PRICE_WEI" \
CUSDT_V2_TOKEN_URI="${CUSDT_V2_TOKEN_URI:-}" \
CUSDT_V2_REGULATORY_DISCLOSURE_URI="${CUSDT_V2_REGULATORY_DISCLOSURE_URI:-}" \
CUSDT_V2_REPORTING_URI="${CUSDT_V2_REPORTING_URI:-}" \
CUSDC_V2_TOKEN_URI="${CUSDC_V2_TOKEN_URI:-}" \
CUSDC_V2_REGULATORY_DISCLOSURE_URI="${CUSDC_V2_REGULATORY_DISCLOSURE_URI:-}" \
CUSDC_V2_REPORTING_URI="${CUSDC_V2_REPORTING_URI:-}" \
"${CMD[@]}"
)