以太坊智能合約開發(fā)指南6(命令行客戶端geth)

以太坊的命令行客戶端挺多,不同語言的實現(xiàn),有python的pyethapp,有c++的cpp-ethereum,還有我們這里要說的go語言實現(xiàn)的geth。
geth是官方客戶端,也是目前最流行的以太坊命令行客戶端。還有適合普通用戶使用的圖形化客戶端,Ethereum Wallet 和 Mist。
上一節(jié)中我們的智能合約是部署在javascript模擬的區(qū)塊鏈節(jié)點中。我們現(xiàn)在準備把它部署到真正的以太坊節(jié)點上,當然我們是部署在開發(fā)環(huán)境中,正式環(huán)境的部署是需要花費以太幣的。

安裝go語言環(huán)境

官方下載頁面 https://golang.org/dl/
官方安裝說明 https://golang.org/doc/install
也可以網(wǎng)上搜索下go語言安裝,安裝完成后測試下

$ go version

正常的話,會返回go的版本號,類似這樣

go version go1.9.3 darwin/amd64

安裝geth

有很多安裝方式,官方安裝說明 https://ethereum.github.io/go-ethereum/install
這里使用源碼安裝方式

git clone https://github.com/ethereum/go-ethereum.git
cd go-ethereum
make geth

編譯完成后找到可執(zhí)行文件 geth (或者 geth.exe windows下),文件在源碼目錄下 /build/bin/ 。這個文件是可以單獨執(zhí)行的,不需要任何其它文件的依賴,你可以隨意將它拷貝到其它目錄,或者將它添加到你的PATH環(huán)境變量中。

啟動geth

geth可以有很多不同的啟動方式,可以連接以太坊主網(wǎng)絡、以太坊測試網(wǎng)絡,或者搭建以太坊私有鏈,這些啟動方式我們以后再談到,現(xiàn)在我們啟動以太坊開發(fā)環(huán)境。

geth --ipcpath <test-chain-directory>/geth.ipc --datadir <test-chain-directory> --dev console
geth --datadir <data directory> --dev --rpc  --rpccorsdomain "*" console

參數(shù)說明
--datadir 數(shù)據(jù)庫和秘鑰存儲路徑
--dev 開發(fā)環(huán)境,采用權(quán)威證明(PoA),開發(fā)帳號有預存金額,自動封裝交易數(shù)據(jù)到區(qū)塊鏈
--rpc 開啟HTTP-RPC服務,默認8545端口
--rpccorsdomain 允許連接到rpc的url匹配模式 *代表任意
console 啟動一個交互式的JavaScript環(huán)境
``

控制臺命令

> web3.eth.accounts
["0xe698356a50e71bade22e1a324d5c815f0631df2c"]
> user1 = web3.eth.accounts[0]
"0xe698356a50e71bade22e1a324d5c815f0631df2c"
> user1_balance = web3.eth.getBalance(user1)
1.15792089237316195423570985008687907853269984665640564039457584007913129639927e+77
> web3.fromWei(user1_balance,'ether')
1.15792089237316195423570985008687907853269984665640564039457584007913129639927e+59

解釋下這幾個命令:

  • web3.eth.accounts 獲取當前節(jié)點控制的帳號列表,這里可以看到已經(jīng)有一個帳號了,這是 --dev參數(shù)幫我們創(chuàng)建的帳號。
  • web3.eth.getBalance(user1) 獲取帳號余額,我們看到返回了一個很大的數(shù)字,77次方的一個值。這也是 --dev參數(shù)幫我們給這個帳號預存的余額,方便我們做測試。
  • web3.fromWei(user1_balance,'ether') 把這個余額做單位轉(zhuǎn)換。以太幣有一套貨幣單位,最大的是ether,最小的是wei,1ether = 10^18wei。我們查詢余額默認給出的是wei為單位的表示,這里是把單位轉(zhuǎn)換成ether為單位的表示。

這里使用的web3對象,是以太坊開發(fā)的一套javascript庫,目的是讓應用程序能夠與以太坊節(jié)點進行通信。注意,這里有兩層,geth啟動了一個以太坊節(jié)點,console參數(shù)開啟了一個javascript的控制臺,這個控制臺注入了web3.js這個庫,以使我們可以通過web3對象與以太坊節(jié)點做交互。

web3命令的完整文檔 https://github.com/ethereum/wiki/wiki/JavaScript-API
以太幣單位說明 http://ethdocs.org/en/latest/ether.html

remix與geth綁定

啟動完成geth后,我們需要將我們的remix IDE與geth綁定。remix的安裝和使用前面有介紹。
在右側(cè)功能項中 Run -> Environment 選擇 Web3 Provider,使用默認的連接地址。


image.png

綁定完成后,現(xiàn)在我們的Account 列表中就是我們剛剛在控制臺中查詢到的帳號,后面還有很長一個數(shù)值,是它的余額。
在remix的命令行終端中輸入命令


image.png

這里與我們之前的控制臺是一樣的。我們看到現(xiàn)在塊高(blockNumber)是0。

部署代幣合約

現(xiàn)在與我們之前的合約部署是一樣的,點擊Create就可以了。部署完成后我們再次查詢

> web3.eth.blockNumber
1

現(xiàn)在塊高已經(jīng)是1了,就是說我們剛剛的代幣合約已經(jīng)寫入?yún)^(qū)塊鏈了。

在remix下做方法調(diào)用

現(xiàn)在我們需要再創(chuàng)建一個帳號用來做測試

> web3.personal.newAccount("123456")
"0xc710711af7f890ecef56bb38bde1eade2e5d0ab8"

注意,這個命令在remix的控制臺不能使用,提示personal_newAccount方法不存在,我猜應該是web3的版本問題。所以我是在命令行窗口下進行的。

transfer "0xc710...ab8",2000 這里地址我省略了,實際調(diào)用需要完整地址。調(diào)用完成后我們在控制臺再查詢塊高,現(xiàn)在是2了。同時我們發(fā)現(xiàn)所有藍色按鈕(只讀)的方法,是不會增加塊高的,只有紅色按鈕(有寫入操作)的方法會增加塊高度。

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

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

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