摘要:更有甚者將年稱作區(qū)塊鏈元年。配置創(chuàng)世區(qū)塊搭建私有鏈前需要?jiǎng)?chuàng)建一個(gè)配置文件,用于初始化創(chuàng)世區(qū)塊。挖礦挖礦賺取以太比獎(jiǎng)勵(lì),由于創(chuàng)世區(qū)塊中難度值設(shè)置的很低因此不會(huì)很難挖。
0x00 序言
最近不論是幣圈還是技術(shù)圈,區(qū)塊鏈都這么火熱,17 年 9 月 ICO 在國(guó)內(nèi)被取締,沒(méi)過(guò)幾天國(guó)內(nèi)所有數(shù)字貨幣交易所都被叫停,消息一出無(wú)數(shù)韭菜被迫割肉。誰(shuí)料幣圈在脫離中國(guó)市場(chǎng)后一路高歌猛擊,比特幣為首的數(shù)字貨幣在此之后一路拉升再創(chuàng)新高。而 17 年一開(kāi)始數(shù)字貨幣的基石——區(qū)塊鏈技術(shù)更是被捧上天。更有甚者將 18 年稱作區(qū)塊鏈元年。這是繼人工智能之后的又一個(gè)被廣泛看好的技術(shù)。并且區(qū)塊鏈的應(yīng)用落地將比人工智能門檻更低,馬太效應(yīng)已經(jīng)顯現(xiàn),會(huì)有大量資本涌入,也隱藏著很多機(jī)會(huì)。
0x01 配置創(chuàng)世區(qū)塊搭建私有鏈前需要?jiǎng)?chuàng)建一個(gè) json 配置文件,用于初始化創(chuàng)世區(qū)塊。這里作者將創(chuàng)建一個(gè)名為 genesis.json 的文件。
內(nèi)容如下:
{ "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": {} }
配置說(shuō)明:
config.chainId // 區(qū)塊鏈的ID,在 geth 命令中的 --networkid 參數(shù)需要與 chainId 的值一致
config.homesteadBlock // Homestead 硬分叉區(qū)塊高度,不需要關(guān)注
config.eip155Block // EIP 155 硬分叉高度,不需要關(guān)注
config.eip158Block // EIP 158 硬分叉高度,不需要關(guān)注
coinbase // 礦工賬號(hào),第一個(gè)區(qū)塊挖出后將給這個(gè)礦工賬號(hào)發(fā)送獎(jiǎng)勵(lì)的以太幣
difficulty // 難度值,越大越難
extraData // 附加信息隨便填
gasLimit // gas 的消耗總量限制,用來(lái)限制區(qū)塊能包含的交易信息總和,因?yàn)槲覀兪撬接墟湥蕴钭畲?br>nonce // 一個(gè) 64 位隨機(jī)數(shù)
mixhash // 與 nonce 配合用于挖礦,由上一個(gè)區(qū)塊的一部分生成的 hash
parentHash // 上一個(gè)區(qū)塊的 hash 值
alloc // 預(yù)設(shè)賬號(hào)以及賬號(hào)的以太幣數(shù)量,私有鏈挖礦比較容易可以不配置
好啦~配置項(xiàng)解釋完畢可以開(kāi)始初始化創(chuàng)世區(qū)塊了!!!
0x02 初始化創(chuàng)世區(qū)塊這里需要用到 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
參數(shù)解釋:
--datadir 指定數(shù)據(jù)存放的目錄
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 >
參數(shù)說(shuō)明:
--networkid 與 genesis.json 中的 chainId 一致
--identity 設(shè)置節(jié)點(diǎn)ID
--port geth 節(jié)點(diǎn)端口 default: 30303
--rpc 啟用 rpc 服務(wù) default: 8545
--rpcport rpc 服務(wù)端口
--rpccorsdomain 這里配置“*”是允許通過(guò)任意域名訪問(wèn),也可以指定具體的域名如:“http://yourdomain.com”
--nodiscover 關(guān)閉節(jié)點(diǎn)自動(dòng)發(fā)現(xiàn)
--verbosity 日志等級(jí):0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=detail (default: 3)
提示:
在 geth console 模式下可以使用 eth.getBlock(區(qū)塊號(hào)) 查看區(qū)塊內(nèi)容
> 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: [] }
創(chuàng)世都搞定了接下來(lái)的事就更簡(jiǎn)單了~
0x04 創(chuàng)建新賬號(hào)在 geth console 模式下實(shí)際是一個(gè) JavaScript 運(yùn)行環(huán)境,有點(diǎn)類似 Node.js 的命令行模式。可以使用一些預(yù)設(shè)的對(duì)象方法執(zhí)行一些操作。personal 對(duì)象下的 newAccount 方法可以創(chuàng)建新的賬號(hào),該方法返回一個(gè)賬號(hào)地址。
personal.newAccount("yourPassphrase") "0xe6a8faf90ddc1ec0c335d0a83f660c5de9ec12d1"0x05 挖礦
挖礦賺取以太比獎(jiǎng)勵(lì),由于創(chuàng)世區(qū)塊中難度值設(shè)置的很低因此不會(huì)很難挖。
miner.start()
挖礦同時(shí)可以用 geth attach 命令打開(kāi)另一個(gè)終端查看賬戶余額
geth attach $HOME/privateNet/bootnode/geth.ipc ... > eth.getBalance(eth.accounts[0])0x06 創(chuàng)建新節(jié)點(diǎn)
都說(shuō)區(qū)塊鏈?zhǔn)侨ブ行幕馁~本那么可以滿足于單機(jī)挖礦?說(shuō)干就干接下來(lái)創(chuàng)建一個(gè)新節(jié)點(diǎn)并將太接入我們的主節(jié)點(diǎn)。這里需要注意以下幾點(diǎn):
新節(jié)點(diǎn)的 networkid 要與 boot node 一致
需要與 boot node 使用同一個(gè)創(chuàng)世區(qū)塊
如果多個(gè)節(jié)點(diǎn)都在一臺(tái)機(jī)器上注意端口區(qū)分,避免端口沖突
--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
接來(lái)下需要建立節(jié)點(diǎn)間的聯(lián)系
這里有三種方式:
使用 admin.addPeer() 命令手動(dòng)添加 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 命令可以看到兩個(gè)節(jié)點(diǎn)之間已經(jīng)取得聯(lián)系
# 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 文件讓節(jié)點(diǎn)取得聯(lián)系
[ "enode://xxx" // boot node 地址 ]
使用命令行 --bootnodes 參數(shù)指定 enode
0x07 節(jié)點(diǎn)間服務(wù)自發(fā)現(xiàn)// 假設(shè)有 node2,node3 都加入 bootnode,驗(yàn)證node2 node3 之間能否自動(dòng)服務(wù)發(fā)現(xiàn)
參考列表Geth Commond Line Options
Geth Private network
What-does-each-genesis-json-parameter-mean
What-do-the-parameters-in-the-ropsten-genesis-file-mean
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/23951.html
摘要:以太坊是什么以太坊是一個(gè)建立在區(qū)塊鏈技術(shù)之上,去中心化應(yīng)用平臺(tái)。運(yùn)行環(huán)境以太坊虛擬機(jī)是以太坊中智能合約的運(yùn)行環(huán)境。是由以太坊客戶端提供的是典型的開(kāi)發(fā)以太坊時(shí)使用的客戶端,基于語(yǔ)言開(kāi)發(fā)。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:以太坊是什么 - 以太坊開(kāi)發(fā)入門指南原文已更新,請(qǐng)讀者前往原文閱讀 很多同學(xué)已經(jīng)躍躍欲試投入到區(qū)塊鏈開(kāi)發(fā)隊(duì)伍當(dāng)中來(lái),可是又感覺(jué)無(wú)從下手,本文將基于以太坊平臺(tái),以通俗...
摘要:和比特幣協(xié)議有所不同的是,以太坊的設(shè)計(jì)十分靈活,極具適應(yīng)性。超級(jí)賬本區(qū)塊鏈的商業(yè)應(yīng)用超級(jí)賬本超級(jí)賬本是基金會(huì)下的眾多項(xiàng)目中的一個(gè)。證書頒發(fā)機(jī)構(gòu)負(fù)責(zé)簽發(fā)撤 showImg(https://segmentfault.com/img/bV2ge9?w=900&h=385); 從比特幣開(kāi)始 一個(gè)故事告訴你比特幣的原理及運(yùn)作機(jī)制 這篇文章的定位會(huì)比較科普,盡量用類比的方法將比特幣的基本原理講出來(lái)...
摘要:原文發(fā)表于以太坊智能合約開(kāi)發(fā)第二篇理解以太坊相關(guān)概念很多人都說(shuō)比特幣是區(qū)塊鏈,以太坊是區(qū)塊鏈。它是以太坊智能合約的運(yùn)行環(huán)境。是由以太坊節(jié)點(diǎn)提供。以太坊社區(qū)把基于智能合約的應(yīng)用稱為去中心化的應(yīng)用。 原文發(fā)表于:以太坊智能合約開(kāi)發(fā)第二篇:理解以太坊相關(guān)概念 很多人都說(shuō)比特幣是區(qū)塊鏈1.0,以太坊是區(qū)塊鏈2.0。在以太坊平臺(tái)上,可以開(kāi)發(fā)各種各樣的去中心化應(yīng)用,這些應(yīng)用構(gòu)成了以太坊的整個(gè)生態(tài)...
摘要:原文地址石匠的為了測(cè)試以太坊智能合約,最方便的是在本地搭建一個(gè)以太坊私有鏈。網(wǎng)絡(luò)在連接到其他節(jié)點(diǎn)的時(shí)候會(huì)用到,以太坊公網(wǎng)的網(wǎng)絡(luò)是,為了不與公有鏈網(wǎng)絡(luò)沖突,運(yùn)行私有鏈節(jié)點(diǎn)的時(shí)候要指定自己的網(wǎng)絡(luò)。當(dāng)設(shè)置為表示使用發(fā)布該鏈。 原文地址: 石匠的blog 為了測(cè)試以太坊智能合約,最方便的是在本地搭建一個(gè)以太坊私有鏈。在mac上搭建環(huán)境主要需要以下步驟。 geth安裝 geth是go-ether...
摘要:本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接如何搭建以太坊私有鏈原文已更新,請(qǐng)讀者前往原文閱讀在開(kāi)發(fā)以太坊時(shí),很多時(shí)候需要搭建一條以太坊私有鏈,通過(guò)本文一起看看如何在上進(jìn)行搭建。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:如何搭建以太坊私有鏈原文已更新,請(qǐng)讀者前往原文閱讀 在開(kāi)發(fā)以太坊時(shí),很多時(shí)候需要搭建一條以太坊私有鏈,通過(guò)本文一起看看如何在Mac上進(jìn)行搭建。 寫在前面 閱讀本文前,你應(yīng)該對(duì)以太...
閱讀 955·2019-08-30 14:24
閱讀 987·2019-08-30 14:13
閱讀 1799·2019-08-29 17:21
閱讀 2660·2019-08-29 13:44
閱讀 1654·2019-08-29 11:04
閱讀 438·2019-08-26 10:44
閱讀 2564·2019-08-23 14:04
閱讀 908·2019-08-23 12:08