#!/bin/bash # Complete Smart Accounts Deployment Script # Orchestrates all deployment steps set -e # Colors RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Logging functions log_info() { echo -e "${BLUE}[INFO]${NC} $1" } log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1" } log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } # Get script directory SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" SMOM_DIR="$(cd "$PROJECT_ROOT/../smom-dbis-138" && pwd)" log_info "Smart Accounts Complete Deployment Script" log_info "==========================================" # Check prerequisites log_info "Checking prerequisites..." # Check Foundry if ! command -v forge &> /dev/null; then log_error "Foundry not found. Please install Foundry first." exit 1 fi # Check Node.js if ! command -v node &> /dev/null; then log_error "Node.js not found. Please install Node.js v18+ first." exit 1 fi # Check .env file if [ ! -f "$SMOM_DIR/.env" ]; then log_error ".env file not found in $SMOM_DIR" exit 1 fi # Load environment variables source "$SMOM_DIR/.env" if [ -z "$RPC_URL_138" ]; then log_error "RPC_URL_138 not set in .env" exit 1 fi if [ -z "$PRIVATE_KEY" ]; then log_error "PRIVATE_KEY not set in .env" exit 1 fi log_success "Prerequisites check passed" # Phase 1: Install SDK log_info "Phase 1: Installing Smart Accounts SDK..." cd "$PROJECT_ROOT" if [ -f "scripts/install-smart-accounts-sdk.sh" ]; then bash scripts/install-smart-accounts-sdk.sh log_success "SDK installation complete" else log_warning "SDK installation script not found, skipping..." fi # Phase 2: Deploy Smart Accounts Kit Contracts log_info "Phase 2: Deploying Smart Accounts Kit contracts..." cd "$SMOM_DIR" log_info "Deploying EntryPoint and AccountFactory..." if [ -f "script/smart-accounts/DeploySmartAccountsKit.s.sol" ]; then forge script script/smart-accounts/DeploySmartAccountsKit.s.sol \ --rpc-url "$RPC_URL_138" \ --broadcast \ --verify \ -vvv log_success "Smart Accounts Kit contracts deployed" # Extract addresses from output (user will need to update config) log_warning "Please record the deployed contract addresses and update config/smart-accounts-config.json" else log_error "Deployment script not found: script/smart-accounts/DeploySmartAccountsKit.s.sol" exit 1 fi # Phase 3: Update Configuration log_info "Phase 3: Updating configuration..." cd "$PROJECT_ROOT" if [ -f "scripts/update-smart-accounts-config.sh" ]; then log_info "Run the following command to update configuration:" log_info " ./scripts/update-smart-accounts-config.sh --interactive" log_warning "Configuration update requires manual input of contract addresses" else log_warning "Configuration update script not found" fi # Phase 4: Deploy AccountWalletRegistryExtended log_info "Phase 4: Deploying AccountWalletRegistryExtended..." cd "$SMOM_DIR" if [ -f "script/smart-accounts/DeployAccountWalletRegistryExtended.s.sol" ]; then # Check if addresses are set if [ -z "$SMART_ACCOUNT_FACTORY" ] || [ -z "$ENTRY_POINT" ]; then log_warning "SMART_ACCOUNT_FACTORY or ENTRY_POINT not set in .env" log_warning "Please set these after deploying Smart Accounts Kit contracts" log_warning "Then run: forge script script/smart-accounts/DeployAccountWalletRegistryExtended.s.sol --rpc-url \$RPC_URL_138 --broadcast" else forge script script/smart-accounts/DeployAccountWalletRegistryExtended.s.sol \ --rpc-url "$RPC_URL_138" \ --broadcast \ --verify \ -vvv log_success "AccountWalletRegistryExtended deployed" fi else log_error "Deployment script not found: script/smart-accounts/DeployAccountWalletRegistryExtended.s.sol" exit 1 fi # Phase 5: Setup Monitoring log_info "Phase 5: Setting up monitoring..." cd "$PROJECT_ROOT" if [ -f "scripts/setup-monitoring.sh" ]; then bash scripts/setup-monitoring.sh log_success "Monitoring setup complete" else log_warning "Monitoring setup script not found, skipping..." fi # Phase 6: Run Tests log_info "Phase 6: Running tests..." cd "$SMOM_DIR" log_info "Running unit tests..." if forge test --match-path "test/smart-accounts/**" -vv; then log_success "Unit tests passed" else log_warning "Some unit tests failed (this may be expected if contracts not deployed)" fi cd "$PROJECT_ROOT" log_info "Running integration tests..." if [ -f "package.json" ] && npm test 2>/dev/null; then log_success "Integration tests passed" else log_warning "Integration tests skipped (may require deployed contracts)" fi # Summary log_info "==========================================" log_success "Deployment script completed!" log_info "Next steps:" log_info "1. Update config/smart-accounts-config.json with deployed addresses" log_info "2. Run verification script: ./scripts/verify-deployment.sh" log_info "3. Review deployment checklist: DEPLOYMENT_CHECKLIST.md" log_info "4. Setup monitoring and alerts" log_info "5. Perform security audit before production use"