01 智能合約開(kāi)發(fā)框架TOP3
下面這三個(gè)智能合約開(kāi)發(fā)框架是適用于所有人的。當(dāng)然,它們各自在功能和側(cè)重上又略有不同,大家可以自行選擇:
1.Hardhat (JAVAScript)
2.Truffle (JavaScript)
3.Brownie (Python)
下面將逐一了解一下這三者各自的優(yōu)勢(shì),以及使用時(shí)的注意事項(xiàng),幫助大家選擇最適合自己的框架。
1. Hardhat

Hardhat絕對(duì)是最好的框架之一,它具備最快的測(cè)試、最好的教程和最簡(jiǎn)單的集成方式。老實(shí)說(shuō),每個(gè)喜歡JS框架的人都應(yīng)該嘗試一下Hardhat。它真的超級(jí)容易上手,而且測(cè)試極快。它的Discord對(duì)問(wèn)題的回復(fù)也十分迅速,因此,如果你遇到了任何問(wèn)題,都可以隨時(shí)尋求幫助。該框架使用Waffle和Ethers.js進(jìn)行測(cè)試,可以說(shuō)是JavaScript智能合約框架升級(jí)版(因?yàn)楸葁eb3.js有了更好的改進(jìn))。它還可以直接集成OpenZeppelin的可升級(jí)智能合約插件,簡(jiǎn)直完美!
這個(gè)項(xiàng)目有一點(diǎn)超級(jí)贊:它很干凈。可以簡(jiǎn)潔、有效且迅速地完成你下達(dá)的任務(wù)。當(dāng)然,該框架也在不斷改進(jìn),致力于為智能合約開(kāi)發(fā)人員帶來(lái)更輕松的使用體驗(yàn)。
總結(jié)
ETH基金會(huì)資助的項(xiàng)目,更名前叫做Builder
技術(shù)方面:Javascript、Web3.js和Ethers.js插件、OpenZeppelin可升級(jí)合約插件、Etherscan插件、區(qū)塊鏈分叉
區(qū)塊鏈環(huán)境:Hardhat 運(yùn)行時(shí)環(huán)境/本地、測(cè)試網(wǎng)、主網(wǎng)
測(cè)試框架:Waffle
維護(hù):非常積極
支持:積極
開(kāi)源
2. Truffle

幾年來(lái),Truffle一直都是默認(rèn)開(kāi)發(fā)框架,這不是沒(méi)有理由的。它確實(shí)是一個(gè)十分強(qiáng)大的框架,為許多其他框架樹(shù)立了行業(yè)標(biāo)準(zhǔn)。你應(yīng)該也發(fā)現(xiàn)了,現(xiàn)在使用這個(gè)平臺(tái)的項(xiàng)目非常多,因此可供參考的例子也很好找。Truffle還可以很輕松地實(shí)現(xiàn)與姊妹工具Drizzle和Ganache集成。尤其是Ganache——工程師們?cè)谶\(yùn)行本地區(qū)塊鏈時(shí)的最愛(ài)之一。如果你想要更多工具的話,可以購(gòu)買升級(jí)版Truffle團(tuán)隊(duì)賬戶,獲得智能合約的持續(xù)集成、可視化部署和監(jiān)控的權(quán)限。它還可以直接集成OpenZeppelin的可升級(jí)智能合約插件,完美!顯然,其團(tuán)隊(duì)中這群才華橫溢的工程師正致力于讓世界變得更美好。
Truffle測(cè)試的運(yùn)行速度沒(méi)有Hardhat那么快,而且由于用戶量很大,因此保障支持也很困難。我很期待看到他們?cè)诒籆onsenSys收購(gòu)后會(huì)如何對(duì)項(xiàng)目進(jìn)行改進(jìn)。他們的文檔更新似乎開(kāi)始有點(diǎn)落后了,不是很有參考價(jià)值。但如果你遇到什么問(wèn)題的話,可以在谷歌上搜索一下,很可能會(huì)找到有人曾經(jīng)遇到并解決過(guò)相同的問(wèn)題。我發(fā)現(xiàn),有時(shí)候改進(jìn)項(xiàng)目的最好方法就是在它們的GitHub上留下自己的問(wèn)題。無(wú)論如何,我們開(kāi)源的職責(zé)就是要讓這個(gè)生態(tài)系統(tǒng)越來(lái)越強(qiáng)大,越來(lái)越好!
由于幾乎所有人都已經(jīng)很熟悉Truffle了,所以很容易就可以得到同行的幫助和支持。我很希望可以看到這個(gè)團(tuán)隊(duì)能夠在該項(xiàng)目上獲得更多的支持,因?yàn)樗麄兊挠脩粽娴姆浅6唷N乙蚕M麄兡芸吹竭@篇文章,并努力改進(jìn)其文檔,從而保持他們作為測(cè)試和部署智能合約的首選平臺(tái)之一的地位。
總結(jié)
應(yīng)用最廣泛的平臺(tái),最近剛被ConsenSys收購(gòu)(2020年11月)
技術(shù)方面:Javascript,、Web3.js、OpenZeppelin可升級(jí)合約插件、Etherscan插件、區(qū)塊鏈分叉
區(qū)塊鏈環(huán)境:Ganache/本地、測(cè)試網(wǎng)、主網(wǎng)
含測(cè)試框架
維護(hù):非常積極
支持:積極
付費(fèi)升級(jí)開(kāi)源
3. Brownie

