作者 | Patrick Collins
翻译 | 火火酱,责编 | 晋兆雨出品 | 区块链大本营头图 | 付费下载于视觉中国
最好的智能合约和区块链开发框架,就要涵盖所有以太坊智能合约开发语言。
图片来源:blackred-Getty Images Signature智能合约开发框架能帮助工程师部署并测试他们的智能合约,从而减轻其负担,提高工作幸福感。我花时间把ConsenSys和以太坊网站上推荐的所有框架都看了一遍,从中挑选出了几个2021年最被看好的框架。感兴趣的话,大家可以在下方GitHub链接中找到我对这些平台的尝试和看法。(链接地址:https://github.com/PatrickAlphaC/smart-contract-frameworks)此外,我还对区块链黑客马拉松的参与者们进行了数百次采访,并翻阅了数百份相关投稿,试图从中寻找出性能最好、开发体验最优的工具。在为2021年做准备时,我还在日常工作中试用了很多框架。雷我已经替大家踩过了,现在大家只需要按个人需求和喜好进行选择就好。我的评判标准很简单,最佳框架需要满足以下三个条件:
-
部署到本地区块链
-
具备快速且有效的测试能力
-
使用Chainlink向Kovan Testnet测试网部署智能合约。
第三个标准非常重要,因为这将帮助我了解框架与其他包和集成测试的交互效果。在2021年,实现与甲骨文和第三方工具(如OpenZeppelin)的交互是必备基础条件,因此,最后一项标准必不可少。同时,我们还将简要介绍一些大家在2021年需要了解的其他重要工具,但本文不会介绍入门工具,如ETH钱包、以太坊客户端或文本编辑器等。需要的话,大家也可以通过下方视频进行了解:视频链接:https://www.youtube.com/watch?v=motYF5daaOc
在我看来,下面这三个智能合约开发框架是适用于所有人的。当然,它们各自在功能和侧重上又略有不同,大家可以自行选择:1.Hardhat (JavaScript)2.Truffle (JavaScript)3.Brownie (Python)下面,我们将逐一了解一下这三者各自的优势,以及使用时的注意事项,帮助大家选择最适合自己的框架。
1. Hardhat
图片来源:HardhatHardhat绝对是最好的框架之一,它具备最快的测试、最好的教程和最简单的集成方式。老实说,每个喜欢JS框架的人都应该尝试一下Hardhat。它真的超级容易上手,而且测试极快。它的Discord对问题的回复也十分迅速,因此,如果你遇到了任何问题,都可以随时寻求帮助。该框架使用Waffle和Ethers.js进行测试,可以说是JavaScript智能合约框架升级版(因为比web3.js有了更好的改进)。它还可以直接集成OpenZeppelin的可升级智能合约插件,简直完美!这个项目有一点超级赞:它很干净。可以简洁、有效且迅速地完成你下达的任务。当然,该框架也在不断改进,致力于为智能合约开发人员带来更轻松的使用体验。总结
-
ETH基金会资助的项目,更名前叫做Builder
-
技术方面:Javascript、Web3.js和Ethers.js插件、OpenZeppelin可升级合约插件、Etherscan插件、区块链分叉
-
区块链环境:Hardhat 运行时环境/本地、测试网、主网
-
测试框架:Waffle
-
维护:非常积极
-
支持:积极
-
开源
2. Truffle
图片来源:TruffleSuite几年来,Truffle一直都是默认开发框架,这不是没有理由的。它确实是一个十分强大的框架,为许多其他框架树立了行业标准。你应该也发现了,现在使用这个平台的项目非常多,因此可供参考的例子也很好找。Truffle还可以很轻松地实现与姊妹工具Drizzle和Ganache集成。尤其是Ganache——工程师们在运行本地区块链时的最爱之一。如果你想要更多工具的话,可以购买升级版Truffle团队账户,获得智能合约的持续集成、可视化部署和监控的权限。它还可以直接集成OpenZeppelin的可升级智能合约插件,完美!显然,其团队中这群才华横溢的工程师正致力于让世界变得更美好。Truffle测试的运行速度没有Hardhat那么快,而且由于用户量很大,因此保障支持也很困难。我很期待看到他们在被ConsenSys收购后会如何对项目进行改进。他们的文档更新似乎开始有点落后了,不是很有参考价值。但如果你遇到什么问题的话,可以在谷歌上搜索一下,很可能会找到有人曾经遇到并解决过相同的问题。我发现,有时候改进项目的最好方法就是在它们的GitHub上留下自己的问题。无论如何,我们开源的职责就是要让这个生态系统越来越强大,越来越好!由于几乎所有人都已经很熟悉Truffle了,所以很容易就可以得到同行的帮助和支持。我很希望可以看到这个团队能够在该项目上获得更多的支持,因为他们的用户真的非常多。我也希望他们能看到这篇文章,并努力改进其文档,从而保持他们作为测试和部署智能合约的首选平台之一的地位。总结
-
应用最广泛的平台,最近刚被ConsenSys收购(2020年11月)
-
技术方面:Javascript,、Web3.js、OpenZeppelin可升级合约插件、Etherscan插件、区块链分叉
-
区块链环境:Ganache/本地、测试网、主网
-
含测试框架
-
维护:非常积极
-
支持:积极
-
付费升级开源
3. Brownie
图片来源:BrownieBrownie基本上可以相当于Truffle的Python版,只是增加了一些基础改善。这个项目实际上是来源于大多数Python工程师都经历过的挫败感:他们不喜欢JavaScript。由于它是用Python编写的,所以去除了很多使用JavaScript时会遇到的麻烦,最后,我们得到的就是这个处理和部署智能合约的简洁框架。作为一个热爱Python的人,我是非常看好这个项目的未来的,而且就其采用率升高这一点来看,有越来越多的项目都开始采用Python和这个框架来部署他们的智能合约。我已经开始使用Brownie作为自己的首选框架了,而且越用越喜欢。我曾和一些从事这方面工作的人聊过,他们真的是非常聪明的一群人,Yearn.finance似乎也是他们的粉丝。如果你是Python星人,或者想要一个真正简单、干净的框架的话,毫无疑问,这就是为你准备的。总结
-
最好的Python框架,用于像yen.finance这样的DeFi项目。
-
技术方面:Python、Web3.py、区块链分叉、Etherscan插件、Vype支持
-
区块链环境:Ganache/本地、测试网、主网
-
含测试框架
-
维护:非常积极
-
支持:积极
-
开源
等等!再加一个!我知道我说是选TOP 3,但我觉得下面这个也绝对值得占有一席之地。
4. Embark
图片来源:Embark我很惊讶能在GitHub上看到有一个前三名之外的框架可以获得这么多星星(3.1k)。这个工具有一大堆花里胡哨的附加功能。我也是花了一点功夫才完全搞清楚的,这是因为Embark要成为一个完整的dApp框架。Embark是一个全栈区块链平台。在其Gitter得到一些帮助后,我能够将我的Chainlink合约部署到Kovan网络上(还在他们的GitHub上创建了一个问题,记住,多多参与是开源的责任!)。Embark附带了一个UI,能够帮助我们在GUI中与区块链和你的合约进行交互。这是一个需要花点时间和精力来学习才能上手的框架,虽然我没做到,但是一旦掌握后,应该可以充分挖掘其背后蕴含的巨大能量。这也是我为什么想将其加在TOP 3后面的原因,因为我觉得有很多东西我还没有完全消化。我很希望看到大家多尝试一下这个框架,看看它的威力。由于我在这个项目上花费的时间很有限,所以我目前可能无法对其进行客观、公正的描述。我确实认为将前端与后端解耦仍然是最好的做法,但如果你需要用一个好的前端来启动一个项目,且不关心解耦的话,就一定要看看Embark。项目本身超级酷,如果你喜欢Hardhat和Truffle,但又想集成全栈解决方案的话,那么我推荐你去看看它。总结
-
为前端开发提供了大量附加功能的JavaScript框架
-
技术方面:JavaScript、Web3.js、支持代理合约
-
区块链环境:Ganache/本地、测试网、主网
-
含测试框架
-
维护:一般积极
-
支持:积极
-
开源
现在,在我继续介绍上述的一些替代工具之前,我想稍微休息一下,先聊一聊2021年的一些重要的非框架工具。
-
OpenZeppelin和升级插件
-
Etherscan/Block Explorer验证器
-
create-eth-app
OpenZeppelin和升级插件
OpenZeppelin是一个为智能合约工程师创建工具的平台。上面有一些默认的工具,比如ERC20和ERC721工具,你可以直接导入其合约,几秒钟就可以构建一个代币。看看用OpenZeppelin做一个ERC20有多简单:
pragma solidity ^0.6.0;
import “@openzeppelin/contracts/token/ERC20/ERC20.sol”;
contract GLDToken is ERC20 {
constructor(uint256 initialSupply) public ERC20(“Gold”, “GLD”) {
_mint(msg.sender, initialSupply);
}
}
OpenZeppelin是一个开源项目,致力于确保我们不需要白费力气去做重复的工作。OpenZeppelin的另一个巨大优势是其可升级合约功能。同样,这也是一个非常神奇、且干净的项目。老实说,任何项目,无论你使用的是什么平台,或许都会用到由OpenZeppelin创建的工具。
Etherscan/Block Explorer验证器
Etherscan是最热门的区块浏览器。当人们想要查看我们的合约或部署的东西时,除非他们有ABI和合约地址,否则是无法查看的。查找合约地址通常很容易,但是要获取ABI就很困难了。我们肯定希望大家都能很容易地找到智能合约并与之交互,所以希望自己能验证合约,以便其他人也可以找到合约并验证。大多数框架都有某种验证插件,你可以部署一个智能合约,然后在Etherscan上验证它。一定要在你的应用程序中用一下这个。
create-eth-app
拥有大量的后端智能合约是很好,但如果没有人能使用你的dApp的话,那就没有价值了。create-eth-app这个平台能协助你使用ReactJS为自己的智能合约开发一个前端。它使用了许多较新的React技巧,比如状态钩子(state Hooks),让构建强大前端的过程变得更加容易。
2021年推荐入门工具
-
Scaffold-ETH (https://github.com/austintgriffith/scaffold-eth)
-
eth.build(https://eth.build/)
-
Remix(https://remix.ethereum.org/)
-
One Click dApp(https://oneclickdapp.com/)
在这里,我就不多做介绍了,但如果你是新手的话,可以看看这些!
替代框架
下面这几个框架也都还不错,可能会很适合你。其中确实有一些非常酷的想法,在智能合约框架中融合其他的东西。希望我们的TOP 3可以从中获得令人惊艳的灵感。但这些工具可能需要花更多的时间来进行探索。
-
Waffle (JS)
-
Dapp.Tools (Haskell/CLI)
-
SBT (Scala/CLI)
-
Epirus (Java)
Waffle
图片来源:WaffleWaffle本身也可以作为部署框架使用,只不过我们需要多写很多自定义脚本。与其他框架相比,它自称为智能合约框架就显得有点傻憨憨了。可以将Waffle和任何我们喜欢的框架搭配在一起使用,它目前也是Hardhat的默认工具。如果你想要的是一个全能型选手的话,那么我不建议你单独使用它;但如果你是想要一个更原始、简单、可定制的框架的话,选它绝不会出错。总结
-
专注于测试的轻量级JavaScript框架
-
技术方面:JavaScript、Ethers.js
-
区块链环境:所有环境
-
含测试框架
-
维护:非常积极
-
支持:积极
-
开源
Dapp.Tools
图片来源:Dapp.Tools在得知MakerDAO使用的是Dapp.Tools时,我非常惊讶。它是用Haskell编写的,但支持很多我们常用并喜爱的插件,比如OpenZeppelin。表面上看它是一个崇尚极简主义的框架,但实际上其功能很强大,完全可以胜任我们所需的开发工作。我曾用它部署过自己的合约,其简洁的使用感让我感到非常惊喜。如果你想找一个极简的命令行友好框架的话,那么我建议你看看这个。总结
-
MakerDAO使用的Haskell框架
-
技术方面:Haskell/CLI
-
区块链环境:Local/Ganache、测试网、主网
-
含测试框架
-
维护:积极
-
支持:积极
-
开源
Epirus
图片来源:Epirus虽然我说它很像Truffle,但仅仅指的是其商业意义,Epirus的风格与Truffle是完全不同的。Epirus有开源项目,同时也有付费的升级工具,能够为有需要的人提供近一步的支持。它使用的是Java的Web3实现,目前看来,项目开发尚处于早期阶段。我很高兴看到他们有支持Android,所以我很期待这个项目进展如何。我们可以让更多的Java工程师进入这个行业中来,毕竟Java智能合约平台并不多。由于它不支持,所以我没能部署到Kovan,但它貌似是支持Rinkeby的。但无论如何,我还是很期待看到这个项目的后续进展的。总结
-
一个与Truffle类似的Java实现
-
技术方面:Java
-
区块链环境:Ganache/本地、测试网(不是Kovan)
-
含测试框架
-
维护:积极
-
支持:不是非常积极
-
付费升级开源
SBT
图片来源:sbt-etheteumSBT是我玩过的比较有意思的项目之一,它专注于与智能合约的交互(几乎只用命令行或Scala)。我没怎么用过Scala,所以并没有立场来评价这个平台。如果你懂Scala,并且想进入以太坊的话,它似乎会是一个很棒的选择。总结
-
基于命令行的Scala项目,适用于从事智能合约工作的爱好者或智能合约工程师
-
技术方面:Scala
-
区块链环境:本地/Ganache、测试网、主网
-
含测试框架
-
维护:一般积极
-
支持:不积极
-
开源
不再主流的框架
我们还会时不时地看到这些框架,我也相信它们在刚刚推出的时候曾是十分惊艳的,但就现在而言,它们要么不再支持,要么不再活跃。相对下列的框架,我们已经有了更好的选择。
-
OpenZeppelin CLI/SDK (JS)
-
Etherlime (JS)
-
Parasol (JS)
-
Cobra (PY)
OpenZeppelin SDK
图片来源:OpenZeppelin SDK我现在终于这个项目停滞不前的原因了:他们作为一个团队,想要把更多的精力放在可升级的智能合约上,但说实话,这有点可惜。这个项目非常干净简洁。我能在上面部署自己的Chainlinked智能合约,并读取ETH的价格(速度比其他框架都要快)。它还有一些非常棒的CLI选项,当然,Epirus和Hardhat也有。它还内置了可升级选项,这是非常惊人且少见的。我之所以不推荐它,是因为官方不支持了,但有一说一,这绝对是我使用过的智能合约框架最佳开发体验之一。我希望上文提到的TOP 3能够继承这个项目的闪光点。我之所以在上面说“每个人都应该使用OpenZeppelin工具”是有原因的,他们就是好用!如果OpenZeppelin没有停止这方面支持的话,他们的SDK绝对会是前四名的框架。总结
-
OpenZeppelin为了专注于升级插件而废弃的智能合约框架,否则将会是一款非常棒的JS框架。
-
技术方面:JavaScript、Web3.js和Ethers.js插件、OpenZeppelin可升级合约插件
-
区块链环境:本地、测试网、主网
-
含测试框架
-
维护:不积极
-
支持:不积极
-
开源
Etherlime
图片来源:EtherlimeEtherlime似乎是另一个没有得到积极开发、正逐渐失宠的JS框架。它与Infura的一个过时功能紧密结合,所以我们无法在Kovan上部署我们的智能合约。在以前,它似乎是一个非常强大的项目,而且貌似仍然可用于本地开发,但我不会把它放进TOP 3。总结
-
不活跃的JS框架
-
技术方面:JavaScript、Ethers.js
-
区块链环境;本地、测试网、主网
-
含测试框架
-
维护:不积极
-
支持:不积极
-
开源
Paras
图片来源:Parasol另一个不活跃的JS框架(超过两年没有新的提交),它有一些功能超级赞,比如parasol interact,还有一些集成,不难看出曾有一群很聪明的人为之付出过努力。但我还是找不到为了它而舍弃其他JS框架的理由。总结
-
不活跃的JS 框架
-
技术方面:JavaScript、Web3.js
-
区块链环境:本地/Ganache、测试网、主网
-
含测试框架
-
维护:不积极
-
支持:不积极
-
开源
智能合约和区块链世界的发展速度让人惊叹。一些两年前最热门的工具如今已经过时了,智能合约开发框架也不例外。很高兴能看到Truffle在这场竞争中拔得头筹,但更重要的是,我们看到许多项目都在采取不同的方法来解决问题。如果你觉得还有什么遗珠推荐或者对这些框架有自己的看法,欢迎在评论中留言。让智能合约工程师尽可能快速、有效地开展工作是我们共同的目标。了解所有的工具将帮助我们更快地实现世界去中心化。希望本文对大家有所帮助!