UNPKG

@morpho-labs/v2-deployment

Version:
212 lines (155 loc) 5.67 kB
# @morpho-labs/v2-deployment Morpho v2 chain configurations and contract deployment tools for viem. ## Features - 🔗 Pre-configured Morpho Ethereum fork chain for viem - 🚀 Automated contract deployment CLI - 📋 TypeScript ABI generation - 📍 Address registry with deployment metadata - 🔧 Blue SDK integration helpers - 📂 Broadcast-based deployment parsing ## Installation ```bash npm install @morpho-labs/v2-deployment # or bun add @morpho-labs/v2-deployment ``` ## Fork Definition The **Morpho Ethereum Fork** is a development chain that replicates Ethereum mainnet state at a specific block, pre-configured with: - **Chain ID**: `1111` (default) - **Base**: Ethereum mainnet fork - **Purpose**: Development, testing, and integration of Morpho v2 protocols - **Features**: - All mainnet contracts and state available - Pre-deployed Morpho v2 contracts - Blue SDK integration with mainnet token data - Fast block times for development ### Shared Development Addresses For internal testing and development, use these pre-funded Anvil addresses: | Label | Address | Private Key | |-------|---------|-------------| | **Alice** | `0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266` | `0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80` | | **Bob** | `0x70997970C51812dc3A010C7d01b50e0d17dc79C8` | `0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d` | | **Charlie** | `0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC` | `0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a` | | **Dave** | `0x90F79bf6EB2c4f870365E785982E1f101E93b906` | `0x7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6` | | **Eve** | `0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65` | `0x47e179ec197488593b187f80a00eb0da91f1b9d0b13f8733639f19c30a34926a` | > ⚠️ **Warning**: These are well-known test keys. Never use them on mainnet or with real funds. ## Chain Configuration ```typescript import { createPublicClient, http } from 'viem'; import { morphoEthereumFork, createMorphoFork } from '@morpho-labs/v2-deployment'; // Use the pre-configured Morpho fork (chain ID 1111) const client = createPublicClient({ chain: morphoEthereumFork, transport: http('https://rpc.tenderly.co/fork/your-fork-id') }); // Or create a custom fork configuration const customFork = createMorphoFork({ forkUrl: 'https://rpc.tenderly.co/fork/custom-fork-id', chainId: 2222 }); // Using with Anvil (local development) const anvilClient = createPublicClient({ chain: morphoEthereumFork, transport: http('http://127.0.0.1:8545') }); ``` ## Deployment CLI ### Setup 1. Create a `.env.local` file: ```env TENDERLY_FORK_RPC_URL=https://rpc.tenderly.co/fork/your-fork-id PRIVATE_KEY=0x... ``` 2. Check your environment: ```bash bun run deploy:status ``` ### Available Commands ```bash # List available contracts bun run contracts:list # Deploy a specific contract bun run deploy:terms # or bun run scripts/deploy.ts deploy Terms # Deploy all contracts bun run deploy:all # Extract addresses from existing broadcasts bun run deploy:extract bun run deploy:extract Terms # Generate ABI + addresses for Terms ``` ### Command Reference - `deploy <contract>` - Deploy a specific contract to Tenderly fork - `deploy-all` - Deploy all available contracts - `list` - Show available contracts and descriptions - `extract [contract]` - Parse deployment info from broadcast files - `status` - Check environment setup and connectivity ### Extract Command The `extract` command is useful for parsing existing Foundry broadcast files: ```bash # View all deployments from broadcast files bun run scripts/deploy.ts extract # Extract specific contract and generate TypeScript files bun run scripts/deploy.ts extract Terms # Extract from specific chain ID bun run scripts/deploy.ts extract --chain 1111 ``` This reads the `broadcast/Deploy.s.sol/{chainId}/run-latest.json` file and: - Displays deployment information (address, block, deployer, timestamp) - Generates TypeScript ABI files in `src/abis/` - Updates the deployment addresses registry in `src/deployments/addresses.ts` ## Blue SDK Integration ```typescript import { setupMorphoFork, getMorphoForkAddresses } from '@morpho-labs/v2-deployment'; import { addressesRegistry } from '@morpho-org/blue-sdk'; // Setup Morpho fork with mainnet data (addresses, deployments, tokens) setupMorphoFork(1111); // Chain ID for your Tenderly fork // Get typed addresses for the fork const addresses = getMorphoForkAddresses(1111); console.log('Morpho address:', addresses.morpho); // Access through blue-sdk registry const morphoAddress = addressesRegistry[1111].morpho; ``` ## Generated Files The deployment system generates: - `src/abis/{contract}.ts` - TypeScript ABI definitions - `src/deployments/addresses.ts` - Deployment registry with metadata Example generated address file: ```typescript export const deployments = { 1111: { "terms": { "address": "0x1234567890123456789012345678901234567890" as Address, "deploymentBlock": 23168920n, "deployer": "0x9876543210987654321098765432109876543210" as Address, "deployedAt": "2025-08-18T19:11:30.000Z" } } } as const; ``` ## Development ### Prerequisites - [Foundry](https://getfoundry.sh/) - Ethereum development toolkit - [Bun](https://bun.sh/) - JavaScript runtime and package manager ### Setup ```bash # Install dependencies bun install # Build the project bun run build # Run tests bun test # Lint and format bun run check:fix ``` ### Foundry Commands ```bash # Build contracts forge build # Run tests forge test # Format code forge fmt # Gas snapshots forge snapshot ```