摘要:更有甚者將年稱作區塊鏈元年。配置創世區塊搭建私有鏈前需要創建一個配置文件,用于初始化創世區塊。挖礦挖礦賺取以太比獎勵,由于創世區塊中難度值設置的很低因此不會很難挖。
0x00 序言
最近不論是幣圈還是技術圈,區塊鏈都這么火熱,17 年 9 月 ICO 在國內被取締,沒過幾天國內所有數字貨幣交易所都被叫停,消息一出無數韭菜被迫割肉。誰料幣圈在脫離中國市場后一路高歌猛擊,比特幣為首的數字貨幣在此之后一路拉升再創新高。而 17 年一開始數字貨幣的基石——區塊鏈技術更是被捧上天。更有甚者將 18 年稱作區塊鏈元年。這是繼人工智能之后的又一個被廣泛看好的技術。并且區塊鏈的應用落地將比人工智能門檻更低,馬太效應已經顯現,會有大量資本涌入,也隱藏著很多機會。
0x01 配置創世區塊搭建私有鏈前需要創建一個 json 配置文件,用于初始化創世區塊。這里作者將創建一個名為 genesis.json 的文件。
內容如下:
{ "config": { "chainId": 1000, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 }, "coinbase" : "0x0000000000000000000000000000000000000000", "difficulty" : "0x400", "extraData" : "Oh My God!", "gasLimit" : "0x2fefd8", "nonce" : "0x0000000000000042", "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp" : "0x00", "alloc": {} }
配置說明:
config.chainId // 區塊鏈的ID,在 geth 命令中的 --networkid 參數需要與 chainId 的值一致
config.homesteadBlock // Homestead 硬分叉區塊高度,不需要關注
config.eip155Block // EIP 155 硬分叉高度,不需要關注
config.eip158Block // EIP 158 硬分叉高度,不需要關注
coinbase // 礦工賬號,第一個區塊挖出后將給這個礦工賬號發送獎勵的以太幣
difficulty // 難度值,越大越難
extraData // 附加信息隨便填
gasLimit // gas 的消耗總量限制,用來限制區塊能包含的交易信息總和,因為我們是私有鏈,所以填最大
nonce // 一個 64 位隨機數
mixhash // 與 nonce 配合用于挖礦,由上一個區塊的一部分生成的 hash
parentHash // 上一個區塊的 hash 值
alloc // 預設賬號以及賬號的以太幣數量,私有鏈挖礦比較容易可以不配置
好啦~配置項解釋完畢可以開始初始化創世區塊了!!!
0x02 初始化創世區塊這里需要用到 geth 的 init 命令。
geth --datadir $HOME/privateNet/bootnode init genesis.json ... INFO [01-13|20:07:29] Successfully wrote genesis state database=lightchaindata hash=49c2dd…aff051
參數解釋:
--datadir 指定數據存放的目錄
geth --datadir $HOME/privateNet/bootnode --networkid 1000 --identity "bootnode" --port 30303 --rpc --rpcport 8545 --rpccorsdomain "*" --nodiscover --verbosity 4 console ... Welcome to the Geth JavaScript console! instance: Geth/v1.7.2-stable/darwin-amd64/go1.9.2 modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0 >
參數說明:
--networkid 與 genesis.json 中的 chainId 一致
--identity 設置節點ID
--port geth 節點端口 default: 30303
--rpc 啟用 rpc 服務 default: 8545
--rpcport rpc 服務端口
--rpccorsdomain 這里配置“*”是允許通過任意域名訪問,也可以指定具體的域名如:“http://yourdomain.com”
--nodiscover 關閉節點自動發現
--verbosity 日志等級:0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=detail (default: 3)
提示:
在 geth console 模式下可以使用 eth.getBlock(區塊號) 查看區塊內容
> eth.getBlock(0) { difficulty: 16, extraData: "0x01010101", gasLimit: 3141592, gasUsed: 0, hash: "0xdd97c4469e8bf4054b7c756c1d620ee21d41e5ade129adfbb5ddce3937d6f66e", logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", miner: "0x0000000000000000000000000000000000000000", mixHash: "0x0000000000000000000000000000000000000000000000000000000000000000", nonce: "0x0000000000000042", number: 0, parentHash: "0x0000000000000000000000000000000000000000000000000000000000000000", receiptsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", size: 508, stateRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", timestamp: 0, totalDifficulty: 16, transactions: [], transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", uncles: [] }
創世都搞定了接下來的事就更簡單了~
0x04 創建新賬號在 geth console 模式下實際是一個 JavaScript 運行環境,有點類似 Node.js 的命令行模式。可以使用一些預設的對象方法執行一些操作。personal 對象下的 newAccount 方法可以創建新的賬號,該方法返回一個賬號地址。
personal.newAccount("yourPassphrase") "0xe6a8faf90ddc1ec0c335d0a83f660c5de9ec12d1"0x05 挖礦
挖礦賺取以太比獎勵,由于創世區塊中難度值設置的很低因此不會很難挖。
miner.start()
挖礦同時可以用 geth attach 命令打開另一個終端查看賬戶余額
geth attach $HOME/privateNet/bootnode/geth.ipc ... > eth.getBalance(eth.accounts[0])0x06 創建新節點
都說區塊鏈是去中心化的賬本那么可以滿足于單機挖礦?說干就干接下來創建一個新節點并將太接入我們的主節點。這里需要注意以下幾點:
新節點的 networkid 要與 boot node 一致
需要與 boot node 使用同一個創世區塊
如果多個節點都在一臺機器上注意端口區分,避免端口沖突
--port 30304
--rpcport 9545
geth --datadir $HOME/privateNet/node2 init genesis.json geth --datadir $HOME/privateNet/node2 --fast --cache 512 --port 30304 --networkid 1000 --identity "node2" --rpc --rpcport 9545 --rpccorsdomain "*" --nodiscover --verbosity 4 console
接來下需要建立節點間的聯系
這里有三種方式:
使用 admin.addPeer() 命令手動添加 bootnode
在 boot node 上獲取 enode 信息:
admin.nodeInfo.enode "enode://xxx"
將 boot node 的 enode 信息寫入 node2
admin.addPeer("enode://xxx");
geth console 中顯示
DEBUG[01-13|22:54:35] Ethereum peer connected id=b0ac9d91125e7a1b conn=inbound name=Geth/node2/v1.7.2-stable/darwin-amd64/go1.9.2
使用 admin.peers 命令可以看到兩個節點之間已經取得聯系
# boot node > admin.peers [{ caps: ["eth/63"], id: "b0ac9d91125e7a1bebff6d473cd3a9bcf41243060e52f97c3744053c060f24c9e2c36cc181e589d46ede5559509c7dd2c8528d9d039ee5cc900e0700f56c27e7", name: "Geth/node2/v1.7.2-stable/darwin-amd64/go1.9.2", network: { localAddress: "[::1]:30303", remoteAddress: "[::1]:64087" }, protocols: { eth: { difficulty: 245728379, head: "0x65ae6da1d42ab4ea75bc468e47912cc61cd3a51b5d406482904c7d0c51785548", version: 63 } } }]
# node2 > admin.peers [{ caps: ["eth/62", "eth/63"], id: "8cc33dabb8f5fa2033cf646549e6988418439c8756d96e62f418ebb57ecd0cc2cfbf7ceab4450d262331d8d4fe68358200030e6a16988f2ebe393bf6214380fe", name: "Geth/bootnode/v1.7.2-stable/darwin-amd64/go1.9.2", network: { localAddress: "[::1]:64087", remoteAddress: "[::1]:30303" }, protocols: { eth: { difficulty: 245728379, head: "0x65ae6da1d42ab4ea75bc468e47912cc61cd3a51b5d406482904c7d0c51785548", version: 63 } } }]
使用 static-nodes.json 文件
除了在 geth console 下使用 admin.addPeer() 也可在 --datadir 指定的目錄中添加 static-nodes.json 文件讓節點取得聯系
[ "enode://xxx" // boot node 地址 ]
使用命令行 --bootnodes 參數指定 enode
0x07 節點間服務自發現// 假設有 node2,node3 都加入 bootnode,驗證node2 node3 之間能否自動服務發現
參考列表Geth Commond Line Options
Geth Private network
What-does-each-genesis-json-parameter-mean
What-do-the-parameters-in-the-ropsten-genesis-file-mean
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/23951.html
摘要:以太坊是什么以太坊是一個建立在區塊鏈技術之上,去中心化應用平臺。運行環境以太坊虛擬機是以太坊中智能合約的運行環境。是由以太坊客戶端提供的是典型的開發以太坊時使用的客戶端,基于語言開發。 本文首發于深入淺出區塊鏈社區原文鏈接:以太坊是什么 - 以太坊開發入門指南原文已更新,請讀者前往原文閱讀 很多同學已經躍躍欲試投入到區塊鏈開發隊伍當中來,可是又感覺無從下手,本文將基于以太坊平臺,以通俗...
摘要:和比特幣協議有所不同的是,以太坊的設計十分靈活,極具適應性。超級賬本區塊鏈的商業應用超級賬本超級賬本是基金會下的眾多項目中的一個。證書頒發機構負責簽發撤 showImg(https://segmentfault.com/img/bV2ge9?w=900&h=385); 從比特幣開始 一個故事告訴你比特幣的原理及運作機制 這篇文章的定位會比較科普,盡量用類比的方法將比特幣的基本原理講出來...
摘要:原文發表于以太坊智能合約開發第二篇理解以太坊相關概念很多人都說比特幣是區塊鏈,以太坊是區塊鏈。它是以太坊智能合約的運行環境。是由以太坊節點提供。以太坊社區把基于智能合約的應用稱為去中心化的應用。 原文發表于:以太坊智能合約開發第二篇:理解以太坊相關概念 很多人都說比特幣是區塊鏈1.0,以太坊是區塊鏈2.0。在以太坊平臺上,可以開發各種各樣的去中心化應用,這些應用構成了以太坊的整個生態...
摘要:原文地址石匠的為了測試以太坊智能合約,最方便的是在本地搭建一個以太坊私有鏈。網絡在連接到其他節點的時候會用到,以太坊公網的網絡是,為了不與公有鏈網絡沖突,運行私有鏈節點的時候要指定自己的網絡。當設置為表示使用發布該鏈。 原文地址: 石匠的blog 為了測試以太坊智能合約,最方便的是在本地搭建一個以太坊私有鏈。在mac上搭建環境主要需要以下步驟。 geth安裝 geth是go-ether...
摘要:本文首發于深入淺出區塊鏈社區原文鏈接如何搭建以太坊私有鏈原文已更新,請讀者前往原文閱讀在開發以太坊時,很多時候需要搭建一條以太坊私有鏈,通過本文一起看看如何在上進行搭建。 本文首發于深入淺出區塊鏈社區原文鏈接:如何搭建以太坊私有鏈原文已更新,請讀者前往原文閱讀 在開發以太坊時,很多時候需要搭建一條以太坊私有鏈,通過本文一起看看如何在Mac上進行搭建。 寫在前面 閱讀本文前,你應該對以太...
閱讀 963·2019-08-30 14:24
閱讀 1002·2019-08-30 14:13
閱讀 1808·2019-08-29 17:21
閱讀 2701·2019-08-29 13:44
閱讀 1670·2019-08-29 11:04
閱讀 454·2019-08-26 10:44
閱讀 2575·2019-08-23 14:04
閱讀 917·2019-08-23 12:08