OP Stack 生态系统发布了首个公共版本kona-node
,这是一个完全用 Rust 构建的模块化、高性能 Rollup 节点。kona-node
具有内存安全、资源占用少等优点,并通过可组合的 crates 强调可定制性,使其可扩展到不同的可验证环境。它与 Go 实现的op-node
相比,具有更好的开发者可读性、资源效率和新功能的快速集成。
今天标志着 OP Stack 生态系统的一个激动人心的里程碑:kona-node
的首次公开发布,这是我们完全用 Rust 构建的模块化、高性能 rollup 节点。如果你正在以太坊上构建可扩展的 Layer 2 解决方案,现在就是你兴奋的时候了。
在这篇文章中,我们将详细介绍 kona-node
的独特之处、它与参考 op-node
的比较,以及如何开始亲自使用它。
根据我们在 https://rollup.yoga 的文档,kona-node
是 OP Stack rollup 节点的符合规范的实现。它是更广泛的 Kona 套件 的一部分,其中包括底层类型、可移植的 no_std
组件以及针对安全性和性能优化的服务。
kona-node
的主要亮点包括 Rust 固有的内存安全性、最小的资源占用以及对多种证明后端(如 FPVM、SP1、Risc0 等)的支持。这种设计通过可组合的 crates 强调了可定制性,使其可以扩展以适应不同的可验证环境。
凭借仅约8K行的代码,kona-node
提供了强大的功能,包括故障证明功能。作为参考,完整的 Kona 客户端的代码量约为3K LoC,这展示了我们对精益高效工程的关注。
虽然 op-node
(最初基于 Go 的实现)一直是 Optimism rollup 的可靠主力,但 kona-node
带来了全新的视角,利用了开源 Rust crates。
kona-node
的实现复用了用于kona-proof
(一种 Rust 故障证明实现)的相同的 no_std
rust crates。这还包括许多其他基础 crates,包括协议类型、作为 Superchain 注册表一部分的 rollup 配置和硬分叉。
在设计方面,kona-node
通过 RollupNodeService
trait 采用了基于 actor 的架构,从而可以通过 DerivationActor
(用于 L2 payload 推导)和 EngineActor
(用于执行层交互)等 actor 进行消息传递并发。这种模块化设置增强了可组合性和可扩展性,与 op-node
的中心化事件系统结构形成对比。
最终的结果是更好的开发者可读性、资源效率和新功能的快速集成。
由于 https://rollup.yoga 提供了详细的文档,因此入门非常简单。我们的指南包含分步说明,涵盖从设置到高级配置的所有内容。
启动 Base 链的节点:
kona-node --chain base --port 8545
通过 Cargo 安装:
cargo install kona-node
要进行更深入的自定义,请查看标志,以了解 L2 链 ID、P2P 网络或 supervisor 集成。我们的文档包括故障排除提示和最佳实践,以确保顺利运行。
下面是在 https://node.rollup.yoga 上的屏幕截图,我们在该站点上使用 op-reth
针对 OP Sepolia 运行实时的 kona-node
。快去访问该站点,亲眼看看吧!
kona-node
的可组合性通过其模块化 crates 闪耀而出,例如用于推导管道的 kona-derive
以及用于集成数据源和属性构建器等组件的可扩展 trait。这些允许为自定义 rollup 或证明器(例如,FPVM、SP1、Risc0)进行无缝扩展。
这是一个使用 kona-derive
的示例,演示了如何使用 PipelineBuilder
组合一个 DerivationPipeline
,用于从 L1 数据进行 L2 输入推导:
// 动态构建推导管道。
letpipeline = PipelineBuilder::new()
.rollup_config(cfg)
.dap_source(dap)
.l2_chain_provider(l2_chain_provider)
.chain_provider(chain_provider)
.builder(attributes)
.origin(l1_origin)
.build();
下一个代码段显示了一个简化的示例,该示例基于 kona-node-service
的 API 实现自定义验证器节点的 RollupNodeService
trait。这演示了组合自定义 actor 和管道:
use kona_node_service::{RollupNodeService,NodeActor,NodeMode,Pipeline};
use kona_derive::PipelineBuilder;// 示例依赖项
use std::sync::Arc;
// 定义自定义类型(占位符;根据需要实现)
struct CustomDAWatcher;// 实现 NodeActor
struct CustomDerivationPipeline;// 实现 Pipeline + SignalReceiver
struct CustomDerivationActor;// 实现 NodeActor
struct CustomEngineActor;// 实现 NodeActor
// ... 类似地,对于其他 actor
impl RollupNodeService forMyCustomNode {
type DataAvailabilityWatcher = CustomDAWatcher;
type DerivationPipeline = CustomDerivationPipeline;
type DerivationActor = CustomDerivationActor;
type EngineActor = CustomEngineActor;
// 定义其他关联类型(例如,NetworkActor、SupervisorExt 等)
fn mode(&self) -> NodeMode {
NodeMode::Validator
}
fn da_watcher_builder(&self) -> <Self::DataAvailabilityWatcher as NodeActor>::Builder {
// 返回自定义 DA watcher 的构建器
CustomDAWatcher::builder(/* config */)
}
fn derivation_builder(&self) -> <Self::DerivationActor as NodeActor>::Builder {
// 使用自定义管道构建器进行组合
PipelineBuilder::new(/* rollup config */).build()
}
fn engine_builder(&self) -> <Self::EngineActor as NodeActor>::Builder {
CustomEngineActor::builder(/* L2 engine URL, etc. */)
}
// 实现其他构建器方法(例如,network_builder、rpc_builder)
}
// 用法:创建并运行自定义节点
let custom_node = MyCustomNode { /* fields */ };
custom_node.run().await; // 假设有一个 run 方法;根据实际 API 进行调整
由于节点连接和执行逻辑已经抽象出来,因此只需要定义 actor 构建器。这样,trait 本身将使用其抽象来启动节点。
借助 kona-node
,我们正在推动 OP Stack 朝着更大的去中心化和效率发展。此外,由于 rust crates 是模块化的并且已发布,因此可以按照用户喜欢的方式进行组合。如何自己扩展 rollup 节点没有任何限制。你可以随意使用、改编、改进 kona-node
- 作为一个库或一个应用程序。
准备好尝试了吗?请访问 https://rollup.yoga,自己运行一个节点,并来为 kona 存储库 做出贡献!
- 原文链接: optimism.io/blog/introdu...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!