建立一個(gè)全新的預(yù)先分配資金和對(duì)等節(jié)點(diǎn)的測(cè)試網(wǎng)絡(luò)。
在本系列的第1部分中,在安裝以太坊geth客戶端,創(chuàng)建一個(gè)帳戶并運(yùn)行一些簡(jiǎn)單的命令之前,我們探討了以太坊的基礎(chǔ)知識(shí) - 這不僅僅是一種加密貨幣,它為智能合約提供了一個(gè)分散的平臺(tái)。
在這篇文章中,我們將創(chuàng)建一個(gè)私人區(qū)塊鏈,并用它來更詳細(xì)地探索以太坊。由于我們將從一個(gè)全新的區(qū)塊鏈開始,我們可以完全同步這一點(diǎn),并且不需要配置節(jié)點(diǎn)來使用光同步模式。
停止主網(wǎng)同步
如果您遵循第1部分的規(guī)定,并將節(jié)點(diǎn)配置為使用mainnet并以輕同步模式運(yùn)行,則可以通過以下方式停止并啟動(dòng):
$sudosystemctlstopgeth@pi.service $sudosystemctldisablegeth@pi.service創(chuàng)建一個(gè)新帳戶
我們需要為我們的新區(qū)塊鏈網(wǎng)絡(luò)提供一個(gè)名稱,就本示例而言,我們將使用“的DesignSpark”。默認(rèn)情況下,以太坊將數(shù)據(jù)存儲(chǔ)在名為“.ethereum”的主目錄的子目錄中,即Linux / BSD上的隱藏目錄。為了將我們私人區(qū)塊鏈的數(shù)據(jù)分開,我們將使用“.designspark”。
我們開始創(chuàng)建一個(gè)新帳戶:
$geth--datadir.designsparkaccountnew并記下該帳戶的地址,因?yàn)槿绻覀兿霝槠漕A(yù)先分配任何資金,我們?cè)诔跏蓟戮W(wǎng)絡(luò)時(shí)都需要這些。
一開始,只有 block 0
鏈中必須有第一個(gè)鏈接,區(qū)塊鏈也沒有區(qū)別,需要?jiǎng)?chuàng)建一個(gè)將由參與網(wǎng)絡(luò)的初始節(jié)點(diǎn)集使用的創(chuàng)建區(qū)塊。這是通過JSON文件配置的,作為例子,我們使用的內(nèi)容如下。
{ "config":{ "chainId":555, "homesteadBlock":0, "eip155Block":0, "eip158Block":0 }, "difficulty":"20", "gasLimit":"2100000", "alloc":{ "1fd4027fe390abaa49e5afde7896ff1e5ecacabf": {"balance":"20000000000000000000"} }}'chainId'是標(biāo)識(shí)網(wǎng)絡(luò)的數(shù)值,可以在這里找到公共網(wǎng)絡(luò)正在使用的列表。我們需要為我們的私人DesignSpark網(wǎng)絡(luò)選擇一個(gè)數(shù)字,出于某種原因555看起來是一個(gè)不錯(cuò)的選擇 - 您可以使用不同的選項(xiàng)的數(shù)字。
那么其他參數(shù)是什么?
-
homesteadBlock. Homestead是一個(gè)以太坊版本,對(duì)于我們的連鎖店,這個(gè)設(shè)置為0。
-
eip155Block.我們的連鎖對(duì)于EIP155來說不會(huì)硬叉性的,所以這個(gè)設(shè)置為0。
-
eip158Block.我們的連鎖對(duì)于EIP158來說并不是硬叉性的,所以這個(gè)設(shè)定為0。
-
difficulty. 這設(shè)定了采礦難度,在我們的情況下,我們希望這個(gè)比較低。
-
GasLimit.這是每塊Gas成本的限制。
-
alloc. 這是我們可以預(yù)先分配資金到賬戶的地方。
以太坊改進(jìn)建議 (EIPs) 描述了以太坊平臺(tái)的標(biāo)準(zhǔn),并可能發(fā)布新的標(biāo)準(zhǔn)以解決缺陷。隨著網(wǎng)絡(luò)的增長(zhǎng),它可能會(huì)在某個(gè)時(shí)候分叉以允許電子信息產(chǎn)品被合并。這并不是我們的專用網(wǎng)絡(luò)所關(guān)心的問題,但有關(guān)EIP155在哪里用mainnet實(shí)現(xiàn)的細(xì)節(jié)以及它的作用,請(qǐng)參閱Spurious Dragon.
Gas是用來衡量一個(gè)動(dòng)作或一組動(dòng)作執(zhí)行多少工作量的單位。從而允許成本附加到執(zhí)行智能合約 - 包含代碼功能并位于區(qū)塊鏈上,能夠與其他合同進(jìn)行交互,制定決策,存儲(chǔ)數(shù)據(jù),并將乙醚發(fā)送給其他合作伙伴的對(duì)象。更多關(guān)于這個(gè)在未來的帖子。
Alloc 允許我們將資金預(yù)先分配給一個(gè)或多個(gè)賬戶。這里資金已經(jīng)分配到我們之前創(chuàng)建的賬戶的地址。
將我們的配置文件保存到designspark.json后,我們現(xiàn)在可以使用以下方式初始化網(wǎng)絡(luò):
$geth--datadir.designsparkinitdesignspark.json
就這樣,我們已經(jīng)寫出了我們的起源塊,現(xiàn)在有了我們新網(wǎng)絡(luò)的開始。如果后續(xù)節(jié)點(diǎn)以相同方式初始化,則它們也可以成為成員。
啟動(dòng)第一個(gè)節(jié)點(diǎn)
要使用的JavaScript控制臺(tái)啟動(dòng)第一個(gè)節(jié)點(diǎn),我們輸入:
$geth--identitychainpi--rpc--rpcport8080--rpccorsdomain"*"--datadir.designspark--port30303--nodiscover--rpcapi"db,eth,net,web3"--networkid555console所有參數(shù)是什么意思?
-
indentity. 這設(shè)置以太坊節(jié)點(diǎn)標(biāo)識(shí)。
-
rpc*. 各種RPC設(shè)置配置可用的API以及誰有權(quán)訪問它們。
-
datadir. 我們顯然需要像以前一樣使用相同的數(shù)據(jù)目錄。
-
nodiscover. 這意味著我們的節(jié)點(diǎn)不可發(fā)現(xiàn)。
-
networkid. 這需要在初始化期間配置相同的數(shù)字ID。
一旦我們進(jìn)入控制臺(tái),我們可以使用eth.accounts列出可用的帳戶,并使用eth.getBalance檢查余額。
>eth.accounts>primary=eth.accounts[0]>balance=web3.fromWei(eth.getBalance(primary),“ether”);
請(qǐng)注意,返回的數(shù)字如何比我們通過designspark.json預(yù)先分配的小得多?這是因?yàn)镋ther中的平衡被返回了,而在初始化過程中,這個(gè)分配實(shí)際上是在一個(gè)名為Wei的更小的單位。.
創(chuàng)建第二個(gè)節(jié)點(diǎn)
一個(gè)只有一個(gè)節(jié)點(diǎn)的區(qū)塊鏈網(wǎng)絡(luò)沒有多大用處,所以我們將創(chuàng)建另一個(gè)節(jié)點(diǎn)。這個(gè)建議使用一臺(tái)內(nèi)存稍多的計(jì)算機(jī),例如運(yùn)行Debian / Ubuntu的筆記本電腦或臺(tái)式機(jī),因?yàn)槿绻覀兿M谀硞€(gè)時(shí)候運(yùn)行礦工,這可能是需要的。
回顧一下,涉及的步驟是:
-
安裝GETH。
-
像上面那樣運(yùn)行命令來創(chuàng)建一個(gè)新帳戶。
-
初始化使用相同的JSON配置文件。
-
像以前一樣啟動(dòng)節(jié)點(diǎn),但是這次使用不同的身份!
一旦我們完成了這個(gè)操作,節(jié)點(diǎn)已經(jīng)啟動(dòng)并放入的JavaScript控制臺(tái),我們可以再次通過以下方式檢查新帳戶及其余額:
>eth.accounts>primary=eth.accounts[0]>balance=web3.fromWei(eth.getBalance(primary),“ether”);
這次我們應(yīng)該看到我們的余額為0,因?yàn)槲覀儧]有預(yù)先分配任何資金到賬戶。
連接同伴
由于我們不希望我們的節(jié)點(diǎn)是可發(fā)現(xiàn)的,因此我們使用--nodiscover選項(xiàng)啟動(dòng)它們,這意味著我們需要一些將它們配置為對(duì)等的方式。我們可以通過創(chuàng)建一個(gè)名為靜態(tài)nodes.json的文件來實(shí)現(xiàn)這一點(diǎn),該文件位于datadir中,在我們的例子中是?/ .designspark。
首先,我們需要通過在每個(gè)系統(tǒng)上的JavaScript控制臺(tái)輸入來獲取每個(gè)節(jié)點(diǎn)的enode URL:
>admin.nodeInfo.enode然后,我們使用此信息填充靜態(tài)nodes.json文件,如下所示:
["enode://01f5ecc7c232f7571175bffc71c4e1608e1308e2ce7fd6ed3ae17d5e97e2d5253dcaa854286f99991d671788127f7902fa56d20875eabae49665a515da105047@10.100.1.196:30303","enode://5156218119a3697389a34bf0a19ceca49d9f3d06948836b8cc6c206c9f7b7081e64537eeb0f9c059561736a8e7cb6ebbe438028dd949d0f69f4cab642c11d46c@10.100.1.229:30303"]請(qǐng)注意,[::]如何被節(jié)點(diǎn)IP地址替換,并省略了?discport = 0后綴。
一旦在兩個(gè)節(jié)點(diǎn)上創(chuàng)建了這個(gè)文件,我們可以通過CTRL-d退出GETH,然后重新啟動(dòng)控制臺(tái)之后如果我們?cè)诘谝粋€(gè)節(jié)點(diǎn)上輸入:
>admin.peers我們應(yīng)該看到第二個(gè)節(jié)點(diǎn)的細(xì)節(jié)。
在第二個(gè)節(jié)點(diǎn)上重復(fù)此操作,我們應(yīng)該看到第一個(gè)節(jié)點(diǎn)的信息。
因此,現(xiàn)在我們擁有自己的私人區(qū)塊鏈網(wǎng)絡(luò),其中包含兩個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)都配有一個(gè)賬戶,其中一個(gè)配有預(yù)先分配的資金。
在本系列的第3部分中,我們將繼續(xù)與網(wǎng)絡(luò)進(jìn)行交易 - 轉(zhuǎn)移資金,執(zhí)行智能合約和挖掘以太網(wǎng)。
-
樹莓派
+關(guān)注
關(guān)注
121文章
1989瀏覽量
107309 -
區(qū)塊鏈
+關(guān)注
關(guān)注
112文章
15565瀏覽量
108228
發(fā)布評(píng)論請(qǐng)先 登錄
區(qū)塊鏈將如何優(yōu)化產(chǎn)業(yè)鏈?
【江逸老師】:以太坊為何分叉?分叉后的ETH與ETC有何區(qū)別?
區(qū)塊鏈分成兩部分, 一個(gè)是區(qū)塊,一個(gè)是鏈
用樹莓派探索以太坊 - 第1部分:入門 (繁體)
比特幣開采公司Bitfury創(chuàng)建了一個(gè)私人區(qū)塊鏈框架來推廣比特幣
基于以太坊區(qū)塊鏈的MIX項(xiàng)目介紹
用一個(gè)Hercules? LaunchPad? 開發(fā)套件控制GaN功率級(jí)—第2部分

Arduino RF 探索者機(jī)器人 —第2部分—組裝所有組件

一款用Raspberry Pi和傳感器制作的可穿戴式小型健康管理設(shè)備!第四部分?劇終篇

用Raspberry Pi和傳感器制作“可自動(dòng)營(yíng)造舒適空間的裝置” 第四部分?劇終篇

使用Crystal Signal Pi第3部分:使用Raspberry Pi創(chuàng)建警示燈解決方案—創(chuàng)建工具

使用Crystal Signal Pi第1部分—使用Raspberry Pi創(chuàng)建警示燈解決方案

基于Raspberry Pi的DIY無人機(jī)第3部分–FPV設(shè)置指南

評(píng)論