Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

Transaction lanes: reserved blockspace with custom lane support

未关闭
#128 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

还没有人认领这个 Issue。

评估

难度
5/5
预计耗时
一周以上
新手友好度
25/100
Issue 类型
功能
描述清晰度
基本清楚
活跃度
停滞
技术栈
rust
领域
backend

调研方向

从 crates/node/src/builder.rs 中的 EvolvePayloadBuilder 开始,然后检查 crates/common/ 或 crates/evolve/ 中 Lane、LaneMatcher 和 LanePolicy 的拟议位置。在定义集成点之前,跟踪现有的 EvolveConfig chainspec extras 链以及 receipt/RPC 路径。完成的标准是覆盖 checklist,包括 Lane 保证、overflow、指标、RPC 和 receipt 元数据、集成测试以及文档。

由索引模型根据 Issue 内容生成。

描述

Summary

Implement a lane-based block construction system in the payload builder that reserves blockspace for different transaction categories, with built-in payment lanes and a pluggable interface for custom lanes.

Motivation

At 100ms block times with sequencer-controlled ordering, the scarce resource isn't confirmation speed -- it's guaranteed throughput under congestion. When block gas is fully utilized, high-value payment transactions compete with arbitrary EVM workloads (DeFi, NFT mints, contract deployments). Payment lanes guarantee that stablecoin transfers and payment-critical transactions always have access to blockspace, regardless of what else is happening on-chain.

Custom lanes extend this to any transaction category a chain operator cares about: system transactions, oracle updates, bridge operations, or domain-specific workloads.

Design

Lane model

A lane defines:

  • Name / ID: identifier for the lane (e.g., payment, system, general)
  • Gas reservation: minimum gas guaranteed for this lane per block
  • Gas cap: maximum gas this lane can consume (optional -- lanes can overflow into general capacity)
  • Matcher: predicate that routes a transaction to a lane (by tx type, destination address, calldata selector, or custom logic)
  • Priority: ordering within the lane (FIFO, fee-based, or custom)
Block structure
Block gas_limit: 30M
├── system lane:   2M reserved  (system txs, L1 info, oracle updates)
├── payment lane:  15M reserved (stablecoin transfers, 0x76 payment calls)
├── general lane:  13M remainder (everything else)
└── overflow: unused lane capacity redistributed to general
Chainspec configuration
{
  "evolve": {
    "lanes": [
      {
        "id": "system",
        "gas_reserved": 2000000,
        "matcher": { "type": "tx_type", "values": ["system"] },
        "priority": "fifo"
      },
      {
        "id": "payment",
        "gas_reserved": 15000000,
        "gas_cap": 20000000,
        "matcher": {
          "type": "any_of",
          "rules": [
            { "type": "to_address", "addresses": ["0x...USDC", "0x...USDT"] },
            { "type": "selector", "selectors": ["0xa9059cbb", "0x23b872dd"] }
          ]
        },
        "priority": "fee"
      }
    ],
    "lanes_activation_height": 0
  }
}
Custom lane interface

Chain operators can define lanes via chainspec (static) or register them programmatically via a trait:

pub trait LaneMatcher: Send + Sync {
    /// Returns the lane ID this transaction belongs to, or None for general lane.
    fn match_tx(&self, tx: &EvTxEnvelope, state: &dyn StateProvider) -> Option<LaneId>;
}

pub trait LanePolicy: Send + Sync {
    /// Orders transactions within a lane. Returns sorted transaction list.
    fn order(&self, txs: Vec<&EvTxEnvelope>) -> Vec<&EvTxEnvelope>;
}

This allows customers to:

  • Define lanes by contract address, function selector, tx type, sender allowlist, or arbitrary state-dependent logic
  • Implement custom ordering within lanes (auction-based, priority fee, FIFO, round-robin)
  • Compose matchers (any_of, all_of, not)
Payload builder integration

EvolvePayloadBuilder in crates/node/src/builder.rs changes:

  1. Classify: Route each incoming transaction to a lane via matchers
  2. Reserve: Allocate gas budget per lane from block gas limit
  3. Fill: Execute transactions lane-by-lane, respecting per-lane gas reservations
  4. Overflow: Redistribute unused lane capacity to general lane
  5. Metrics: Emit per-lane utilization metrics (gas used, tx count, overflow)
Receipt / RPC extensions
  • eth_getTransactionReceipt includes lane field indicating which lane the tx was routed to
  • New RPC: evolve_getLaneStatus returns current lane utilization and available capacity
  • Useful for clients to estimate inclusion probability and fee dynamics per lane

Scope

  • Define Lane, LaneMatcher, LanePolicy traits in crates/common/ or crates/evolve/
  • Implement built-in matchers: tx_type, to_address, selector, sender, any_of, all_of
  • Add lane configuration to EvolveConfig chainspec extras
  • Modify EvolvePayloadBuilder to classify, reserve, fill, and overflow
  • Add per-lane metrics (gas used, tx count, overflow events)
  • Extend RPC with lane status endpoint
  • Extend receipts with lane metadata
  • Integration tests: congested blocks with lane guarantees, overflow behavior, custom matcher registration
  • Documentation: how to define custom lanes for a chain deployment

Prior art

主要语言
Rust
星标
8
派生
9
平均合并
7 小时 25 分钟
30 天内合并 PR
2

环境准备

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

evstack/ev-reth 的其他 Issue

查看 evstack/ev-reth 的全部 Issue

相似的 Issue

更多 Rust Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。