StarkNet 性能路线图

简介: 文章是关于StarkNet性能提升的路线图,讨论了区块限制、Sequencer并行化、Cairo-VM的Rust实现以及Sequencer的Rust重构,旨在通过一系列优化措施提高StarkNet的交易吞吐量和用户体验。

前言

StarkNet将一年前在主网推出,对StarkNet的构建主要集中在功能层面。现在,将注意力转移到网络性能改善上,目标是通过一些列的功能改进来改善StarkNet的使用体验。

区块限制:Validity Rollups vs L1

提高区块链可扩展性和 TPS 的一种潜在方法是解除区块限制(在gas/size方面),同时保持区块时间不变。这将需要区块生产者(L1 上的validators,L2 上的sequencers)付出更多努力,因此需要更有效地实施这些组件。为此,现在将重点转移到 StarkNet sequencer optimizations上,以下部分中是更详细的描述。

这里自然会出现一个问题。为什么 sequencer 优化仅限于validity rollups,也就是说,为什么我们不能在 L1 上实现相同的改进并完全避免validity rollups的复杂性?在下一节中,将会说明两者之间存在根本区别,可以广泛在L2 进行的优化并不能在L1进行。

为什么 L1 吞吐量有限?

不幸的是,解除对 L1 的区块限制会遇到一个重大陷阱。通过提高链的增长率,我们也增加了全节点的需求,他们试图跟上最新的状态。由于 L1 全节点必须重新执行所有历史记录,块大小的大幅增加(就gas而言)会给它们带来巨大压力,再次导致较弱的机器退出系统并保留运行全节点的能力仅限于足够大的实体。结果,用户将无法自己验证状态并无信任地参与网络。

这让我们明白 L1 吞吐量应该受到限制,以维护一个真正去中心化和安全的系统。

为什么相同的障碍不影响validity rollups?

只有从全节点的角度考虑,我们才能看到有效性汇总所提供的真正力量。 L1 全节点需要重新执行整个历史以确保当前状态的正确性。 StarkNet 节点只需要验证 STARK 证明,而这种验证所占用的计算资源量呈指数级下降。特别是,从头开始同步不一定涉及执行;一个节点可能会从其对等节点接收到当前状态的转储,并且只能通过 STARK 证明来验证该状态是否有效。这使我们能够在不增加全节点要求的情况下增加网络的吞吐量。

因此,我们得出结论,L2 sequencer受到整个优化范围的影响,这在 L1 上是不可能的。

Sequencer 并行化

那么“事务并行化”是什么意思呢?老实说,并行执行一个交易块是不可能的,因为不同的交易可能是相互依赖的。这在以下示例中进行了说明。考虑一个包含来自同一用户的三笔交易的区块:

Tx A:将USDC换成ETH
Tx B:为 NFT 支付 ETH
Tx C:USDT换BTC

显然,Tx A 必须在 Tx B 之前发生,但 Tx C 完全独立于两者并且可以并行执行。如果每笔交易需要 1 秒来执行,那么通过引入并行化,出块时间可以从 3 秒减少到 2 秒。

问题的症结在于,事先并不知道交易的依赖关系。实际上,只有当从示例中执行Tx B 时,才能看到它依赖于Tx A 所做的更改。更正式地说,这种依赖性源于Tx B 从Tx A 写入的存储单元中读取这一事实。可以将Tx视为一个依赖图,其中存在从Tx A 到Tx B 的一条边,当且仅当 A 写入一个由 B 读取的存储单元,因此必须在 B 之前执行。下图显示了一个这种依赖图的示例:

在上面的示例中,每一列都可以并行执行,这是最佳调度(事实上,会按顺序执行事务 1-9)。