Brownie基本上可以相當(dāng)于Truffle的Python版,只是增加了一些基礎(chǔ)改善。這個(gè)項(xiàng)目實(shí)際上是來(lái)源于大多數(shù)Python工程師都經(jīng)歷過(guò)的挫敗感:他們不喜歡JavaScript。由于它是用
Python編寫(xiě)的,所以去除了很多使用JavaScript時(shí)會(huì)遇到的麻煩,最后,我們得到的就是這個(gè)處理和部署智能合約的簡(jiǎn)潔框架。
作為一個(gè)熱愛(ài)Python的人,我是非常看好這個(gè)項(xiàng)目的未來(lái)的,而且就其采用率升高這一點(diǎn)來(lái)看,有越來(lái)越多的項(xiàng)目都開(kāi)始采用Python和這個(gè)框架來(lái)部署他們的智能合約。我已經(jīng)開(kāi)始使用Brownie作為自己的首選框架了,而且越用越喜歡。我曾和一些從事這方面工作的人聊過(guò),他們真的是非常聰明的一群人,Yearn.finance似乎也是他們的粉絲。
如果你是Python星人,或者想要一個(gè)真正簡(jiǎn)單、干凈的框架的話,毫無(wú)疑問(wèn),這就是為你準(zhǔn)備的。
總結(jié)
最好的Python框架,用于像yen.finance這樣的DeFi項(xiàng)目。
技術(shù)方面:Python、Web3.py、區(qū)塊鏈分叉、Etherscan插件、Vype支持
區(qū)塊鏈環(huán)境:Ganache/本地、測(cè)試網(wǎng)、主網(wǎng)
含測(cè)試框架
維護(hù):非常積極
支持:積極
開(kāi)源
等等!再加一個(gè)!我知道我說(shuō)是選TOP 3,但我覺(jué)得下面這個(gè)也絕對(duì)值得占有一席之地。
4. Embark

