@morpho-labs/v2-deployment
v0.2.1
Published
Morpho v2 chain configurations for viem
Readme
@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
npm install @morpho-labs/v2-deployment
# or
bun add @morpho-labs/v2-deploymentFork 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
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
- Create a
.env.localfile:
TENDERLY_FORK_RPC_URL=https://rpc.tenderly.co/fork/your-fork-id
PRIVATE_KEY=0x...- Check your environment:
bun run deploy:statusAvailable Commands
# 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 TermsCommand Reference
deploy <contract>- Deploy a specific contract to Tenderly forkdeploy-all- Deploy all available contractslist- Show available contracts and descriptionsextract [contract]- Parse deployment info from broadcast filesstatus- Check environment setup and connectivity
Extract Command
The extract command is useful for parsing existing Foundry broadcast files:
# 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 1111This 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
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 definitionssrc/deployments/addresses.ts- Deployment registry with metadata
Example generated address file:
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
Setup
# Install dependencies
bun install
# Build the project
bun run build
# Run tests
bun test
# Lint and format
bun run check:fixFoundry Commands
# Build contracts
forge build
# Run tests
forge test
# Format code
forge fmt
# Gas snapshots
forge snapshot