Initial commit
This commit is contained in:
232
docs/DEPLOYMENT.md
Normal file
232
docs/DEPLOYMENT.md
Normal file
@@ -0,0 +1,232 @@
|
||||
# Deployment Guide
|
||||
|
||||
## Prerequisites
|
||||
|
||||
1. **Node.js** >= 18.0.0
|
||||
2. **Foundry** (Forge) installed
|
||||
3. **Environment variables** configured
|
||||
4. **Testnet tokens** for testing
|
||||
|
||||
## Environment Setup
|
||||
|
||||
### 1. Install Dependencies
|
||||
|
||||
```bash
|
||||
# Install Node.js dependencies
|
||||
npm install
|
||||
|
||||
# Install Foundry dependencies
|
||||
forge install
|
||||
```
|
||||
|
||||
### 2. Configure Environment
|
||||
|
||||
Create `.env` file:
|
||||
|
||||
```env
|
||||
# RPC URLs
|
||||
RPC_URL=https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY
|
||||
TESTNET_RPC_URL=https://eth-sepolia.g.alchemy.com/v2/YOUR_KEY
|
||||
|
||||
# Private Keys
|
||||
PRIVATE_KEY=your_private_key_here
|
||||
MULTISIG_ADDRESS=your_multisig_address
|
||||
|
||||
# Contract Addresses (will be filled after deployment)
|
||||
VAULT_ADDRESS=
|
||||
KERNEL_ADDRESS=
|
||||
FLASH_ROUTER_ADDRESS=
|
||||
CONFIG_REGISTRY_ADDRESS=
|
||||
POLICY_ENGINE_ADDRESS=
|
||||
GOVERNANCE_GUARD_ADDRESS=
|
||||
ORACLE_ADAPTER_ADDRESS=
|
||||
COLLATERAL_MANAGER_ADDRESS=
|
||||
|
||||
# Protocol Addresses (Mainnet)
|
||||
AAVE_POOL_ADDRESS=0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2
|
||||
UNISWAP_ROUTER_ADDRESS=0xE592427A0AEce92De3Edee1F18E0157C05861564
|
||||
BALANCER_VAULT_ADDRESS=0xBA12222222228d8Ba445958a75a0704d566BF2C8
|
||||
DAI_FLASH_MINT_ADDRESS=0x1EB4CF3A948E7D72A198fe073cCb8C7a948cD853
|
||||
|
||||
# Chainlink Feeds
|
||||
CHAINLINK_WETH_USD=0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419
|
||||
CHAINLINK_WBTC_USD=0xF4030086522a5bEEa4988F8cA5B36dbC97BeE88c
|
||||
```
|
||||
|
||||
## Deployment Order
|
||||
|
||||
Deploy contracts in this order (respects dependencies):
|
||||
|
||||
### Step 1: Oracle Adapter
|
||||
|
||||
```bash
|
||||
forge script scripts/deploy.ts:DeployOracleAdapter --rpc-url $TESTNET_RPC_URL --broadcast
|
||||
```
|
||||
|
||||
### Step 2: Config Registry
|
||||
|
||||
```bash
|
||||
forge script scripts/deploy.ts:DeployConfigRegistry --rpc-url $TESTNET_RPC_URL --broadcast
|
||||
```
|
||||
|
||||
### Step 3: Policy Modules
|
||||
|
||||
Deploy all 4 policy modules:
|
||||
|
||||
```bash
|
||||
forge script scripts/deploy.ts:DeployPolicyHFTrend --rpc-url $TESTNET_RPC_URL --broadcast
|
||||
forge script scripts/deploy.ts:DeployPolicyFlashVolume --rpc-url $TESTNET_RPC_URL --broadcast
|
||||
forge script scripts/deploy.ts:DeployPolicyLiquiditySpread --rpc-url $TESTNET_RPC_URL --broadcast
|
||||
forge script scripts/deploy.ts:DeployPolicyProviderConcentration --rpc-url $TESTNET_RPC_URL --broadcast
|
||||
```
|
||||
|
||||
### Step 4: Policy Engine
|
||||
|
||||
```bash
|
||||
forge script scripts/deploy.ts:DeployPolicyEngine --rpc-url $TESTNET_RPC_URL --broadcast
|
||||
```
|
||||
|
||||
### Step 5: Vault
|
||||
|
||||
```bash
|
||||
forge script scripts/deploy.ts:DeployVault --rpc-url $TESTNET_RPC_URL --broadcast
|
||||
```
|
||||
|
||||
### Step 6: Flash Router
|
||||
|
||||
```bash
|
||||
forge script scripts/deploy.ts:DeployFlashRouter --rpc-url $TESTNET_RPC_URL --broadcast
|
||||
```
|
||||
|
||||
### Step 7: Collateral Manager
|
||||
|
||||
```bash
|
||||
forge script scripts/deploy.ts:DeployCollateralManager --rpc-url $TESTNET_RPC_URL --broadcast
|
||||
```
|
||||
|
||||
### Step 8: Governance Guard
|
||||
|
||||
```bash
|
||||
forge script scripts/deploy.ts:DeployGovernanceGuard --rpc-url $TESTNET_RPC_URL --broadcast
|
||||
```
|
||||
|
||||
### Step 9: Kernel
|
||||
|
||||
```bash
|
||||
forge script scripts/deploy.ts:DeployKernel --rpc-url $TESTNET_RPC_URL --broadcast
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
After deployment, configure all contracts:
|
||||
|
||||
```bash
|
||||
tsx scripts/configure.ts
|
||||
```
|
||||
|
||||
This script will:
|
||||
1. Set Config Registry parameters
|
||||
2. Register policy modules with Policy Engine
|
||||
3. Configure Oracle Adapter with price feeds
|
||||
4. Grant roles (Kernel, Operator)
|
||||
5. Set allowed assets
|
||||
6. Configure provider caps
|
||||
|
||||
## Verification
|
||||
|
||||
### 1. Verify Contracts on Etherscan
|
||||
|
||||
```bash
|
||||
forge verify-contract --chain-id 1 --num-of-optimizations 200 \
|
||||
--compiler-version v0.8.24 \
|
||||
CONTRACT_ADDRESS CONTRACT_NAME \
|
||||
--constructor-args $(cast abi-encode "constructor(...)" ARG1 ARG2 ...)
|
||||
```
|
||||
|
||||
### 2. Run Tests
|
||||
|
||||
```bash
|
||||
# Unit tests
|
||||
forge test
|
||||
|
||||
# Fork tests (on mainnet fork)
|
||||
forge test --fork-url $RPC_URL
|
||||
|
||||
# Coverage
|
||||
forge coverage
|
||||
```
|
||||
|
||||
### 3. Run Simulations
|
||||
|
||||
```bash
|
||||
tsx scripts/simulate.ts
|
||||
```
|
||||
|
||||
## Multi-Chain Deployment
|
||||
|
||||
### Arbitrum
|
||||
|
||||
```bash
|
||||
export ARBITRUM_RPC_URL=https://arb1.arbitrum.io/rpc
|
||||
forge script scripts/deploy.ts --rpc-url $ARBITRUM_RPC_URL --broadcast
|
||||
```
|
||||
|
||||
### Polygon
|
||||
|
||||
```bash
|
||||
export POLYGON_RPC_URL=https://polygon-rpc.com
|
||||
forge script scripts/deploy.ts --rpc-url $POLYGON_RPC_URL --broadcast
|
||||
```
|
||||
|
||||
Update protocol addresses for each chain in `.env`.
|
||||
|
||||
## Mainnet Deployment Checklist
|
||||
|
||||
- [ ] All contracts tested on testnet
|
||||
- [ ] All parameters verified
|
||||
- [ ] Multi-sig wallet configured
|
||||
- [ ] Emergency pause mechanism ready
|
||||
- [ ] Monitoring dashboard setup
|
||||
- [ ] Alert system configured
|
||||
- [ ] Documentation reviewed
|
||||
- [ ] Security audit completed (if applicable)
|
||||
- [ ] Gas optimization verified
|
||||
- [ ] Backup deployment scripts ready
|
||||
|
||||
## Post-Deployment
|
||||
|
||||
1. **Monitor closely** for first 24-48 hours
|
||||
2. **Start with conservative parameters**
|
||||
3. **Gradually increase limits** after stability
|
||||
4. **Enable MEV bot** after verification
|
||||
5. **Set up alerts** for all critical metrics
|
||||
|
||||
## Emergency Procedures
|
||||
|
||||
### Pause System
|
||||
```bash
|
||||
# Call pause on all contracts
|
||||
cast send $VAULT_ADDRESS "pause()" --private-key $PRIVATE_KEY
|
||||
```
|
||||
|
||||
### Upgrade Contracts
|
||||
```bash
|
||||
# Upgrade via UUPS proxy
|
||||
cast send $PROXY_ADDRESS "upgradeTo(address)" $NEW_IMPL_ADDRESS --private-key $PRIVATE_KEY
|
||||
```
|
||||
|
||||
### Update Parameters
|
||||
```bash
|
||||
# Reduce limits immediately
|
||||
cast send $CONFIG_REGISTRY_ADDRESS "setMaxLoops(uint256)" 1 --private-key $PRIVATE_KEY
|
||||
```
|
||||
|
||||
## Monitoring
|
||||
|
||||
Set up monitoring for:
|
||||
- Position health factors
|
||||
- Flash loan execution rates
|
||||
- Policy denial rates
|
||||
- Gas costs
|
||||
- Contract events
|
||||
|
||||
Reference in New Issue
Block a user