鍍金池/ 教程/ Linux/ 公有鏈、聯(lián)盟鏈、私有鏈及網(wǎng)絡(luò)配置介紹
創(chuàng)建安全多簽名錢包及高級設(shè)置
以太坊發(fā)展歷史回顧
如何使用CPU挖礦?
導(dǎo)入預(yù)售錢包,更新、備份、恢復(fù)賬號
錢包、以太幣、Gas介紹
公有鏈、聯(lián)盟鏈、私有鏈及網(wǎng)絡(luò)配置介紹
以太坊客戶端的選擇與安裝
以太坊社區(qū)、基金會(huì)、貢獻(xiàn)者介紹
以太坊賬戶管理
什么是挖礦和Ethash算法?
如何使用Homestead文檔及以太坊路線圖
如何使用GPU和礦池挖礦?
以太坊是什么?
Web 3:去中心化應(yīng)用平臺(tái)
什么是以太幣?如何獲取?
以太坊Go、Java、Python、Ruby、JS客戶端介紹
搭建測試網(wǎng)絡(luò)和私有鏈
以太坊C++客戶端的安裝與定制(一)

公有鏈、聯(lián)盟鏈、私有鏈及網(wǎng)絡(luò)配置介紹

文章出于:http://wangxiaoming.com/blog/2016/07/06/e16/

以太坊網(wǎng)絡(luò)

去中心化共識的基礎(chǔ)是參與節(jié)點(diǎn)的點(diǎn)對點(diǎn)網(wǎng)絡(luò),節(jié)點(diǎn)維護(hù)并保證區(qū)塊鏈網(wǎng)絡(luò)的安全。參見挖礦。

以太坊網(wǎng)絡(luò)數(shù)據(jù)統(tǒng)計(jì)

EthStats.net是以太坊網(wǎng)絡(luò)實(shí)時(shí)數(shù)據(jù)的儀表板,這個(gè)儀表板展示重要信息,諸如現(xiàn)在的區(qū)塊,散表難度,gas價(jià)格和gas花費(fèi)等。頁面上顯示的節(jié)點(diǎn)只是精選了網(wǎng)絡(luò)上的實(shí)際節(jié)點(diǎn)。任何人都可以在EthStats儀表板上添加他們的節(jié)點(diǎn)。Github上的Eth-Netstats README描述了如何連接。

EtherNodes.com展示了節(jié)點(diǎn)數(shù)的當(dāng)前和歷史數(shù)據(jù)以及以太坊主網(wǎng)絡(luò)和Morden測試網(wǎng)絡(luò)上的其他信息。

當(dāng)前實(shí)時(shí)網(wǎng)絡(luò)上客戶端實(shí)現(xiàn)分配 – EtherChain上的實(shí)時(shí)數(shù)據(jù)。

公有鏈、私有鏈和聯(lián)盟鏈

當(dāng)今大多數(shù)以太坊項(xiàng)目都依靠以太坊作為公有鏈,公有鏈可以訪問到更多用戶,網(wǎng)絡(luò)節(jié)點(diǎn),貨幣和市場。然而通常有理由更偏好私有鏈或聯(lián)盟鏈(在一群值得信任的參與者中)。例如,銀行領(lǐng)域的很多公司都希望以太坊作為他們私有鏈的平臺(tái)。

以下是博客發(fā)文《關(guān)于公有鏈和私有鏈》的摘錄,它解釋了三種區(qū)塊鏈在許可方面的區(qū)別:

  • 公有鏈:世界上所有人都可以閱讀和發(fā)送交易。如果他們合法都有希望看到自己被包括在內(nèi)。世界上任何人都能參與到共識形成過程——決定在鏈條上添加什么區(qū)塊以及現(xiàn)狀是怎樣的。作為中心化或準(zhǔn)中心化信任的替代品,公有鏈?zhǔn)芗用芙?jīng)濟(jì)的保護(hù),加密經(jīng)濟(jì)是經(jīng)濟(jì)激勵(lì)和加密圖形驗(yàn)證的結(jié)合,用類似工作量證明或權(quán)益證明的機(jī)制,遵循的總原則是人們影響共識形成的程度和他們能夠影響的經(jīng)濟(jì)資源數(shù)量成正比。這類區(qū)塊鏈通常被認(rèn)為是"完全去中心化"。

  • 聯(lián)盟鏈:共識形成過程由預(yù)先選擇的一系列的節(jié)點(diǎn)所掌控,例如,設(shè)想一個(gè)有15個(gè)金融機(jī)構(gòu)的團(tuán)體,每個(gè)機(jī)構(gòu)都操作一個(gè)節(jié)點(diǎn),為了使區(qū)塊生效,其中的10個(gè)必須簽署那個(gè)區(qū)塊。閱讀區(qū)塊鏈的權(quán)利可能是公開的,或僅限于參與者,也有混合的路徑,比如區(qū)塊的根散表和應(yīng)用程序編程接口一起公開,使公共成員可以進(jìn)行一定量的查詢,重獲一部分區(qū)塊鏈狀態(tài)的加密圖形證明。這類區(qū)塊鏈被認(rèn)為是"部分去中心化"。

  • 私人區(qū)塊鏈:書寫許可對一個(gè)組織保持中心化。閱讀許可可能是公開的或者限制在任意程度。應(yīng)用很可能包含對單個(gè)公司內(nèi)部的數(shù)據(jù)庫管理,審查等,因此公共的可讀性在很多情況下根本不必要,但在另一些情況下人們又想要公共可讀性。

