以太坊智慧合約代幣應用開發(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客戶端可以使用的命令包含一下幾個模組,在上面截圖當中也能夠看到

  1.    admin:節點管理相關功能
  2.    eth:區塊鏈相關命令
  3.    net:網路傳輸相關命令
  4.    personal:賬戶管理相關命令
  5.    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的基本操作就是這樣了,下一篇將介紹智慧合約的部分