區塊鏈開發(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。版權所有,歡迎保留原文連結進行轉載 :)