ev-node Documentation

repository·main·Indexed 18 days ago

https://github.com/evstack/ev-node

Foundational framework for the Evolve Stack, enabling the launch of sovereign, customizable blockchains. It provides core primitives for Data Availability (DA) layers, P2P networking, and sequencing. Includes documentation for running EVM sequencers and full nodes, the Force Inclusion API for direct DA submission, the ev-loadgen stress-testing tool, and a KV Executor for node testing.

Tokens
184K
Snippets
561
Records
870
Agent score
62%

What's inside ev-node

  1. What is ev-reth?

    main
    ev-reth is a modified version of the reth Ethereum execution client, specifically optimized for Evolve rollups. It provides high-performance Rust execution while maintaining full EVM compatibility, allowing you to use standard Ethereum tooling (like Foundry and Hardhat) and wallets (like MetaMask).
  2. Overview of chain deployment strategies in Evolve

    main
    When building chains with Evolve, developers have the flexibility to choose their own Data Availability (DA) layer, settlement scheme, and execution environment. This flexibility requires managing multiple services simultaneously. While tutorials often use helper bash scripts for simplicity, production-ready deployments involve more robust orchestration of these services to ensure stability and scalability.
  3. Overview of the Solo Sequencer

    main

    The Solo Sequencer is a minimal, single-leader sequencer implementation designed for simplicity. It is best suited for trusted single-operator setups where low overhead is prioritized over durability.

    Key Characteristics:

    • In-memory Queue: Transactions are held in an in-memory queue. They are not persistent and will be lost if the sequencer restarts.
    • No Forced Inclusion: It does not support forced inclusion checkpoints, avoiding the complexity of DA epoch tracking and catch-up logic.
    • No DA Dependency: It does not interact with a Data Availability (DA) layer for transaction ordering. The VerifyBatch method always returns true unconditionally.
  4. Overview of the Single Sequencer

    main

    The Single Sequencer is a component of the Evolve framework responsible for transaction ordering and batch submission to a Data Availability (DA) layer. It acts as a reliable node that receives transactions from clients, batches them, and submits them to the DA layer.

    Key responsibilities include:

    • Receiving mempool transactions from clients.
    • Retrieving forced inclusion transactions from the DA layer.
    • Maintaining transaction and batch queues.
    • Handling crash recovery via a checkpoint system to ensure DA transactions are never re-executed.
    • Providing batch verification mechanisms.
  5. Overview of Evolve Rust Client Libraries

    main

    The Evolve Rust client is split into two primary crates designed for interacting with Evolve nodes via gRPC:

    1. ev-types: Provides the low-level protobuf-generated types and service definitions. These are automatically generated from the source proto files located in /proto/evnode/v1/.
    2. ev-client: A high-level library built on top of the types. It provides type-safe interfaces, connection management with configurable timeouts, and wrappers around gRPC services to simplify interaction with the node.

    For specific implementation details and code examples, refer to the ev-client documentation in crates/client/README.md.

  6. Explore Evolve documentation sections

    main

    The Evolve documentation is organized into several key areas to help you navigate the ecosystem:

    SectionContent
    LearnCore concepts including DA (Data Availability), sequencing, execution, and specifications.
    How-To GuidesTutorials for building, deploying, and operating chains.
    EVM IntegrationSpecific instructions for running an EVM chain with Reth.
    DA LayersInstructions for connecting to Celestia or running a local DA.
    DeployGuidance on local, testnet, and mainnet deployment.
    API DocsFull gRPC and JSON-RPC endpoint reference.
  7. Use the KV Executor for testing Evolve nodes

    main
    The KV Executor is a simple key-value store implementation designed for testing Evolve nodes. It provides an HTTP server that manages a key-value store, allowing you to submit transactions or direct key-value pairs and retrieve them via API endpoints. The server's lifecycle is tied to the Evolve node: it starts with the node and shuts down gracefully (with a 5-second timeout) when the node stops or receives a termination signal.
  8. What is a Full Node in Evolve

    main

    A Full Node is a top-level service that encapsulates and manages the various components of the Evolve network. Unlike a light node, which only syncs and stores block headers via the P2P layer, a Full Node syncs and stores full blocks from both the P2P network and the Data Availability (DA) layer. These full blocks include all transactions published as part of the block.

    To ensure compatibility with cometBFT RPC calls from the SignClient interface, the Full Node includes TxIndexer, BlockIndexer, and IndexerService components.

  9. What is Evolve and how does it work

    main

    Evolve is a modular launch stack for Layer 1 (L1) networks designed to provide L1-level control with L2-level performance. Instead of managing a full consensus network with validator overhead and token inflation, Evolve allows you to deploy a chain that inherits security from a Data Availability (DA) layer (like Celestia) by posting blocks to it.

    Core Architecture:

    • ev-node: The central modular node that exposes an Execution interface.
    • Execution: Transactions are executed off-chain on your dedicated resources, preventing the resource-sharing limitations of smart contracts on shared blockchains.
    • Security: Chains use the DA layer for security. Full nodes can download and verify transactions posted by the sequencer. For optimistic or ZK-chains, full nodes can generate fraud or ZK-proofs to resolve disputes.
    • Customizability: Developers can customize the four main components: data availability layers, execution environments, proof systems, and sequencer schemes.
  10. Configure DA batching strategies

    main

    The batching_strategy determines how blocks are grouped before being submitted to the DA layer. This allows you to balance latency, cost, and throughput.

    Available Strategies

    | Strategy | Description | Best Use Case | | :--- | :--- | : | | immediate | Submits as soon as any items are available. | Low-latency requirements where cost is not a concern. | | size | Waits until the batch reaches a batch_size_threshold (fraction of max blob size). | Maximizing blob utilization and minimizing costs. | | time | Waits for a batch_max_delay interval before submitting. | Predictable submission timing aligned with DA block times. | | adaptive | Submits when either the size threshold is reached OR the max delay expires. | Recommended for production; optimizes both cost and latency. |

    • batch_size_threshold: (Used by size and adaptive) A float between 0.0 and 1.0 representing the fraction of the maximum blob size. Default is 0.8.
    • batch_max_delay: (Used by time and adaptive) The maximum duration to wait. If set to 0, it defaults to the block_time value.
    • batch_min_items: The minimum number of items (headers or data) required before a submission is considered. All strategies respect this.
    da:
      batching_strategy: "adaptive"
      batch_size_threshold: 0.8
      batch_max_delay: "6s"
      batch_min_items: 1
  11. How the Evolve Validator Network works

    main

    The Validator Network provides an extra security layer and soft confirmation for the rollup, allowing it to move faster than the underlying Data Availability (DA) layer. Instead of a full consensus protocol, it uses a set of validators to verify execution and ordering.

    High-level Workflow

    1. Block Broadcast: The sequencer broadcasts a BlockBundle(h) (containing the header, transactions, and state root) to all active attesters via gRPC or WebSocket.
    2. Local Verification: Each attester independently validates the block header and state transition. They may optionally re-execute blocks using a connected full node.
    3. Attestation Submission: After processing the last block of an epoch, the attester signs the epoch and submits the signature as a transaction within a configurable SubmissionWindow.
    4. Aggregation & Quorum: The system collects signatures until $\ge 2/3$ of the current bonded voting power has signed, providing soft confirmation for the entire epoch.
    5. Final Commit: Once the block is included in the DA layer, it receives hard confirmation.

    Key Concepts

    • Epoch-based Signing: Validators sign one Attestation per epoch covering all blocks within that epoch. This maximizes throughput by requesting signatures after the fact rather than per block.
    • Soft Finality: Achieved when $\ge 2/3$ quorum is met. Hard finality is achieved via the DA layer.
    • SubmissionWindow: A configurable window (measured in blocks, $\le$ EpochLength) during which attestations must be submitted. Missing this window results in forfeited rewards for that epoch but does not trigger slashing.
    graph TD
        SQ[Sequencer] -- p2p --> A1[Attester 1]
        SQ -- p2p --> A2[Attester 2]
        SQ -- p2p --> A3[Attester N]
        A1 -- SubmitSignature Tx --> SQ
        A2 -- SubmitSignature Tx --> SQ
        A3 -- SubmitSignature Tx --> SQ
  12. Rollkit Minimal Header design considerations

    main

    When working with or implementing the Rollkit Minimal Header, keep the following architectural considerations in mind:

    • Flexibility: The header is designed to be adaptable to various execution layers (e.g., EVM, ABCI) without being tied to CometBFT's specific format.
    • Metadata via extraData: The extraData field is the designated mechanism for including additional metadata, such as sequencer information. This is critical for specific chain configurations.
    • Transformation Correctness: The process of transforming a Rollkit header into an execution layer-specific header (like an EVM or ABCI header) must be handled carefully to ensure correctness, particularly when supporting IBC or other cross-chain communication protocols.