rollup_getInfo
Get modular L2 rollup configuration on the Mantle network. This method provides essential information about the optimistic rollup parameters, settings, and operational details.
Overview#
Mantle's modular L2 architecture is an optimistic rollup that leverages modular components for enhanced performance and scalability. The rollup configuration includes important parameters for:
- Batch Processing: How transactions are batched and processed
- Data Availability: EigenDA integration for efficient data posting
- Bridge Operations: L1 ↔ L2 asset bridging configuration
- Network Parameters: Chain ID, block times, and operational settings
Parameters#
This method typically takes no parameters, but implementation may vary. Please refer to the official Mantle documentation for the most current parameter specifications.
Returns#
Rollup configuration object containing comprehensive information about the modular L2 rollup setup.
Implementation Example#
- cURL
- JavaScript
- Python
curl -X POST https://api-mantle-mainnet.n.dwellir.com/YOUR_API_KEY \\
-H "Content-Type: application/json" \\
-d '{
"jsonrpc": "2.0",
"method": "rollup_getInfo",
"params": [],
"id": 1
}'
const response = await fetch('https://api-mantle-mainnet.n.dwellir.com/YOUR_API_KEY', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
jsonrpc: '2.0',
method: 'rollup_getInfo',
params: [],
id: 1
})
});
const data = await response.json();
console.log('Rollup Info:', data.result);
// Advanced Mantle modular L2 rollup information analyzer
class MantleRollupAnalyzer {
constructor(rpcUrl) {
this.rpcUrl = rpcUrl;
}
async getRollupInfo() {
const response = await fetch(this.rpcUrl, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
jsonrpc: '2.0',
method: 'rollup_getInfo',
params: [],
id: 1
})
});
const data = await response.json();
if (data.error) {
throw new Error(`RPC Error: ${data.error.message}`);
}
return data.result;
}
async getComprehensiveRollupStatus() {
try {
// Get rollup info
const rollupInfo = await this.getRollupInfo();
// Get current chain info
const chainIdResponse = await fetch(this.rpcUrl, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
jsonrpc: '2.0',
method: 'eth_chainId',
params: [],
id: 1
})
});
const chainData = await chainIdResponse.json();
const chainId = parseInt(chainData.result, 16);
// Get latest block info
const blockResponse = await fetch(this.rpcUrl, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
jsonrpc: '2.0',
method: 'eth_getBlockByNumber',
params: ['latest', false],
id: 1
})
});
const blockData = await blockResponse.json();
const latestBlock = blockData.result;
return {
timestamp: new Date().toISOString(),
network: {
name: 'Mantle',
chainId: chainId,
type: 'Modular L2 Optimistic Rollup'
},
rollupConfig: rollupInfo,
currentState: {
latestBlock: parseInt(latestBlock.number, 16),
blockHash: latestBlock.hash,
timestamp: parseInt(latestBlock.timestamp, 16),
gasLimit: parseInt(latestBlock.gasLimit, 16),
gasUsed: parseInt(latestBlock.gasUsed, 16),
utilization: ((parseInt(latestBlock.gasUsed, 16) / parseInt(latestBlock.gasLimit, 16)) * 100).toFixed(2)
},
analysis: this.analyzeRollupConfig(rollupInfo, chainId)
};
} catch (error) {
throw new Error(`Failed to get comprehensive status: ${error.message}`);
}
}
analyzeRollupConfig(rollupInfo, chainId) {
const analysis = {
networkType: 'Modular L2 Optimistic Rollup',
securityModel: 'Optimistic with fraud proofs',
dataAvailability: 'EigenDA integration',
features: [],
optimizations: [],
considerations: []
};
// Analyze chain ID
if (chainId === 5000) {
analysis.features.push('Mantle Mainnet');
analysis.features.push('Production Network');
} else if (chainId === 5003) {
analysis.features.push('Mantle Sepolia Testnet');
analysis.features.push('Development Network');
}
// General modular L2 features
analysis.features.push('EVM Compatibility');
analysis.features.push('Optimistic Rollup Architecture');
analysis.features.push('EigenDA Data Availability');
analysis.features.push('MNT Gas Token');
analysis.features.push('OP Stack Foundation');
// Optimizations
analysis.optimizations.push('High Throughput via Modular Architecture');
analysis.optimizations.push('Low Transaction Costs');
analysis.optimizations.push('Fast L2 Finality');
analysis.optimizations.push('Ethereum Virtual Machine Compatibility');
analysis.optimizations.push('Efficient Data Availability via EigenDA');
// Considerations
analysis.considerations.push('7-day withdrawal period for L1 finality');
analysis.considerations.push('L1 data posting costs via EigenDA');
analysis.considerations.push('Optimistic fraud proof mechanism');
return analysis;
}
async compareWithOtherL2s() {
const mantleInfo = await this.getComprehensiveRollupStatus();
// This would be expanded with actual data from other L2s
const comparison = {
mantle: {
type: 'Modular L2 Optimistic Rollup',
proofSystem: 'Fraud Proofs',
evmCompatibility: 'Full',
dataAvailability: 'EigenDA',
finality: 'Optimistic → Proven',
withdrawalTime: '~7 days',
gasToken: 'MNT',
advantages: [
'Modular architecture for flexibility',
'EigenDA for efficient data availability',
'Fast transaction processing',
'MNT gas token benefits',
'OP Stack foundation'
]
},
zkRollups: {
type: 'Zero-Knowledge',
proofSystem: 'Zero-Knowledge Proofs',
evmCompatibility: 'Full (zkEVM)',
dataAvailability: 'On-chain (Ethereum L1)',
finality: 'Cryptographic',
withdrawalTime: '~7 days (pending finalization)',
tradeoffs: [
'Cryptographic security guarantees',
'Privacy-preserving proofs',
'Higher computational overhead',
'Proof generation complexity'
]
},
comparison: {
security: 'Both provide strong security with different mechanisms',
performance: 'Mantle optimized for high throughput',
costs: 'Mantle benefits from EigenDA cost efficiency',
devExperience: 'Both offer full EVM compatibility'
}
};
return comparison;
}
async monitorRollupHealth() {
const health = {
timestamp: new Date().toISOString(),
status: 'unknown',
metrics: {},
alerts: []
};
try {
const status = await this.getComprehensiveRollupStatus();
// Check basic connectivity and latest block
const blockAge = Date.now() / 1000 - status.currentState.timestamp;
health.metrics = {
latestBlock: status.currentState.latestBlock,
blockAge: blockAge,
gasUtilization: parseFloat(status.currentState.utilization),
chainId: status.network.chainId
};
// Health checks
if (blockAge > 300) { // 5 minutes
health.alerts.push({
severity: 'warning',
message: `Latest block is ${Math.floor(blockAge / 60)} minutes old`,
recommendation: 'Check network connectivity and block production'
});
}
if (health.metrics.gasUtilization > 90) {
health.alerts.push({
severity: 'info',
message: `High gas utilization: ${health.metrics.gasUtilization}%`,
recommendation: 'Network is experiencing high usage'
});
}
health.status = health.alerts.length === 0 ? 'healthy' :
health.alerts.some(a => a.severity === 'error') ? 'unhealthy' : 'warning';
} catch (error) {
health.status = 'error';
health.alerts.push({
severity: 'error',
message: `Failed to get rollup status: ${error.message}`,
recommendation: 'Check RPC endpoint connectivity'
});
}
return health;
}
async getNetworkCapacityInfo() {
try {
const status = await this.getComprehensiveRollupStatus();
const capacity = {
current: {
blockGasLimit: status.currentState.gasLimit,
blockGasUsed: status.currentState.gasUsed,
utilizationPercentage: parseFloat(status.currentState.utilization)
},
theoretical: {
maxTxPerSecond: 0, // Would be calculated based on average gas per tx
maxTxPerBlock: 0,
avgBlockTime: 0 // Would need historical data
},
estimates: {
simpleTransfers: Math.floor(status.currentState.gasLimit / 21000),
erc20Transfers: Math.floor(status.currentState.gasLimit / 65000),
complexContracts: Math.floor(status.currentState.gasLimit / 200000)
}
};
return capacity;
} catch (error) {
throw new Error(`Failed to get capacity info: ${error.message}`);
}
}
async analyzeUpgradeability() {
const rollupInfo = await this.getRollupInfo();
// This would analyze the actual rollup configuration
// For demonstration, providing general modular L2 upgrade analysis
return {
upgradeType: 'Governed Upgrades',
governanceModel: 'Multi-signature or DAO governance',
upgradeProcess: [
'Proposal submission',
'Community review',
'Governance voting',
'Implementation timeline',
'Upgrade execution'
],
considerations: [
'Modular architecture allows component upgrades',
'Smart contract upgrades follow standard patterns',
'L1 contract upgrades need careful coordination',
'Backward compatibility maintenance'
],
riskMitigation: [
'Extensive testing on testnets',
'Gradual rollout procedures',
'Emergency pause mechanisms',
'Rollback capabilities where possible'
]
};
}
async getBridgeInfo() {
// This would integrate with bridge contracts
// For demonstration, providing general bridge information
return {
bridgeType: 'Canonical Bridge',
supportedAssets: [
'ETH (bridged)',
'MNT (native gas token)',
'ERC-20 Tokens',
'ERC-721 NFTs',
'ERC-1155 Multi-tokens'
],
bridgeProcess: {
deposit: {
timeToL2: '~15 minutes',
steps: [
'Lock tokens on L1',
'Wait for L1 confirmation',
'Mint on L2',
'Tokens available on L2'
]
},
withdrawal: {
timeToL1: '~7 days',
steps: [
'Burn tokens on L2',
'Include in batch',
'Submit to L1',
'Challenge period (7 days)',
'Claim on L1'
]
}
},
security: {
model: 'Optimistic fraud proofs',
assumptions: 'Ethereum L1 security + honest validator assumption',
risks: [
'Smart contract bugs',
'Fraud proof mechanism vulnerabilities',
'Bridge implementation issues'
]
}
};
}
}
// Usage examples
const rollupAnalyzer = new MantleRollupAnalyzer('https://api-mantle-mainnet.n.dwellir.com/YOUR_API_KEY');
// Get basic rollup info
const rollupInfo = await rollupAnalyzer.getRollupInfo();
console.log('Rollup Configuration:', rollupInfo);
// Get comprehensive status
const comprehensiveStatus = await rollupAnalyzer.getComprehensiveRollupStatus();
console.log('Network Status:', comprehensiveStatus);
// Monitor rollup health
const healthStatus = await rollupAnalyzer.monitorRollupHealth();
console.log('Health Status:', healthStatus.status);
console.log('Alerts:', healthStatus.alerts);
// Get network capacity info
const capacityInfo = await rollupAnalyzer.getNetworkCapacityInfo();
console.log('Network Capacity:', capacityInfo);
// Compare with other L2s
const comparison = await rollupAnalyzer.compareWithOtherL2s();
console.log('L2 Comparison:', comparison);
// Analyze upgradeability
const upgradeAnalysis = await rollupAnalyzer.analyzeUpgradeability();
console.log('Upgrade Model:', upgradeAnalysis);
// Get bridge information
const bridgeInfo = await rollupAnalyzer.getBridgeInfo();
console.log('Bridge Details:', bridgeInfo);
import requests
import json
import time
from typing import Dict, List, Any, Optional
from datetime import datetime
class MantleRollupInfoAnalyzer:
"""Comprehensive analyzer for Mantle modular L2 rollup information"""
def __init__(self, rpc_url: str):
self.rpc_url = rpc_url
def get_rollup_info(self) -> Dict[str, Any]:
"""Get basic rollup configuration information"""
payload = {
"jsonrpc": "2.0",
"method": "rollup_getInfo",
"params": [],
"id": 1
}
response = requests.post(self.rpc_url, json=payload)
data = response.json()
if 'error' in data:
raise Exception(f"RPC Error: {data['error']['message']}")
return data['result']
def _make_rpc_call(self, method: str, params: List = None) -> Any:
"""Helper method for making RPC calls"""
payload = {
"jsonrpc": "2.0",
"method": method,
"params": params or [],
"id": 1
}
response = requests.post(self.rpc_url, json=payload)
data = response.json()
if 'error' in data:
raise Exception(f"RPC Error: {data['error']['message']}")
return data['result']
def get_comprehensive_rollup_status(self) -> Dict[str, Any]:
"""Get comprehensive rollup status and configuration"""
rollup_info = self.get_rollup_info()
# Get additional network information
chain_id = int(self._make_rpc_call('eth_chainId'), 16)
latest_block = self._make_rpc_call('eth_getBlockByNumber', ['latest', False])
block_number = int(latest_block['number'], 16)
block_timestamp = int(latest_block['timestamp'], 16)
gas_limit = int(latest_block['gasLimit'], 16)
gas_used = int(latest_block['gasUsed'], 16)
return {
'timestamp': datetime.now().isoformat(),
'network_info': {
'name': 'Mantle',
'chain_id': chain_id,
'type': 'Modular L2 Optimistic Rollup',
'consensus': 'Optimistic with fraud proofs'
},
'rollup_config': rollup_info,
'current_state': {
'latest_block': block_number,
'block_hash': latest_block['hash'],
'block_timestamp': block_timestamp,
'gas_limit': gas_limit,
'gas_used': gas_used,
'gas_utilization': round((gas_used / gas_limit) * 100, 2),
'block_age_seconds': int(time.time()) - block_timestamp
},
'analysis': self._analyze_rollup_configuration(rollup_info, chain_id)
}
def _analyze_rollup_configuration(
self,
rollup_info: Dict[str, Any],
chain_id: int
) -> Dict[str, Any]:
"""Analyze rollup configuration and provide insights"""
analysis = {
'rollup_type': 'Modular L2 Optimistic Rollup',
'security_model': 'Optimistic fraud proofs with L1 data availability',
'key_features': [
'Full EVM compatibility',
'Optimistic fraud proof validation',
'EigenDA data availability',
'MNT gas token',
'OP Stack foundation',
'Modular architecture'
],
'network_classification': 'Mainnet' if chain_id == 5000 else 'Testnet',
'performance_characteristics': {
'finality': 'Optimistic with 7-day challenge period',
'withdrawal_time': '~7 days (challenge period)',
'throughput': 'High (optimized via modular architecture)',
'costs': 'Low L2 execution + efficient L1 data costs via EigenDA'
}
}
# Add specific insights based on chain
if chain_id == 5000: # Mantle Mainnet
analysis['environment'] = 'Production'
analysis['considerations'] = [
'Real value at risk',
'Production-grade security',
'Full audit coverage',
'Mainnet gas costs with MNT token'
]
elif chain_id == 5003: # Mantle Sepolia Testnet
analysis['environment'] = 'Testing'
analysis['considerations'] = [
'Testing and development use',
'No real value',
'Latest features may be experimental',
'Network resets possible'
]
return analysis
def monitor_rollup_performance(self, duration_minutes: int = 10) -> Dict[str, Any]:
"""Monitor rollup performance over time"""
monitoring_data = []
start_time = datetime.now()
print(f"Monitoring rollup for {duration_minutes} minutes...")
try:
while (datetime.now() - start_time).seconds < duration_minutes * 60:
status = self.get_comprehensive_rollup_status()
monitoring_data.append(status)
print(f"Block: {status['current_state']['latest_block']}, "
f"Utilization: {status['current_state']['gas_utilization']}%")
time.sleep(30) # Check every 30 seconds
except KeyboardInterrupt:
print("Monitoring stopped by user")
return self._analyze_performance_data(monitoring_data)
def _analyze_performance_data(self, monitoring_data: List[Dict]) -> Dict[str, Any]:
"""Analyze collected performance data"""
if not monitoring_data:
return {'error': 'No monitoring data collected'}
block_numbers = [d['current_state']['latest_block'] for d in monitoring_data]
gas_utilizations = [d['current_state']['gas_utilization'] for d in monitoring_data]
block_ages = [d['current_state']['block_age_seconds'] for d in monitoring_data]
# Calculate block production rate
if len(block_numbers) > 1:
blocks_produced = block_numbers[-1] - block_numbers[0]
time_elapsed = (
datetime.fromisoformat(monitoring_data[-1]['timestamp']) -
datetime.fromisoformat(monitoring_data[0]['timestamp'])
).seconds
avg_block_time = time_elapsed / blocks_produced if blocks_produced > 0 else 0
else:
avg_block_time = 0
blocks_produced = 0
return {
'monitoring_period': {
'start': monitoring_data[0]['timestamp'],
'end': monitoring_data[-1]['timestamp'],
'data_points': len(monitoring_data)
},
'block_production': {
'blocks_produced': blocks_produced,
'average_block_time': round(avg_block_time, 2),
'block_range': f"{block_numbers[0]} - {block_numbers[-1]}"
},
'gas_utilization': {
'average': round(sum(gas_utilizations) / len(gas_utilizations), 2),
'min': min(gas_utilizations),
'max': max(gas_utilizations),
'trend': self._calculate_trend(gas_utilizations)
},
'network_health': {
'consistent_block_production': blocks_produced > 0,
'average_block_age': round(sum(block_ages) / len(block_ages), 2),
'health_score': self._calculate_health_score(monitoring_data)
}
}
def _calculate_trend(self, values: List[float]) -> str:
"""Calculate trend direction for a series of values"""
if len(values) < 2:
return 'insufficient_data'
first_half = values[:len(values)//2]
second_half = values[len(values)//2:]
first_avg = sum(first_half) / len(first_half)
second_avg = sum(second_half) / len(second_half)
change_pct = ((second_avg - first_avg) / first_avg) * 100 if first_avg > 0 else 0
if change_pct > 5:
return 'increasing'
elif change_pct < -5:
return 'decreasing'
else:
return 'stable'
def _calculate_health_score(self, monitoring_data: List[Dict]) -> float:
"""Calculate a health score for the rollup"""
score = 100.0
# Check for stale blocks
avg_block_age = sum(d['current_state']['block_age_seconds'] for d in monitoring_data) / len(monitoring_data)
if avg_block_age > 300: # 5 minutes
score -= 20
elif avg_block_age > 120: # 2 minutes
score -= 10
# Check gas utilization patterns
gas_utils = [d['current_state']['gas_utilization'] for d in monitoring_data]
avg_util = sum(gas_utils) / len(gas_utils)
if avg_util > 95: # Very high utilization
score -= 15
elif avg_util < 5: # Very low utilization (might indicate issues)
score -= 10
return max(0, score)
def compare_with_ethereum_l1(self, eth_l1_rpc_url: str = None) -> Dict[str, Any]:
"""Compare Mantle with Ethereum L1 characteristics"""
mantle_status = self.get_comprehensive_rollup_status()
comparison = {
'mantle_modular_l2': {
'type': 'Modular L2 Optimistic Rollup',
'consensus': 'Optimistic fraud proofs',
'finality': 'Optimistic → Proven (7 days)',
'block_time': '~2 seconds',
'gas_limit': mantle_status['current_state']['gas_limit'],
'gas_token': 'MNT',
'transaction_throughput': 'High',
'transaction_costs': 'Low'
},
'ethereum_l1': {
'type': 'Layer 1 Blockchain',
'consensus': 'Proof of Stake',
'finality': 'Probabilistic',
'block_time': '~12 seconds',
'gas_limit': '~30M gas',
'gas_token': 'ETH',
'transaction_throughput': 'Limited',
'transaction_costs': 'High'
},
'advantages_mantle': [
'Lower transaction costs with MNT token',
'Higher throughput via modular architecture',
'EVM compatibility',
'Inherits Ethereum security',
'EigenDA data availability efficiency',
'OP Stack foundation'
],
'advantages_l1': [
'No additional trust assumptions',
'Direct composability',
'Immediate finality',
'No bridge requirements',
'Maximum decentralization'
]
}
return comparison
def analyze_upgradeability_governance(self) -> Dict[str, Any]:
"""Analyze upgradeability and governance mechanisms"""
return {
'upgrade_mechanism': 'Governed Smart Contracts',
'governance_model': {
'type': 'Multi-signature or DAO governance',
'participants': [
'Core development team',
'Community stakeholders',
'Security auditors',
'Ecosystem partners'
]
},
'upgrade_process': {
'steps': [
'1. Proposal creation and review',
'2. Community discussion period',
'3. Technical evaluation',
'4. Governance voting',
'5. Implementation timeline',
'6. Staged rollout',
'7. Post-upgrade monitoring'
],
'timeframes': {
'discussion_period': '1-2 weeks',
'voting_period': '1 week',
'implementation_delay': '1-2 weeks',
'total_process': '4-6 weeks minimum'
}
},
'risk_mitigation': [
'Extensive testnet validation',
'Audit requirements',
'Emergency pause mechanisms',
'Gradual feature activation',
'Rollback procedures where possible'
],
'recent_upgrades': 'Check governance forum for latest information'
}
def get_bridge_integration_info(self) -> Dict[str, Any]:
"""Get information about bridge integrations and interoperability"""
return {
'canonical_bridge': {
'purpose': 'Official L1 ↔ L2 asset transfer',
'supported_assets': [
'ETH (bridged from Ethereum)',
'MNT (native gas token)',
'ERC-20 tokens',
'ERC-721 NFTs',
'ERC-1155 multi-tokens'
],
'security_model': 'Optimistic fraud proof validation'
},
'bridge_process': {
'deposits_l1_to_l2': {
'time': '~15 minutes',
'process': [
'Lock assets on L1',
'Wait for L1 confirmation',
'Automatic minting on L2',
'Assets available on L2'
]
},
'withdrawals_l2_to_l1': {
'time': '~7 days',
'process': [
'Burn assets on L2',
'Include in batch',
'Submit to L1',
'Challenge period (7 days)',
'Claim assets on L1'
]
}
},
'third_party_bridges': {
'availability': 'Multiple third-party bridge providers',
'considerations': [
'Different security models',
'Varying withdrawal times',
'Different supported assets',
'Additional trust assumptions'
]
}
}
# Usage examples
analyzer = MantleRollupInfoAnalyzer('https://api-mantle-mainnet.n.dwellir.com/YOUR_API_KEY')
# Get basic rollup information
rollup_info = analyzer.get_rollup_info()
print("Basic Rollup Info:", json.dumps(rollup_info, indent=2))
# Get comprehensive status
comprehensive_status = analyzer.get_comprehensive_rollup_status()
print(f"\nNetwork: {comprehensive_status['network_info']['name']}")
print(f"Chain ID: {comprehensive_status['network_info']['chain_id']}")
print(f"Latest Block: {comprehensive_status['current_state']['latest_block']}")
print(f"Gas Utilization: {comprehensive_status['current_state']['gas_utilization']}%")
# Analyze network type
analysis = comprehensive_status['analysis']
print(f"\nRollup Type: {analysis['rollup_type']}")
print(f"Environment: {analysis['environment']}")
print("Key Features:")
for feature in analysis['key_features']:
print(f" - {feature}")
# Monitor performance (short demo)
print("\nStarting performance monitoring...")
performance_data = analyzer.monitor_rollup_performance(duration_minutes=2)
print("Performance Analysis:")
print(f" Average block time: {performance_data['block_production']['average_block_time']}s")
print(f" Health score: {performance_data['network_health']['health_score']}/100")
# Compare with L1
comparison = analyzer.compare_with_ethereum_l1()
print("\nMantle Advantages:")
for advantage in comparison['advantages_mantle']:
print(f" - {advantage}")
# Governance analysis
governance = analyzer.analyze_upgradeability_governance()
print(f"\nGovernance Model: {governance['governance_model']['type']}")
print(f"Upgrade Process Duration: {governance['upgrade_process']['timeframes']['total_process']}")
# Bridge information
bridge_info = analyzer.get_bridge_integration_info()
print(f"\nBridge Withdrawal Time: {bridge_info['bridge_process']['withdrawals_l2_to_l1']['time']}")
print("Supported Assets:")
for asset in bridge_info['canonical_bridge']['supported_assets']:
print(f" - {asset}")
Response Example#
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"mode": "optimistic",
"chainId": "0x1388",
"batchHash": "0x...",
"stateRoot": "0x...",
"withdrawalRoot": "0x...",
"sequencer": "0x...",
"version": "1.0.0"
}
}
Understanding Mantle Modular L2 Configuration#
Key Components#
- Mode: Operating mode of the rollup (optimistic)
- Chain ID: Network identifier (5000 for mainnet, 5003 for testnet)
- State Root: Root hash of the current state tree
- Batch Hash: Hash of the current batch of transactions
- Sequencer: Address of the transaction sequencing system
- Version: Current version of the rollup implementation
Modular L2 Architecture#
- Sequencing: Optimistic transaction ordering and execution
- Data Availability: EigenDA integration for efficient data posting
- EVM Compatibility: Full compatibility with Ethereum Virtual Machine
- Finality: Fast L2 finality with 7-day challenge period for L1 finality
Common Use Cases#
1. Network Health Monitoring#
// Monitor rollup health and performance
async function monitorRollupHealth(analyzer) {
const healthCheck = async () => {
const status = await analyzer.getComprehensiveRollupStatus();
const alerts = [];
// Check block production
if (status.current_state.block_age_seconds > 300) {
alerts.push({
type: 'stale_blocks',
severity: 'warning',
message: 'Blocks are older than expected'
});
}
// Check gas utilization
if (status.current_state.gas_utilization > 95) {
alerts.push({
type: 'high_utilization',
severity: 'info',
message: 'Network experiencing high usage'
});
}
return {
status: alerts.length === 0 ? 'healthy' : 'warning',
alerts: alerts,
metrics: status.current_state
};
};
return healthCheck;
}
2. Integration Compatibility Check#
def check_integration_compatibility(analyzer):
"""Check if current rollup config is compatible with integration"""
status = analyzer.get_comprehensive_rollup_status()
rollup_info = status['rollup_config']
compatibility = {
'evm_compatible': True, # Modular L2 is fully EVM compatible
'supported_features': [
'Standard Ethereum transactions',
'Smart contract deployment',
'ERC token standards',
'Event emission and filtering',
'eth_call and eth_estimateGas',
'Debug and trace methods'
],
'limitations': [
'7-day withdrawal period for L1 finality',
'L1 data posting affects costs',
'Optimistic fraud proof mechanism'
],
'recommended_practices': [
'Use standard Ethereum tooling',
'Account for withdrawal delays',
'Monitor gas price fluctuations with MNT token',
'Leverage EigenDA data availability benefits'
]
}
return compatibility
3. Performance Benchmarking#
// Benchmark rollup performance characteristics
async function benchmarkRollupPerformance(analyzer) {
const benchmark = {
testDuration: '10 minutes',
metrics: {},
recommendations: []
};
// Monitor for performance data
const performanceData = await analyzer.monitorRollupPerformance(10);
benchmark.metrics = {
avgBlockTime: performanceData.block_production.average_block_time,
gasUtilization: performanceData.gas_utilization.average,
healthScore: performanceData.network_health.health_score
};
// Generate recommendations
if (benchmark.metrics.avgBlockTime > 5) {
benchmark.recommendations.push(
'Block times are longer than expected - monitor network congestion'
);
}
if (benchmark.metrics.gasUtilization > 80) {
benchmark.recommendations.push(
'High gas utilization - consider transaction timing optimization'
);
}
return benchmark;
}
Integration Considerations#
Development#
- Tooling: Use standard Ethereum development tools (Hardhat, Truffle, Remix)
- RPC Compatibility: Full JSON-RPC compatibility with additional rollup-specific methods
- Gas Estimation: Account for MNT gas token and EigenDA data costs
Production Deployment#
- Security: Leverage optimistic rollup security with fraud proofs
- Monitoring: Monitor both L2 state and L1 batch submission
- Bridge Integration: Plan for canonical bridge usage and withdrawal delays
User Experience#
- Transaction Speed: Fast L2 confirmation with 7-day L1 finality
- Cost Optimization: Benefit from MNT gas token and EigenDA efficiency
- Bridge UX: Clear communication about withdrawal timeframes
Related Methods#
rollup_gasPrices- Get gas price oracle dataeth_chainId- Get network chain IDeth_getBlockByNumber- Get block information
Need help? Contact our support team or check the Mantle documentation.