以太坊(Ethereum)智能合約開發(fā)快速入門

一、簡介

  1. 智能合約
    首先,智能合約并不是像人工智能AI那樣的超級智能,智能合約的英文名叫Smart contract,僅僅是Smart而已,還沒有到人工智能的intelligence。所以,我們可以把智能合約想象成一種自動售貨機,出售的是通證(token):投資者(用戶)發(fā)起交易,向智能合約轉(zhuǎn)入以太幣(ETH),智能合約自動運轉(zhuǎn),在滿足一定規(guī)則后,它向投資者賬戶轉(zhuǎn)入相應(yīng)數(shù)量的通證。

  2. NFT
    上面我們知道了,智能合約類似一種自動售貨機,出售的是通證(token)。如果出售的token的類型是獨一無二的,并且是不可分割的,這種token就叫做 Non-Fungible Token,即是 NFT(需要符合ERC-721標準)。例如一個token代表一張體育比賽的門票,因為每一張門票座位編號不一樣,所以對應(yīng)的token獨一無二,又因為座位只能出售給一個人,因為對應(yīng)的token也不能分割。

一、以太坊區(qū)塊鏈網(wǎng)絡(luò)簡介

以太坊區(qū)塊鏈網(wǎng)絡(luò)
  1. 以太坊公共區(qū)塊鏈網(wǎng)絡(luò)
    對區(qū)塊鏈最好的描述是將其描述為一個公共數(shù)據(jù)庫,它由網(wǎng)絡(luò)中的許多計算機更新和共享,并且任何人都可以接入。以太坊公共區(qū)塊鏈網(wǎng)絡(luò)也不例外。目前,以太坊公共區(qū)塊鏈網(wǎng)絡(luò)提供了主網(wǎng)和三個測試網(wǎng),主網(wǎng)就是智能合約正式上線的區(qū)塊鏈網(wǎng)絡(luò),三個測試網(wǎng)分別為Kovan、Rinkeby和Ropsten。Ropsten是官方提供的和主網(wǎng)最相似的網(wǎng)絡(luò),使用工作量證明;Rinkeby也是官方提供的,使用權(quán)益證明。以太坊公共區(qū)塊鏈網(wǎng)絡(luò)具體的說明[見這里]。(https://ethereum.org/zh/developers/docs/networks/)

  2. 節(jié)點、Geth、Infura
    我們的程序需要訪問以太坊節(jié)點,才能連接到以太坊公共區(qū)塊鏈網(wǎng)絡(luò)。有幾種方法可以做到這一點,可以使用官方的Geth運行自己的以太坊節(jié)點。但這需要從區(qū)塊鏈下載大量數(shù)據(jù)并保持同步,很麻煩,成本也高。比較方便的方法是,使用Infura訪問以太坊節(jié)點。
    Infura 是什么?專業(yè)一點講,Infura 是一種 IaaS(Infrastructure as a Service)產(chǎn)品,目的是為了降低訪問以太坊數(shù)據(jù)的門檻。通俗一點講,Infura 就是一個可以讓你的 DApp 快速接入以太坊的平臺,不需要本地運行以太坊節(jié)點。
    Infura是一個免費提供以太坊節(jié)點的服務(wù)。接下來有Infura的使用說明。

一、智能合約應(yīng)用模塊簡介

我們的智能合約應(yīng)用使用Solidity Template 項目模板開發(fā)框架來開發(fā)。下面簡單介紹Solidity Template 的組成。

智能合約應(yīng)用組成模塊
  1. Solidity Template —— 項目模板
    Solidity Template 是一個 Hardhat 項目的模板,除了集成 Hardhat,還集成了以太坊 linter、代碼格式化、代碼覆蓋率測試等工具。Solidity Template 直接clone或者下載回來就能使用,非常方便。

  2. Hardhat —— 項目主框架
    Hardhat 是一個編譯、部署、測試和調(diào)試以太坊應(yīng)用的開發(fā)環(huán)境。使用 Hardhat 可以方便地開發(fā)以太坊的智能合約和dApps。

  3. Waffle —— 智能合約應(yīng)用測試庫
    Waffle 是一個編寫和測試以太坊智能合約的庫,比Truffle更加好用,簡單和快速,它內(nèi)部使用了ethers-jsMochaChai。我們將使用它來編寫智能合約應(yīng)用的測試代碼。

  1. Ethers.js —— 智能合約API庫
    Ethers.js 是一個編譯、部署、測試和調(diào)試以太坊應(yīng)用的開發(fā)環(huán)境。使用 Hardhat 可以方便地開發(fā)以太坊的智能合約和dApps。這是我們開發(fā)智能合約應(yīng)用所用的最多API的庫。這里有中文文檔,和官方英文文檔

  2. Mocha和Chai —— 測試框架和斷言庫
    Mocha是一個功能豐富的javascript測試框架,運行在node.js和瀏覽器中,使異步測試變得簡單有趣。Chai 是一個針對 Node.js 和瀏覽器的行為驅(qū)動測試和測試驅(qū)動測試的診斷庫,可與任何 JavaScript 測試框架集成。

二、開發(fā)環(huán)境搭建

  1. 安裝vscode Visual Studio Code

  2. 安裝以太坊開發(fā)的vscode相關(guān)插件,打開下面的網(wǎng)址,在點擊 install 即可。

https://marketplace.visualstudio.com/items?itemName=NomicFoundation.hardhat-solidity
https://marketplace.visualstudio.com/items?itemName=hosho.solidity-debugger

三、注冊相關(guān)賬號

  1. 上面說了,我們的程序需要訪問Ethereum節(jié)點,才能連接到公共區(qū)塊鏈網(wǎng)絡(luò),為了方便,我們使用Infura訪問Ethereum節(jié)點。我們應(yīng)用使用Infura只需要Infura的API KEY(即是API網(wǎng)址)即可。在Infura上注冊賬號,創(chuàng)建項目,在項目詳情頁上可以查看API KEY。我們先用測試網(wǎng)goerli的API KEY,等到正式上線再用mainnet的API Key:

    Infura api key

  2. 以太坊帳戶由公鑰和私鑰加密對組成。因為密鑰不方便記憶,我們不直接創(chuàng)建密鑰,而是使用助記詞來自動生成。助記詞是由十二到二十四個單詞組成的密碼,它被用于生成區(qū)塊鏈賬戶系統(tǒng)中512位的種子(seed),而種子可以生成私鑰(prikey),由私鑰可以導(dǎo)出公鑰(pubkey),公鑰經(jīng)過變換后可以得到我們經(jīng)常在區(qū)塊鏈賬本上看到的地址(address)。點擊這里來生成助記詞(注意空格也是助記詞的一部分):

    生成助記詞

助記詞相當于以太坊的賬號密碼,千萬要保存好,千萬不要隨便告訴別人。

四、項目搭建

  1. 下載 Solidity Template 的源代碼,

https://github.com/paulrberg/solidity-template

  1. 用 vscode 打開下載的源代碼,將 .env.example 復(fù)制一份,改名為 .env,填入上面注冊時的 API KEY 和助記詞。

  2. 使用下面的命令來安裝項目依賴庫:
    $ yarn install

  3. 編譯合約

要編譯合約,請在終端中運行 npx hardhat compilecompile任務(wù)是hardhat內(nèi)置任務(wù)之一。

$ npx hardhat compile
Compiling...
Compiled 1 contract successfully

合約已成功編譯,可以使用了。

五、編寫智能合約(待續(xù)。。。)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容