使用solidity語(yǔ)言撰寫(xiě)智能合約
????????Ethereum 上的智能合約需要使用 solidity 語(yǔ)言來(lái)撰寫(xiě)哄尔。雖然還有其他能用來(lái)撰寫(xiě)智能合約的語(yǔ)言如 Serpent (類(lèi)Python)员萍、 lll (類(lèi)Fortran)兜蠕,但目前看到所有公開(kāi)的智能合約都是使用solidity 撰寫(xiě)戈毒。
本文將使用當(dāng)前最活躍的智能合約開(kāi)發(fā)框架 truffle 為基礎(chǔ)來(lái)開(kāi)發(fā)省艳。ENS(Ethereum Name Service) 也是采用 truffle 框架岭粤。其他選擇還有 embark 等晨抡。
就像一般網(wǎng)站或App開(kāi)發(fā)一樣星著,在提供公開(kāi)服務(wù)之前购笆,開(kāi)發(fā)者會(huì)在自己用于寫(xiě)程序的電腦(又稱(chēng)作本機(jī))或透過(guò)測(cè)試網(wǎng)絡(luò)來(lái)測(cè)試程序執(zhí)行的效果,測(cè)試完成后虚循,才會(huì)部署到公開(kāi)的網(wǎng)絡(luò)上提供服務(wù)同欠。開(kāi)發(fā)區(qū)塊鏈智能合約(程序)的過(guò)程也是如此。特別是公開(kāi)鏈上所有寫(xiě)入或讀取計(jì)算結(jié)果的
操作都需要真金白銀(虛擬代幣)横缔,而且根據(jù)網(wǎng)絡(luò)狀況铺遂,每個(gè)公開(kāi)鏈上的操作都需要要一小段反應(yīng)時(shí)間(15秒~數(shù)分鐘),這些等待頗浪費(fèi)寶貴的開(kāi)發(fā)時(shí)間茎刚。因此在開(kāi)發(fā)的過(guò)程中襟锐,我們將使用 testrpc 工具在電腦上模擬智能合約所需的以太坊內(nèi)存塊鏈測(cè)試環(huán)境。
????????testrpc 中也包含了 Javascript 版本的 Ethereum 虛擬機(jī)(Ethereum Virtual Machine)膛锭,因此可以完整地執(zhí)行智能合約粮坞。
????????此外,開(kāi)發(fā)前還需準(zhǔn)備一個(gè)合手的編輯器初狰。我目前是使用 Atom 搭配 solidity 插件來(lái)開(kāi)發(fā)莫杈。solidity 插件除了支持語(yǔ)法高亮之外,也會(huì)透過(guò) Solium 檢查并提示基本的語(yǔ)法錯(cuò)誤奢入,相當(dāng)方便筝闹。其他編輯器應(yīng)該也有類(lèi)似的插件可選擇。
首先確認(rèn)開(kāi)發(fā)機(jī)上是否裝有Node.js,再使用一下命令安裝所需工具:
$ npm install -g ethereumjs-testrpc truffle
啟動(dòng)Testrpc
安裝好后隨時(shí)可以使用 testrpc 命令來(lái)啟動(dòng)以太坊測(cè)試環(huán)境关顷。
$ testrpc
可以看到 testrpc 啟動(dòng)后自動(dòng)建立了 10 個(gè)帳號(hào)(Accounts)肩杈,與每個(gè)帳號(hào)對(duì)應(yīng)的私鑰(Private
Key)。每個(gè)帳號(hào)中都有 100 個(gè)測(cè)試用的以太幣(Ether)解寝。要注意 testrpc 僅運(yùn)行在內(nèi)存中扩然,因
此每次重開(kāi)時(shí)都會(huì)回到全新的狀態(tài)。
一切準(zhǔn)備就緒聋伦,我們可以開(kāi)始建立第一份智能合約項(xiàng)目了夫偶。
建立項(xiàng)目
先進(jìn)入項(xiàng)目創(chuàng)建路徑下:
eg: ~/user/Desktop/ContractDemo
$ truffle init
目錄結(jié)構(gòu)
/contracts: 存放智能合約原始代碼的地方,可以看到里面已經(jīng)有三個(gè) sol 文件觉增,我們開(kāi)發(fā)的HelloWorld.sol 文件就存放在這里兵拢。
/migrations: 這是 Truffle 用來(lái)部署智能合約的功能,待會(huì)兒我們會(huì)修改2_deploy_contracts.js 來(lái)部署 HelloWorld.sol 逾礁。
/test: 測(cè)試智能合約的代碼放在這里说铃,支持 js 與 sol 測(cè)試。truffle.js: Truffle 的設(shè)置文檔嘹履。