π¨ System Architecture Diagrams
π High-Level Architecture
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Cross-Chain Intent System β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
SOURCE CHAIN OFF-CHAIN Monad CHAIN
(Ethereum/Somnia) (Relayer) (Destination)
ββββββββββββββββ βββββββββ βββββββββββββ
ββββββββββββββββ ββββββββββββββββ
β β β β
β User β β Counter β
β Wallet β β (App Logic) β
β β β β
ββββββββ¬ββββββββ ββββββββ²ββββββββ
β β
β 1. Sign Transaction β
β forwardIntent() β
β β
βΌ β
ββββββββββββββββ ββββββββββββββββ βββββββ΄βββββββββ
β β β β β β
β ArcGateway ββββββββββββββββΆβ Relayer ββββββββββΆβ ArcExecutor β
β Contract β 2. Emit β Service β 3. Call β Contract β
β β Event β β execute()β β
ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ
Event: Listens & Executes:
IntentForwarded() Processes - Verifies relayer
- Calls target
- Emits resultπ Transaction Flow Diagram
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Transaction Flow Timeline β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
T0: User initiates intent on Source Chain
β
βββΆ User calls: gateway.forwardIntent(counterAddress)
β - Tx sent to source chain
β - Nonce incremented: nonces[user]++
β
T1: Transaction confirmed on Source Chain
β
βββΆ Event emitted: IntentForwarded(user, target, nonce, timestamp)
β - Recorded in blockchain logs
β - Gas cost: ~50k gas
β
T2: Relayer detects event (polling interval: ~5 sec)
β
βββΆ Relayer queries: gateway.queryFilter(IntentForwarded)
β - Reads event data from logs
β - Extracts: user, target, nonce
β
T3: Relayer prepares execution on Monad
β
βββΆ Relayer checks: executor.authorizedRelayers(relayer)
β - Verify relayer has permission
β - If not authorized: ABORT
β
T4: Relayer executes on Monad Chain
β
βββΆ Relayer calls: executor.execute(user, target)
β - Tx sent to Monad Chain
β - Relayer pays gas on Monad
β
T5: Executor processes intent
β
βββΆ Executor calls: Counter(target).increment()
β - try-catch wrapper for safety
β - State change: count++
β
T6: Result emitted on Monad Chain
β
βββΆ Event emitted: IntentExecuted(user, target, success)
- Confirmation of execution
- Gas cost: ~70k gas
Total Time: T0 β T6 = ~10-30 seconds (depending on block times + polling)ποΈ Contract Interaction Diagram
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Contract Interactions β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
SOURCE CHAIN CONTRACTS Monad CHAIN CONTRACTS
βββββββββββββββββββββ βββββββββββββββββββ
βββββββββββββββββββββββ βββββββββββββββββββββββ
β ArcGateway β β ArcExecutor β
βββββββββββββββββββββββ€ βββββββββββββββββββββββ€
β β β β
β State: β β State: β
β β’ nonces[] β β β’ owner β
β β β β’ authorizedRelayersβ
β Functions: β β β’ universalAccounts β
β β forwardIntent() β β β
β β forwardIntent β β Functions: β
β WithData() β β β execute() β
β β getNonce() β β β executeWithData() β
β β β β setRelayer β
β Events: β β Authorization() β
β β’ IntentForwarded β β β
β β’ IntentForwarded β β Events: β
β WithData β β β’ IntentExecuted β
β β β β’ RelayerAuthorized β
βββββββββββββββββββββββ ββββββββββββ¬βββββββββββ
β
β calls
βΌ
βββββββββββββββββββββββ
β Counter β
βββββββββββββββββββββββ€
β β
β State: β
β β’ count β
β β
β Functions: β
β β increment() β
β β getCount() β
β β
β Events: β
β β’ Incremented β
βββββββββββββββββββββββπ Access Control Diagram
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Access Control Matrix β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ArcExecutor Contract:
ββββββββββββββββββ¬βββββββββββββββ¬ββββββββββββββ¬βββββββββββββββ
β Function β User β Relayer β Owner β
ββββββββββββββββββΌβββββββββββββββΌββββββββββββββΌβββββββββββββββ€
β execute() β β β β β β β
ββββββββββββββββββΌβββββββββββββββΌββββββββββββββΌβββββββββββββββ€
β executeWith β β β β β β β
β Data() β β β β
ββββββββββββββββββΌβββββββββββββββΌββββββββββββββΌβββββββββββββββ€
β setRelayer β β β β β β β
β Authorization()β β β β
ββββββββββββββββββ΄βββββββββββββββ΄ββββββββββββββ΄βββββββββββββββ
ArcGateway Contract:
ββββββββββββββββββ¬βββββββββββββββ¬ββββββββββββββ¬βββββββββββββββ
β Function β User β Relayer β Owner β
ββββββββββββββββββΌβββββββββββββββΌββββββββββββββΌβββββββββββββββ€
β forwardIntent()β β β β β β β
ββββββββββββββββββΌβββββββββββββββΌββββββββββββββΌβββββββββββββββ€
β forwardIntent β β β β β β β
β WithData() β β β β
ββββββββββββββββββΌβββββββββββββββΌββββββββββββββΌβββββββββββββββ€
β getNonce() β β β β β β β
β (view) β β β β
ββββββββββββββββββ΄βββββββββββββββ΄ββββββββββββββ΄βββββββββββββββ
Counter Contract:
ββββββββββββββββββ¬βββββββββββββββ¬ββββββββββββββ¬βββββββββββββββ
β Function β User β Executor β Owner β
ββββββββββββββββββΌβββββββββββββββΌββββββββββββββΌβββββββββββββββ€
β increment() β β β β β β β
ββββββββββββββββββΌβββββββββββββββΌββββββββββββββΌβββββββββββββββ€
β getCount() β β β β β β β
β (view) β β β β
ββββββββββββββββββ΄βββββββββββββββ΄ββββββββββββββ΄βββββββββββββββ
β = Allowed β = Deniedπ Data Flow Diagram
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Data Flow β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
1. INTENT CREATION (Source Chain)
βββββββββββββββββββββββββββββ
User Input:
βββββββββββββββββββββββββ
β target: 0x1234... β
β (Counter address) β
βββββββββββββ¬ββββββββββββ
β
βΌ
ArcGateway Processing:
βββββββββββββββββββββββββ
β user = msg.sender β
β nonce = nonces[user]++β
β timestamp = block.ts β
βββββββββββββ¬ββββββββββββ
β
βΌ
Event Emission:
βββββββββββββββββββββββββββββββββ
β IntentForwarded( β
β user: 0xAbC..., β
β target: 0x123..., β
β nonce: 5, β
β timestamp: 1706745600 β
β ) β
βββββββββββββββββββββββββββββββββ
2. RELAYER PROCESSING (Off-Chain)
ββββββββββββββββββββββββββββββ
Event Reading:
βββββββββββββββββββββββββ
β Query blockchain logs β
β Filter: IntentForwardedβ
β Blocks: last β currentβ
βββββββββββββ¬ββββββββββββ
β
βΌ
Data Extraction:
βββββββββββββββββββββββββ
β user: 0xAbC... β
β target: 0x123... β
β nonce: 5 β
β timestamp: 1706745600 β
βββββββββββββ¬ββββββββββββ
β
βΌ
Transaction Preparation:
βββββββββββββββββββββββββ
β to: ArcExecutor β
β data: execute( β
β user, target β
β ) β
βββββββββββββββββββββββββ
3. INTENT EXECUTION (Monad Chain)
ββββββββββββββββββββββββββββ
Authorization Check:
βββββββββββββββββββββββββ
β msg.sender == relayer?β
β authorizedRelayers[ β
β msg.sender β
β ] == true? β
βββββββββββββ¬ββββββββββββ
β
βΌ
Target Execution:
βββββββββββββββββββββββββ
β try { β
β Counter(target) β
β .increment() β
β } catch { β
β success = false β
β } β
βββββββββββββ¬ββββββββββββ
β
βΌ
Result Emission:
βββββββββββββββββββββββββ
β IntentExecuted( β
β user: 0xAbC..., β
β target: 0x123..., β
β success: true β
β ) β
βββββββββββββββββββββββββ
4. STATE CHANGES
βββββββββββββ
Source Chain:
βββββββββββββββββββββββββ
β nonces[user] = 6 β
βββββββββββββββββββββββββ
Monad Chain:
βββββββββββββββββββββββββ
β counter.count = 42 β
β (incremented from 41) β
βββββββββββββββββββββββββπ― Component Responsibilities
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Component Responsibility Matrix β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββ
β Component β Responsibilities β
βββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββ€
β ArcGateway β β’ Accept user intents β
β (Source) β β’ Emit events (no state) β
β β β’ Track nonces β
β β β’ Provide replay protection β
βββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββ€
β Relayer β β’ Monitor source chain events β
β (Off-Chain) β β’ Parse event data β
β β β’ Submit txs to Mondad β
β β β’ Handle errors & retries β
β β β’ Log operations β
βββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββ€
β ArcExecutor β β’ Verify relayer authorization β
β (Monad) β β’ Execute intents safely β
β β β’ Manage relayer access β
β β β’ Emit execution results β
β β β’ Handle execution failures β
βββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββ€
β Counter β β’ Implement app logic β
β (Monad) β β’ Maintain state (count) β
β β β’ Process increment calls β
β β β’ Emit state changes β
βββββββββββββββββββ΄ββββββββββββββββββββββββββββββββββββββββββββββπ¦ State Transition Diagram
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Intent State Transitions β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
START
β
βΌ
ββββββββββββ
β PENDING β βββ Intent created on source chain
ββββββ¬ββββββ User signs transaction
β
β Event emitted
β
βΌ
ββββββββββββ
β DETECTED β βββ Relayer sees event in logs
ββββββ¬ββββββ Querying blockchain events
β
β Relayer processes
β
βΌ
ββββββββββββ
βSUBMITTINGβ βββ Relayer sends tx to Monad
ββββββ¬ββββββ Transaction in mempool
β
β Tx confirmed
β
βΌ
ββββββββββββ
βEXECUTING β βββ ArcExecutor processes
ββββββ¬ββββββ Calling target contract
β
ββββββββββββββββ¬βββββββββββββββ
β β β
Success Failure Invalid
β β β
βΌ βΌ βΌ
ββββββββββββ ββββββββββββ ββββββββββββ
βCOMPLETED β β FAILED β β REJECTED β
ββββββββββββ ββββββββββββ ββββββββββββ
β β β
β β β
ββββββββββββββββ΄βββββββββββββββ
β
βΌ
END
States:
- PENDING: Intent forwarded, waiting for relayer
- DETECTED: Relayer found event, preparing execution
- SUBMITTING: Transaction sent to Monad Chain
- EXECUTING: ArcExecutor processing the intent
- COMPLETED: Successfully executed β
- FAILED: Execution failed but handled gracefully
- REJECTED: Authorization or validation failed**Visual Guide Complete** π¨
*All system components, flows, and interactions documented!*