成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

輕松搭建以太坊私有鏈

fizz / 1669人閱讀

摘要:更有甚者將年稱作區(qū)塊鏈元年。配置創(chuàng)世區(qū)塊搭建私有鏈前需要創(chuàng)建一個配置文件,用于初始化創(chuàng)世區(qū)塊。挖礦挖礦賺取以太比獎勵,由于創(chuàng)世區(qū)塊中難度值設(shè)置的很低因此不會很難挖。

0x00 序言

最近不論是幣圈還是技術(shù)圈,區(qū)塊鏈都這么火熱,17 年 9 月 ICO 在國內(nèi)被取締,沒過幾天國內(nèi)所有數(shù)字貨幣交易所都被叫停,消息一出無數(shù)韭菜被迫割肉。誰料幣圈在脫離中國市場后一路高歌猛擊,比特幣為首的數(shù)字貨幣在此之后一路拉升再創(chuàng)新高。而 17 年一開始數(shù)字貨幣的基石——區(qū)塊鏈技術(shù)更是被捧上天。更有甚者將 18 年稱作區(qū)塊鏈元年。這是繼人工智能之后的又一個被廣泛看好的技術(shù)。并且區(qū)塊鏈的應(yīng)用落地將比人工智能門檻更低,馬太效應(yīng)已經(jīng)顯現(xiàn),會有大量資本涌入,也隱藏著很多機會。

0x01 配置創(chuàng)世區(qū)塊

搭建私有鏈前需要創(chuàng)建一個 json 配置文件,用于初始化創(chuàng)世區(qū)塊。這里作者將創(chuàng)建一個名為 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": {}
}

配置說明:
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 // 礦工賬號,第一個區(qū)塊挖出后將給這個礦工賬號發(fā)送獎勵的以太幣
difficulty // 難度值,越大越難
extraData // 附加信息隨便填
gasLimit // gas 的消耗總量限制,用來限制區(qū)塊能包含的交易信息總和,因為我們是私有鏈,所以填最大
nonce // 一個 64 位隨機數(shù)
mixhash // 與 nonce 配合用于挖礦,由上一個區(qū)塊的一部分生成的 hash
parentHash // 上一個區(qū)塊的 hash 值
alloc // 預(yù)設(shè)賬號以及賬號的以太幣數(shù)量,私有鏈挖礦比較容易可以不配置

好啦~配置項解釋完畢可以開始初始化創(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ù)存放的目錄

0x03 啟動私鏈起始節(jié)點(boot node)
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ù)說明:
--networkid 與 genesis.json 中的 chainId 一致
--identity 設(shè)置節(jié)點ID
--port geth 節(jié)點端口 default: 30303
--rpc 啟用 rpc 服務(wù) default: 8545
--rpcport rpc 服務(wù)端口
--rpccorsdomain 這里配置“*”是允許通過任意域名訪問,也可以指定具體的域名如:“http://yourdomain.com”
--nodiscover 關(guān)閉節(jié)點自動發(fā)現(xiàn)
--verbosity 日志等級:0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=detail (default: 3)

提示:
在 geth console 模式下可以使用 eth.getBlock(區(qū)塊號) 查看區(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)世都搞定了接下來的事就更簡單了~

0x04 創(chuàng)建新賬號

在 geth console 模式下實際是一個 JavaScript 運行環(huán)境,有點類似 Node.js 的命令行模式??梢允褂靡恍╊A(yù)設(shè)的對象方法執(zhí)行一些操作。personal 對象下的 newAccount 方法可以創(chuàng)建新的賬號,該方法返回一個賬號地址。

personal.newAccount("yourPassphrase")
"0xe6a8faf90ddc1ec0c335d0a83f660c5de9ec12d1"
0x05 挖礦

挖礦賺取以太比獎勵,由于創(chuàng)世區(qū)塊中難度值設(shè)置的很低因此不會很難挖。

miner.start()

挖礦同時可以用 geth attach 命令打開另一個終端查看賬戶余額

geth attach $HOME/privateNet/bootnode/geth.ipc
...
> eth.getBalance(eth.accounts[0])
0x06 創(chuàng)建新節(jié)點

都說區(qū)塊鏈?zhǔn)侨ブ行幕馁~本那么可以滿足于單機挖礦?說干就干接下來創(chuàng)建一個新節(jié)點并將太接入我們的主節(jié)點。這里需要注意以下幾點:

新節(jié)點的 networkid 要與 boot node 一致