很驚訝能在GitHub上看到有一個(gè)前三名之外的框架可以獲得這么多星星(3.1k)。這個(gè)工具有一大堆花里胡哨的附加功能。我也是花了一點(diǎn)功夫才完全搞清楚的,這是因?yàn)镋mbark要成為一個(gè)完整的dApp框架。Embark是一個(gè)全棧區(qū)塊鏈平臺(tái)。在其Gitter得到一些幫助后,我能夠?qū)⑽业腃hainlink合約部署到Kovan網(wǎng)絡(luò)上(還在他們的GitHub上創(chuàng)建了一個(gè)問(wèn)題,記住,多多參與是開(kāi)源的責(zé)任!)。Embark附帶了一個(gè)UI,能夠幫助我們?cè)贕UI中與區(qū)塊鏈和你的合約進(jìn)行交互。這是一個(gè)需要花點(diǎn)時(shí)間和精力來(lái)學(xué)習(xí)才能上手的框架,雖然我沒(méi)做到,但是一旦掌握后,應(yīng)該可以充分挖掘其背后蘊(yùn)含的巨大能量。這也是我為什么想將其加在TOP 3后面的原因,因?yàn)槲矣X(jué)得有很多東西我還沒(méi)有完全消化。
我很希望看到大家多嘗試一下這個(gè)框架,看看它的威力。由于我在這個(gè)項(xiàng)目上花費(fèi)的時(shí)間很有限,所以我目前可能無(wú)法對(duì)其進(jìn)行客觀、公正的描述。我確實(shí)認(rèn)為將前端與后端解耦仍然是最好的做法,但如果你需要用一個(gè)好的前端來(lái)啟動(dòng)一個(gè)項(xiàng)目,且不關(guān)心解耦的話,就一定要看看Embark。
項(xiàng)目本身超級(jí)酷,如果你喜歡Hardhat和Truffle,但又想集成全棧解決方案的話,那么我推薦你去看看它。
總結(jié)
為前端開(kāi)發(fā)提供了大量附加功能的JavaScript框架
技術(shù)方面:JavaScript、Web3.js、支持代理合約
區(qū)塊鏈環(huán)境:Ganache/本地、測(cè)試網(wǎng)、主網(wǎng)
含測(cè)試框架
維護(hù):一般積極
支持:積極
開(kāi)源
02 暫停一下
現(xiàn)在,在我繼續(xù)介紹上述的一些替代工具之前,我想稍微休息一下,先聊一聊2021年的一些重要的非框架工具。
OpenZeppelin和升級(jí)插件
Etherscan/Block Explorer驗(yàn)證器
create-eth-app
OpenZeppelin和升級(jí)插件
OpenZeppelin是一個(gè)為智能合約工程師創(chuàng)建工具的平臺(tái)。上面有一些默認(rèn)的工具,比如ERC20和ERC721工具,你可以直接導(dǎo)入其合約,幾秒鐘就可以構(gòu)建一個(gè)代幣。看看用OpenZeppelin做一個(gè)ERC20有多簡(jiǎn)單:

OpenZeppelin是一個(gè)開(kāi)源項(xiàng)目,致力于確保我們不需要白費(fèi)力氣去做重復(fù)的工作。
OpenZeppelin的另一個(gè)巨大優(yōu)勢(shì)是其可升級(jí)合約功能。同樣,這也是一個(gè)非常神奇、且干凈的項(xiàng)目。老實(shí)說(shuō),任何項(xiàng)目,無(wú)論你使用的是什么平臺(tái),或許都會(huì)用到由OpenZeppelin創(chuàng)建的工具。
Etherscan/Block Explorer驗(yàn)證器
Etherscan是最熱門的區(qū)塊瀏覽器。當(dāng)人們想要查看我們的合約或部署的東西時(shí),除非他們有ABI和合約地址,否則是無(wú)法查看的。查找合約地址通常很容易,但是要獲取ABI就很困難了。我們肯定希望大家都能很容易地找到智能合約并與之交互,所以希望自己能驗(yàn)證合約,以便其他人也可以找到合約并驗(yàn)證。大多數(shù)框架都有某種驗(yàn)證插件,你可以部署一個(gè)智能合約,然后在Etherscan上驗(yàn)證它。一定要在你的應(yīng)用程序中用一下這個(gè)。
create-eth-app
擁有大量的后端智能合約是很好,但如果沒(méi)有人能使用你的dApp的話,那就沒(méi)有價(jià)值了。create-eth-app這個(gè)平臺(tái)能協(xié)助你使用ReactJS為自己的智能合約開(kāi)發(fā)一個(gè)前端。它使用了許多較新的React技巧,比如狀態(tài)鉤子(state Hooks),讓構(gòu)建強(qiáng)大前端的過(guò)程變得更加容易。
03 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/)
在這里,我就不多做介紹了,但如果你是新手的話,可以看看這些!
04 替代框架
下面這幾個(gè)框架也都還不錯(cuò),可能會(huì)很適合你。其中確實(shí)有一些非常酷的想法,在智能合約框架中融合其他的東西。希望我們的TOP 3可以從中獲得令人驚艷的靈感。但這些工具可能需要花更多的時(shí)間來(lái)進(jìn)行探索。
Waffle (JS)
Dapp.Tools (Haskell/CLI)
SBT (Scala/CLI)
Epirus (Java)
Waffle

