通過控制臺(tái)部署智能合約

除了使用圖形界面的以太坊錢包之外,用戶還可以通過Web.js Javascript API在控制臺(tái)命令行上部署和調(diào)用智能合約。

首先需要安裝go-ethereum客戶端,這里就不再贅述了。下面介紹一下我在mac電腦上部署和調(diào)用智能合約的步驟。

1)首先打開一個(gè)命令行窗口(稱之為Terminal 1,因?yàn)楹竺嫘枰俳ㄒ粋€(gè)窗口),運(yùn)行命令 geth --testnet 打開測(cè)試網(wǎng)絡(luò),如圖:

打開測(cè)試網(wǎng)絡(luò)

2) 然后打開另一個(gè)命令行窗口(Terminal 2),執(zhí)行 geth attach 命令打開Javascript控制臺(tái),通過這個(gè)控制臺(tái)可使用web3的方法和geth自身的管理API調(diào)用部署的智能合約。但請(qǐng)注意,我們需要打開但是測(cè)試網(wǎng)絡(luò)的控制臺(tái),所以要為 geth attach 命令指明訪問的位置,如圖:

打開測(cè)試網(wǎng)絡(luò)的JS控制臺(tái)

3)在Terminal 2中執(zhí)行 personal.listAccounts 查詢已有賬戶,發(fā)現(xiàn)并沒有賬戶,所以就自己創(chuàng)建一個(gè),執(zhí)行 personal.newAccount('隨便寫一個(gè)私鑰') , 如圖:

創(chuàng)建賬戶

4) 在Terminal 2中用 web3.eth.getBalance() 查詢剛才創(chuàng)建的賬戶(addr1)中的余額,發(fā)現(xiàn)為0,于是啟動(dòng)挖礦 miner.start() ,如圖:

啟動(dòng)挖礦

5)與此同時(shí),在Terminal 1中,以太坊節(jié)點(diǎn)會(huì)生成挖礦必需的數(shù)據(jù),你會(huì)看到Generating DAG的進(jìn)度,完成之后挖礦就會(huì)開始,可以看到小錘子圖標(biāo):

開始挖礦

6)片刻之后再在Terminal 2中查詢余額,發(fā)現(xiàn)一串天文數(shù)字,單位是wei,1 wei等于10^-18 ether。然后就可以停止挖礦了。

停止挖礦

7)寫一段簡(jiǎn)單的智能合約代碼,比如下面這段給商品打分的智能合約:

contract Rating {

function setRating (bytes32 _key, uint256 _value) {

/* 為特定編號(hào)的商品打分 */

ratings[_key] = _value;

}

/* 顯示特定商品的分?jǐn)?shù) */

mapping (bytes32 => uint256) public ratings;

}

把這段代碼放到Solidity語言的在線編譯器進(jìn)行編譯(也可以用solc編譯,這里暫時(shí)只介紹在線編譯器編譯)。

Solidity在線編譯器

8)將Web3 deploy菜單(上圖紅圈)下的全部?jī)?nèi)容復(fù)制到Terminal 2的控制臺(tái)(可能需要打開賬戶,即unlockAccount,輸入私鑰),并開啟挖礦,經(jīng)過一段時(shí)間的確認(rèn),控制臺(tái)提示"Contract mined!",則合約創(chuàng)建成功,并返回合約地址和此次交易的散列值。

合約創(chuàng)建成功

9)在控制臺(tái)窗口,可以使用合約名和函數(shù)名調(diào)用合約。假設(shè)你想給1號(hào)商品打3分,則可以調(diào)用該合約名(見Web3 deploy菜單下的內(nèi)容)的setRating函數(shù),且需要用到合約對(duì)象的sendTransaction()方法來發(fā)起交易。并且可以使用rating合約重點(diǎn)ratings數(shù)組來顯示1號(hào)商品的打分。

調(diào)用合約

至此,一個(gè)簡(jiǎn)單的智能合約的部署和調(diào)用就完成了。以上。

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

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

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