- 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
156 lines
5.3 KiB
Bash
156 lines
5.3 KiB
Bash
#!/usr/bin/env bash
|
|
# Deploy a generic GRU c* V2 asset to Chain 138 and optionally stage it in UniversalAssetRegistry.
|
|
#
|
|
# Usage:
|
|
# TOKEN_NAME="Euro Coin (Compliant V2)" TOKEN_SYMBOL="cEURC" CURRENCY_CODE=EUR \
|
|
# REGISTRY_NAME="Euro Coin (Compliant V2)" REGISTRY_SYMBOL="cEURC.v2" \
|
|
# bash scripts/deployment/deploy-gru-v2-generic-chain138.sh
|
|
# ... --dry-run
|
|
#
|
|
# Required env:
|
|
# PRIVATE_KEY
|
|
# TOKEN_NAME
|
|
# TOKEN_SYMBOL
|
|
# CURRENCY_CODE
|
|
#
|
|
# Optional env:
|
|
# TOKEN_DECIMALS=6
|
|
# VERSION_TAG=2
|
|
# INITIAL_SUPPLY=0
|
|
# FORWARD_CANONICAL=1
|
|
# REGISTER_IN_GRU=1
|
|
# GOVERNANCE_CONTROLLER, UNIVERSAL_ASSET_REGISTRY
|
|
# REGISTRY_NAME, REGISTRY_SYMBOL
|
|
# TOKEN_URI, REGULATORY_DISCLOSURE_URI, REPORTING_URI
|
|
|
|
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}"
|
|
: "${TOKEN_NAME:?TOKEN_NAME is required}"
|
|
: "${TOKEN_SYMBOL:?TOKEN_SYMBOL is required}"
|
|
: "${CURRENCY_CODE:?CURRENCY_CODE 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}"
|
|
TOKEN_DECIMALS="${TOKEN_DECIMALS:-6}"
|
|
VERSION_TAG="${VERSION_TAG:-2}"
|
|
INITIAL_SUPPLY="${INITIAL_SUPPLY:-0}"
|
|
FORWARD_CANONICAL="${FORWARD_CANONICAL:-1}"
|
|
REGISTER_IN_GRU="${REGISTER_IN_GRU:-1}"
|
|
REGISTRY_NAME="${REGISTRY_NAME:-$TOKEN_NAME}"
|
|
REGISTRY_SYMBOL="${REGISTRY_SYMBOL:-${TOKEN_SYMBOL}.v${VERSION_TAG}}"
|
|
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 generic GRU v2 deploy: deployer has pending transactions." >&2
|
|
echo "deployer=$deployer_address latest_nonce=$latest_nonce pending_nonce=$pending_nonce" >&2
|
|
exit 1
|
|
fi
|
|
|
|
CMD=(
|
|
forge script script/deploy/DeployAndStageGenericCompliantFiatTokenV2ForChain.s.sol
|
|
--rpc-url "$RPC_URL_138"
|
|
--broadcast
|
|
--private-key "$PRIVATE_KEY"
|
|
--with-gas-price "$GAS_PRICE_WEI"
|
|
)
|
|
|
|
echo "=== Generic GRU v2 Chain 138 deploy ==="
|
|
echo "RPC_URL_138=$RPC_URL_138"
|
|
echo "TOKEN_NAME=$TOKEN_NAME"
|
|
echo "TOKEN_SYMBOL=$TOKEN_SYMBOL"
|
|
echo "CURRENCY_CODE=$CURRENCY_CODE"
|
|
echo "TOKEN_DECIMALS=$TOKEN_DECIMALS"
|
|
echo "VERSION_TAG=$VERSION_TAG"
|
|
echo "REGISTRY_NAME=$REGISTRY_NAME"
|
|
echo "REGISTRY_SYMBOL=$REGISTRY_SYMBOL"
|
|
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 "DEPLOYER=$deployer_address"
|
|
echo "NONCE_LATEST=$latest_nonce"
|
|
echo "NONCE_PENDING=$pending_nonce"
|
|
|
|
if [[ "$DRY_RUN" == "1" ]]; then
|
|
printf '[DRY_RUN] (cd %s && ' "$SMOM_ROOT"
|
|
printf 'TOKEN_NAME=%q TOKEN_SYMBOL=%q CURRENCY_CODE=%q TOKEN_DECIMALS=%q VERSION_TAG=%q ' \
|
|
"$TOKEN_NAME" "$TOKEN_SYMBOL" "$CURRENCY_CODE" "$TOKEN_DECIMALS" "$VERSION_TAG"
|
|
printf 'INITIAL_SUPPLY=%q FORWARD_CANONICAL=%q REGISTER_IN_GRU=%q GOVERNANCE_CONTROLLER=%q UNIVERSAL_ASSET_REGISTRY=%q REGISTRY_NAME=%q REGISTRY_SYMBOL=%q GAS_PRICE_WEI=%q ' \
|
|
"$INITIAL_SUPPLY" "$FORWARD_CANONICAL" "$REGISTER_IN_GRU" "$GOVERNANCE_CONTROLLER" "$UNIVERSAL_ASSET_REGISTRY" "$REGISTRY_NAME" "$REGISTRY_SYMBOL" "$GAS_PRICE_WEI"
|
|
printf 'TOKEN_URI=%q REGULATORY_DISCLOSURE_URI=%q REPORTING_URI=%q ' \
|
|
"${TOKEN_URI:-}" "${REGULATORY_DISCLOSURE_URI:-}" "${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"
|
|
TOKEN_NAME="$TOKEN_NAME" \
|
|
TOKEN_SYMBOL="$TOKEN_SYMBOL" \
|
|
CURRENCY_CODE="$CURRENCY_CODE" \
|
|
TOKEN_DECIMALS="$TOKEN_DECIMALS" \
|
|
VERSION_TAG="$VERSION_TAG" \
|
|
INITIAL_SUPPLY="$INITIAL_SUPPLY" \
|
|
FORWARD_CANONICAL="$FORWARD_CANONICAL" \
|
|
REGISTER_IN_GRU="$REGISTER_IN_GRU" \
|
|
GOVERNANCE_CONTROLLER="$GOVERNANCE_CONTROLLER" \
|
|
UNIVERSAL_ASSET_REGISTRY="$UNIVERSAL_ASSET_REGISTRY" \
|
|
REGISTRY_NAME="$REGISTRY_NAME" \
|
|
REGISTRY_SYMBOL="$REGISTRY_SYMBOL" \
|
|
GAS_PRICE_WEI="$GAS_PRICE_WEI" \
|
|
TOKEN_URI="${TOKEN_URI:-}" \
|
|
REGULATORY_DISCLOSURE_URI="${REGULATORY_DISCLOSURE_URI:-}" \
|
|
REPORTING_URI="${REPORTING_URI:-}" \
|
|
"${CMD[@]}"
|
|
)
|