Building MultiVM dApp
Details are provisional and may be updated during development.
Choosing the Optimal VM for Each Component
Performance Optimization Patterns
// Pattern 1: Route by Operation Type
class OptimizedTradingDApp {
constructor() {
this.evmProvider = new ethers.JsonRpcProvider(EVM_RPC);
this.svmConnection = new Connection(SVM_RPC);
this.arichain = new ArichainClient({ evmRpc: EVM_RPC, svmRpc: SVM_RPC });
}
async executeTrade(tradeParams) {
// Route based on trade characteristics
if (tradeParams.isHighFrequency && tradeParams.isSimple) {
// Use SVM for high-frequency simple trades
return this.executeOnSVM(tradeParams);
} else if (tradeParams.requiresComplexLogic) {
// Use EVM for complex DeFi integrations
return this.executeOnEVM(tradeParams);
} else {
// Use unified approach for hybrid trades
return this.executeHybridTrade(tradeParams);
}
}
async executeHybridTrade(params) {
// Step 1: Complex calculation on EVM
const calculation = await this.evmContract.calculateOptimalRoute(params);
// Step 2: High-speed execution on SVM
const execution = await this.svmProgram.methods
.executeCalculatedTrade(calculation)
.rpc();
// Step 3: Unified result tracking
return this.arichain.trackTradeResult(calculation.id, execution);
}
}
// Pattern 2: Batch Operations for Efficiency
class BatchOptimizedDApp {
async processBatchOperations(operations) {
// Group operations by VM for optimal batching
const evmOps = operations.filter(op => op.complexity === 'high');
const svmOps = operations.filter(op => op.frequency === 'high');
// Execute batches in parallel
const [evmResults, svmResults] = await Promise.all([
this.executeBatchOnEVM(evmOps),
this.executeBatchOnSVM(svmOps)
]);
// Combine results with unified interface
return this.arichain.combineResults(evmResults, svmResults);
}
}Gas Optimization Strategies
Real-World Examples
Example 1: Hybrid Gaming Platform
Example 2: High-Performance DeFi with Real-Time Components
App Examples
Starter Templates
Complete Example Applications
Last updated