Waffle本身也可以作為部署框架使用,只不過(guò)我們需要多寫(xiě)很多自定義腳本。與其他框架相比,它自稱為智能合約框架就顯得有點(diǎn)傻憨憨了。可以將Waffle和任何我們喜歡的框架搭配在一起使用,它目前也是Hardhat的默認(rèn)工具。
如果你想要的是一個(gè)全能型選手的話,那么我不建議你單獨(dú)使用它;但如果你是想要一個(gè)更原始、簡(jiǎn)單、可定制的框架的話,選它絕不會(huì)出錯(cuò)。
總結(jié)
專注于測(cè)試的輕量級(jí)JavaScript框架
技術(shù)方面:JavaScript、Ethers.js
區(qū)塊鏈環(huán)境:所有環(huán)境
含測(cè)試框架
維護(hù):非常積極
支持:積極
開(kāi)源
Dapp.Tools

在得知MakerDAO使用的是Dapp.Tools時(shí),我非常驚訝。它是用Haskell編寫(xiě)的,但支持很多我們常用并喜愛(ài)的插件,比如OpenZeppelin。表面上看它是一個(gè)崇尚極簡(jiǎn)主義的框架,但實(shí)際上其功能很強(qiáng)大,完全可以勝任我們所需的開(kāi)發(fā)工作。我曾用它部署過(guò)自己的合約,其簡(jiǎn)潔的使用感讓我感到非常驚喜。如果你想找一個(gè)極簡(jiǎn)的命令行友好框架的話,那么我建議你看看這個(gè)。
總結(jié)
MakerDAO使用的Haskell框架
技術(shù)方面:Haskell/CLI
區(qū)塊鏈環(huán)境:Local/Ganache、測(cè)試網(wǎng)、主網(wǎng)
含測(cè)試框架
維護(hù):積極
支持:積極
開(kāi)源
Epirus

雖然我說(shuō)它很像Truffle,但僅僅指的是其商業(yè)意義,Epirus的風(fēng)格與Truffle是完全不同的。Epirus有開(kāi)源項(xiàng)目,同時(shí)也有付費(fèi)的升級(jí)工具,能夠?yàn)橛行枰娜颂峁┙徊降闹С帧K褂玫氖荍ava的Web3實(shí)現(xiàn),目前看來(lái),項(xiàng)目開(kāi)發(fā)尚處于早期階段。我很高興看到他們有支持Android,所以我很期待這個(gè)項(xiàng)目進(jìn)展如何。我們可以讓更多的Java工程師進(jìn)入這個(gè)行業(yè)中來(lái),畢竟Java智能合約平臺(tái)并不多。
由于它不支持,所以我沒(méi)能部署到Kovan,但它貌似是支持Rinkeby的。但無(wú)論如何,我還是很期待看到這個(gè)項(xiàng)目的后續(xù)進(jìn)展的。
總結(jié)
一個(gè)與Truffle類似的Java實(shí)現(xiàn)
技術(shù)方面:Java
區(qū)塊鏈環(huán)境:Ganache/本地、測(cè)試網(wǎng)(不是Kovan)
含測(cè)試框架
維護(hù):積極
支持:不是非常積極
付費(fèi)升級(jí)開(kāi)源
SBT

SBT是我玩過(guò)的比較有意思的項(xiàng)目之一,它專注于與智能合約的交互(幾乎只用命令行或Scala)。我沒(méi)怎么用過(guò)Scala,所以并沒(méi)有立場(chǎng)來(lái)評(píng)價(jià)這個(gè)平臺(tái)。如果你懂Scala,并且想進(jìn)入以太坊的話,它似乎會(huì)是一個(gè)很棒的選擇。
總結(jié)
基于命令行的Scala項(xiàng)目,適用于從事智能合約工作的愛(ài)好者或智能合約工程師
技術(shù)方面:Scala
區(qū)塊鏈環(huán)境:本地/Ganache、測(cè)試網(wǎng)、主網(wǎng)
含測(cè)試框架
維護(hù):一般積極
支持:不積極
開(kāi)源
05 不再主流的框架
我們還會(huì)時(shí)不時(shí)地看到這些框架,我也相信它們?cè)趧倓偼瞥龅臅r(shí)候曾是十分驚艷的,但就現(xiàn)在而言,它們要么不再支持,要么不再活躍。相對(duì)下列的框架,我們已經(jīng)有了更好的選擇。
OpenZeppelin CLI/SDK (JS)
Etherlime (JS)
Parasol (JS)
Cobra (PY)
OpenZeppelin SDK

