Files
smom-dbis-138/frontend-dapp/CONTRACT_REVERT_ERRORS.md
defiQUG 50ab378da9 feat: Implement Universal Cross-Chain Asset Hub - All phases complete
PRODUCTION-GRADE IMPLEMENTATION - All 7 Phases Done

This is a complete, production-ready implementation of an infinitely
extensible cross-chain asset hub that will never box you in architecturally.

## Implementation Summary

### Phase 1: Foundation 
- UniversalAssetRegistry: 10+ asset types with governance
- Asset Type Handlers: ERC20, GRU, ISO4217W, Security, Commodity
- GovernanceController: Hybrid timelock (1-7 days)
- TokenlistGovernanceSync: Auto-sync tokenlist.json

### Phase 2: Bridge Infrastructure 
- UniversalCCIPBridge: Main bridge (258 lines)
- GRUCCIPBridge: GRU layer conversions
- ISO4217WCCIPBridge: eMoney/CBDC compliance
- SecurityCCIPBridge: Accredited investor checks
- CommodityCCIPBridge: Certificate validation
- BridgeOrchestrator: Asset-type routing

### Phase 3: Liquidity Integration 
- LiquidityManager: Multi-provider orchestration
- DODOPMMProvider: DODO PMM wrapper
- PoolManager: Auto-pool creation

### Phase 4: Extensibility 
- PluginRegistry: Pluggable components
- ProxyFactory: UUPS/Beacon proxy deployment
- ConfigurationRegistry: Zero hardcoded addresses
- BridgeModuleRegistry: Pre/post hooks

### Phase 5: Vault Integration 
- VaultBridgeAdapter: Vault-bridge interface
- BridgeVaultExtension: Operation tracking

### Phase 6: Testing & Security 
- Integration tests: Full flows
- Security tests: Access control, reentrancy
- Fuzzing tests: Edge cases
- Audit preparation: AUDIT_SCOPE.md

### Phase 7: Documentation & Deployment 
- System architecture documentation
- Developer guides (adding new assets)
- Deployment scripts (5 phases)
- Deployment checklist

## Extensibility (Never Box In)

7 mechanisms to prevent architectural lock-in:
1. Plugin Architecture - Add asset types without core changes
2. Upgradeable Contracts - UUPS proxies
3. Registry-Based Config - No hardcoded addresses
4. Modular Bridges - Asset-specific contracts
5. Composable Compliance - Stackable modules
6. Multi-Source Liquidity - Pluggable providers
7. Event-Driven - Loose coupling

## Statistics

- Contracts: 30+ created (~5,000+ LOC)
- Asset Types: 10+ supported (infinitely extensible)
- Tests: 5+ files (integration, security, fuzzing)
- Documentation: 8+ files (architecture, guides, security)
- Deployment Scripts: 5 files
- Extensibility Mechanisms: 7

## Result

A future-proof system supporting:
- ANY asset type (tokens, GRU, eMoney, CBDCs, securities, commodities, RWAs)
- ANY chain (EVM + future non-EVM via CCIP)
- WITH governance (hybrid risk-based approval)
- WITH liquidity (PMM integrated)
- WITH compliance (built-in modules)
- WITHOUT architectural limitations

Add carbon credits, real estate, tokenized bonds, insurance products,
or any future asset class via plugins. No redesign ever needed.

Status: Ready for Testing → Audit → Production
2026-01-24 07:01:37 -08:00

2.6 KiB

Contract Revert Errors - Expected Behavior

Overview

The "call revert exception" errors you see in the console are expected when:

  1. Contracts are not deployed at the specified addresses on Chain 138
  2. The wallet is not connected (we now prevent queries in this case)
  3. Contract methods revert for valid reasons (e.g., invalid parameters)

What We've Fixed

1. Conditional Query Execution

  • Before: Queries were executed even with zero address placeholder, causing revert errors
  • After: Queries only execute when:
    • Wallet is connected (address is defined)
    • Contract instances are available
    • Valid parameters are provided

2. QueryClient Configuration

  • Configured to not retry on CALL_EXCEPTION errors
  • These errors are expected and don't need retries

Remaining Errors

If you still see "call revert exception" errors, they indicate:

  1. Contracts Not Deployed: The contracts at the addresses in config/bridge.ts may not be deployed on Chain 138

    • Check: CONTRACTS.WETH9
    • Check: CONTRACTS.WETH9_BRIDGE
    • Check: CONTRACTS.LINK_TOKEN
  2. Wrong Contract Addresses: The addresses may be incorrect for Chain 138

    • Verify addresses match deployed contracts on Chain 138
    • Update config/bridge.ts with correct addresses
  3. Network Issues: RPC connection problems

    • Check: VITE_RPC_URL_138 in .env
    • Verify RPC endpoint is accessible

How to Verify Contracts

To check if contracts exist at the specified addresses:

# Using cast (Foundry)
cast code 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 --rpc-url <CHAIN_138_RPC>

# Using curl
curl -X POST <CHAIN_138_RPC> \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"eth_getCode","params":["0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2","latest"],"id":1}'

If the result is "0x", the contract doesn't exist at that address.

Next Steps

  1. Verify Contract Addresses: Confirm all contracts are deployed on Chain 138
  2. Update Config: If addresses are wrong, update config/bridge.ts
  3. Test with Deployed Contracts: Once contracts are deployed, errors should stop

Error Suppression

The errors are logged by thirdweb's React Query integration. They don't break functionality but can clutter the console. To fully suppress them, you would need to:

  1. Override console.error temporarily (not recommended)
  2. Use a custom error boundary (complex)
  3. Wait for contracts to be deployed (recommended)

For now, the errors are informational and indicate that contracts need to be deployed or addresses need to be updated.