私有鏈/聯(lián)盟鏈可能和公有鏈毫無聯(lián)系,他們?nèi)匀煌ㄟ^投資以太坊軟件開發(fā),對以太坊整體生態(tài)系統(tǒng)有利。經(jīng)過一段時(shí)間,這會(huì)轉(zhuǎn)變成軟件改善,知識共享和工作機(jī)會(huì)。

如何連接

Geth會(huì)持續(xù)嘗試在網(wǎng)絡(luò)上連接到其他節(jié)點(diǎn),直到有了端點(diǎn)為止。如果你在路由器上有可用的UPnP或者在面向因特網(wǎng)的服務(wù)器上運(yùn)行以太坊,它也會(huì)接受其他節(jié)點(diǎn)的連接。

Geth通過發(fā)現(xiàn)協(xié)議找到對等端。在發(fā)現(xiàn)協(xié)議中,節(jié)點(diǎn)互相閑聊發(fā)現(xiàn)網(wǎng)絡(luò)上的其他節(jié)點(diǎn)。最開始,geth會(huì)使用一系列輔助程序節(jié)點(diǎn),這些輔助程序節(jié)點(diǎn)的端點(diǎn)記錄在源代碼中。

檢查連接和ENODE身份

要檢查客戶端在交互控制臺(tái)上連接了多少對等端點(diǎn),net模塊有兩個(gè)屬性可以提供信息,告訴你對等端點(diǎn)的數(shù)量以及你是否在監(jiān)聽的節(jié)點(diǎn)。

> net.listening
true
> net.peerCount
4

了解更多關(guān)于連接對等端點(diǎn)的信息,比如IP地址、端口號和支持協(xié)議,用管理員對象的peers()功能。admin.peers()會(huì)返回到現(xiàn)在已連接的對等端點(diǎn)列表。

> admin.peers
[{
ID: 'a4de274d3a159e10c2c9a68c326511236381b84c9ec52e72ad732eb0b2b1a2277938f78593cdbe734e6002bf23114d434a085d260514ab336d4acdc312db671b',
Name: 'Geth/v0.9.14/linux/go1.4.2',
Caps: 'eth/60',
RemoteAddress: '5.9.150.40:30301',
LocalAddress: '192.168.0.28:39219'
}, {
ID: 'a979fb575495b8d6db44f750317d0f4622bf4c2aa3365d6af7c284339968eef29b69ad0dce72a4d8db5ebb4968de0e3bec910127f134779fbcb0cb6d3331163c',
Name: 'Geth/v0.9.15/linux/go1.4.2',
Caps: 'eth/60',
RemoteAddress: '52.16.188.185:30303',
LocalAddress: '192.168.0.28:50995'
}, {
ID: 'f6ba1f1d9241d48138136ccf5baa6c2c8b008435a1c2bd009ca52fb8edbbc991eba36376beaee9d45f16d5dcbf2ed0bc23006c505d57ffcf70921bd94aa7a172',
Name: 'pyethapp_dd52/v0.9.13/linux2/py2.7.9',
Caps: 'eth/60, p2p/3',
RemoteAddress: '144.76.62.101:30303',
LocalAddress: '192.168.0.28:40454'
}, {
ID: 'f4642fa65af50cfdea8fa7414a5def7bb7991478b768e296f5e4a54e8b995de102e0ceae2e826f293c481b5325f89be6d207b003382e18a8ecba66fbaf6416c0',
Name: '++eth/Zeppelin/Rascal/v0.9.14/Release/Darwin/clang/int',
Caps: 'eth/60, shh/2',
RemoteAddress: '129.16.191.64:30303',
LocalAddress: '192.168.0.28:39705'
} ]

要檢查geth使用的端口,發(fā)現(xiàn)你自己的enode URI 執(zhí)行:

> admin.nodeInfo
{
Name: 'Geth/v0.9.14/darwin/go1.4.2',
NodeUrl: 'enode://3414c01c19aa75a34f2dbd2f8d0898dc79d6b219ad77f8155abf1a287ce2ba60f14998a3a98c0cf14915eabfdacf914a92b27a01769de18fa2d049dbf4c17694@[::]:30303',
NodeID: '3414c01c19aa75a34f2dbd2f8d0898dc79d6b219ad77f8155abf1a287ce2ba60f14998a3a98c0cf14915eabfdacf914a92b27a01769de18fa2d049dbf4c17694',
IP: '::',
DiscPort: 30303,
TCPPort: 30303,
Td: '2044952618444',
ListenAddr: '[::]:30303'
}