我現(xiàn)在終于這個(gè)項(xiàng)目停滯不前的原因了:他們作為一個(gè)團(tuán)隊(duì),想要把更多的精力放在可升級(jí)的智能合約上,但說(shuō)實(shí)話,這有點(diǎn)可惜。這個(gè)項(xiàng)目非常干凈簡(jiǎn)潔。我能在上面部署自己的Chainlinked智能合約,并讀取ETH的價(jià)格(速度比其他框架都要快)。它還有一些非常棒的CLI選項(xiàng),當(dāng)然,Epirus和Hardhat也有。它還內(nèi)置了可升級(jí)選項(xiàng),這是非常驚人且少見(jiàn)的。
我之所以不推薦它,是因?yàn)楣俜讲恢С至耍幸徽f(shuō)一,這絕對(duì)是我使用過(guò)的智能合約框架最佳開(kāi)發(fā)體驗(yàn)之一。我希望上文提到的TOP 3能夠繼承這個(gè)項(xiàng)目的閃光點(diǎn)。我之所以在上面說(shuō)“每個(gè)人都應(yīng)該使用OpenZeppelin工具”是有原因的,他們就是好用!
如果OpenZeppelin沒(méi)有停止這方面支持的話,他們的SDK絕對(duì)會(huì)是前四名的框架。
總結(jié)
OpenZeppelin為了專注于升級(jí)插件而廢棄的智能合約框架,否則將會(huì)是一款非常棒的JS框架。
技術(shù)方面:JavaScript、Web3.js和Ethers.js插件、OpenZeppelin可升級(jí)合約插件
區(qū)塊鏈環(huán)境:本地、測(cè)試網(wǎng)、主網(wǎng)
含測(cè)試框架
維護(hù):不積極
支持:不積極
開(kāi)源
Etherlime

Etherlime似乎是另一個(gè)沒(méi)有得到積極開(kāi)發(fā)、正逐漸失寵的JS框架。它與Infura的一個(gè)過(guò)時(shí)功能緊密結(jié)合,所以我們無(wú)法在Kovan上部署我們的智能合約。在以前,它似乎是一個(gè)非常強(qiáng)大的項(xiàng)目,而且貌似仍然可用于本地開(kāi)發(fā),但我不會(huì)把它放進(jìn)TOP 3。
總結(jié)
不活躍的JS框架
技術(shù)方面:JavaScript、Ethers.js
區(qū)塊鏈環(huán)境;本地、測(cè)試網(wǎng)、主網(wǎng)
含測(cè)試框架
維護(hù):不積極
支持:不積極
開(kāi)源
Paras

另一個(gè)不活躍的JS框架(超過(guò)兩年沒(méi)有新的提交),它有一些功能超級(jí)贊,比如parasol interact,還有一些集成,不難看出曾有一群很聰明的人為之付出過(guò)努力。但我還是找不到為了它而舍棄其他JS框架的理由。
總結(jié)
不活躍的JS 框架
技術(shù)方面:JavaScript、Web3.js
區(qū)塊鏈環(huán)境:本地/Ganache、測(cè)試網(wǎng)、主網(wǎng)
含測(cè)試框架
維護(hù):不積極
支持:不積極
開(kāi)源
06 結(jié)語(yǔ)
智能合約和區(qū)塊鏈?zhǔn)澜绲陌l(fā)展速度讓人驚嘆。一些兩年前最熱門的工具如今已經(jīng)過(guò)時(shí)了,智能合約開(kāi)發(fā)框架也不例外。很高興能看到Truffle在這場(chǎng)競(jìng)爭(zhēng)中拔得頭籌,但更重要的是,我們看到許多項(xiàng)目都在采取不同的方法來(lái)解決問(wèn)題。
如果你覺(jué)得還有什么遺珠推薦或者對(duì)這些框架有自己的看法,歡迎在評(píng)論中留言。讓智能合約工程師盡可能快速、有效地開(kāi)展工作是我們共同的目標(biāo)。了解所有的工具將幫助我們更快地實(shí)現(xiàn)世界去中心化。希望本文對(duì)大家有所幫助!






