# 基于数据分析，Layer2 开发体验哪家好？

By [un.Block](https://paragraph.com/@un-block) · 2023-08-13

---

**Layer2 开发体验**
---------------

Starknet 在 2022 年 11 月 29 日推出 [Alpha Mainnet](https://link.zhihu.com/?target=https%3A//medium.com/starkware/starknet-alpha-now-on-mainnet-4cf35efd1669)。

Scroll 在 2023 年 2 月 27 日推出 [Goerli Alpha Testnet](https://link.zhihu.com/?target=https%3A//scroll.io/blog/alphaTestnet)。

Taiko 在 2023 年 3 月 22 日推出 [Alpha-2 Testnet](https://link.zhihu.com/?target=https%3A//taiko.mirror.xyz/EM1IEpF_Pd9_WuPxw3EQPHNHmaXzh7kljMSolP754AI)，并于 2023 年 4 月 17 日结束。

zkSync 在 2023 年 3 月 24 日推出 [zkSync Era Mainnet](https://link.zhihu.com/?target=https%3A//blog.matter-labs.io/gm-zkevm-171b12a26b36)。

Polygon 在 2023 年 3 月 27 日推出 [zkEVM Mainnet Beta](https://link.zhihu.com/?target=https%3A//polygon.technology/blog/polygon-zkevm-is-now-fully-open-source)。

在过去的几个月里，我们见证了各种 ZK Layer2 的重要发布，为智能合约部署提供了环境。测试网或主网的推出标志着区块链发展时间表中的一个关键阶段。

随着所有这些重要的发展为构建者在 ZK Rollup 上创造奠定了基础，现在是深入探讨每个 ZKRU 为开发者提供的独特体验的绝佳时机。本文旨在阐述这些不同 Layer2 解决方案的开发者体验，分析 EVM 兼容性和整体开发工作流程。

考虑到所有 ZK Rollup 都在推广他们的 EVM 等价物，我们将从 Solidity 工程师的角度开始探讨开发者体验。

本分析旨在不仅为每个 ZKRU 的当前开发者体验提供洞见，还鼓励这些 ZKRU 互相学习，共同推动 Layer2 生态的发展。

**开发者体验**
---------

**Github 代码开源现状**
-----------------

**概述**
------

开源在提升开发者体验方面发挥着至关重要的作用，主要可以帮助提升代码质量、安全和协作体验。开源代码使全球开发者能够发现并解决漏洞和安全漏洞，从而不断改进软件。

此外，开源软件作为一种宝贵的学习资源，让开发者通过研究各种编码风格、最新技术和行业最佳实践来拓展自己的技能。这种对知识的无限制访问显著丰富了开发者体验。

开源软件还可以帮助定制化，使开发者能够根据特定需求调整软件。这种适应性对于根据独特的业务需求或用户需求定制应用程序至关重要。

最后，开源通过多样化的社区促进了协作和创新，汇集了具有不同技能和专业知识的贡献者。这种集境有助于应对复杂挑战，推动项目发展，鼓励创新。

以下是主流 ZKRU Github 代码开源情况一览。

![](https://storage.googleapis.com/papyrus_images/98e31f3cffcfe7845121f45391f86cdd28e7634ffbc46289f6c544400358aa3f.png)

Starkware 拥有两个开源账户：[StarkNet](https://link.zhihu.com/?target=https%3A//github.com/orgs/starknet-io/repositories%3Ftype%3Dall) 和 [StarkWare Libs](https://link.zhihu.com/?target=https%3A//github.com/starkware-libs)，共有 47 个代码库。

Polygon 也有两个开源账户，[Polygon](https://link.zhihu.com/?target=https%3A//github.com/maticnetwork) 和 [Polygon zkEVM](https://link.zhihu.com/?target=https%3A//github.com/0xpolygonhermez)。在其 Github 个人资料页面上，它显示了关于 EVM 兼容性的详细数据。它在其 zkEVM 上运行官方以太坊测试向量。它通过了 99.67% 的测试。

Scroll 从 Polkadot 和 Ethereum Applied ZK 分叉了许多项目。他们根据这些分叉项目进行定制化修改。从分叉代码库来看，Scroll 是最具以太坊特色的 Layer2，因为他们的证明系统、zkEVM 电路都与 Applied ZK 密切相关。

另一个有趣的事情是，Scroll 开源了许多与加密相关的代码库，如证明系统、Crypto Primititves、聚合器。这表明他们在密码学方面有很强的背景。

**语言选择**
--------

下面的图表显示了每个 ZKRU 项目中每种语言的代码行数。这展示了不同项目的语言选择。

![](https://storage.googleapis.com/papyrus_images/27a93e8e18a6241cbe943ecd857e9a0ebf62004fe256dc4ba406ade4d9ae8c0d.png)

**StarkNet**

Rust 在 StarkNet 代码库中拥有最高的代码行数，共有 109,262 行。Python 是第二大使用语言，共有 68,770 行。这表明 StarkNet 大量运用 Rust 和 Python。

**zkSync Era**

对于 zkSync Era，它们的代码量很大，因为有几个代码库是从大型项目中分叉出来的，比如 [era-compiler-llvm](https://link.zhihu.com/?target=https%3A//github.com/matter-labs/era-compiler-llvm) 和 [era-compiler-llvm-builder](https://link.zhihu.com/?target=https%3A//github.com/matter-labs/era-compiler-llvm-builder)。这两个分叉都有很多 Rust 代码。Rust 是 zkSync Era 第一大语言，占据了 3/4 的代码库。JS/TS 有 4 万行，位居第二。即使没有这两个大型分叉代码库，Rust 仍然是 zkSync Era 的主要语言。

在所有与 zkSync Era 相关的代码库中，zkSync 团队都将 zkSync Era 的介绍放在 README 文件的顶部。这可以为 zkSync Era 建立更强大的品牌并增加曝光。

**Polygon zkEVM**

对于 Polygon zkEVM，大部分代码是用 C++ 编写的。zkEVM-prover 有超过 800 万行的 C++ 代码。其他语言只有几万行代码。

排除 zkEVM-prover 后，剩下的大部分代码是 Go，大约 9 万行，占剩余代码量的 50%。JS 和 Go 是 Polygon zkEVM 除开 C++ 的两大主要语言。

**Scroll**

Scroll 的主流语言是 Rust，用于密码学、区块浏览器和 zkEVM。Go 用于构建节点和 RPC。Rust 拥有最高的代码行数，总计 585,446 行。Go 的代码行数明显高于 Python、TypeScript/JavaScript、C 和 Solidity，总计 468,003 行。

Rust 在几个 ZKRU 中成为主导语言。用于构建编译器、节点、工具链、CLI 工具和虚拟机。Rust 受欢迎的主要原因如下：

1.  内存安全：Rust 使开发人员更难犯错，这些错误可能导致程序崩溃或行为不可预测。
    
2.  高效的多任务处理：Rust 设计用于同时处理许多任务（如服务器处理多个用户），而不会导致错误。
    
3.  无额外成本的优美代码：Rust 让程序员编写易于理解的代码，而不会让程序变慢或效率降低。
    
4.  与其他代码协同工作：Rust 可以与用 C 编写的代码一起工作，这使得它更容易在不同的项目中使用。
    
5.  对资源的控制：Rust 为开发人员提供了大量的计算机资源控制，这意味着他们可以编写高效运行且不浪费内存或处理能力的代码。
    
6.  良好的工具：Rust 有许多工具，使编写、测试和共享代码变得更容易。
    
7.  活跃的社区：有许多活跃的 Rust 用户，他们为改进语言和帮助他人学习如何使用它做出贡献。
    

**智能合约开发文档现状**
--------------

**概述**
------

Layer2 智能合约开发文档对于开发者体验至关重要。这些资源有效地弥合了 Layer2 解决方案的复杂性与以 EVM 兼容开发生态之间的差距。

这些重要的文档阐明了 Layer2 解决方案的架构和独特特性，包括可扩展性增强、交易速度提升、成本降低、Layer 之间的互操作性以及账户抽象。这些知识让开发者深入理解 Layer2 解决方案可以如何提升他们的智能合约的效率、可用性，并开创全新的应用类型。

对于该领域的初学者，这些文档充当了全面的入门指南。它们提供了系统、其组件和功能的全景视图，从而降低了初学者的上手难度。

此外，这些文档，通过其清晰的、一步步的指南和补充示例，简化了学习曲线，使新来者能够快速熟练。它们引导开发者熟悉开发环境中的必要工具、库和 API，加强对系统及其底层结构的熟悉程度。

而且，这些文档强调了在 ZKRU 环境中编写、测试和部署智能合约的最佳实践。这样的指导对新开发者来说是一条清晰的路径，减少了潜在的错误，提高了他们的效率。

以下是关于主流 ZKRU 开发文档的详细分析。

![](https://storage.googleapis.com/papyrus_images/2b199fdad0e054cc99dde70b842d6e4952d4e835411c6b06a47ec92d3a175ec9.png)

这些项目都提供了带有示例和概念解释的优秀文档。然而，与一线项目 Vercel 和 Stripe 的文档相比，仍有一些提升的空间：

*   包括文件名和路径：在任何代码块的开头，都应该注明文件名和其路径。这有助于用户知道在哪里查找或放置代码
    
*   显示 CLI 执行结果：在提供 CLI 指令时，包括命令的示例输出。这有助于用户知道应该期望什么，并验证他们是否正确执行了命令
    
*   限制代码行长度：为代码示例设置一个最大行长度。这确保代码易于阅读，无需进行水平滚动
    
*   使用现实的例子：不使用占位符或 'xxx'，提供示例合约地址或秘钥。这让用户更好地了解他们应该使用哪种数据
    
*   对于复杂教程的项目视图：对于更复杂的教程，在教程的一侧提供项目视图。当用户浏览教程时，高亮显示代码的相应部分
    

![](https://storage.googleapis.com/papyrus_images/aa6d52803aefa1d798841be5a00da2a7048b57483353aee003214898e6d87f61.png)

\*

*   交互式示例：包括交互式示例，帮助快速吸纳开发者。这可能是一个用户可以编辑和运行代码片段的游乐场，或者是一键启动的云开发环境
    
*   组织文档：确保文档结构良好，易于导航。如果可能，使用清晰的标题、目录和 Breadcrumb navigation
    
*   保持更新：随着项目的发展，确保你的文档保持最新状态。这可能意味着更新截图，修改代码示例，或者重写部分内容以反映新的特性或更改
    

**文档内容**
--------

**StarkNet**

StarkNet 提供了三种类型的[文档](https://link.zhihu.com/?target=https%3A//www.starknet.io/en/developers)，以便新手顺利入门：开发者文档、教程以及工具和资源。

工具和资源部分涵盖了所有相关的库、框架、编辑器插件和模板，文档中列出了总共 27 个工具。对于寻求在 StarkNet 基础设施上构建的开发者来说，这个部分至关重要。

教程有多种形式，包括源代码、博客文章和视频。在可用的 40 个教程中，大部分是视频格式。需要注意的是，并非所有教程都专注于智能合约开发；有些涵盖了技术讲座或解释核心概念，如 [Herodotus 讨论存储证明](https://link.zhihu.com/?target=https%3A//www.youtube.com/watch%3Fv%3DHJP5LVkulBw%26list%3DPLcIyXLwiPilV5RBZj43AX1FY4FJMWHFTY%26index%3D14)。尽管这些可能对于想要快速开始项目的开发者并不立即有所帮助，但它们提供了对 StarkNet 底层技术的有价值的洞见。

开发者文档作为智能合约开发者的全面指南，涵盖了如下必要信息：

*   StarkNet 的当前版本
    
*   架构和概念
    
*   环境设置、智能合约开发和部署
    
*   工具和重要的合约地址
    

这些文档大约包含 56 个部分和大约 35,000 个单词，为开发者提供了广泛的知识库。除了文字内容，StarkNet 的文档还包括 1,147 行的代码，帮助开发者通过动手实践学习。

StarkNet 在文档中提供了两个智能合约的例子：

1.  一个 "Hello World" 风格的例子，其中调用 hello 函数将导致合约发出一个带有用户地址的事件。
    
2.  一个简单的存储例子，用户可以增加在存储中定义的余额，并发出事件，然后检索余额。
    

在部署例子中，StarkNet 使用命令行方式而非脚本来部署合约。这种方法也展示了如何在命令行中调用智能合约。然而，文档没有包含测试和前端材料。对于那些对 Vue.js 前端、ERC721 和 Protostar 的单元测试感兴趣的人，教程部分有相关的视频教程。

**zkSync Era**

zkSync Era 的文档结构与 StarkNet 相似，主要由四个部分组成：开发者文档、工具和 SDK、合约和链接，以及教程。

开发者文档涵盖了一系列主题，包括 Layer2 和 zkSync Era 的概念、智能合约开发、验证、事件处理、JSON-RPC API、相关工具和 SDK、FAQ、更新日志，以及贡献指南。大部分教程和文档以文本形式呈现，而非视频。

总的来说，文档中列出了 10 个工具和 SDK。这些部分提供了关于各种工具的使用和 API 的深入信息，如 JavaScript SDK、Hardhat、区块链浏览器、编译器工具链、CLI、Python SDK 、Go SDK 和 Java SDK。

zkSync Era 的文档由 34 个部分组成，大约有 57,000 个单词和 6,800 行的代码，帮助开发者入门。zkSync Era 提供了五个代码示例，不仅涵盖了基本的智能合约开发和部署，还涵盖了更高级的主题，如验证智能合约、前端开发、Layer1 和 Layer2 的通信、账户抽象化，以及用于 gas/gasless 交易的替代代币支付。

zkSync 的独特之处在于，它演示了如何利用其独特的功能，如账户抽象化（AA）。这种方法可以显著激发开发者的创造力，鼓励他们探索 zkSync Era 的全部潜力。

**Polygon zkEVM**

Polygon zkEVM 的开发者文档包括指南和技术规范，为 ZKRU 生态系统提供了全面的覆盖。技术规范说明了各种产品的设计，如 zkEVM 和 zkNode，而指南则教导开发者如何有效地使用这些工具。

文档共有 80 个部分，100,271 个词和 126 行的代码 (LoC)。内容通过文本、图片、视频和代码块的组合呈现，对 Mainnet 和 Testnet 的代码进行了清晰的分类。文档不仅涵盖了智能合约开发，还涵盖了像 zkEVM、zkNode、zkProver、zkAssembly 和 PIL 这样的基本工具。

值得注意的是，Polygon 的文档在几个方面与其他文档有所不同。由于 Polygon zkEVM 起源于 Hermez，因此有两个单独的文档：一个在 Polygon 网站上，另一个在 Hermez 网站。Hermez 网上的文档最后一次更新是在 2 月份。这些文档涵盖了相似的主题，但在内容和组织上有所不同。对于这个研究，我们将关注 Polygon zkEVM 的文档。

有趣的是，Polygon zkEVM 并未提供任何智能联系人的代码示例。这是因为开发者在 ZKRU 上开发时并不需要任何特殊的工具，包括编译器。因此，文档强调了 Polygon zkEVM 生态系统对于开发者的易用性和无须额外的学习成本。

Polygon 提供了不同的编码块配置。开发者可以在 Mainnet 和 Testnet 之间无缝切换。

![](https://storage.googleapis.com/papyrus_images/b42e4695d885abb93e3564e04f50b934e03aa89e841bca1ccd9351b58788f227.png)

**Scroll**

Scroll 的开发者文档内容聚焦在 Scroll 上编写智能合约。门户网站和区块浏览器处在显著的位置，使其易于访问。此外，文档还包含一个列出了在 Scroll 上启动的所有重要项目的部分，突出了其强大的生态系统。

用户指南涵盖了基本的网络使用，而开发者文档由 10 个部分、近 4 万个单词和 136 行代码组成。有趣的是，Scroll 文档是记录最多框架的 ZKRU。尽管 Polygon zkEVM 也支持这些框架，但在他们的文档中并没有明确列出。Scroll 与五个不同的框架的兼容性在文档中有详细的说明。

Scroll 文档的一个显著不同之处是其对开源贡献的强调。文档包括了如何为 Scroll 做出贡献的部分，介绍了主要的代码库，并提供了如何参与 Scroll 开发的指导。

Scroll 和 Polygon zkEVM 都不需要额外的编译器进行开发，所以 Scroll 和 Polygon zkEVM 一样，不为开发者提供代码示例。然而，Scroll 提供了一个单独的部署演示，使开发者能够亲手体验 Scroll。

**社区和团队贡献者数量**
--------------

贡献者的数量显示了开源社区和团队对文档的参与度。

![](https://storage.googleapis.com/papyrus_images/9557e4b7ad463c97ab8c0d9a50d83784f5b3ce4bbbce599bdbe0a27932522463.png)

**StarkNet**

对于 StarkNet，总共有 25 位贡献者为 StarkNet 文档做出了贡献。4 位贡献者做了大部分的工作。

**zkSync Era**

对于 zkSync，总共有 65 位贡献者为 zkSync 文档做出了贡献。6 位贡献者做了大部分的工作。

**Polygon zkEVM**

对于 Polygon zkEVM，总共有 4 位贡献者为 Polygon 文档做出了贡献。其中一位贡献者做了大部分的工作。

**Scroll**

Scroll 并没有开源其文档仓库。

**社区和团队的贡献活动**
--------------

除了内容，更新频率和参与度都是衡量一个好文档的重要因素。

![](https://storage.googleapis.com/papyrus_images/6e06d872a190c89c91beeea1754a9e180f9b7ba7d7bf96475271d1b395401c19.png)

**StarkNet**

对于 StarkNet，在 Alpha 主网启动时，文档是最活跃的。在过去的一个月里，8 位作者在文档上工作。8 位作者向代码库推送了 39 次提交，向所有分支推送了 103 次提交。有 40 个文件发生了变化，有 [9,351 次增加和 12,886 次删除](https://link.zhihu.com/?target=https%3A//github.com/starknet-io/starknet-docs/compare/30b9434251e20f79095b181af55d587cfb8e2ccc...dev)。现在有 2 个未解决的 PR 和 1 个问题。

**zkSync Era**

对于 zkSync，在过去的一个月里，13 位作者向主分支推送了 58 次提交，向所有分支推送了 116 次提交。在主分支上，有 83 个文件发生了变化，有 [4,472 次增加和 2,590 次删除](https://link.zhihu.com/?target=https%3A//github.com/matter-labs/zksync-web-era-docs/compare/88588ec25d95d31aa476f07f66bd694b114a7ec7...main)。现在有 1 个未解决的问题和 8 个 PR。

**Polygon zkEVM**

对于 Polygon，在过去的一个月里，4 位作者向主分支推送了 43 次提交，向所有分支推送了 46 次提交。在主分支上，有 125 个文件发生了变化，有 [1,274 次增加和 552 次删除](https://link.zhihu.com/?target=https%3A//github.com/maticnetwork/zkevm-docs/compare/aae67fe76148c6765f78809ee852aadd1c9034c4...main)。他们合并了 17 个 PR，现在有 3 个 PR 未解决。

这是一个详细的提交时间线。zkSync 和 StarkNet 从去年开始在文档上工作，并频繁更新文档。

![](https://storage.googleapis.com/papyrus_images/87491c27146432ad124a77ce0c3fa36fab13cc0ad94fb44792606da427943385.png)

**编程体验**
--------

**概述**
------

通过浏览文档后，开发者进入开发阶段编写代码。编码体验在很大程度上塑造了开发体验。

编码体验取决于工具链、编辑器体验和框架。

相关工具链决定了是否易于架设本地开发环境，调试和运行代码。

编辑器体验决定了编码的速度。好的编辑器体验应包括清晰的语法高亮，定义跳转和自动补全。

框架提供了一个结构化的环境，显著加速了开发过程。他们带有预配置的功能和可重用的函数库，开发者可以利用这些库高效地编写智能合约，而不必从头编写每一个函数。在过去，Truffle 是一个流行的选择。现在 Hardhat 和 Foundry 更受欢迎。

![](https://storage.googleapis.com/papyrus_images/d4628140ee51fcfa164dc97291ac6cdcb044457cb1ffd6e8be367ee0c6b5f1ed.png)

Remix 的支持可以帮助开发者快速开始编码，而无需设置自己的环境。目前这种云原生的开发环境仅支持智能合约编写。暂时无法支持整个 Dapp 的开发。Dapp 的开发包含了智能合约和前端网站开发。

**编程上手体验**
----------

**StarkNet**

在 StarkNet 上，Warp 负责将 Solidity 代码编译到 Cairo。

按照 StarkNet 官方文档，可能会遇到几个小问题：

*   Cairo-lang 工具不适用于最新版本的 Python
    
*   文档建议使用 Pyenv 安装 Python v3.9.0，但这个版本不适用于 M1 Mac。我切换到了 Python v3.9.13
    
*   安装 Cairo v1.0 的推荐方法是从源代码编译。希望未来可以提供使用包管理器直接进行安装
    

VSCode 的 Cairo 插件只提供基本功能。这是文档中示例代码的截图，虽然启用了语法高亮，但高亮非常基础，而且没有提供任何高级功能，如跳转到定义 / 引用和重构。另外，格式化工具似乎并未正确工作。

![](https://storage.googleapis.com/papyrus_images/195de0c1299f97a7b1d8b3f62d206d4f1db1ed3fe5bf298820f104753360e6ca.png)

**zkSync**

zkSync 和 Polygon zkEVM 为编写 Vyper 和 Solidity 提供了以太坊类似的体验。尽管 Remix 不支持 zkSync，但 [AI IDE Atlas](https://link.zhihu.com/?target=https%3A//app.atlaszk.com/ide) 使得开发者能够直接在浏览器中进行编码和部署。

![](https://storage.googleapis.com/papyrus_images/951f9da23ba4e8cb47a07005c1930ac5fc24d53e68119a10c88699fe73652a61.png)

**Scroll**

Scroll 为编写 Vyper 和 Solidity 提供了流畅的体验。它与现有的 Solidity 生态系统兼容。

**框架 & SDK 支持**
---------------

**StarkNet**

StarkNet 目前支持三个框架：

*   [StarkNet 的 Hardhat 插件](https://link.zhihu.com/?target=https%3A//github.com/0xSpaceShard/starknet-hardhat-plugin)
    
*   [Nile](https://link.zhihu.com/?target=https%3A//github.com/OpenZeppelin/nile-rs) 是用 Rust 编写的，由 OpenZeppelin 开发
    
*   [Protostar](https://link.zhihu.com/?target=https%3A//docs.swmansion.com/protostar/) 是用 Python 编写的，用于帮助开发者测试、编译和安装智能合约
    

使用 Hardhat，开发者可以通过命令行使用各种功能，并使用 JS 测试和部署 Cairo 智能合约。

与 StarkNet 相比，Nile 的功能较少。它提供 CLI 工具来编译、部署和与区块链交互。

Protostar 有开发智能合约所需的所有功能。它支持测试，编译，安装依赖和与区块链交互。

**zkSync Era**

zkSync 为主流框架提供插件，如 Hardhat 和 [Foundry](https://link.zhihu.com/?target=https%3A//github.com/omurovec/foundry-zksync-era)。Hardhat 插件支持编译，部署，测试和验证。

zkSync 还提供 Java、Python、Go、Swift 和 Typescript SDK 与 zkSync 交互。

zkSync 还有一个基本的 CLI 工具，可以存款、取款和创建 Hardhat 项目。

**Polygon zkEVM，Scroll**

Polygon zkEVM 和 Scroll 与 Ethereum 的所有现有工具兼容。它为现有的 Solidity 开发者提供了最顺畅的体验。

**编译和执行**
---------

**概览**
------

编译器是将高级编程语言翻译成计算机可以执行的机器级别代码的软件。在这项研究中，我们关注的是将 Solidity 翻译成 zk (E) VM 可以执行的机器级别代码的编译器。这确保了 EVM 的兼容性。开发者可以利用他们现有的知识和工具，而无需学习新的语言或实践。

![](https://storage.googleapis.com/papyrus_images/0f9a3c972fe9cf11c9799ab8de9a8405233f1b623b3fd236cd503a7d98b3da8e.png)

Polygon zkEVM 和 Scroll 支持几乎所有的 OPCODEs。在 Ethereum 上可以跑的东西在 Polygon zkEVM 和 Scroll 上可能都可以正常工作。

**编译器速度**
---------

**StarkNet**

在 StarkNet 中，我们可以使用 Cairo 编译器在 0.2 秒内编译示例合约。

为了使 StarkNet 与 EVM 兼容，Warp 将 Solidity 代码翻译为 Cairo 代码。Warp 需要 0.93 秒来转译一个简单的存储合约。但是在大项目中使用它仍存在许多问题。

Warp 不支持 Solidity 的所有特性。大部分限制是由技术问题造成的。例如，它永远不会支持低级调用。然而，这在很多大型 Solidity 项目中被广泛使用。开发者使用低级调用来节省 gas 并实现一些功能。如果 Solidity 开发者计划部署 Solidity 项目到 StarkNet，他们仍需要在迁移过程中付出努力。

此外，由 Warp 输出的 Cairo 代码比手写的 Cairo 代码更长，且难以阅读。虽然 WarpV2 在 V1 的基础上进行了改进，但与手写代码之间仍存在很大差距。

![](https://storage.googleapis.com/papyrus_images/3e1ff1d0094ffc292c8841940177a0e74a89fdf894b0db42589eaff4a8b119fe.png)

**zkSync Era**

在 zkSync Era 中，[zkSolc](https://link.zhihu.com/?target=https%3A//github.com/matter-labs/zksolc-bin) 是 Solidity 的编译器。它需要大约 0.6 秒来编译一个标准的简单存储合约。

在编译 Uni V2 代码时，它需要大约 1.6 秒来编译 12 个 Solidity 文件。虽然它输出一些警告，但它开箱即用。例如 block.timestamp 实际上指的是将要发送到 L1 的整个批次的时间戳（即，这个批次开始处理的时间戳）。

**Scroll & Polygon zkEVM**

对于 Scroll 和 Polygon zkEVM，他们没有定制的编译器。他们与使用 Solidity 编译器的体验相同。

**编译器和 OPCODEs 执行与 EVM 的兼容性**
-----------------------------

**StarkNet**

在 StarkNet 中，Warp 还没有集成到任何工具中。开发者需要编写自己的脚本来编译多个 Solidity 文件。

我使用 Uniswap V2 的代码来测试 Warp 的功能。它不能开箱即用。我得到了许多不兼容的警告。

![](https://storage.googleapis.com/papyrus_images/372e67688e2afcb0f0829cd3aa17ef45b1f6ec630e879546ce70057d8abcf29e.png)

[Kakarot](https://link.zhihu.com/?target=https%3A//www.kakarot.org/) 正在开发一种新的帮助 StarkNet 兼容 EVM 的解决方案。Kakarot 提供了一个用 Cairo 编写的 EVM。作为一个 EVM，Kakarot 可以执行 EVM 字节码程序，使 Ethereum 智能合约可以在 StarkNet 上运行。它现在支持所有来自 EVM 的 OPCODEs。这种方法提供了更好的兼容性，但执行一个 EVM 程序的成本将比执行原生 Cairo 程序贵 2-10 倍。

**zkSync Era**

zkSync 对大约 25 个 OPCODEs 的处理方式略有不同。这些 OPCODEs 能够工作，但开发者需要了解它们是如何被处理的。

在当前的 zkSolc 中，编译任意 Solidity 代码时，它可能会输出以下[警告 / 错误](https://link.zhihu.com/?target=https%3A//github.com/matter-labs/era-compiler-solidity/blob/6840a6ae5bcb5e1a9a39ced8f63887d43c6e6824/src/solc/standard_json/output/error/mod.rs%23L21)：

*   使用 ecrecover 来验证用户账户的签名
    
*   使用 
    
    .send/transfer()，而没有提供 gas 金额
    
    *   使用 extcodesize
        
    *   检查 tx.origin
        
    *   检查 block.timestamp，block.number
        
    *   EVM 旧版汇编管线中不支持内部函数指针，比如 SELFDESTRUCT，CALLCODE，PC 和 EXTCODECOPY
        
    
    **Polygon zkEVM**
    
    Polygon zkEVM 没有特殊的编译器。它使用标准的 Solidity 编译器。它实现了超过 99% 的 EVM 等效性。这是通过运行 EVM 测试向量来测量的。几个 OPCODEs 的执行与 EVM 有一些差异：
    
    *   selfdestruct
        
    *   extcodehash
        
    *   difficulty
        
    *   blockhash
        
    *   number
        
    
    **Scroll**
    
    Scroll 没有编译器。它使用标准的 Solidity 编译器。几个 OPCODEs 的执行与 EVM 有一些差异：
    
    *   Blockhash
        
    *   COINBASE
        
    *   Difficulty/ Pervrandao
        
    *   selfdestruct
        
    *   push0
        
    
    **测试**
    ------
    
    **概述**
    ------
    
    测试是智能合约开发的一个重要方面，它保证了智能合约的质量、功能和可靠性。测试包括验证每个功能是否按照预期运行，以及在部署前确定需要修复的任何错误或问题。通过进行彻底的测试，开发者可以确信软件在各种情况和条件下都会正确运行。这个过程不仅保护了可能影响用户体验的潜在故障，也有助于维护智能合约的完整性和安全性。测试还会让开发者了解潜在的增强或优化，有助于智能合约的持续改进。
    
    ![](https://storage.googleapis.com/papyrus_images/7f0d7eecd9e354f9fcdf2c1a6e50343c7012fde1fd6186e0dc5b43edc6069c52.png)
    
    Tenderly 是智能合约开发的最佳调试工具之一。它提供智能合约执行模拟、调试器、gas 分析器、分叉、警报，以帮助开发者构建更好的 Dapps。所有这些功能目前都不支持这些 ZKRU。
    
    **测试工具链**
    ---------
    
    **StarkNet**
    
    在 StarkNet 文档网站的一个[隐藏链接](https://link.zhihu.com/?target=https%3A//docs.starknet.io/documentation/getting_started/unit_tests/)中，StarkNet 提到了测试。它给出了一个关于初始化网络、部署合约和实现一个单元测试的示例。
    
    StarkNet 的测试依赖于 StarkNet 库进行区块链初始化、部署和与区块链的交互。Pytest 用作测试库。
    
    开发者还可以使用 [Starknet.js](https://link.zhihu.com/?target=https%3A//www.starknetjs.com/docs/API/utils) 和其他 JS 测试库，如 Chai 和 Mocha，来实现智能合约的测试。Hardhat 也支持 StarkNet。
    
    该文档没有提供任何关于设置本地测试环境的信息。没有任何官方支持的节点容器。
    
    **zkSync Era**
    
    zkSync 支持通过一条命令行运行本地测试网实例。它启动了三个 docker 容器：Postgres，本地 Geth 节点和 zkSync 节点。在测试网络中，有一些富有的钱包，其中有大量的 ETH。开发者可以导入私钥来访问这些账户。
    
    支持像 Mocha 和 Chai 这样的测试库。
    
    **Polygon zkEVM & Scroll**
    
    Polygon zkEVM 和 Scroll 兼容所有现有的 Solidity 工具链，提供了非常顺畅的测试体验。
    
    **部署**
    ------
    
    **概述**
    ------
    
    部署过程在智能合约开发生命周期中至关重要，提供自动化、一致性和可靠性的过程，将智能合约从开发环境部署到链上环境。良好的部署工具可以显著减轻手动部署任务的负担，从而加快交付时间并减少人为错误。
    
    ![](https://storage.googleapis.com/papyrus_images/bd7ef1693f3709c9edbb1dc7a09b08f2d96595f038301953ec5f3a01f3d8814d.png)
    
    **部署上手体验**
    ----------
    
    **StarkNet**
    
    StarkNet 的部署分两步进行：
    
    *   声明
        
    *   部署
        
    
    开发者首先声明他们的合约，然后初始化合约。这在理论上带来了更好的可复用性。如果开发者要复制完全相同的智能合约，他们可以跳过声明，直接使用声明的类哈希来部署合约。如果开发者试图声明一个完全相同的智能合约，程序会产生一个难以阅读的错误日志。开发者可以在其中找到类哈希。声明示例合约大约需要 12 秒。
    
    ![](https://storage.googleapis.com/papyrus_images/46d9a4c7847d2504eca82e3d3eb4cc70387186d8e5d23a23fabf53fd412c4ca6.png)
    
    在用 CLI 工具手动声明和部署之前，开发者还需要手动设置环境变量。如果没有配置文件的帮助，这很容易忘记。
    
    在跳转交易时，StarkScan 会出现一些错误。如果不刷新，它不会正确显示交易状态。
    
    **zkSync Era**
    
    zkSync 支持使用 Hardhats 部署智能合约。为了使部署体验更加顺畅，开发者可以将从 Layer1 到 Layer2 的存款步骤集成到脚本中。这样，开发者就不需要手动将 Gas Tokens 从 Ethereum 桥接到 zkSync。
    
    部署到测试网的智能合约大约需要 15 秒。
    
    [zkSync Era 区块链浏览器](https://link.zhihu.com/?target=https%3A//explorer.zksync.io/) 为 zkSync 提供了基本功能。
    
    **Polygon zkEVM, Scroll**
    
    Polygon 和 Scroll 可以复用所有 EVM 技术栈进行部署。它运行非常顺畅和快速。开发者几乎可以立即检查部署的合约。区块链浏览器提供了与在 Ethereum 上开发者相同的体验。
    
    **激动人心的新特性**
    ------------
    
    区块链领域正在快速发展，Layer2 解决方案在解决可扩展性、效率和用户体验的挑战方面发挥着关键作用。 ZKRU 尽管仍处于初级阶段，但在为开发者解锁新可能性方面显示出巨大的潜力。
    
    通过提供像状态差异这样的突破性创新、Layer1 和 Layer2 通信以及帐户抽象，ZKRU 使开发者能够创建全新的应用范式，推动区块链所能实现的边界。这些先进的特性不仅增强了去中心化应用的能力，而且为区块链技术的主流采用铺平了道路。
    
    **状态差异（State-diff）**
    --------------------
    
    StarkNet 和 zkSync 使用状态差异技术，该技术理论上可以降低费用。它们只发布状态差异，而不是整个交易输入。这允许数据压缩和降低存储成本。这将有利于游戏开发者。
    
    Polygon zkEVM 将所有交易输入发布在链上，预期在未来几年内数据存储成本的减少。
    
    **Layer1 <> Layer2 通信**
    -----------------------
    
    大多数 ZKRU 提供 Layer1 <> Layer2 通信特性。例如，zkSync 提供了一个利用 Layer1 <> Layer2 通信的治理例子。在 Layer1 上，合约可以执行 Layer2 上的合约。在 Layer2 上，Layer2 合约只能向 Layer1 合约发送消息，并不能直接进行执行，然后我们可以在 Layer1 上处理收到的消息。
    
    **帐户抽象**
    --------
    
    帐户抽象是另一个令人兴奋的特性。zkSync 原生支持 AA。在 zkSync Era 中，帐户可以像 EOA 一样启动交易，也可以像智能合约一样在其中实现任意逻辑。由于 zkSync 原生实现了 AA，帐户不需要额外的代理合约。即使是普通的 EOA 也可以进行 Gasless 交易，这仅仅依靠 EIP-4337 是不可能实现的。[Polygon zkEVM](https://link.zhihu.com/?target=https%3A//wiki.polygon.technology/docs/develop/meta-transactions/account-abstraction/) 和 Scroll 实现了与 EVM 兼容的 AA。
    
    **思考**
    ------
    
    构建开发者友好的产品已经成为了一种趋势。对于向开发者提供服务和产品公司来说，这已经成为了一种必需。开发者体验（DX）已经和用户体验（UX）一样关键。
    
    确保一个开发者友好的项目不仅仅是与生态合作和引入一些基础设施项目。项目本身需要付出大量的努力来覆盖 Dapp 开发的整个生命周期的开发体验，并创建一个推动创新、协作和成功的面向开发者的环境。随着 Web3 的不断发展，致力于提升开发者体验的承诺无疑将塑造未来的技术产品和平台。为了实现这一点，有一些常见的技巧：
    
    *   **文档质量**：良好的文档是面向开发者的关键。它应该是全面的、清晰的、最新的。你可以通过查看文档的完整性、解释的清晰度、示例的存在以及它的更新频率来衡量这一点。
        
    *   **AI 维护 / 编写 文档**：编写详细的文档会消耗大量的资源。让文档保持最新状态也非常困难。大型语言模型可能会帮助开发者编写和维护高质量的文档。大型语言模型可以输出高质量的文档，因为它们能够理解代码。大型语言模型还可以作为 QA 机器人回答开发者的常见问题
        
    *   **激励贡献者**：为确保文档的正确性，项目可以将文档错误纳入漏洞赏金计划。报告文档中错误的开发者可以获得赏金。贡献者的名字也可以出现在每周或每月的新闻通讯中，以示项目的感谢。
        
    *   **工具的可用性**：提供的工具应易于使用且直观。可以通过调查开发者完成常见任务所需的时间来衡量这一点。
        
    *   上手**体验**：衡量一个新开发者上手所需要的时间。这包括设置开发环境、理解基本概念以及构建一个简单的 Hello World 类型的应用的时间。
        
    *   **社区支持**：一个大型且活跃的社区可以增加开发者的粘性。可以通过衡量论坛、StackOverflow、GitHub 问题等活动来衡量这一点。此外，还要关注对开发者提出问题的响应时间。
        
    *   **API 设计**：API 应该是一致的、直观的，并且有良好的文档。可以通过评估 API 文档，以及使用 API 执行常见任务的易用性来衡量这一点。
        
    *   **错误消息和调试支持**：良好的错误消息和调试支持可以大大提高开发者体验。可以通过故意创建常见错误，并查看系统的响应有多有用来衡量这一点。
        
    *   **集成和兼容性**：评估工具或平台与生态系统中其他常用工具的集成情况。
        
    *   **反馈和可用性研究**：对使用平台或工具的开发者进行调查或可用性研究。这种直接的反馈可以提供更多对开发者体验的数据。
        
    *   **产品状态**：提供产品运行状态的实时信息。它可以告知开发者任何正在进行的问题、计划的维护或系统故障，帮助他们相应地规划工作。
        
    *   **案例研究**：案例研究提供了对产品实际应用的丰富洞察。他们突出了如何使用产品解决问题并取得成果的实际例子。这些案例研究可以作为灵感的来源、学习工具，以及理解产品价值和效果的手段。
        
    *   **完整 API 参考 / API 更改日志**：对产品提供的所有 API 的详细描述，包括它们的功能、输入参数、返回值和错误代码。良好的 API 参考对于开发者理解和有效使用 API 至关重要。日志记录了所有对 API 的更改，如新特性、bug 修复或已弃用的特性。对开发者来说，关注更新并利用任何新功能都是很重要的。
        
    
    随着我们期待 Web3 产品的发展，利用这些见解以提供更好的开发者体验。强调以开发者为中心的设计和提供全面的支持资源将是在 Web3 世界中培养活跃开发者生态系统的关键。通过互相学习，实现更好的开发者体验，开发者可以无缝的从 Web2 过渡到 Web3。
    
    **测试环境**
    --------
    
    *   M1 Max, 32 GB Memory
        
    *   Cairo-lang-compiler v1.0.0-alpha.6
        
    *   python v3.9.13
        
    *   Node v16.15.0

---

*Originally published on [un.Block](https://paragraph.com/@un-block/layer2)*
