目錄
-
1. 選擇智能合約語(yǔ)言
- 1.1 Solidity
- 1.2 Vyper
- 1.3 Move
- 1.4 Rust
-
2. 部署和測(cè)試框架
- 2.1 概覽
- 2.2 Remix
- 2.3 Truffle
- 2.4 Hardhat
- 2.5 其他框架
-
3. 前端工具
- 3.1 入門
- 3.2 Web3.js/Ethers.js
- 3.3 腳手架
- 3.4 Moralis
-
4. 錢包
- 4.1 小狐貍錢包(MetaMask)
- 4.2 多簽錢包
- 4.3 冷錢包
- 5. 區(qū)塊瀏覽器
- 6. 測(cè)試網(wǎng)與水龍頭
- 7. Web3基礎(chǔ)設(shè)施
前言
從底層的區(qū)塊鏈基礎(chǔ)設(shè)施到建立在其之上的應(yīng)用層的智能合約生態(tài),Web3領(lǐng)域已經(jīng)發(fā)展的相當(dāng)之快?;谥悄芎霞s,我們可以構(gòu)建出各種各樣的dApp(去中心化應(yīng)用),
比如DeFi、GameFi、NFT、GameFi甚至是這兩年興起的SocialFi類應(yīng)用。列舉出的每一類dApp都在各自的領(lǐng)域內(nèi)大放異彩,造就了整個(gè)Web3領(lǐng)域的蓬勃發(fā)展的繁榮景象。
當(dāng)你熟悉智能合約開(kāi)發(fā)之后,不論你想要開(kāi)發(fā)任何一種(上面列出的)dApp,都已經(jīng)擁有50%的基礎(chǔ)優(yōu)勢(shì),剩下的50%就是需要熟悉對(duì)應(yīng)dApp領(lǐng)域的業(yè)務(wù)知識(shí),下面就一起來(lái)看看智能合約開(kāi)發(fā)的學(xué)習(xí)路線。
需要特別說(shuō)明的是,本文注重實(shí)用性,不會(huì)過(guò)多介紹相關(guān)工具的歷史,這方面讀者可自行查詢。
1. 選擇智能合約語(yǔ)言
合約編程語(yǔ)言是智能合約開(kāi)發(fā)者最基本的部分,你至少應(yīng)該掌握一種才能編寫智能合約。合約語(yǔ)言通常不是傳統(tǒng)的編程語(yǔ)言(如C/C++,Python等), 為了保證合約代碼在任何一個(gè)區(qū)塊鏈節(jié)點(diǎn)上都能夠得到一個(gè)確定的執(zhí)行結(jié)果,
必須要求合約不能訪問(wèn)外部世界(如進(jìn)行HTTP連接或操作文件),早期的區(qū)塊鏈開(kāi)發(fā)者們?cè)O(shè)計(jì)出了專為編寫合約的編程語(yǔ)言,如Solidity、Vyper,
后來(lái)又誕生了一些新的合約語(yǔ)言如Move或Rust(但包含一些使用限制)。好消息是這些語(yǔ)言都大量借鑒了傳統(tǒng)編程語(yǔ)言的語(yǔ)法,如Solidity借鑒JavaScript、Vyper借鑒Python,這使得成為一名合約開(kāi)發(fā)者的學(xué)習(xí)曲線平坦了一些。
1.1 Solidity
首先,一個(gè)不用過(guò)多思考的選擇是Solidity,因?yàn)槟壳?0%的智能合約都是Solidity寫的。Solidity算是最早也是最流行的面向?qū)ο蟮母呒?jí)靜態(tài)語(yǔ)言,最初2014年是為以太坊EVM量身設(shè)計(jì)的,
后來(lái)又出現(xiàn)了很多兼容以太坊EVM的區(qū)塊鏈平臺(tái)(如Ethereum、Avalanche、Moonbeam、Polygon、BSC),所以現(xiàn)在Solidity也可以運(yùn)行在其他那些兼容EVM的區(qū)塊鏈上。 在目前排名前十的 Defi項(xiàng)目
中,有九個(gè)使用Solidity作為他們的主要編程語(yǔ)言。
Solidity發(fā)展至今已經(jīng)快十年,生態(tài)內(nèi)已經(jīng)有大量?jī)?yōu)秀的開(kāi)發(fā)工具可供使用,包括第三方庫(kù)以及IDE等(后面介紹)。另外,在EVM上運(yùn)行的比Solidity更原生的語(yǔ)言是匯編語(yǔ)言Yul,進(jìn)階Solidity時(shí)你會(huì)了解到Solidity與Yul通過(guò)內(nèi)聯(lián)交互以提高性能的應(yīng)用。
需要注意的是,Solidity在語(yǔ)法設(shè)計(jì)上存在一些缺陷,當(dāng)然,這些年不斷的被改進(jìn),在易用性和安全性上已經(jīng)得到了極大的提升。
對(duì)于Solidity的學(xué)習(xí),這里強(qiáng)烈推薦本倉(cāng)庫(kù)主頁(yè)中列出的書(shū)籍 智能合約技術(shù)與開(kāi)發(fā)
,且在本倉(cāng)庫(kù)中也存放有筆者對(duì)該書(shū)的代碼筆記 。
1.2 Vyper
Vyper是另一種與EVM兼容(可編譯為像Solidity一樣的EVM字節(jié)碼)且相比Solidity更注重安全性的合約語(yǔ)言,它與Python的語(yǔ)法非常相似,但相比Python去掉了許多不必要的特性(如類繼承、函數(shù)重載、運(yùn)算符重載等),
減少特性可以語(yǔ)言變得簡(jiǎn)單,也減少了出錯(cuò)的機(jī)會(huì)。
另外,Vyper 還旨在讓任何人盡可能難以編寫誤導(dǎo)性代碼。讀者(即審核員)的簡(jiǎn)單性比作者(即開(kāi)發(fā)人員)的簡(jiǎn)單性更重要。這樣,將更容易識(shí)別智能合約或去中心化應(yīng)用程序 (dApp) 中的惡意代碼。
需要注意的是,Vyper不是Solidity的完全替代品,而是一種在需要最高安全級(jí)別時(shí)使用的語(yǔ)言。用 Vyper 編寫的項(xiàng)目示例包括 Uniswap v1、Curve.fi 和第一個(gè) ETH 2.0 存款合約。
1.3 Move
Move創(chuàng)建于2019年,是一門相對(duì)Solidity和Vyper來(lái)說(shuō)較難掌握的合約語(yǔ)言,它基于Rust改寫,最初是為 Meta 的 Diem 區(qū)塊鏈項(xiàng)目而開(kāi)發(fā)的,在 Diem 項(xiàng)目解散之后, 其創(chuàng)始團(tuán)隊(duì)出走分別創(chuàng)立的 Aptos
與Sui,也將 Move 作為核心編程語(yǔ)言。
Move的主要特點(diǎn)是面向資產(chǎn)編程(資源是一等公民)、安全(繼承了Rust諸多安全特性)以及模塊化(模塊可以迭代)。
相對(duì)來(lái)說(shuō),Move 語(yǔ)言目前還十分年輕,缺乏大規(guī)模的工程化驗(yàn)證,并且其開(kāi)發(fā)鏈尚不完善,合約規(guī)范也沒(méi)有形成,所以建議只作為興趣了解。
1.4 Rust
Rust 最初由 Mozilla 員工 Graydon Hoare 在 2006 年設(shè)計(jì)和發(fā)布,是一種為性能和安全性,尤其是安全并發(fā)性而設(shè)計(jì)的語(yǔ)言,它在語(yǔ)法上與 C++ 相似。 Rust
并不是一開(kāi)始就為了智能合約而設(shè)計(jì),而是作為一門傳統(tǒng)的力求高安全性的高級(jí)語(yǔ)言而存在,由于其在安全性上的優(yōu)勢(shì)十分契合智能合約的應(yīng)用場(chǎng)景, 所以人們選擇直接將其引入?yún)^(qū)塊鏈領(lǐng)域。
目前,Rust在區(qū)塊鏈各領(lǐng)域已經(jīng)被廣泛應(yīng)用,如區(qū)塊鏈基礎(chǔ)設(shè)施建設(shè)(Layer 1)、合約編程(Layer 2)等。目前將 Rust 語(yǔ)言作為核心開(kāi)發(fā)語(yǔ)言的就有 Polkadot、Solana、Near。
需要注意的是,Rust 的語(yǔ)法是出了名的復(fù)雜,其學(xué)習(xí)曲線足夠陡峭,其學(xué)習(xí)難度往往讓人望而生畏。不過(guò)在 Rust 語(yǔ)言設(shè)計(jì)團(tuán)隊(duì)(Lang Team)在官方博客中公布的 Rust 語(yǔ)言 2024 年的更新路線圖中,就昭示了降低學(xué)習(xí)難度是
Rust 語(yǔ)言的未來(lái)發(fā)展方向。 Rust 在語(yǔ)言設(shè)計(jì)層面比較貼近C/C++等高性能語(yǔ)言,所以熟悉C/C++的開(kāi)發(fā)者會(huì)有稍微一點(diǎn)優(yōu)勢(shì)。
2. 部署和測(cè)試框架
2.1 概覽
這部分介紹用來(lái)協(xié)助部署和測(cè)試合約代碼的一些框架工具。經(jīng)過(guò)此領(lǐng)域的不斷發(fā)展,如今已經(jīng)有各種各樣的合約框架或工具可供使用。
2.2 Remix
首先是Remix,它本身不是一個(gè)框架而是一個(gè)主要基于瀏覽器(也支持桌面)的IDE,能夠提供基于以太坊的在線智能合約編譯、測(cè)試和部署功能,因?yàn)槭腔跒g覽器的工具,所以不關(guān)心操作系統(tǒng),直接開(kāi)箱即用。
在Remix瀏覽器版本中編寫的代碼會(huì)保存在瀏覽器緩存中,所以不小心清除緩存就會(huì)導(dǎo)致你的工作區(qū)(workspace)被清空,這算是一個(gè)缺點(diǎn),不過(guò)Remix后來(lái)也支持連接到電腦本地的工作區(qū)。
Remix是最早的Solidity開(kāi)發(fā)工具,幾乎所有的合約開(kāi)發(fā)者都是從Remix開(kāi)始學(xué)習(xí)。但是當(dāng)開(kāi)發(fā)者在合約中集成更復(fù)雜的邏輯時(shí)(較大的合約項(xiàng)目),就需要選擇自動(dòng)化程度更高的框架來(lái)開(kāi)發(fā)、測(cè)試和部署合約了。
2.3 Truffle
Truffle是最早出現(xiàn)的編寫以太坊合約的框架,由Consensys在2016年創(chuàng)建,它是基于JavaScript編寫的。官方對(duì)其的介紹是:一個(gè)用來(lái)構(gòu)建、測(cè)試和部署以太坊網(wǎng)絡(luò)應(yīng)用的框架。
整個(gè)框架可以當(dāng)做一個(gè)套件包含三個(gè)工具:Truffle(開(kāi)發(fā)和測(cè)試環(huán)境)、Ganache(通過(guò)桌面版或命令行快速部署本地EVM區(qū)塊鏈)和Drizzle(豐富的用于構(gòu)建dApp的前端UI庫(kù))。
Truffle是所有框架中歷史影響最大的,你可以看到他們對(duì)行業(yè)的影響,很多框架都采用了Truffle的實(shí)踐做法。你會(huì)看到大部分智能合約工程師崗位都要求掌握這個(gè)框架的使用。
2.4 Hardhat
Hardhat是由Nomic Labs開(kāi)發(fā)的基于JavaScript的以太坊合約開(kāi)發(fā)環(huán)境,能夠幫助用戶構(gòu)建、測(cè)試和部署以太坊網(wǎng)絡(luò)應(yīng)用。Hardhat的一些重要亮點(diǎn)包括Solidity調(diào)試,失敗交易的錯(cuò)誤消息和顯式堆棧跟蹤。
內(nèi)置的Hardhat網(wǎng)絡(luò)和CLI也是Hardhat功能的重要補(bǔ)充。 Hardhat網(wǎng)絡(luò)是一個(gè)專注于開(kāi)發(fā)的本地以太坊網(wǎng)絡(luò),而CLI(命令行)則致力于與Hardhat核心功能的靈活交互。
雖然Truffle創(chuàng)建的較早,但后來(lái)的Hardhat正逐漸侵占Truffle的市場(chǎng),因?yàn)镠ardhat在測(cè)試環(huán)境、錯(cuò)誤管理以及TypeScript集成方面擁有更好的靈活性和更小的使用成本。
下面是推薦的資源:
Hardhat官方入門教程_英文 官方文檔,持續(xù)更新
Hardhat官方入門教程_中文譯版 翻譯于2020年,部分信息已經(jīng)過(guò)時(shí),但不影響入門(其中在部署到線上網(wǎng)絡(luò)部分提到使用ropsten測(cè)試網(wǎng),但這個(gè)測(cè)試網(wǎng)已經(jīng)下線,需要改為其他測(cè)試網(wǎng),可以查看英文版獲得最新步驟)
Hardhat使用模板 官方提供,包含一個(gè)簡(jiǎn)單項(xiàng)目示例
2.5 其他框架
1. Brownie
除了上面介紹的主要基于JavaScript的框架,還有基于Python的合約開(kāi)發(fā)框架 Brownie,被Curve.fi、yearn.finance和Badger等項(xiàng)目使用,它同時(shí)支持solidity和vyper。
但這個(gè)框架的主要亮點(diǎn)是基于Python,Brownie的誕生是因?yàn)樵S多Python工程師鄙視使用JavaScript工作,并希望有一個(gè)Python的框架。
此外,大多數(shù)傳統(tǒng)的金融技術(shù)領(lǐng)域都使用python而不是javascript,因此,隨著B(niǎo)rownie的創(chuàng)建,從金融技術(shù)領(lǐng)域轉(zhuǎn)移到Defi也變得更加容易。
2. DappTools
這是一個(gè)是一個(gè)用Haskell構(gòu)建的應(yīng)用程序。不過(guò)別擔(dān)心,你不需要知道Haskell就可以使用它。DappTools主要由MakerDAO團(tuán)隊(duì)(DAI背后的團(tuán)隊(duì))使用,它的靈感來(lái)自于Unix的哲學(xué):“一個(gè)程序只做一件事,并把它做好。
(Write programs that do one thing, and do it well.)”
DappTools是一個(gè)專注于命令行的工具,在這里,你可以使用你已經(jīng)熟悉的命令行/shell工具,如bash或zsh,而不是用python、javascript或其他高級(jí)編程語(yǔ)言來(lái)幫助你開(kāi)發(fā)。這有效地減少了一個(gè)你必須熟悉的技術(shù),并迫使你在shell腳本方面做得更好!
它配備了一套工具,如dapp、seth、ethsign和hevm,每一個(gè)工具都是專門為智能合約開(kāi)發(fā)者日常工作的必須的部分而設(shè)計(jì)的。
如果你不想學(xué)習(xí)另一種語(yǔ)言如 JavaScript 或 Python,希望在設(shè)置中使用盡可能少的工具,那就可以關(guān)注一下這個(gè)框架。
3. Foundry
Foundry是Paradigm公司使用 Rust 對(duì) DappTools 的一個(gè)重寫版本,所以它也是一個(gè)以命令行為主的工具包。它主要包含三個(gè)組件:
- Forge:以太坊測(cè)試框架;
- Cast:用于與EVM智能合約交互、發(fā)送交易和獲取鏈數(shù)據(jù)的一把瑞士軍刀;
- Anvil:本地區(qū)塊鏈節(jié)點(diǎn),類似于Ganache,Hardhat網(wǎng)絡(luò)。
有了Rust的加持,F(xiàn)oundry對(duì)合約代碼的編譯性能大大優(yōu)于 DappTools。
3. 前端工具
構(gòu)建dApp需要用到前端工具,除了基本的框架如React、Vue等,還有一些web3特定的三方庫(kù)供我們快速使用。
3.1 入門
create-eth-app
是一個(gè)基于CLI快速開(kāi)發(fā)以太坊應(yīng)用的腳手架,它可以幫助我們通過(guò)一條命令初始化一個(gè)的目錄結(jié)構(gòu)清晰的項(xiàng)目環(huán)境,并且有多個(gè)前端框架(React/Vue)以及項(xiàng)目模板(default/Compound/aave/maker等)可選。
是一個(gè)非常適合新手入門使用的工具,能讓我們快速了解web3 app項(xiàng)目開(kāi)發(fā)的基本架構(gòu)知識(shí)。
3.2 Web3.js/Ethers.js
兩者都是目前流行的用以與以太坊網(wǎng)絡(luò)交互的JS庫(kù),它們能完成的功能是差不多的,比如連接Layer1網(wǎng)絡(luò)、查詢錢包余額、監(jiān)聽(tīng)網(wǎng)絡(luò)變化等,對(duì)于一些更具體的介紹,推薦李留白的文章:庫(kù)對(duì)比:WEB3JS 與 ETHERSJS 。
3.3 腳手架
UseDapp 和 Drizzle 是基于React的web3項(xiàng)目開(kāi)發(fā)腳手架,提供了一些基礎(chǔ)的插件和鉤子,也比較常用。
3.4 Moralis
這個(gè)平臺(tái)不僅提供了與各種區(qū)塊鏈網(wǎng)絡(luò)交互的不同編程語(yǔ)言的SDK,還同時(shí)作為一個(gè)web3基礎(chǔ)設(shè)施存在,即提供了各種公鏈的Layer1網(wǎng)絡(luò)節(jié)點(diǎn)服務(wù)、IPFS節(jié)點(diǎn)連接等等。
另外,它還提供了dApp層的API,比如NFT API、DeFi API、ENS解析API等。相對(duì)于Web3.js/Ethers.js,Moralis的功能更豐富、更全面,并且免費(fèi),推薦在項(xiàng)目在使用。
Moralis EVM API
4. 錢包
智能合約的測(cè)試、部署與線上交互都離不開(kāi)錢包,錢包不僅存儲(chǔ)我們的賬戶,也是一個(gè)賬戶與合約連接的中間工具,我們需要根據(jù)實(shí)際情況來(lái)選擇使用哪個(gè)錢包。
4.1 小狐貍錢包(MetaMask)
它是這個(gè)領(lǐng)域中最廣泛使用的以太坊錢包,也是一款瀏覽器錢包,非常方便于在瀏覽器中測(cè)試,是每個(gè)dApp開(kāi)發(fā)者都必須掌握使用的一個(gè)錢包類型。
但是注意,小狐貍錢包是一個(gè)熱錢包,它會(huì)一直與互聯(lián)網(wǎng)連接,也就更容易受到網(wǎng)絡(luò)攻擊,攻擊者可以通過(guò)網(wǎng)絡(luò)竊取你的錢包私鑰,你需要非常注意它的使用,記得不要在小狐貍錢包上使用大額資金賬戶。
4.2 多簽錢包
小狐貍錢包屬于"單簽錢包",在區(qū)塊鏈上交易,只需要單個(gè)錢包簽名即可,存在私鑰泄露的單點(diǎn)故障。那多簽錢包就容易理解了,它需要(多人掌握的)多個(gè)錢包提供簽名才能發(fā)起一筆交易,
安全性相對(duì)單簽錢包提高不少。通常在多人掌握的賬戶上會(huì)使用多簽錢包,比如DAO或某個(gè)組織。
多簽錢包的工作原理和使用方式
4.3 冷錢包
比如Ledger和Trezor,冷錢包的不同之處在于使用時(shí)比較麻煩,它通常是使用與網(wǎng)絡(luò)隔離的某個(gè)硬件設(shè)備來(lái)保管私鑰的,當(dāng)需要使用錢包時(shí),再通過(guò)USB/藍(lán)牙等方式連接電腦使用,更常用來(lái)保管大額資金。
5. 區(qū)塊瀏覽器
區(qū)塊瀏覽器是用來(lái)瀏覽主網(wǎng)/測(cè)試網(wǎng)區(qū)塊鏈賬本交易詳情的網(wǎng)站,并且支持通過(guò)地址、交易哈希和Token等屬性進(jìn)行搜索。除此之外,通常也提供與合約交互(若區(qū)塊鏈支持)的功能。
- EtherScan 最流行的以太坊瀏覽器
- Polygonscan Polygon鏈瀏覽器(以太坊兼容)
- Explorer Solana Solana鏈瀏覽器
- TronScan 波場(chǎng)瀏覽器
- BscScan 幣安智能鏈瀏覽器(以太坊兼容)
6. 測(cè)試網(wǎng)與水龍頭
幾乎每個(gè)公鏈都有其測(cè)試網(wǎng),開(kāi)發(fā)者可以在其之上以幾乎無(wú)成本的部署合約項(xiàng)目,以進(jìn)行各種測(cè)試。在測(cè)試網(wǎng)上部署合約需要對(duì)應(yīng)的原生代幣,通過(guò)搜索 “區(qū)塊鏈名稱+水龍頭”
可以找到對(duì)應(yīng)區(qū)塊鏈測(cè)試網(wǎng)的水龍頭網(wǎng)站,在水龍頭網(wǎng)站可以免費(fèi)獲取用于測(cè)試網(wǎng)的代幣。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-487234.html
7. Web3基礎(chǔ)設(shè)施
這里指的是區(qū)塊鏈節(jié)點(diǎn)公共網(wǎng)關(guān)、去中心化存儲(chǔ)(IPFS)等服務(wù),在我們部署和開(kāi)發(fā)時(shí)需要用到這些服務(wù)的。好在目前市場(chǎng)上已經(jīng)有一些公司免費(fèi)提供了這些服務(wù)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-487234.html
- Alchemy:知名的區(qū)塊鏈節(jié)點(diǎn)提供商和 API 提供商;
- Infura:提供Layer1接入、IPFS SDK使用;
- Moralis:包含上面這些服務(wù),以及更加豐富的SDK,推薦;
- QuickNode:更豐富的區(qū)塊鏈網(wǎng)絡(luò)類型支持;
參考
- Top 10 Smart Contract Developer Tools You Need for 2022
- 對(duì)比四大智能合約語(yǔ)言:Solidity 、Rust 、 Vyper 和 Move
- Hardhat Vs Truffle – Key Differences
到了這里,關(guān)于【智能合約】智能合約開(kāi)發(fā)指南的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!