为了克服事先不知道依赖图的事实,考虑参考 Aptos Labs 开发的 BLOCK-STM 的理念,将乐观并行化引入到 StarkNet sequencer中。在这种范式下,我们乐观地尝试并行运行事务并在发现冲突时重新执行。例如,我们可以并行执行图 1 中的Tx 1-4,之后才发现 Tx 4 依赖于 Tx1。因此,它的执行是无用的(。在这种情况下,我们将重新执行 Tx4。

值得注意的是,可以在乐观并行化之上添加许多优化。例如,与其天真地等待每次执行结束,可以在发现使它无效的依赖项时中止执行。

另一个例子是优化重新执行哪些交易的选择。假设包含图 1 中所有事务的块被送入具有五个 CPU 内核的定序器。首先,尝试并行执行交易 1-5。如果完成的顺序是Tx2,Tx3,Tx4,Tx1,最后是Tx5,那么只有在Tx4已经执行完之后,我们才会发现依赖Tx1→Tx4——说明应该重新执行。实际上,可能也想重新执行 Tx5,因为考虑到 Tx4 的新执行,它的行为可能会有所不同。然而,可以遍历由执行已经终止的交易构建的依赖图,只重新执行依赖于 Tx4 的交易,而不是仅仅重新执行现在无效的 Tx4 之后的所有交易。

Cairo-VM 的新 Rust 实现

StarkNet 中的智能合约是用 Cairo 编写的,并在 Cairo-VM 中执行,该规范出现在 Cairo 论文中。目前,sequencer正在使用 Cairo-VM 的 python 实现。为了优化 VM 实现性能,我们发起了用 Rust 重写 VM 的工作。感谢 Lambdaclass 的出色工作,他们现在是 StarkNet 生态系统中一个非常宝贵的团队,这项工作很快就会取得成果。

VM 的 Rust 实现 cairo-rs 现在可以执行原生 Cairo 代码。下一步是处理智能合约的执行和与 pythonic sequencer的集成。一旦与 cairo-rs 集成,音序器的性能有望显着提高。

Rust 对 sequencer重新实现

我们从 python 到 rust 以提高性能的转变不仅限于 Cairo VM。除了上述改进之外,我们还计划用 Rust 从头开始​​重写sequencer。除了 Rust 的内部优势之外,这还为sequencer的其他优化提供了机会。举几个例子,可以采用 cairo-rs 的好处,而无需 python-rust 通信的开销,可以完全重新设计状态的存储和访问方式(今天是基于 Patricia-Trie 结构)。

Provers呢?

在整篇文章中,我们都没有提到有效性汇总中最重要的元素——prover。可以想象,作为可以说是架构中最复杂的组件,它应该是瓶颈,因此也是优化的重点。有趣的是,现在 StarkNet 的瓶颈是更“标准”的组件。今天,特别是对于递归证明,可以将比测试网/主网上的当前流量更多的交易放入证明中。事实上,今天,StarkNet 区块与 StarkEx 交易一起得到证明,后者有时会产生数十万 NFT 铸造。

Summary

并行化、Rust 等——为即将到来的 StarkNet 版本中改进的 TPS 做好准备。

参考

https://starkware.medium.com/starknet-performance-roadmap-bb7aae14c7de

相关文章
|
6月前
|
存储 算法 Android开发
提升安卓应用性能的五大实用策略
【4月更文挑战第5天】在快速发展的数字时代,用户对移动应用的性能要求越来越高。对于安卓开发者而言,优化应用性能不仅是提升用户体验的关键,也是增强应用竞争力的必要手段。本文将深入探讨五种实用的策略,帮助开发者有效提升安卓应用的性能。这些策略涵盖了从代码优化到资源管理等多个方面,旨在为开发者提供全面的指导和建议。通过实践这些策略,开发者可以显著减少应用的内存消耗、提高响应速度,并最终交付给用户一个更加流畅和高效的应用体验。
|
6月前
|
缓存 监控 Android开发
提升安卓应用性能的五大关键策略
【4月更文挑战第30天】 在竞争激烈的应用市场中,卓越的性能是确保用户留存和应用成功的核心因素。本文将详细阐述五种提高安卓应用性能的有效技术策略。这些策略包括优化内存使用、减少网络请求延迟、多线程与并发处理、UI渲染优化以及电池效率改进。通过深入分析每项技术的原理及其在实际开发中的应用,旨在帮助开发者构建更快速、流畅且响应敏捷的安卓应用。
|
3月前
|
监控 持续交付 开发者
资源紧张下的创新之道:揭秘高效可扩展架构的设计秘诀,让技术与成本达到完美平衡!
【8月更文挑战第22天】在科技行业的快节奏发展中,设计出经济高效且可扩展的架构是每位工程师面临的挑战。本文提出五大策略:精准需求分析确保目标清晰;模块化设计如微服务架构促进独立开发与扩展;选择成熟技术栈及利用云服务提升系统效能;实施自动化流程如CI/CD加速开发周期;建立全面监控体系保障系统健康。遵循设计原则如SOLID,结合这些策略,即便资源有限也能构建出高质量、灵活应变的系统。
45 0
|
4月前
|
人工智能
你在找提升效率的解决方案还是追求效果的解决方案
企业在选择解决方案时需区分提升**效率**与改善**效果**的目标。**效率**着重于加快工作流程,如政务移动化提升了审批速度;而**效果**则聚焦于成果质量,即使过程中也包含效率改进。例如,生成式AI虽能加速内容创作,但内容营销的成功还需确保内容的准确触达。**客户在哪儿AI**通过分析目标客户的媒体偏好,实现了内容的精准投放,这是追求效果而非单纯效率的体现。两者间并无优劣之分,实践中常相互交织。
|
6月前
|
缓存 监控 Android开发
提升安卓应用性能的五大技巧
【5月更文挑战第20天】 在竞争激烈的应用市场中,一个流畅、高效的安卓应用能决定用户的初次体验和留存率。本文将深入探讨五种不同的技术手段来优化安卓应用的性能,包括对内存使用的精细管理、多线程和并发处理的合理应用、UI渲染效率的提升、网络请求的优化以及应用大小的控制。这些技巧不仅帮助开发者构建更加稳定和响应迅速的应用,同时也能显著改善最终用户的使用体验。
|
6月前
|
算法 开发工具 Android开发
提升安卓应用性能的五大策略
【2月更文挑战第16天】在竞争激烈的应用市场中,性能优越的安卓应用更能吸引和保留用户。本文将深入探讨五种有效的策略,帮助开发者优化安卓应用性能,包括代码优化、内存管理、多线程应用、使用最新的安卓SDK以及利用硬件加速特性。
|
6月前
|
Linux Anolis
龙蜥社区正式推出驱动基线 V1.0,打造更加稳定、高效的生态系统
龙蜥社区正式推出驱动基线 V1.0,打造更加稳定、高效的生态系统。
|
敏捷开发 运维 数据可视化
相较于Scrum, 我更推崇Kanban,帮助团队建立价值交付流,识别瓶颈
最近在学习实践精益Kanban方法,结合自己团队实践Srum的经历,整理些资料二者的差异。相较于Scrum, 我更推崇精益Kaban。
210 0
相较于Scrum, 我更推崇Kanban,帮助团队建立价值交付流,识别瓶颈
|
机器学习/深度学习 人工智能 算法
当大模型开始规划合作,一个模型打造软件开发团队,代码生成性能狂升
当大模型开始规划合作,一个模型打造软件开发团队,代码生成性能狂升
119 0
当大模型开始规划合作,一个模型打造软件开发团队,代码生成性能狂升
|
机器学习/深度学习 存储 人工智能
如何构建可持续的ChatGPT高性能服务器端架构?
与之前的版本相比,GPT-4最大的改进是其多模态(multimodal)能力——它不仅能够阅读文字,还能识别图像。值得注意的是,虽然之前有消息称GPT-4拥有100万亿个参数,但OpenAI并没有证实这个数字。与其相比,OpenAI更强调GPT-4的多模态能力以及其在各种测试中的表现。
如何构建可持续的ChatGPT高性能服务器端架构?