更快下載區(qū)塊鏈

啟動(dòng)以太坊客戶端時(shí),會(huì)自動(dòng)下載以太坊區(qū)塊鏈。用于下載以太坊區(qū)塊鏈的時(shí)間會(huì)根據(jù)客戶端、客戶端設(shè)置、連接速度和可用的端點(diǎn)數(shù)量變化。下面是更快獲取以太坊區(qū)塊鏈的一些選項(xiàng)。

使用geth

如果你在用geth客戶端,你可以做些什么來加速下載以太坊區(qū)塊的時(shí)間。如果你用—fast標(biāo)志來執(zhí)行以太坊快速同步,不會(huì)保留過去的交易數(shù)據(jù)。

注意:你不能在執(zhí)行所有或者部分正常的同步操作之后再使用這個(gè)標(biāo)志,也就是說在用這個(gè)指令之前,不能下載以太坊區(qū)塊鏈的任何部分。查看這個(gè)Ethereum Stack.Exchange answer了解更多。

下面是想要更快同步客戶端時(shí)使用的一些標(biāo)志。

  • fast

這個(gè)標(biāo)志使通過狀態(tài)下載而不是下載整個(gè)區(qū)塊數(shù)據(jù)來實(shí)現(xiàn)快速同步成為可能。這樣也能大幅減少區(qū)塊鏈尺寸。注意:—fast只在從頭開始同步區(qū)塊鏈,并且是出于安全原因第一次下載區(qū)塊鏈時(shí),才會(huì)運(yùn)行。查看Reddit發(fā)文了解更多。

  • cache=1024

分配到內(nèi)部緩存的千兆內(nèi)存(最少 16MB / 數(shù)據(jù)庫)。默認(rèn)是16MB,所以根據(jù)你電腦內(nèi)存多少,增加到256, 512, 1024 (1GB)或者2048 (2GB)會(huì)帶來不同。

  • jitvm 這個(gè)標(biāo)志可以激活JIT VM。

完整的控制臺(tái)命令示例:

geth --fast --cache=1024 --jitvm console

了解更多關(guān)于快速同步和區(qū)塊鏈下載次數(shù)的討論,查看這篇Reddit發(fā)文。

導(dǎo)出/導(dǎo)入?yún)^(qū)塊鏈

如果你已經(jīng)同步了整個(gè)以太坊節(jié)點(diǎn),可以從完全同步的節(jié)點(diǎn)中導(dǎo)出區(qū)塊鏈數(shù)據(jù)并將其導(dǎo)入新節(jié)點(diǎn)。你可以在geth中用geth export filename指令導(dǎo)出所有節(jié)點(diǎn),并用geth import filename將區(qū)塊鏈導(dǎo)入節(jié)點(diǎn),來實(shí)現(xiàn)這一目的。

靜態(tài)節(jié)點(diǎn),信任節(jié)點(diǎn)和啟動(dòng)節(jié)點(diǎn)

Geth支持一個(gè)叫靜態(tài)節(jié)點(diǎn)的特征,如果你有特定的端點(diǎn),你會(huì)一直想與靜態(tài)節(jié)點(diǎn)連接。如果斷開連接,靜態(tài)節(jié)點(diǎn)會(huì)再次連接。你可以配置永久性靜態(tài)節(jié)點(diǎn),方法是將如下所說的放進(jìn)/static-nodes.json(這應(yīng)該是和chaindata以及keystone在同一個(gè)文件夾)

[
"enode://f4642fa65af50cfdea8fa7414a5def7bb7991478b768e296f5e4a54e8b995de102e0ceae2e826f293c481b5325f89be6d207b003382e18a8ecba66fbaf6416c0@33.4.2.1:30303",
"enode://pubkey@ip:port"
]

你也可以在運(yùn)行期間通過Javascript使用admin.addPeer()加入靜態(tài)節(jié)點(diǎn)。

> admin.addPeer("enode://f4642fa65af50cfdea8fa7414a5def7bb7991478b768e296f5e4a54e8b995de102e0ceae

連接的常見問題

有時(shí)候可能無法連接,最常見的原因有:

  • 本地時(shí)間不正確。要參與到以太坊網(wǎng)絡(luò)中,需要精確的時(shí)鐘。檢查OS如何同步時(shí)鐘(例如sudo ntpdate -s time.nist.gov),即便只快了12秒也有可能導(dǎo)致0端點(diǎn)。

  • 有的防火墻配置可能會(huì)阻止UDP流通??梢杂渺o態(tài)節(jié)點(diǎn)功能或者控制臺(tái)上的admin.addPeer() 來手動(dòng)配置連接。

不使用發(fā)現(xiàn)協(xié)議來啟動(dòng)geth,你可以用—nodiscover參數(shù)。你只會(huì)在運(yùn)行測試節(jié)點(diǎn)或有固定節(jié)點(diǎn)的實(shí)驗(yàn)測試網(wǎng)絡(luò)時(shí)才想要這樣做。