@morpho-labs/v2-deployment
Version:
Morpho v2 chain configurations for viem
212 lines (155 loc) • 5.67 kB
Markdown
and contract deployment tools for viem.
- 🔗 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
```bash
npm install @morpho-labs/v2-deployment
bun add @morpho-labs/v2-deployment
```
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
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.
```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')
});
```
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
```
```bash
bun run contracts:list
bun run deploy:terms
bun run scripts/deploy.ts deploy Terms
bun run deploy:all
bun run deploy:extract
bun run deploy:extract Terms
```
- `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
The `extract` command is useful for parsing existing Foundry broadcast files:
```bash
bun run scripts/deploy.ts extract
bun run scripts/deploy.ts extract Terms
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;
```
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;
```
- [Foundry](https://getfoundry.sh/) - Ethereum development toolkit
- [Bun](https://bun.sh/) - JavaScript runtime and package manager
```bash
bun install
bun run build
bun test
bun run check:fix
```
```bash
forge build
forge test
forge fmt
forge snapshot
```
Morpho v2 chain configurations