需要與 boot node 使用同一個創(chuàng)世區(qū)塊

如果多個節(jié)點都在一臺機器上注意端口區(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

接來下需要建立節(jié)點間的聯(lián)系

這里有三種方式:

使用 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 命令可以看到兩個節(jié)點之間已經(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é)點取得聯(lián)系

[
    "enode://xxx" // boot node 地址
]

使用命令行 --bootnodes 參數(shù)指定 enode

0x07 節(jié)點間服務(wù)自發(fā)現(xiàn)

// 假設(shè)有 node2,node3 都加入 bootnode,驗證node2 node3 之間能否自動服務(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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/23951.html

相關(guān)文章

  • 以太是什么 - 以太開發(fā)入門指南

    摘要:以太坊是什么以太坊是一個建立在區(qū)塊鏈技術(shù)之上,去中心化應(yīng)用平臺。運行環(huán)境以太坊虛擬機是以太坊中智能合約的運行環(huán)境。是由以太坊客戶端提供的是典型的開發(fā)以太坊時使用的客戶端,基于語言開發(fā)。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:以太坊是什么 - 以太坊開發(fā)入門指南原文已更新,請讀者前往原文閱讀 很多同學(xué)已經(jīng)躍躍欲試投入到區(qū)塊鏈開發(fā)隊伍當(dāng)中來,可是又感覺無從下手,本文將基于以太坊平臺,以通俗...

    tomlingtm 評論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.41 - 深入學(xué)習(xí)區(qū)塊

    摘要:和比特幣協(xié)議有所不同的是,以太坊的設(shè)計十分靈活,極具適應(yīng)性。超級賬本區(qū)塊鏈的商業(yè)應(yīng)用超級賬本超級賬本是基金會下的眾多項目中的一個。證書頒發(fā)機構(gòu)負(fù)責(zé)簽發(fā)撤 showImg(https://segmentfault.com/img/bV2ge9?w=900&h=385); 從比特幣開始 一個故事告訴你比特幣的原理及運作機制 這篇文章的定位會比較科普,盡量用類比的方法將比特幣的基本原理講出來...

    qianfeng 評論0 收藏0
  • 以太智能合約開發(fā)第二篇:理解以太相關(guān)概念

    摘要:原文發(fā)表于以太坊智能合約開發(fā)第二篇理解以太坊相關(guān)概念很多人都說比特幣是區(qū)塊鏈,以太坊是區(qū)塊鏈。它是以太坊智能合約的運行環(huán)境。是由以太坊節(jié)點提供。以太坊社區(qū)把基于智能合約的應(yīng)用稱為去中心化的應(yīng)用。 原文發(fā)表于:以太坊智能合約開發(fā)第二篇:理解以太坊相關(guān)概念 很多人都說比特幣是區(qū)塊鏈1.0,以太坊是區(qū)塊鏈2.0。在以太坊平臺上,可以開發(fā)各種各樣的去中心化應(yīng)用,這些應(yīng)用構(gòu)成了以太坊的整個生態(tài)...

    yibinnn 評論0 收藏0
  • Mac環(huán)境搭建以太私有

    摘要:原文地址石匠的為了測試以太坊智能合約,最方便的是在本地搭建一個以太坊私有鏈。網(wǎng)絡(luò)在連接到其他節(jié)點的時候會用到,以太坊公網(wǎng)的網(wǎng)絡(luò)是,為了不與公有鏈網(wǎng)絡(luò)沖突,運行私有鏈節(jié)點的時候要指定自己的網(wǎng)絡(luò)。當(dāng)設(shè)置為表示使用發(fā)布該鏈。 原文地址: 石匠的blog 為了測試以太坊智能合約,最方便的是在本地搭建一個以太坊私有鏈。在mac上搭建環(huán)境主要需要以下步驟。 geth安裝 geth是go-ether...

    張金寶 評論0 收藏0
  • 如何搭建以太私有

    摘要:本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接如何搭建以太坊私有鏈原文已更新,請讀者前往原文閱讀在開發(fā)以太坊時,很多時候需要搭建一條以太坊私有鏈,通過本文一起看看如何在上進行搭建。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:如何搭建以太坊私有鏈原文已更新,請讀者前往原文閱讀 在開發(fā)以太坊時,很多時候需要搭建一條以太坊私有鏈,通過本文一起看看如何在Mac上進行搭建。 寫在前面 閱讀本文前,你應(yīng)該對以太...

    J4ck_Chan 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<