Concepts / Somnia Blockchain

On-Chain Reactivity

Blockchains have historically had a major limitation: they are passive. They are excellent ledgers, but they are deaf and mute until a user kicks them into action with a transaction. A smart contract cannot "wake up" when a price changes, specific data shows up or when a specific event occurs.

The Usability

Imagine the world where you can instantly react to events happening on blockchain:

  • DeFi: Automated responses to price changes, liquidations, or interest accruals. For instance, a lending protocol might need to adjust collateral requirements instantly based on market volatility.
  • Gaming: Real-time updates for player achievements, in-game economies, or multiplayer interactions. Imagine a blockchain game where earning an NFT trophy automatically triggers rewards or level-ups without off-chain servers.
  • Business Logic: Supply chain tracking where an item's arrival (logged as an event) auto-initiates payments or audits. Or in insurance, a smart contract that pays out claims upon verified on-chain data like weather reports.

The Setup

The blockchain is ledger of transaction modifying the common state. Some of these transaction might emit a log, which is defined as an observable event:

sequenceDiagram
    participant User
    participant Blockchain
    participant EventLog
    
    User->>Blockchain: Submit Transaction
    Blockchain->>EventLog: Event Emitted
    Note over EventLog: Observable Event

Traditionally the developer would need to create an infrastructure that constantly monitors the blockchain state and event through RPC calls. Then based on the logic the custom app would create a transaction and post it for the inclusion at the next available block:

sequenceDiagram
    participant User
    participant Blockchain
    participant EventLog
    participant Monitor as Off-Chain Monitor
    participant Logic as Custom App Logic
    
    User->>Blockchain: Transaction
    Blockchain->>EventLog: Event Emitted
    
    loop Constant Polling
        Monitor->>Blockchain: RPC Call
        Blockchain-->>Monitor: Current State
    end
    
    Monitor->>Logic: Event Detected
    Logic->>Logic: Process Logic
    Logic->>Blockchain: Submit Reaction Tx

    Note over Monitor: ⚠️ Custom Infrastructure
    Note over Blockchain: Included in NEXT available block

As expected this created a large overhead for a typical development team. Additionally it did not meet the requirements of decentralisation, trustlessness, immediate reaction and reliable event handling.

This is why we saw a plethora of services known as indexers or Web3 hooks:

sequenceDiagram
    participant User
    participant Blockchain
    participant EventLog
    participant Indexer as Indexer Service
    participant Config as Custom Config/Logic
    
    User->>Blockchain: Transaction
    Blockchain->>EventLog: Event Emitted
    
    Indexer->>Blockchain: Monitor Events
    Blockchain-->>Indexer: Event Data
    Indexer->>Config: Trigger Hook
    Config->>Config: Execute Logic
    Config->>Blockchain: Submit Reaction Tx
    
    Note over Indexer: ⚠️ Centralized & Trusted
    Note over Blockchain: Included in NEXT available block

They alleviate a lot of issues related to the infrastructure, at the same time they add new issues related to the domain-specific configuration or language. Still the key requirements are still not met:

  • indexers are centralised and trustfull
  • the event handling trasaction can only be included in the next available block
  • it is not MEV-resistant
  • it's only as reliable as the indexer provider

The Solution

Enter Somnia Native On-Chain Reactivity.

This isn't just an incremental improvement; it's a paradigm shift that enables real-time, trustless and decentralised reactions without relying on external systems:

sequenceDiagram
    participant User
    participant Blockchain as Somnia Blockchain
    participant EventLog
    participant Handler as Event Handler
    
    User->>Blockchain: Transaction
    Blockchain->>EventLog: Event Emitted
    EventLog->>Handler: Trigger Handler
    Handler->>Handler: Execute Reaction Logic
    
    Note over Blockchain: ✅ Same block execution
    Note over Handler: ✅ Decentralized & trustless
    Note over Handler: ✅ MEV-resistant

The Benefits

Once an event is defined, it's handling is happening automatically by blockchain nodes:

  • Real-Time: Reaction included in the same block.
  • Decentralised: As decentralised as the blockchain itself.
  • Trustlessness: No trusted party required.
  • MEV: Fully MEV-resistant due to deterministic inclusion of event handlers
  • Developer-Friendly: Familiar paradigms (e.g., subscriptions akin to event listeners in traditional programming) and interface reduce complexity.
  • Cost Efficiency: Optimized gas usage minimize expenses compared to infrastucture required for constant off-chain monitoring.
  • Security and Resilience: Backed by the blockchain itself. Reduces attack surfaces by eliminating external dependencies; nested events allow complex chains without intermediaries.
  • Scalability: Supports high-throughput apps, as seen in Somnia's 1M+ TPS capability, making it ideal for mass-adoption scenarios.

Comparison Table

Aspect Traditional RPC Indexer/Hooks Somnia Reactivity
Timing Next block Next block Same block
Decentralization Developer infra Centralized service Fully decentralized
Trust Model Self-hosted Trusted third party Trustless
MEV Resistance ❌ ❌ ✅
Infrastructure High complexity Medium complexity Zero external infra
Reliability Self-managed Service-dependent Blockchain-native

Copied from docs.somnia.network (somnia-concepts-docs) by scripts/import-gitbook.mts, until it finds a home in a product's docs.Edit this page