Mac環境搭建以太坊私有鏈
原文地址: 石匠的blog
為了測試以太坊智慧合約,最方便的是在本地搭建一個以太坊私有鏈。在mac上搭建環境主要需要以下步驟。
geth安裝
geth是go-ethereum的簡寫,是一個用go語言編寫的以太坊客戶端,是在以太坊智慧合約開發中最常用的命令列工具。 在mac上可以通過brew工具直接安裝:
brew tap ethereum/ethereum
brew install ethereum
詳細的安裝說明也可以檢視官方文件。
安裝完成後,可以再mac的terminal中,用以下命令測試工具是否正常:
geth -h
建立私有鏈創世區塊
為了建立一個自己測試的私有鏈,需要首先建立一個創世區塊,可以自定義創世區塊資訊資訊genesis.json:
{
"config": {
"chainId": 10,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc": {},
"coinbase": "0x0000000000000000000000000000000000000000",
"difficulty": "0x20000",
"extraData": "",
"gasLimit": "0x2fefd8",
"nonce": "0x0000000000000042",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp": "0x00"
}
區塊引數釋義:
chainId: 指定了獨立的區塊鏈網路ID。網路ID在連線到其他節點的時候會用到,以太坊公網的網路ID是 1,為了不與公有鏈網路衝突,執行私有鏈節點的時候要指定自己的網路ID。不同ID網路的節點無法相互連線。
HomesteadBlock: 當設定為0表示使用Homestead釋出該鏈。
nonce: 一個64位隨機數,用於挖礦,注意它和mixhash的設定需要滿足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章節所描述的條件。
mixhash: 與nonce配合用於挖礦,由上一個區塊的一部分生成的hash。注意它和nonce的設定需要滿足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章節所描述的條件。
difficulty: 設定設定當前區塊的難度,值越大挖礦就越難。
alloc: 用來預置賬號以及賬號的以太幣數量。
coinbase: 礦工賬號
timestamp: 設定創世塊的時間戳
parentHash: 上一個區塊的hash,創世塊就為0
extraData: 附加資訊,自己可以填寫任意資訊
gasLimit: 該值設定對GAS的消耗總量限制,用來限制區塊能包含的交易資訊總和
找一個合適的目錄,執行命令,建立創世區塊:
geth --datadir "./" init genesis.json
執行成功後會在當前目錄建立geth和keystore兩個資料夾
- geth目錄:儲存鏈上的區塊資料
- keystore目錄:儲存鏈上的使用者資訊
私有鏈測試
啟動私有鏈
前面建立創世區塊成功後,啟動區塊鏈程式:
geth --datadir "./" --nodiscover console 2>>geth.log
相關引數:
--nodiscover 使用這個引數,你的節點就不會被其他人發現,除非手動新增你的節點。否則,就只有一個被無意新增到一個陌生區塊鏈上的機會,那就是跟你有相同的genesis檔案和networkID。
--maxpeers 0 如果你不想有人連上你的測試鏈,就用maxpeers 0。或者,你可以調整引數,當你確切的知道有幾個節點要連線上來的時候。
--rpc 允許RPC操作你的節點。這個引數在Geth上是預設的。
--rpcapi "db,eth,net,web3" 這個命令指示了允許通過RPC訪問的命令。預設情況下,Geth允許web3。
--rpcport "8080"
--rpccorsdomain "http://chriseth.github.io/browser-solidity/"
--datadir "/home/TestChain1" 私有鏈存放路徑(最好跟公有鏈路徑不同)
--port "30303" 網路監聽埠,用來和其他節點手動連線
--identity “TestnetMainNode" 用來標識你的節點的,方便在一大群節點中識別出自己的節點
console指定了啟動成功後進入命令列介面,2>>將日誌重定向到geth.log中,不然日誌也會輸出到介面上,會和命令列介面混在一起,不方便命令列測試。
建立賬號
在命令列中建立賬號:
>personal.newAccount()
然後會提示輸入賬號密碼,成功後會返回一個賬號地址,比如:0xc7ca64442b98cbfdb6f056841ccd40f8b7f054bb
也可以通過給newAccount傳遞密碼作為引數,一次性完成建立:
>personal.newAccount("123456")
檢視餘額
檢視賬戶的餘額:
>eth.getBalance("0xc7ca64442b98cbfdb6f056841ccd40f8b7f054bb")
挖礦
開始挖礦:
>miner.start()
開始後,可以tailf geth.log看看挖礦初始化是否成功,以及挖礦過程細節。 停止挖坑:
>miner.stop()
轉賬
將一個賬戶的代幣轉移到另外一個賬戶,需要通過事務介面完成 eth.sendTransaction({from: acc0, to: acc1, value: amount}),比如:
>eth.sendTransaction({from: "0x01b5ecbcd8d46c1a9ee52e8b8a30bb6426dffb1b", to: "0xe6e4e20c95abc11dca8b3e9c292a34725bf89930", value: 20})
轉出的賬戶需要密碼解鎖,不然會發生類似以下錯誤:
Error: authentication needed: password or unlock
at web3.js:3143:20
at web3.js:6347:15
at web3.js:5081:36
at <anonymous>:1:1
很好理解,如果轉出別人賬戶的代幣,不需要密碼驗證,那就毫無安全可言了,可以通過以下方式,解鎖賬戶後繼續轉賬:
>personal.unlockAccount("0xab04698365ed79ef22921edad8f6f516ca40cecb")
轉賬完成後,可以通過eth.getBalance()檢視餘額,但是馬上查詢卻發現並沒有變化,這是因為sendTransaction這是發起了一筆交易事務,還沒有得到確認,只是將這個事務放到了待提交池中。區塊鏈的機制中是新建立區塊的時候,會就從事務池中找出所有事務,進行有效性驗證,驗證成功後進行挖礦並將所有相關事務打包到區塊中,待新的去區塊成功加入到區塊鏈中後,之前的轉賬就得到了最終的確認和永久固話。
所以,sendTransaction成功後,需要呼叫挖礦命令miner.start()建立區塊,然後再檢視餘額會發現轉賬金額變化已經生效。
相關文章
- 如何搭建以太坊私有鏈
- 區塊鏈2.0以太坊環境搭建區塊鏈
- 3.6 以太坊私有鏈與聯盟鏈搭建
- 以太坊-Win環境下remix環境搭建REM
- ubuntu環境下搭建以太坊開發環境Ubuntu開發環境
- 3.5 以太坊開發環境搭建開發環境
- 以太坊學習記錄+geth配置+私有鏈搭建
- windows 以太坊開發框架Truffle環境搭建Windows框架
- 通過Geth搭建私有以太坊網路
- 第二課 如何在WINDOWS環境下搭建以太坊開發環境Windows開發環境
- 以太坊學習筆記————12、搭建測試網路和私有鏈筆記
- 以太坊學習筆記——————11、公有鏈、聯盟鏈、私有鏈筆記
- 以太坊教程:搭建環境、編寫編譯一個智慧合約編譯
- EthBox以太坊開發套件,一鍵安裝部署以太坊開發環境套件開發環境
- 以太坊智慧合約開發環境搭建以及第一個Dapp開發環境APP
- mac搭建環境Mac
- 區塊鏈2.0以太坊錢包編譯詳解+連線私有鏈+修改區塊鏈編譯
- 搭建以太坊本地開發環境開發環境
- 以太坊本地開發環境搭建開發環境
- Flutter 環境搭建 For MacFlutterMac
- Mac 新環境搭建Mac
- golang環境搭建macGolangMac
- Mac Flutter環境搭建MacFlutter
- 區塊鏈 2.0 :以太坊(九)區塊鏈
- 區塊鏈之以太坊初探區塊鏈
- 以太坊入門-Truffle框架搭建框架
- mac 下搭建flutter環境MacFlutter
- CI環境搭建(Mac)——GerritMac
- CI環境搭建(Mac)——JenkinsMacJenkins
- flutter環境搭建mac版FlutterMac
- Geth搭建私有鏈
- Selenium環境搭建 - Mac電腦Mac
- Mac 搭建 PHP 開發環境MacPHP開發環境
- Mac搭建Flutter開發環境MacFlutter開發環境
- andriod環境搭建(Mac機器)Mac
- React Native Android環境搭建(Mac)React NativeAndroidMac
- MAC環境下PHP開發除錯環境搭建MacPHP除錯
- open-ethereum-pool以太坊礦池原始碼分析(1)環境安裝原始碼