以太坊私鏈與智能合約部署學習(博主修正篇)—— 第一篇


    以太坊(Ethereum)自2017年5月誕生以來,發展迅速。作為了一個小白,博主初步打算上個車,過個癮。那什么是以太坊?請參看度娘的解釋(https://baike.baidu.com/item/%E4%BB%A5%E5%A4%AA%E5%9D%8A/20865117?fr=aladdin)。

    事物是個新事物,也是個好東西,但資料不多,所以小白博主也只能慢慢找尋資料,慢慢記錄自己填坑的過程。

    第一篇的主題是:以太坊私鏈的創建:)

   一、配置環境與軟件安裝

    1、安裝geth

    以下的資料來自:http://8btc.com/article-4537-1.html

MAC OSX

    首先確保已安裝 homebrew,沒有安裝過的可以在命令行下執行/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 進行安裝 brew tap ethereum/ethereum brew install ethereum WINDOWS 訪問 https://geth.ethereum.org/downloads/ 下載並安裝 Geth for Windows LINUX git clone https://github.com/ethereum/go-ethereum sudo apt-get install -y build-essential golang cd go-ethereum make geth

    在這里,我們約定,go-ethereum的絕對路徑為:/alidata/go-ethereum。

    如果你覺得按照上面的命令能順利執行,那就圖森破了。這里有兩點需要注意:

    首先:千萬選用ubuntu而不是centos,各種庫無法編譯,單單填centos依賴庫的坑都能把搓衣板跪穿。對於像我這樣的小白級別,建議跟着教程走,調通了demo之后再去折騰centos。

    其次:golang的安裝,要到https://www.golangtc.com/download下載go1.9.2.linux-amd64.tar.gz,進行編譯安裝。因為apt-get下載后的版本是1.6,而go-ethereum需要的最低版本是1.7。報錯信息為:go-ethereum 1.6 Makefile:15: recipe for target 'geth' failed。編譯步驟:

tar -xvf go1.9.linux-amd64.tar.gz
mv go /usr/local/src mkdir $HOME/gosrc && cd $HOME/gosrc mkdir bin pkg src

更新系統變量:

vim ~/.profile
 
export GOROOT=/usr/local/src/go export GOPATH=$HOME/gosrc export GOBIN=$GOROOT/bin export PATH=$PATH:$GOROOT/bin source ~/.profile

安裝完Golang之后,再進入/alidata/go-ethereum,進行make geth,就可以順利編譯了。成功之后執行/alidata/go-ethereum/build/bin/geth -h,有如下回顯則說明安裝成功:

 

    2、安裝npm

    因為solc的安裝要依賴於nodejs的npm組件。這一步相對簡單:apt-get install npm

   

    3、安裝solc

    按照教程示例,只需要簡單的npm install -g solc,慢慢坐着等即可。

    運行一段時間后,你會發現,自己又太天真了,天朝的網絡質量,可以讓你等到天荒地老。天朝的問題,只能在天朝內解決,我們可以依靠無所不能的大淘寶:

    npm install -g cnpm --registry=https://registry.npm.taobao.org

    apt-get install install nodejs-legacy

    cnpm install solc

    cnpm install -g solc

    注意:到這里,solc安裝成功。(但博主仍感覺有什么地方怪怪的,之后的文章會進一步求證,廣大客官就先不用糾結了,答案近期分曉)

 

    二、配置私鏈節點

    以下這一部分,參照http://8btc.com/article-4537-1.html  說明的步驟進行操作,不會有問題。

    1、創世區塊的設置

    創建/alidata/godblock/路徑,這個路徑的名稱隨意,覺得怎么牛B就怎么取。在這個路徑下創建genesis.json文件和data目錄。

genesis.json 的內容如下:

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

解釋一下各個參數的作用:(來自:http://blog.csdn.net/sportshark/article/details/51855007)

 

mixhash

與nonce配合用於挖礦,由上一個區塊的一部分生成的hash。注意他和nonce的設置需要滿足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章節所描述的條件。.

nonce

nonce就是一個64位隨機數,用於挖礦,注意他和mixhash的設置需要滿足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章節所描述的條件。

difficulty

設置當前區塊的難度,如果難度過大,cpu挖礦就很難,這里設置較小難度

alloc

用來預置賬號以及賬號的以太幣數量,因為私有鏈挖礦比較容易,所以我們不需要預置有幣的賬號,需要的時候自己創建即可以。

coinbase

礦工的賬號,隨便填

timestamp

設置創世塊的時間戳

parentHash

上一個區塊的hash值,因為是創世塊,所以這個值是0

extraData

附加信息,隨便填,可以填你的個性信息

gasLimit

該值設置對GAS的消耗總量限制,用來限制區塊能包含的交易信息總和,因為我們是私有鏈,所以填最大。

 

    2.2 初始化

    在命令行下進入剛才創建的文件夾/alidata/godblock/,輸入如下命令:
    /alidata/go-ethereum/build/bin/geth --datadir data init genesis.json

 

    2.3 啟動節點

     /alidata/go-ethereum/build/bin/geth --datadir data --networkid 123456 --rpc --rpccorsdomain "*" --nodiscover console

    geth的參數解釋:

identity

區塊鏈的標示,隨便填寫,用於標示目前網絡的名字

init

指定創世塊文件的位置,並創建初始塊

datadir

設置當前區塊鏈網絡數據存放的位置

port

網絡監聽端口

rpc

啟動rpc通信,可以進行智能合約的部署和調試

rpcapi

設置允許連接的rpc的客戶端,一般為db,eth,net,web3

networkid

設置當前區塊鏈的網絡ID,用於區分不同的網絡,是一個數字

console

啟動命令行模式,可以在Geth中執行命令

 

不出所料,這時節點將成功啟動,並進入JavaScript控制台,如下圖所示:

 

第一篇就先到這里吧,下一篇將一步一步地布署屬於小白的第一個智能合約。不見不散:)

 

參考文章:

http://8btc.com/article-4537-1.html    以太坊私鏈與智能合約部署入門教程

http://blog.csdn.net/sportshark/article/details/51855007    區塊鏈開發(一)搭建基於以太坊的私有鏈環境

http://npm.taobao.org/    淘寶NPM鏡像

http://blog.csdn.net/weixin_40139875/article/details/77879915    go-ethereum 1.6 Makefile:15: recipe for target 'geth' failed


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM