Files
smom-dbis-138/scripts/deployment/README.md
defiQUG 1fb7266469 Add Oracle Aggregator and CCIP Integration
- Introduced Aggregator.sol for Chainlink-compatible oracle functionality, including round-based updates and access control.
- Added OracleWithCCIP.sol to extend Aggregator with CCIP cross-chain messaging capabilities.
- Created .gitmodules to include OpenZeppelin contracts as a submodule.
- Developed a comprehensive deployment guide in NEXT_STEPS_COMPLETE_GUIDE.md for Phase 2 and smart contract deployment.
- Implemented Vite configuration for the orchestration portal, supporting both Vue and React frameworks.
- Added server-side logic for the Multi-Cloud Orchestration Portal, including API endpoints for environment management and monitoring.
- Created scripts for resource import and usage validation across non-US regions.
- Added tests for CCIP error handling and integration to ensure robust functionality.
- Included various new files and directories for the orchestration portal and deployment scripts.
2025-12-12 14:57:48 -08:00

403 lines
8.6 KiB
Markdown

# Deployment Scripts
This directory contains deployment automation scripts for ChainID 138.
## Scripts
### `deploy-all.sh`
Complete deployment automation script that orchestrates all deployment steps.
**Usage**:
```bash
./scripts/deployment/deploy-all.sh [options]
```
**Options**:
- `--skip-infrastructure`: Skip infrastructure deployment
- `--skip-kubernetes`: Skip Kubernetes deployment
- `--skip-blockscout`: Skip Blockscout deployment
- `--skip-contracts`: Skip contract deployment
- `--skip-cloudflare`: Skip Cloudflare DNS configuration
- `--skip-token-list`: Skip token list update
**Example**:
```bash
# Deploy everything
./scripts/deployment/deploy-all.sh
# Deploy only contracts
./scripts/deployment/deploy-all.sh \
--skip-infrastructure \
--skip-kubernetes \
--skip-blockscout \
--skip-cloudflare
```
### `cloudflare-dns.sh`
Configures Cloudflare DNS records for d-bis.org domain.
**Usage**:
```bash
./scripts/deployment/cloudflare-dns.sh \
--zone-id <ZONE_ID> \
--api-token <API_TOKEN> \
--ip <IP_ADDRESS> \
[--domain <DOMAIN>]
```
**Example**:
```bash
./scripts/deployment/cloudflare-dns.sh \
--zone-id abc123def456 \
--api-token your-api-token \
--ip 1.2.3.4
```
### `update-token-list.sh`
Updates token-list.json with deployed contract addresses.
**Usage**:
```bash
./scripts/deployment/update-token-list.sh
```
**Requirements**:
- `contracts-deployed.json` file must exist
- Contract addresses must be in the file
### `verify-deployment.sh`
Comprehensive deployment verification script.
**Usage**:
```bash
./scripts/deployment/verify-deployment.sh
```
**Checks**:
- RPC endpoint accessibility
- Blockscout explorer accessibility
- Contract deployments
- Kubernetes resources
- MetaMask integration files
- DNS configuration
### `submit-ethereum-lists-pr.sh`
Automates the creation of a PR to ethereum-lists/chains.
**Usage**:
```bash
./scripts/deployment/submit-ethereum-lists-pr.sh
```
**Requirements**:
- GitHub CLI (`gh`) installed and authenticated
- Fork of ethereum-lists/chains repository
### `submit-token-list.sh`
Provides instructions for submitting token list to aggregators.
**Usage**:
```bash
./scripts/deployment/submit-token-list.sh
```
**Output**:
- Submission instructions for CoinGecko
- Submission instructions for Uniswap
- Submission instructions for Token Lists aggregator
- Submission report file
### WETH Contract Deployment Scripts
#### `deploy-weth.sh`
Deploys WETH9 contract to ChainID 138.
**Usage**:
```bash
export RPC_URL="https://rpc.d-bis.org"
export PRIVATE_KEY="your-private-key"
./scripts/deployment/deploy-weth.sh
```
#### `deploy-weth10.sh`
Deploys WETH10 contract to ChainID 138.
**Usage**:
```bash
export RPC_URL="https://rpc.d-bis.org"
export PRIVATE_KEY="your-private-key"
./scripts/deployment/deploy-weth10.sh
```
#### `deploy-weth-with-ccip.sh`
Deploys all WETH contracts (WETH9, WETH10) and CCIP bridges in a single transaction.
**Usage**:
```bash
export RPC_URL="https://rpc.d-bis.org"
export PRIVATE_KEY="your-private-key"
export CCIP_ROUTER="0x..."
export CCIP_FEE_TOKEN="0x..." # LINK token address
# Optional: Configure what to deploy
export DEPLOY_WETH9="true"
export DEPLOY_WETH10="true"
export DEPLOY_BRIDGES="true"
# Optional: Use existing WETH addresses instead of deploying
export WETH9_ADDRESS="0x..." # Optional
export WETH10_ADDRESS="0x..." # Optional
./scripts/deployment/deploy-weth-with-ccip.sh
```
### CCIP Bridge Deployment Scripts
#### `deploy-ccip-weth9-bridge.sh`
Deploys CCIPWETH9Bridge for cross-chain WETH9 transfers.
**Usage**:
```bash
export RPC_URL="https://rpc.d-bis.org"
export PRIVATE_KEY="your-private-key"
export CCIP_ROUTER="0x..."
export CCIP_FEE_TOKEN="0x..." # LINK token address
export WETH9_ADDRESS="0x..." # WETH9 address (defaults to mainnet address)
./scripts/deployment/deploy-ccip-weth9-bridge.sh
```
#### `deploy-ccip-weth10-bridge.sh`
Deploys CCIPWETH10Bridge for cross-chain WETH10 transfers.
**Usage**:
```bash
export RPC_URL="https://rpc.d-bis.org"
export PRIVATE_KEY="your-private-key"
export CCIP_ROUTER="0x..."
export CCIP_FEE_TOKEN="0x..." # LINK token address
export WETH10_ADDRESS="0x..." # WETH10 address (defaults to mainnet address)
./scripts/deployment/deploy-ccip-weth10-bridge.sh
```
### Bridge Configuration Scripts
#### `configure-weth9-bridge.sh`
Provides instructions for configuring CCIPWETH9Bridge destinations.
**Usage**:
```bash
# Ensure .env file contains bridge addresses
./scripts/deployment/configure-weth9-bridge.sh
```
#### `configure-weth10-bridge.sh`
Provides instructions for configuring CCIPWETH10Bridge destinations.
**Usage**:
```bash
# Ensure .env file contains bridge addresses
./scripts/deployment/configure-weth10-bridge.sh
```
## Prerequisites
### Required Tools
- `az` - Azure CLI (must be authenticated with `az login`)
- `terraform` - Terraform
- `kubectl` - Kubernetes CLI
- `helm` - Helm
- `forge` - Foundry
- `cast` - Foundry
- `jq` - JSON processor
- `curl` - HTTP client
- `gh` - GitHub CLI (for PR submission)
### Azure Authentication
**Important**: Azure CLI must be authenticated before running deployment scripts.
#### For WSL Users
1. **Install Azure CLI** (if not already installed):
```bash
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
```
2. **Login to Azure**:
```bash
az login
```
This will open a browser window for authentication.
3. **Verify login**:
```bash
az account show
```
4. **Set subscription** (if needed):
```bash
az account set --subscription <subscription-id>
```
#### Using the Azure Login Helper Script
```bash
# Interactive login (opens browser)
./scripts/deployment/azure-login.sh interactive
# Service principal login
./scripts/deployment/azure-login.sh service-principal
# Managed identity login (for Azure VM/Container)
./scripts/deployment/azure-login.sh managed-identity
```
#### Service Principal Authentication
For CI/CD or automated deployments, use service principal:
```bash
az login --service-principal \
--username <app-id> \
--password <app-secret> \
--tenant <tenant-id>
```
Set these in your `.env` file:
- `AZURE_CLIENT_ID` - Service principal app ID
- `AZURE_CLIENT_SECRET` - Service principal secret
- `AZURE_TENANT_ID` - Azure tenant ID
- `AZURE_SUBSCRIPTION_ID` - Azure subscription ID
### Required Environment Variables
- `AZURE_SUBSCRIPTION_ID`
- `AZURE_TENANT_ID`
- `AZURE_CLIENT_ID`
- `AZURE_CLIENT_SECRET`
- `AZURE_RESOURCE_GROUP`
- `CLOUDFLARE_API_TOKEN`
- `CLOUDFLARE_ZONE_ID`
- `PRIVATE_KEY`
- `RPC_URL`
- `EXPLORER_URL`
## Deployment Workflow
### 1. Initial Setup
```bash
# Create .env file
cp .env.example .env
# Edit .env with your values
# Authenticate with Azure (required for infrastructure/Kubernetes/Cloudflare tasks)
# For WSL users:
az login
# Or use the helper script:
./scripts/deployment/azure-login.sh
# Verify authentication
az account show
# Verify prerequisites
./scripts/deployment/deploy-all.sh --help
```
### 2. Deploy Infrastructure
```bash
# Deploy Azure infrastructure
./scripts/deployment/deploy-all.sh \
--skip-kubernetes \
--skip-blockscout \
--skip-contracts \
--skip-cloudflare
```
### 3. Configure DNS
```bash
# Get Application Gateway IP
APP_GATEWAY_IP=$(az network application-gateway show ...)
# Configure Cloudflare DNS
./scripts/deployment/cloudflare-dns.sh \
--zone-id $CLOUDFLARE_ZONE_ID \
--api-token $CLOUDFLARE_API_TOKEN \
--ip $APP_GATEWAY_IP
```
### 4. Deploy Kubernetes
```bash
# Deploy Kubernetes resources
./scripts/deployment/deploy-all.sh \
--skip-infrastructure \
--skip-blockscout \
--skip-contracts \
--skip-cloudflare
```
### 5. Deploy Blockscout
```bash
# Deploy Blockscout
./scripts/deployment/deploy-all.sh \
--skip-infrastructure \
--skip-kubernetes \
--skip-contracts \
--skip-cloudflare
```
### 6. Deploy Contracts
```bash
# Deploy contracts
./scripts/deployment/deploy-all.sh \
--skip-infrastructure \
--skip-kubernetes \
--skip-blockscout \
--skip-cloudflare
```
### 7. Update Token List
```bash
# Update token list
./scripts/deployment/update-token-list.sh
```
### 8. Verify Deployment
```bash
# Verify deployment
./scripts/deployment/verify-deployment.sh
```
## Troubleshooting
### Common Issues
#### Terraform Errors
- Check Azure credentials
- Verify resource group exists
- Check Terraform state
#### Kubernetes Errors
- Verify kubectl is configured
- Check AKS cluster is accessible
- Verify namespace exists
#### Contract Deployment Errors
- Check RPC URL is accessible
- Verify private key is correct
- Check account has sufficient balance
#### DNS Errors
- Verify Cloudflare credentials
- Check DNS zone exists
- Wait for DNS propagation
## Support
For issues or questions:
- Review deployment logs
- Check troubleshooting guide
- Open an issue on GitHub