搭建智能合約測(cè)試環(huán)境蔼紧、開發(fā)、編譯狠轻、部署以及JS調(diào)用合約

參考: https://yq.aliyun.com/articles/212944#2

目標(biāo)

1. 了解智能合約

2. 簡(jiǎn)單環(huán)境搭建

3. 能夠利用solidity編寫Hello World合約

4. 合約部署

5. 與合約互動(dòng)

開發(fā)前的準(zhǔn)備

truffle:最活躍的智能合約開發(fā)框架奸例。

就像一般網(wǎng)站或App開發(fā)一樣,在提供公開服務(wù)之前向楼,開發(fā)者會(huì)在自己用于寫程序的電腦(又稱作本機(jī))或透過測(cè)試網(wǎng)絡(luò)來測(cè)試程序執(zhí)行的效果查吊,測(cè)試完成后谐区,才會(huì)部署到公開的網(wǎng)絡(luò)上提供服務(wù)。

開發(fā)區(qū)塊鏈智能合約(程序)的過程也是如此菩貌。特別是公開鏈上所有寫入或讀取計(jì)算結(jié)果的操作都需要真金白銀(虛擬代幣)卢佣,而且根據(jù)網(wǎng)絡(luò)狀況,每個(gè)公開鏈上的操作都需要要一小段反應(yīng)時(shí)間(15秒~數(shù)分鐘)箭阶,這些等待頗浪費(fèi)寶貴的開發(fā)時(shí)間?虚茶。

因此在開發(fā)的過程中,我們將使用testrpc工具在電腦上模擬智能合約所需的以太坊內(nèi)存塊鏈測(cè)試環(huán)境仇参。

testrpc中也包含了Javascript版本的Ethereum虛擬機(jī)(Ethereum Virtual Machine)嘹叫,因此可以完整地執(zhí)行智能合約。

安裝所需工具

首先開發(fā)機(jī)上必須裝好Node.js诈乒,再使用以下命令安裝所需的工具:

$ npm install -g ethereumjs-testrpc truffle

啟動(dòng)Testrpc

安裝好后隨時(shí)可以使用testrpc命令來啟動(dòng)以太坊測(cè)試環(huán)境罩扇。

啟動(dòng)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)喂饥。

建立項(xiàng)目

開啟另一個(gè)終端窗口,輸入以下命令以建立項(xiàng)目:

richard@Rich:~/eth/SmartContractDemo$ ls

HelloWorld

richard@Rich:~/eth/SmartContractDemo$ cd HelloWorld/

richard@Rich:~/eth/SmartContractDemo/HelloWorld$ truffle init (第一條命令)

Downloading...

Unpacking...

Setting up...

Unbox successful. Sweet!

Commands:

? Compile:? ? ? ? truffle compile

? Migrate:? ? ? ? truffle migrate

? Test contracts: truffle test

richard@Rich:~/eth/SmartContractDemo/HelloWorld$ ls

contracts? migrations? test? truffle-config.js? truffle.js

richard@Rich:~/eth/SmartContractDemo/HelloWorld$

目錄結(jié)構(gòu)

/contracts:存放智能合約原始代碼的地方肠鲫,可以看到里面已經(jīng)有三個(gè)sol文件员帮,我們開發(fā)的HelloWorld.sol文件就存放在這里。

/migrations:這是Truffle用來部署智能合約的功能导饲,待會(huì)兒我們會(huì)修改2_deploy_contracts.js來部署HelloWorld.sol捞高。

/test: 測(cè)試智能合約的代碼放在這里,支持js與sol測(cè)試渣锦。

truffle.js:Truffle的設(shè)置文檔硝岗。

編譯

現(xiàn)在執(zhí)行truffle compile(第二條命令)命令,我們可以將HelloWorld.sol原始碼編譯成Ethereum bytecode

編譯


部署

truffle框架中提供了方便部署合約的腳本袋毙。打開migrations/2_deploy_contracts.js文件(腳本使用Javascript編寫)型檀,將內(nèi)容修改如下:

varHelloWorld = artifacts.require("HelloWorld");

module.exports =function(deployer){?

??? deployer.deploy(HelloWorld);

};

用artifacts.require語句來取得準(zhǔn)備部署的合約。使用deployer.deploy語句將合約部署到區(qū)塊鏈上听盖。

這邊HelloWorld是contract的名稱而不是文件名胀溺。

因此可以用此語法讀入任一.sol文件中的任一合約。

現(xiàn)在執(zhí)行truffle migrate(第三條命令)命令:

小插曲:


在使用truffle migrate進(jìn)行智能合約test環(huán)境發(fā)布時(shí)如果未配置正確會(huì)出現(xiàn)以下異常:

