Transaction lanes: reserved blockspace with custom lane support
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
调研方向
从 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:
- Classify: Route each incoming transaction to a lane via matchers
- Reserve: Allocate gas budget per lane from block gas limit
- Fill: Execute transactions lane-by-lane, respecting per-lane gas reservations
- Overflow: Redistribute unused lane capacity to general lane
- Metrics: Emit per-lane utilization metrics (gas used, tx count, overflow)
Receipt / RPC extensions
eth_getTransactionReceiptincludeslanefield indicating which lane the tx was routed to- New RPC:
evolve_getLaneStatusreturns current lane utilization and available capacity - Useful for clients to estimate inclusion probability and fee dynamics per lane
Scope
- Define
Lane,LaneMatcher,LanePolicytraits incrates/common/orcrates/evolve/ - Implement built-in matchers:
tx_type,to_address,selector,sender,any_of,all_of - Add lane configuration to
EvolveConfigchainspec extras - Modify
EvolvePayloadBuilderto 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
- Tempo: payment lanes with dual gas limits --
general_gas_limitcaps non-payment gas, remaining reserved for payments - Ethereum EIP-7766: Priority lanes proposal -- similar concept for L1
- #94 (closed) -- ToB auction research; auction-based ordering becomes a
LanePolicyimplementation - #127 (closed) -- pre-confirmations; moot at 100ms blocks, lane guarantees are the actual need
- 主要语言
- Rust
- 星标
- 8
- 派生
- 9
- 平均合并
- 7 小时 25 分钟
- 30 天内合并 PR
- 2
环境准备
- 提供 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
evstack/ev-reth 的其他 Issue
-
难度 3/5 1-2 天 新手友好度 35/100
维护者通常 1 天内回复
-
Explorer integration: Blockscout and Atlas support for 0x76 transactions可能重新可做 @pthmas 于 228 天前认领,目前没有进行中的 PR。 未关闭
evstack/ev-reth#130 · 已指派 1 人 ·
维护者通常 1 天内回复
-
难度 5/5 一周以上 新手友好度 30/100
维护者通常 1 天内回复
-
难度 5/5 一周以上 新手友好度 25/100
维护者通常 1 天内回复
-
难度 5/5 一周以上 新手友好度 28/100
维护者通常 1 天内回复
相似的 Issue
-
难度 2/5 1-3 小时 新手友好度 65/100
rescript-lang/rescript#8765 ·
维护者通常 1 天内回复
-
bug
难度 2/5 1-3 小时 新手友好度 62/100
farion1231/cc-switch#8072 ·
维护者通常 1 天内回复
-
Python 3.15 support可能已有人在做 @amnesiaof 今天认领。 未关闭L: python L: python:uv
难度 2/5 1-3 小时 新手友好度 72/100
dependabot/dependabot-core#16524 · 1 条评论 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 62/100
维护者通常 1 天内回复
-
[Bug]: Migration link in chromadb/config.py error message returns 404可能已有人在做 @Imad2702 今天认领。 未关闭
难度 1/5 1 小时以内 新手友好度 90/100
chroma-core/chroma#7879 ·
维护者通常 1 天内回复