原文作者:Yiping,IOSG Ventures
TL;DR
Starknet 在 2022 年 11 月 29 日推出 Alpha Mainnet。
Scroll 在 2023 年 2 月 27 日推出其 Goerli Alpha Testnet。
zkSync 在 2023 年 3 月 24 日推出 zkSync Era Mainnet。
Polygon 在 2023 年 3 月 27 日推出其 zkEVM Mainnet Beta。
有了这些众多的 ZK Rollup,作为一名 Solidity 开发者,你可能会好奇:
哪个提供了更适合你的开发者体验?
哪个提供了你更需要的开发者支持?
如果你打算创建你的项目,哪个最适合你?
随着 ZK Rollup 的陆续上线,现在是研究 ZK Rollup 开发体验的最好时机。考虑到所有 ZK Rollups 都在推广他们的 EVM 兼容性,我们对开发者体验的探索将从 Solidity 工程师的角度出发,让我们通过数据驱动的答案深入探讨这些问题 ⬇️
🐙 ZK Rollup 的代码开源比较
开源提升了开发者体验,通过促进质量、安全性和合作。其透明性允许全球开发者解决 Bug 和安全问题,从而持续提升软件。GitHub 充当学习平台,提供对各种编码风格、先进技术和行业标准的访问,丰富了开发者的旅程。开发者可以根据特定需求修改代码。开源通过多样化的社区鼓励协作和创新,推动项目的发展。
项目通常在达到关键里程碑后开源他们的代码,通常是当代码至少达到 Alpha 版本时。仍在进行大量开发的代码不适合开源,因为它们可能无法提供预期的好处,如质量提升、安全性提升和协作学习。因此,开源代码的数量通常与项目开发阶段相关。
所有的 ZK Rollup 都在他们的 GitHub 上投入了大量的工作,尽管他们提供的内容有所不同。
📕 项目语言选择
Rust 在许多项目中成为构建编译器、节点、工具链、CLI 工具和虚拟机的首选语言。
📄 开发文档
开发文档对于开发者体验至关重要。这些资源有效地弥合了 Layer 2 解决方案的复杂性和以太坊虚拟机 (EVM) 兼容的开发生态系统之间的鸿沟。
不同的项目提供稍微不同的文档结构和内容。
zkSync 为其特色功能 AA 和 Layer 1 <> Layer 2 通信提供了详细文档和参考代码。
我们发现了以下改进的空间:
包含文件名和路径:在任何代码块的开始部分,都要提到文件名和其路径。这有助于用户知道在哪里找到或放置代码。
展示 CLI 执行结果:在提供命令行接口 (CLI) 指令时,包括命令的示例输出。这有助于用户知道应该期待什么,并验证他们是否正确执行了命令。
限制代码行长度:为你的代码示例设置最大行长度。这确保你的代码易于阅读,无需水平滚动。
使用真实的示例:而不是使用占位符或 xxx,提供示例合约地址或秘钥。这使用户更好地了解他们应该使用何种数据。
对于复杂教程提供项目视图:对于更复杂的教程,在教程的侧边提供项目视图。当用户浏览教程时,突出显示代码的相应部分。
交互式示例:包含交互式示例以帮助快速引导开发者。这可以是一个播放区,用户可以编辑和运行代码片段,或者是云开发环境。
整理文档:确保你的文档结构良好,易于导航。使用清晰的标题,目录。
保持更新:随着项目的发展,确保你的文档保持最新。这可能意味着更新截图,修订代码示例,或者重写部分以反映新功能或变化。
🧑💻 社区和团队贡献
贡献者的数量反映了开源社区的参与度。更新的频率和参与度对于保持最新、全面的文档至关重要。
贡献人数越多代表其开源社区更活跃。大部分项目都在刚上线的时候达到文档更新频率的最高峰。
🧑💻 编码体验
编码体验取决于工具链、编辑器体验和框架。
相关工具链决定了是否容易设置本地开发环境、调试和运行代码。
编辑器体验决定了编码的速度。一个好的编辑器体验应该包括清晰的语法高亮、定义和自动补全。
框架提供了一个结构化的环境,大大加速了开发过程。它们带有预配置的功能和可重用的库,开发者可以利用这些来有效地编写智能合约,无需从头编写每一行代码。
Remix 类似软件的支持可以帮助开发者在不需要建立自己本地环境的情况下快速开始开发工作。目前,这种云原生的开发体验只适用于后端智能合约。它还需要进行改进以适应 Dapp 开发,包括智能合约和前端。
Warp 表现不佳。Kakarot 将是与 StarkNet 兼容的 EVM 的唯一解决方案。Kakarot 提供了一个非常流畅的 Solidity 开发体验。与所有现有的以太坊工具,如编译器、Remix 和 Hardhat 兼容。
Kakarot 提供了一个用 Cairo 编写的 EVM。作为一个 EVM,Kakarot 能够执行 EVM 字节码程序,使得 Ethereum 智能合约能在 StarkNet 上运行。
✍️ 测试
测试是智能合约开发的重要方面,它确保了智能合约的质量、功能和可靠性。这个过程包括验证每个功能是否按照预期运行,并在部署之前找出需要修复的任何错误或问题。通过进行彻底的测试,开发者可以有信心,软件将在各种场景和条件下正确运行。这个过程不仅防止了可能影响用户体验的潜在故障,而且帮助维护智能合约的完整性和安全性。测试还使开发者了解到潜在的优化,从而有助于智能合约的持续改进。
Tenderly 是智能合约开发的最佳调试工具之一。它提供智能合约执行模拟、调试器、燃气分析器、分叉和警告功能,以帮助开发者更好地构建 Dapp。然而,Tenderly 并不支持任何 ZK Rollup。
希望在不久的将来,我们能看到更多支持 ZK Rollup 的智能合约开发和调试工具,这将有助于推动区块链技术的进一步发展和应用。
🚢 部署
部署过程在智能合约开发生命周期中至关重要。好的部署工具为从开发到链上环境部署智能合约提供自动化、一致和可靠的体验。好的部署工具可以显著减轻手动部署任务的负担,从而加快交付时间并减少人为错误。
StarkNet 的部署步骤分为 Declare 和 Deploy 两步,因此需要较长的时间。
✨ Layer 2 新特性
Layer 2 解决方案在解决可扩展性、效率和用户体验的挑战方面发挥着至关重要的作用。ZK Rollup 还处在早期阶段,但已经显示出解锁开发者新可能性的巨大潜力。
通过提供如状态差异 (State-diff)、无缝的 Layer 1 与 Layer 2 通信,以及账户抽象化等突破性创新,ZK Rollup 使开发者能够创建创新项目,推动区块链可实现的界限。这些高级特性不仅增强了去中心化应用的能力,而且为区块链技术的主流接纳铺平了道路。
状态差异(State-diff)
StarkNet 和 zkSync Era 使用状态差异技术,理论上,可以产生更低的费用。他们只发布状态差异,而不是交易输入,这允许数据压缩和降低存储成本。这将会给游戏开发者带来好处。
Polygon zkEVM 在链上发布所有的交易输入,依赖于预期在未来几年内数据存储成本的降低。
Layer 1 <> Layer 2 通信
大多数 ZK Rollup 提供 Layer 1 <> Layer 2 通信功能。例如,zkSync Era 提供了一个利用 Layer 1 <> Layer 2 通信的治理例子。在 Layer 1 上,合约可以启动一个 Layer 2 合约执行。在 Layer 2 上,Layer 2 合约只能向 Layer 1 合约发送信息。然后我们可以在 Layer 1 上处理收到的消息。同样,Polygon 提供了一个关于 Nft-bridge 使用跨链通信在 L1 和 L2 之间共享信息的编码示例。
账户抽象化
账户抽象化是另一个令人兴奋的特性。zkSync Era 提供原生的 AA。zkSync Era 的账户可以启动交易,像 EOA 一样,但也可以在其中实现任意逻辑,像智能合约一样。由于 zkSync 原生实现了 AA,账户不需要额外的代理合约。即使是普通的 EOA 也可以有无需燃料费支付的交易,这在仅仅 EIP-4337 中是不可能的。Polygon zkEVM 和 Scroll 实现了与 EVM 兼容的 AA。StarkNet 也正在进行账户抽象化的工作。它寻求实现签名抽象化和支付抽象化。
💭 未来对开发者体验的改进
在这次的研究中,我们深感这些 ZK Rollup 项目在不断改进产品和对开发者的支持方面付出了巨大的努力。然而,考虑到我们还处在区块链应用的初级阶段,面临的开发者群体相对较少,因此,致力于提升开发者体验无疑会帮助项目吸引未来的开发者,并最终塑造这个行业的未来。
以下是一些提高开发周期支持的常见建议:
1 ,文档:
高质量的文档:全面、清晰和及时更新的文档对于提高开发者体验至关重要。确保文档的完整性、清晰度、包含例子,并定期更新。
直观的 API 设计:API 应该一致、直观,并有良好的文档。根据 API 文档的清晰度和可访问性,以及完成常见任务的容易程度评估 API 设计。
完整的 API 引用和更改日志:提供详细的 API 引用,包括函数、参数、返回值和错误代码。维护一个更改日志,跟踪更新、新功能、bug 修复和已弃用的功能。
案例研究:展示产品应用的例子,以启发和教育开发者有效解决问题。
流畅的上手体验:通过简化环境设置,解释核心概念,和促进基本应用的创建,来缩短新开发者开始的时间。
2 ,可用性和效率:
工具的可用性:确保提供的工具用户友好且直观。通过评估开发者执行常见任务所需的时间来衡量使用的便利性。
错误信息和调试支持:通过有用的错误信息和强大的调试支持来提高开发者体验。你可以通过故意创建常见的错误,然后检查系统的回应有多帮忙来衡量这个。
集成和兼容性:评估工具或平台与生态系统中其他常用工具的集成程度如何。
3 ,透明度和更新:
产品状态:及时更新关于操作问题、维护计划和系统停机的信息,可以帮助开发者有效地规划他们的工作。
随着 Web3 领域的技术快速进步,以一种可扩展和可持续的方式维持一致的高水平开发者体验,对于 Web3 项目来说是一个显著的挑战。
为了应对这个挑战,我们建议项目探索两个方向:利用 AI 来增强自动化和生产力,减少对大量人力资源的需求,和利用社区的力量,激励贡献。
AI 助力:生成和维护大量文档可能需要大量资源。大型语言模型可能帮助开发者编写和维护高质量的文档。此外,AI 驱动的 QA 机器人可以提供及时准确的回答开发者的查询,进一步提高他们的体验。
激励社区参与:为了促进社区的参与,项目可以提供各种激励,包括财务和非财务激励。例如,类似赏金的项目可以扩展到包括在代码、代码库测试、文档改进、翻译工作和无价的第一手反馈中的贡献,这些反馈直接来自用户,反映出可以指导项目团队改进产品的实际需求。这种方法不仅有可能提高资源的质量,还可以帮助减少维护成本。通过活跃的社区渠道(如 Discord、Substack 等)承认贡献,给予贡献者赞扬。
通过强调以开发者为中心的设计,并通过社区的共同努力,提供引人入胜的开发者体验,我们可以在 Web3 世界中培育一个充满活力和包容性的开发者生态系统!