導(dǎo)致上面異常的原因?yàn)槭且驗(yàn)閠ruffle.js里面未配置鏈接合約發(fā)布的環(huán)境地址媳溺,找到對(duì)應(yīng)的truffle.js文件,修改代碼為類似如下配置即可解決問題:

修改后碍讯,繼續(xù)運(yùn)行

合約已經(jīng)部署到testrpc中悬蔽。切換到testrpc窗口,可以看到testrpc有反應(yīng)了捉兴。


與合約互動(dòng)

truffle提供命令行工具蝎困,執(zhí)行truffle console命令后录语,可用Javascript來和部署的合約互動(dòng)。

HelloWorld.deployed().then(instance => contract = instance)

truffle console中預(yù)載了truffle-contract函數(shù)庫(kù)禾乘,以方便操作部署到區(qū)塊鏈上的合約澎埠。

這邊使用HelloWorld.deployed().then語句來取得HelloWorld合約的Instance(實(shí)例),并存到contract變量中始藕,以方便后續(xù)的調(diào)用


contract.sayHello.call()

truffle-contract提供使用call()來讀取只讀(read only)的數(shù)據(jù)蒲稳,這樣就不需提供gas。因此如果遇到的操作需要向區(qū)塊鏈寫入數(shù)據(jù)伍派,我們就不能用call語句了江耀。

如此一來,我們已寫好并部署完成了第一個(gè)智能合約诉植,也驗(yàn)證了合約確實(shí)可以運(yùn)作祥国。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市晾腔,隨后出現(xiàn)的幾起案子舌稀,更是在濱河造成了極大的恐慌,老刑警劉巖灼擂,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件壁查,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡缤至,警方通過查閱死者的電腦和手機(jī)潮罪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來领斥,“玉大人嫉到,你說我怎么就攤上這事≡侣澹” “怎么了何恶?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)嚼黔。 經(jīng)常有香客問我细层,道長(zhǎng),這世上最難降的妖魔是什么唬涧? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任疫赎,我火速辦了婚禮,結(jié)果婚禮上碎节,老公的妹妹穿的比我還像新娘捧搞。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布胎撇。 她就那樣靜靜地躺著介粘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪晚树。 梳的紋絲不亂的頭發(fā)上姻采,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音爵憎,去河邊找鬼慨亲。 笑死,一個(gè)胖子當(dāng)著我的面吹牛纲堵,可吹牛的內(nèi)容都是我干的巡雨。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼席函,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼铐望!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起茂附,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤正蛙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后营曼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體乒验,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年蒂阱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了锻全。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡录煤,死狀恐怖鳄厌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情妈踊,我是刑警寧澤了嚎,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站廊营,受9級(jí)特大地震影響歪泳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜露筒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一呐伞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧慎式,春花似錦伶氢、人聲如沸假哎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至肪虎,卻和暖如春劣砍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背扇救。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工刑枝, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人迅腔。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓装畅,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親沧烈。 傳聞我的和親對(duì)象是個(gè)殘疾皇子掠兄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 最新內(nèi)容會(huì)更新在主站深入淺出區(qū)塊鏈社區(qū)原文鏈接:智能合約開發(fā)環(huán)境搭建及Hello World合約 如果你對(duì)于以太坊...
    深入淺出區(qū)塊鏈閱讀 1,065評(píng)論 0 2
  • 我從小就是生活在一種深深的自卑當(dāng)中的蚂夕,我不知道我的期望是什么樣子的!也許細(xì)細(xì)想來腋逆,小時(shí)候的我很孤獨(dú)很自卑婿牍,我老是覺...
    真與真閱讀 172評(píng)論 1 1
  • 我今生會(huì)成為一個(gè)百億甚至千億身價(jià)的企業(yè)家,其實(shí)這也怪惱人的惩歉,因?yàn)槲視?huì)親手把自己變成一個(gè)追求金錢與權(quán)力的人等脂。 其實(shí),...
    陳清偉閱讀 178評(píng)論 3 1
  • 時(shí)光如水撑蚌,歲月如歌上遥,白駒過隙,逝者如斯夫锨并,總結(jié)起來就是一句話露该,時(shí)間過得太快了,2017年馬上到了尾聲第煮,用老公的話說...
    qinxybdbks閱讀 194評(píng)論 0 0
  • 昨天和幾個(gè)朋友在翠微百貨樓上的至尊金錢豹吃飯包警,說是至尊撵摆,其實(shí)就是海鮮多一些,環(huán)境更好一些害晦,價(jià)格相對(duì)的也比其他金錢豹...
    蟬鳴三境閱讀 361評(píng)論 0 4