一媳叨、簡介
智能合約
首先邑茄,智能合約并不是像人工智能AI那樣的超級智能晶密,智能合約的英文名叫Smart contract瞬女,僅僅是Smart而已,還沒有到人工智能的intelligence榕茧。所以垃沦,我們可以把智能合約想象成一種自動售貨機,出售的是通證(token):投資者(用戶)發(fā)起交易用押,向智能合約轉(zhuǎn)入以太幣(ETH)肢簿,智能合約自動運轉(zhuǎn),在滿足一定規(guī)則后蜻拨,它向投資者賬戶轉(zhuǎn)入相應數(shù)量的通證池充。NFT
上面我們知道了,智能合約類似一種自動售貨機缎讼,出售的是通證(token)收夸。如果出售的token的類型是獨一無二的,并且是不可分割的血崭,這種token就叫做Non-Fungible Token
卧惜,即是 NFT(需要符合ERC-721標準)。例如一個token代表一張體育比賽的門票夹纫,因為每一張門票座位編號不一樣咽瓷,所以對應的token獨一無二,又因為座位只能出售給一個人捷凄,因為對應的token也不能分割忱详。
一、以太坊區(qū)塊鏈網(wǎng)絡簡介
以太坊公共區(qū)塊鏈網(wǎng)絡
對區(qū)塊鏈最好的描述是將其描述為一個公共數(shù)據(jù)庫跺涤,它由網(wǎng)絡中的許多計算機更新和共享匈睁,并且任何人都可以接入。以太坊公共區(qū)塊鏈網(wǎng)絡也不例外桶错。目前航唆,以太坊公共區(qū)塊鏈網(wǎng)絡提供了主網(wǎng)和三個測試網(wǎng),主網(wǎng)就是智能合約正式上線的區(qū)塊鏈網(wǎng)絡院刁,三個測試網(wǎng)分別為Kovan糯钙、Rinkeby和Ropsten。Ropsten是官方提供的和主網(wǎng)最相似的網(wǎng)絡退腥,使用工作量證明任岸;Rinkeby也是官方提供的,使用權(quán)益證明狡刘。以太坊公共區(qū)塊鏈網(wǎng)絡具體的說明[見這里]享潜。(https://ethereum.org/zh/developers/docs/networks/)節(jié)點、Geth嗅蔬、Infura
我們的程序需要訪問以太坊節(jié)點剑按,才能連接到以太坊公共區(qū)塊鏈網(wǎng)絡疾就。有幾種方法可以做到這一點,可以使用官方的Geth運行自己的以太坊節(jié)點艺蝴。但這需要從區(qū)塊鏈下載大量數(shù)據(jù)并保持同步猬腰,很麻煩,成本也高猜敢。比較方便的方法是姑荷,使用Infura訪問以太坊節(jié)點。
Infura 是什么锣枝?專業(yè)一點講厢拭,Infura 是一種 IaaS(Infrastructure as a Service)產(chǎn)品,目的是為了降低訪問以太坊數(shù)據(jù)的門檻撇叁。通俗一點講供鸠,Infura 就是一個可以讓你的 DApp 快速接入以太坊的平臺,不需要本地運行以太坊節(jié)點陨闹。
Infura是一個免費提供以太坊節(jié)點的服務楞捂。接下來有Infura的使用說明。
一趋厉、智能合約應用模塊簡介
我們的智能合約應用使用Solidity Template 項目模板開發(fā)框架來開發(fā)寨闹。下面簡單介紹Solidity Template 的組成。
Solidity Template —— 項目模板
Solidity Template 是一個 Hardhat 項目的模板君账,除了集成 Hardhat繁堡,還集成了以太坊 linter、代碼格式化乡数、代碼覆蓋率測試等工具椭蹄。Solidity Template 直接clone或者下載回來就能使用,非常方便净赴。Hardhat —— 項目主框架
Hardhat 是一個編譯绳矩、部署、測試和調(diào)試以太坊應用的開發(fā)環(huán)境玖翅。使用 Hardhat 可以方便地開發(fā)以太坊的智能合約和dApps翼馆。Waffle —— 智能合約應用測試庫
Waffle 是一個編寫和測試以太坊智能合約的庫,比Truffle更加好用金度,簡單和快速应媚,它內(nèi)部使用了ethers-js
、Mocha
和Chai
猜极。我們將使用它來編寫智能合約應用的測試代碼珍特。
Ethers.js —— 智能合約API庫
Ethers.js 是一個編譯、部署魔吐、測試和調(diào)試以太坊應用的開發(fā)環(huán)境扎筒。使用 Hardhat 可以方便地開發(fā)以太坊的智能合約和dApps。這是我們開發(fā)智能合約應用所用的最多API的庫酬姆。這里有中文文檔嗜桌,和官方英文文檔。Mocha和Chai —— 測試框架和斷言庫
Mocha是一個功能豐富的javascript測試框架辞色,運行在node.js和瀏覽器中骨宠,使異步測試變得簡單有趣。Chai 是一個針對 Node.js 和瀏覽器的行為驅(qū)動測試和測試驅(qū)動測試的診斷庫相满,可與任何 JavaScript 測試框架集成层亿。
二、開發(fā)環(huán)境搭建
安裝vscode Visual Studio Code
安裝以太坊開發(fā)的vscode相關插件立美,打開下面的網(wǎng)址匿又,在點擊 install 即可。
https://marketplace.visualstudio.com/items?itemName=NomicFoundation.hardhat-solidity
https://marketplace.visualstudio.com/items?itemName=hosho.solidity-debugger
三建蹄、注冊相關賬號
-
上面說了碌更,我們的程序需要訪問Ethereum節(jié)點,才能連接到公共區(qū)塊鏈網(wǎng)絡洞慎,為了方便痛单,我們使用Infura訪問Ethereum節(jié)點。我們應用使用Infura只需要Infura的API KEY(即是API網(wǎng)址)即可劲腿。在Infura上注冊賬號旭绒,創(chuàng)建項目,在項目詳情頁上可以查看API KEY焦人。我們先用測試網(wǎng)goerli的API KEY挥吵,等到正式上線再用mainnet的API Key:
-
以太坊帳戶由公鑰和私鑰加密對組成。因為密鑰不方便記憶垃瞧,我們不直接創(chuàng)建密鑰蔫劣,而是使用助記詞來自動生成。助記詞是由十二到二十四個單詞組成的密碼个从,它被用于生成區(qū)塊鏈賬戶系統(tǒng)中512位的種子(seed)脉幢,而種子可以生成私鑰(prikey),由私鑰可以導出公鑰(pubkey)嗦锐,公鑰經(jīng)過變換后可以得到我們經(jīng)常在區(qū)塊鏈賬本上看到的地址(address)嫌松。點擊這里來生成助記詞(注意空格也是助記詞的一部分):
助記詞相當于以太坊的賬號密碼,千萬要保存好奕污,千萬不要隨便告訴別人萎羔。
四、項目搭建
- 下載 Solidity Template 的源代碼碳默,
用 vscode 打開下載的源代碼贾陷,將
.env.example
復制一份缘眶,改名為.env
,填入上面注冊時的 API KEY 和助記詞髓废。-
使用下面的命令來安裝項目依賴庫:
$ yarn install
編譯合約
要編譯合約巷懈,請在終端中運行 npx hardhat compile
。 compile
任務是hardhat內(nèi)置任務之一慌洪。
$ npx hardhat compile
Compiling...
Compiled 1 contract successfully
合約已成功編譯顶燕,可以使用了。