以太坊智慧合約代幣應用開發(2)-geth的基本應用
一、概述
本節將介紹geth私有鏈環境的搭建,在進行區塊鏈開發時一般需要在私有鏈環境當中進行,一開始就在公鏈上開發所有的資源使用都需要支付相關費用,而且所有區塊在同步資料時都會有延遲。
二、相關概念
1、共有鏈與私有鏈
公共區塊鏈是指全世界任何人都可讀取的、任何人都能傳送交易且交易能獲得有效確認的、任何人都能參與其中共識過程的區塊鏈——共識過程決定哪個區塊可被新增到區塊鏈中和明確當前狀態。私有的區塊鏈是指其寫入許可權僅在一個組織手裡的區塊鏈。讀取許可權或者對外開放,或者被任意程度地進行了限制。
三、建立與連線節點
1、在私有網路上建立節點
使用下列命令可以在以太坊的私有網路中建立節點
geth --networkid 123 --dev --datadir data1 --rpc --rpcaddr 127.0.0.1 --rpcport 8545 --rpcapi web3,eth,personal --port 3000 console
效果如下圖所示:
引數說明:
可以使用geth --help命令來獲取geth命令的詳細使用,這裡將上面命令的主要引數說明一下
1、networkid是網路標識,具有同一網路標識的區塊原則上可以互通,id為1為以太坊主網路,1-4網路已經被以太坊自行佔用,為了說有這是一個私有網路我們將其設定為123
2、--dev 說明在開放模式下進項
3、datadir 節點的儲存位置,由於連線到區塊鏈的各個節點必須下載鏈上的資料,由於區塊鏈採用分散式儲存,所以沒有中心化的儲存裝置,資料儲存在區塊鏈的各個節點當中。
4、rpc 開啟rpc,rpc是使用http方式訪問節點的方式,除此之外系統還提供了 ipc,ws(websocket)等方式。
5、rpcaddr 設定http訪問的伺服器地址預設是localhost,可以設定為本機的ip地址
6、rpcport 設定http訪問的埠,預設是8545
7、rpcapi 設定通過http訪問的api列表,在預設情況下personal 是不開啟的,需手動開啟
8、console 使用該選項在節點建立完成之後直接進入互動式介面。否則服務啟動之後將處於監聽狀態,無法直接互動。
2、使用rpc連線到節點
在節點啟動之後可以使用 geth attach 命令連線到節點,連結方式可以使用rpc,ipc,ws之中一種關鍵看節點服務設定了哪一種連結方式。
geth attach rpc:http://127.0.0.1:8545
連結效果如下:
注意:1、在連結成功之後注意提示資訊中的module的列表項與啟動時的rpcapi設定是一致的
3、使用IPC連線到節點
在使用ipc連線到節點時需要指名ipc檔案的路徑,該檔案預設存在節點目錄的下:
可以使用下列命令進行連結
geth attach ipc:/home/sunbaolong/data1/geth.ipc
連結效果如下圖所示:
注意:在使用ipc進行連線其實是用linux的命名通道進行連結,相對於rpc的網路傳輸來講更加安全。所有在使用ipc進行連線時所有的module都是可用的。
使用ws方式連結到節點的方法是類似的。
四、基本命令
在geth客戶端可以使用的命令包含一下幾個模組,在上面截圖當中也能夠看到
- admin:節點管理相關功能
- eth:區塊鏈相關命令
- net:網路傳輸相關命令
- personal:賬戶管理相關命令
- web3:web介面功能,包含以上全部模組,如web3.eth,web3.personal,我們使用web3的各種客戶端使用的功能都是由該模組提供的
1、檢視賬戶
區塊鏈中的每一個賬戶都是由一個地址和一個錢包來構成的,可以使用下面命令檢視賬戶的基本資訊
eth.accounts
或者使用下列命令
personal.listAccounts
2、檢視錢包
personal.listWallets
3、檢視錢包餘額
eth.getBalance(eth.accounts[0])
4、新建賬戶
可以看到在節點被建立時,已經預設有一個賬號存在,而且在該賬號中已經存在了很多的以太幣。我們可以使用下列命令建立新使用者
personal.newAccount('123456')
檢視賬戶
注意:目前賬戶的狀態是鎖定的,解鎖的過程其實就是賬戶登陸的過程。在區塊鏈中賬戶都有一個金鑰儲存在節點的keystore中,在上面的輸出中也不難看到。
5、交易
可以發起以太幣交易,這裡的以太幣是測試環境下的虛擬以太幣
from = eth.accounts[0]
to = eth.accounts[1]
eth.sendTransaction({from:from,to:to,value:2000})
效果如下圖所示:
此時,查詢使用者一的錢包餘額
6、解鎖使用者
新建一個user3並且使用第二個使用者為其轉賬,如下圖所示
此時提示錯誤,因為無法鎖定的賬戶進行轉賬處理,此時需要解鎖轉出賬戶,可以使用下面命令
personal.unlockAccount(user2)
此時需要輸入使用者密碼,如下圖所示:
7、挖礦
此時再次進行轉賬
此時可以看到提示gas不足,gas的概念就是區塊鏈上的礦機在進行挖礦的時候需要的汽油,這個概念是和區塊鏈的去中心化思想緊密結合在一起的,從賬戶1中給“to”使用者轉賬足夠的以太幣。
此時發現轉賬並沒有成功,因為交易產生新的區塊,需要礦機處理區塊交易才能完成,可以使用下面命令開啟挖礦。
miner.start()
如下圖,所示交易區塊已經被挖出來並且成功處理
此時再檢查用於餘額
此時查詢第一個使用者的餘額
此時第一個賬戶的餘額並沒有減少,因為該賬戶是系統的預設賬戶,以太幣是充足的。從第二個使用者繼續轉賬到第三個使用者。
此時仍然提示解鎖,所以一次交易使用者有一次被設定為鎖定狀態,這可以看成是區塊鏈的一種安全機制
此時成功轉賬,查詢一個轉出賬戶的餘額
有沒有發現少了不止2000,少了部分就是支付的gas了
8、礦機賬戶
可以使用下面命令檢視礦機賬戶
eth.coinbase
geth的基本操作就是這樣了,下一篇將介紹智慧合約的部分