#!/usr/bin/env bash # Setup script for StablecoinReserveVault # Configures and funds the reserve vault with official tokens set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" # Colors RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' log_info() { echo -e "${BLUE}[INFO]${NC} $1"; } log_success() { echo -e "${GREEN}[✓]${NC} $1"; } log_warn() { echo -e "${YELLOW}[⚠]${NC} $1"; } log_error() { echo -e "${RED}[✗]${NC} $1"; } if [[ -f "$SCRIPT_DIR/lib/deployment/dotenv.sh" ]]; then # shellcheck disable=SC1090 source "$SCRIPT_DIR/lib/deployment/dotenv.sh" load_deployment_env --repo-root "$PROJECT_ROOT" elif [ -f "$PROJECT_ROOT/.env" ]; then set -a && source "$PROJECT_ROOT/.env" && set +a fi RPC_URL="${RPC_URL:-${ETHEREUM_MAINNET_RPC:-${ETH_MAINNET_RPC_URL:-}}}" RPC_URL="${RPC_URL%$'\r'}" RPC_URL="${RPC_URL%$'\n'}" VAULT_ADDRESS="${STABLECOIN_RESERVE_VAULT_ADDRESS:-}" OFFICIAL_USDT="${OFFICIAL_USDT_ADDRESS:-0xdAC17F958D2ee523a2206206994597C13D831ec7}" OFFICIAL_USDC="${OFFICIAL_USDC_ADDRESS:-0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48}" if [ -z "$RPC_URL" ]; then log_error "RPC_URL not set. Please set ETH_MAINNET_RPC_URL or RPC_URL" exit 1 fi if [ -z "$VAULT_ADDRESS" ]; then log_error "STABLECOIN_RESERVE_VAULT_ADDRESS not set" exit 1 fi if [ -z "$PRIVATE_KEY" ]; then log_error "PRIVATE_KEY not set" exit 1 fi log_info "=========================================" log_info "StablecoinReserveVault Setup" log_info "=========================================" log_info "" log_info "Vault Address: $VAULT_ADDRESS" log_info "Official USDT: $OFFICIAL_USDT" log_info "Official USDC: $OFFICIAL_USDC" log_info "RPC URL: $RPC_URL" log_info "" # Check vault status log_info "Checking vault status..." USDT_RESERVE=$(cast call "$VAULT_ADDRESS" "usdtReserveBalance()" --rpc-url "$RPC_URL" 2>/dev/null | cast --to-dec 2>/dev/null || echo "0") USDC_RESERVE=$(cast call "$VAULT_ADDRESS" "usdcReserveBalance()" --rpc-url "$RPC_URL" 2>/dev/null | cast --to-dec 2>/dev/null || echo "0") PAUSED=$(cast call "$VAULT_ADDRESS" "paused()" --rpc-url "$RPC_URL" 2>/dev/null | cast --to-dec 2>/dev/null || echo "false") log_info "Current USDT Reserve: $USDT_RESERVE" log_info "Current USDC Reserve: $USDC_RESERVE" log_info "Paused Status: $PAUSED" if [ "$PAUSED" = "1" ] || [ "$PAUSED" = "true" ]; then log_warn "Vault is paused. Operations are disabled." read -p "Do you want to unpause? (y/n) " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then log_info "Unpausing vault..." cast send "$VAULT_ADDRESS" \ "unpause()" \ --rpc-url "$RPC_URL" \ --private-key "$PRIVATE_KEY" \ --gas-price 30000000000 \ --legacy log_success "Vault unpaused" fi fi log_info "" log_info "To fund the vault:" log_info "1. Approve tokens to vault:" log_info " cast send $OFFICIAL_USDT \\" log_info " \"approve(address,uint256)\" \\" log_info " $VAULT_ADDRESS \\" log_info " \\" log_info " --rpc-url $RPC_URL \\" log_info " --private-key \$PRIVATE_KEY" log_info "" log_info "2. Deposit USDT:" log_info " cast send $VAULT_ADDRESS \\" log_info " \"depositUSDT(uint256)\" \\" log_info " \\" log_info " --rpc-url $RPC_URL \\" log_info " --private-key \$PRIVATE_KEY" log_info "" log_info "3. Deposit USDC (similar for USDC)"