1. 程式人生 > >區塊鏈開發(2)以太坊私鏈

區塊鏈開發(2)以太坊私鏈

以太坊作為第二代區塊鏈技術,相比"中本聰"第一代區塊鏈技術比特幣,擁有更快的交易確認時間,比特幣每筆平均10分鐘,以太坊只要18秒左右(EOS為0.5秒,還免手續費)。同時,以太坊自帶圖靈完備的智慧合約程式語言(Solidity),執行在以太坊虛擬機器上,擁有更大的靈活性,基於以太坊的Dapp和遊戲也越來越多。

以太坊主鏈上發行的代幣成為以太幣(ether),用來支付交易的手續費。在主鏈上部署智慧合約之前,我們可以先搭一個以太坊私鏈環境,用來測試和部署合約,避免不必要的損失。其中,以太幣有如下單位:

1 ether = 10^18 wei
1 ether = 10^15 Kwei, 1 Kwei   = 10^3 wei
1 ether = 10^12 Mwei, 1 Mwei   = 10^6 wei
1 ether = 10^9  Gwei,  1 Gwei   = 10^9 wei
1 ether = 10^6 szabo,  1 szabo  = 10^12 wei
1 ether = 10^3 finney, 1 finney = 10^15 wei

1. 私鏈環境搭建

作業系統:Ubuntu 18.04

1.1 下載Geth

雖然,以太坊的實現有很多語言的版本(ethereum-github),但官方推薦使用Go的實現,所以這裡直接下載go-ethereum,可以直接下載原始碼翻譯安裝,也可以直接下載編譯好的可執行檔案。

下載地址:

https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.8.18-58632d44.tar.gz

然後,解壓安裝即可:

1.2 初始化創世塊

(1)新建一個目錄,用來存放創世塊資料:

(2)新建genesis.json創世塊配置檔案:

{
  "config": {
        "chainId": 0,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
    },
  "alloc"      : {},
  "coinbase"   : "0x0000000000000000000000000000000000000000",
  "difficulty" : "0x20000",
  "extraData"  : "",
  "gasLimit"   : "0x2fefd8",
  "nonce"      : "0x0000000000000042",
  "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "timestamp"  : "0x00"
}

注:genesis.json來自於https://github.com/ethereum/go-ethereum

(3)初始化創世塊

1.3 啟動私鏈節點

(1)在終端執行以下命令:

sudo geth --networkid 123 --dev --datadir chain --rpc --rpcapi "personal,db,eth,net,web3,miner,admin,debug" --rpcaddr "0.0.0.0" --rpcport 8545 --port 30303 --rpccorsdomain "*" --nodiscover

引數介紹:

  • --networkid:網路id。(預設值為1)
    • 1:Frontier(主網路)
    • 2:Morden(忽略)
    • 3:Ropsten(測試網路)
    • 4:Rinkeby(測試網路)
  • --dev: 開發模式。包含一個預含以太幣的開發者賬號。
  • --datadir:指定資料庫和金鑰存放的路徑。
  • --rpc:是否開啟HTTP-RPC。
  • --rpcapi:指定哪些HTTP-RPC提供的API介面可用。
  • --rpcaddr:指定HTTP-RPC監聽的地址。預設是:localhost。
  • --rpcport:指定HTTP-RPC監聽的埠。預設是:8545。
  • --port:網路監聽埠,用於與其它節點通訊。預設是:30303。
  • --rpccorsdomain:指定哪些URL可以跨域訪問節點。
  • --nodiscover:關閉節點發現。

注:這裡沒有開啟自動挖礦(--dev.period引數),也沒有使用websocket的方式訪問。更多引數的含義參考geth --help

2. 連線到私鏈

2.1 使用mist錢包連線到本地私鏈

(1)下載Mist錢包

https://github.com/ethereum/mist/releases

(2)解壓Mist錢包

unzip Mist-linux64-0-11-1.zip -d ./Mist

(3)使用Mist連線到私鏈

sudo ./mist --rpc ./../chain/geth.ipc

如遇到以下錯誤:
error while loading shared libraries:libgconf-2.so.4:cannot open shared object file:No such file or directory
則需安裝libgconf庫,執行sudo apt install libgconf-2-4:

(4)解決上述錯誤,再次執行步驟(3)會成功開啟Mist錢包,並看到一個包含1.1579e+77個以太幣的帳號。

2.2 使用MetaMask錢包連線到本地私鏈

(1)下載並安裝MetaMask錢包
步驟略。(這裡安裝MetaMask錢包,可能需要科學上網,自行解決。瀏覽器使用Chrome)

(2)連線到本地節點
當然,MetaMask也可以不與節點裝在同一臺機器上,則選擇Custom RPC,然後配置相應的ip和埠即可。

3. Geth控制檯

3.1 Web3命令的使用

(1) 進入Geth控制檯

sudo geth attach ./chain/geth.ipc  
這裡也可以使用HTTP介面的方式:  
sudo geth attach http://127.0.0.1

3.2 交易

(1)建立新帳號,並返回新帳號的地址

personal.newAccount("123456")

(2)查詢帳號,預設有一個帳號加上新建立,因此,總共看到兩個地址 。

personal.listAccounts  


(3)查詢餘額

eth.getBalance("xxx")


(4)轉賬交易,轉賬單位是1000ether,最小單位是wei,並再次檢視餘額,可以看到轉賬成功,並返回交易雜湊。

eth.sendTransaction({from:"xxx", to:"xxx", value:web3.toWei(1000, "ether")})

注:由於預設帳號是不帶密碼的,所以直接轉賬是成功。否則,需要先解鎖帳號。

注:密碼為上面建立帳號時的123456

3.2.1 使用Mist錢包交易

(1)Mist錢包中檢視

可以看到,本地私鏈中已經有兩個帳號了,第二個帳號餘額為900。

(2)在Mist錢包中點Send,並填入私鏈中的兩個地址。


這裡,直接點交易即可,因為,預設帳號沒有密碼。

注:如果在私鏈環境中,交易或者部署合約,一直在等待確認。需在控制檯手動執行下挖礦,這樣才會出新塊來記錄交易。

該篇主要演示了下以太坊私鏈的搭建,以及Mist錢包的使用,當然,MetaMask等錢包的使用類似,過程都不復雜,只是細節偏多。那麼,這一篇就先總結到這裡,下一篇暫定為以太坊智慧合約的部署。如果你對區塊鏈開發感興趣,或者你覺得任何文中錯誤的地方,歡迎與我交流並指正。

作者:AlphaGL。版權所有,歡迎保留原文連結進行轉載 :)

參考:

以太坊-維基百科
Ethereum JavaScript API