Geth介紹及如何運(yùn)行以太坊節(jié)點(diǎn)

在本文中,我們將看看以太坊節(jié)點(diǎn)是什么,并探索最受歡迎的節(jié)點(diǎn)之一,稱為Geth。

為了與區(qū)塊鏈進(jìn)行通信,我們必須使用區(qū)塊鏈客戶端??蛻舳耸悄軌蚺c其他客戶建立p2p通信信道,簽署和廣播交易,挖掘,部署和與智能合約交互等的軟件??蛻舳送ǔ1环Q為節(jié)點(diǎn)。

以太坊節(jié)點(diǎn)必須遵循的功能的正式定義在以太坊黃皮書中定義。黃皮書定義了網(wǎng)絡(luò)上節(jié)點(diǎn)所需的函數(shù),挖掘算法,私鑰/公鑰ECDSA參數(shù)。它定義了使節(jié)點(diǎn)與以太坊客戶端完全兼容的全部功能。

基于以太坊黃皮書,任何人都能夠以他們認(rèn)為合適的語言創(chuàng)建自己的以太坊節(jié)點(diǎn)實(shí)現(xiàn)。

這里可以看到完整的客戶端列表

迄今為止最受歡迎的客戶是GethParity。實(shí)現(xiàn)的不同之處主要在于選擇的編程語言:Geth使用Golang,而Parity使用Rust。

由于Geth是目前最受歡迎的客戶端實(shí)現(xiàn),我們現(xiàn)在將重點(diǎn)關(guān)注它。

節(jié)點(diǎn)類型

當(dāng)你加入以太坊網(wǎng)絡(luò)時(shí),你可以選擇運(yùn)行各種類型的節(jié)點(diǎn)。目前的選項(xiàng)是:

  • light節(jié)點(diǎn)
  • full節(jié)點(diǎn)
  • Archive節(jié)點(diǎn)

Archive節(jié)點(diǎn)是full節(jié)點(diǎn)的特例,因此我們不會詳細(xì)介紹它。我發(fā)現(xiàn)的節(jié)點(diǎn)類型的最佳摘要之一是在Stack Exchange上:

通常,我們可以將節(jié)點(diǎn)軟件劃分為兩種類型:完整節(jié)點(diǎn)和輕(重量)節(jié)點(diǎn)。完整節(jié)點(diǎn)驗(yàn)證廣播到網(wǎng)絡(luò)上的塊。也就是說,它們確保塊中包含的交易(以及塊本身)遵循以太坊規(guī)范中定義的規(guī)則。它們維護(hù)網(wǎng)絡(luò)的當(dāng)前狀態(tài)(根據(jù)以太坊規(guī)范定義)。

不遵循規(guī)則的交易和塊不用于確定以太坊網(wǎng)絡(luò)的當(dāng)前狀態(tài)。例如,如果A嘗試向B發(fā)送100以太,但A有0個(gè)ethers,并且一個(gè)塊包含此交易,則完整節(jié)點(diǎn)將意識到這不遵循以太坊的規(guī)則并拒絕該塊為無效。特別是,智能合約的執(zhí)行是交易的一個(gè)例子。每當(dāng)在交易中使用智能合約(例如,發(fā)送ERC-20代幣)時(shí),所有完整節(jié)點(diǎn)都必須運(yùn)行所有指令以確保它們到達(dá)區(qū)塊鏈的正確的,商定的下一狀態(tài)。

到達(dá)同一個(gè)狀態(tài)有多種方式。例如,如果A有101個(gè)以太,并且在一次交易中將其中的一百個(gè)給了B以支付1個(gè)以太的gas,那么最終結(jié)果將是如果A每次向B發(fā)送100個(gè)1以太的交易,每次交易支付0.01以太(無視誰收到交易費(fèi)用)。要知道B現(xiàn)在是否允許發(fā)送100以太,就足以知道B的當(dāng)前余額是多少。保留整個(gè)交易歷史記錄的完整節(jié)點(diǎn)稱為完整歸檔節(jié)點(diǎn)。這些必須存在于網(wǎng)絡(luò)上才能保持健康。

節(jié)點(diǎn)也可以選擇丟棄舊數(shù)據(jù);如果B想要向C發(fā)送100以太,那么如何獲得以太并不重要,只要B的賬號包含100以太。相反,輕節(jié)點(diǎn)不會驗(yàn)證每個(gè)塊或交易,也可能沒有當(dāng)前區(qū)塊鏈狀態(tài)的副本。他們依靠完整的節(jié)點(diǎn)為他們提供缺失的細(xì)節(jié)(或者只是缺少特定的功能)。輕型節(jié)點(diǎn)的優(yōu)勢在于它們可以更快地啟動和運(yùn)行,可以在更多計(jì)算/內(nèi)存受限的設(shè)備上運(yùn)行,并且不會占用幾乎同樣多的存儲空間。在缺點(diǎn)方面,其他節(jié)點(diǎn)存在信任因素(它根據(jù)客戶端和概率方法/啟發(fā)式方法而有所不同,可用于降低風(fēng)險(xiǎn))。一些完整的客戶端包括具有更快同步的功能(例如,Parity的warp sync)。

安裝Geth

可以在此處找到Geth在各種平臺(Windows,macOS,Linux)上的安裝說明。該列表非常全面,并且保持最新,所以我不會在文章中介紹它。

運(yùn)行Geth

為了啟動Geth節(jié)點(diǎn),你唯一需要做的就是轉(zhuǎn)到終端窗口并運(yùn)行g(shù)eth。當(dāng)你這樣做時(shí),你應(yīng)該得到類似于這樣的輸出:

~ geth
INFO [06-03|11:03:13] Maximum peer count                       ETH=25 LES=0 total=25
INFO [06-03|11:03:13] Starting peer-to-peer node               instance=Geth/v1.8.10-stable/darwin-amd64/go1.10.2
INFO [06-03|11:03:13] Allocated cache and file handles         database=/Users/mjvr/Library/Ethereum/geth/chaindata cache=768 handles=128
INFO [06-03|11:03:13] Writing default main-net genesis block
INFO [06-03|11:03:14] Persisted trie from memory database      nodes=12356 size=2.34mB time=48.31016ms gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B
INFO [06-03|11:03:14] Initialised chain configuration          config="{ChainID: 1 Homestead: 1150000 DAO: 1920000 DAOSupport: true EIP150: 2463000 EIP155: 2675000 EIP158: 2675000 Byzantium: 4370000 Constantinople: <nil> Engine: ethash}"
INFO [06-03|11:03:14] Disk storage enabled for ethash caches   dir=/Users/mjvr/Library/Ethereum/geth/ethash count=3
INFO [06-03|11:03:14] Disk storage enabled for ethash DAGs     dir=/Users/mjvr/.ethash                      count=2
INFO [06-03|11:03:14] Initialising Ethereum protocol           versions="[63 62]" network=1
INFO [06-03|11:03:14] Loaded most recent local header          number=0 hash=d4e567…cb8fa3 td=17179869184
INFO [06-03|11:03:14] Loaded most recent local full block      number=0 hash=d4e567…cb8fa3 td=17179869184
INFO [06-03|11:03:14] Loaded most recent local fast block      number=0 hash=d4e567…cb8fa3 td=17179869184
INFO [06-03|11:03:14] Regenerated local transaction journal    transactions=0 accounts=0
INFO [06-03|11:03:14] Starting P2P networking
INFO [06-03|11:03:16] UDP listener up                          self=enode://a4cb08519bc2bceecb8ad421871c624d5212888653bbaee309fda960f3c87ca7aa9855ee14684d521836ae88ad1986b8ca944348e976760d2bd1247ed3ca7628@[::]:30303
INFO [06-03|11:03:16] RLPx listener up                         self=enode://a4cb08519bc2bceecb8ad421871c624d5212888653bbaee309fda960f3c87ca7aa9855ee14684d521836ae88ad1986b8ca944348e976760d2bd1247ed3ca7628@[::]:30303
INFO [06-03|11:03:16] IPC endpoint opened                      url=/Users/mjvr/Library/Ethereum/geth.ipc

在此之后,你應(yīng)該看到定期出現(xiàn)新行,Geth說“導(dǎo)入新狀態(tài)”或“導(dǎo)入新區(qū)塊頭”或“導(dǎo)入新收據(jù)”。狀態(tài),塊頭和交易是 Ethereum’s tree tries的一部分:必須下載它們才能使你的節(jié)點(diǎn)與以太坊區(qū)塊鏈同步。

這個(gè)過程可能需要很長時(shí)間,因此你可以選擇運(yùn)行這樣的輕型節(jié)點(diǎn)。

geth --light

Geth現(xiàn)在需要做的只是拉動最新的塊頭并依賴其他完整節(jié)點(diǎn)來通過使用merkle證明來驗(yàn)證交易。

訪問Geth控制臺

現(xiàn)在你已經(jīng)創(chuàng)建了一個(gè)節(jié)點(diǎn),你可以通過在終端中打開一個(gè)新選項(xiàng)卡并運(yùn)行以下命令來訪問它:

geth attach

這將把Geth控制臺(一個(gè)用于與區(qū)塊鏈通信的Javascript環(huán)境)連接到你的運(yùn)行節(jié)點(diǎn)。這可以在完全客戶端模式和輕模式下完成。

打開控制臺后,鍵入以下內(nèi)容:

web3.eth.blockNumber

你應(yīng)該輸出一個(gè)數(shù)字(例如5631487),表示以太坊網(wǎng)絡(luò)的當(dāng)前塊號。

創(chuàng)建一個(gè)新帳戶

要使用區(qū)塊鏈,你需要擁有一個(gè)帳戶。使用Geth,你可以通過在終端中運(yùn)行以下命令來實(shí)現(xiàn):

geth account new

完成后,它會詢問你輸入密碼,以保護(hù)你的帳戶。確保使用安全密碼并安全存儲。

運(yùn)行geth account new時(shí)Geth所做的是更新Geth數(shù)據(jù)目錄中的文件(Geth存儲所有必要數(shù)據(jù)的目錄,包括塊和塊頭信息)。目錄在每個(gè)平臺的位置:

  • macOS:~/Library/Ethereum
  • Linux:~/.ethereum
  • Windows:%APPDATA%\Ethereum

從其他客戶端訪問Geth

當(dāng)你啟動Geth時(shí),客戶端會自動在端口8545啟動RPC服務(wù)器。你可以通過使用web3jsweb3j等庫連接到localhost:8545或使用curlwget手動調(diào)用它來訪問此端口上的RPC服務(wù)器及其方法

要了解如何與正在運(yùn)行的Geth實(shí)例(在啟動你自己的區(qū)塊鏈時(shí)是私有的,或在上面的說明中公開)的外部工具的連接,請參閱此文章。

結(jié)論

在這篇簡短的介紹中,我們介紹了Geth,以太坊節(jié)點(diǎn)的類型及其目的。你現(xiàn)在可以運(yùn)行自己的Geth節(jié)點(diǎn),并使用第三方工具對其進(jìn)行增強(qiáng)。在以后的文章中,我們將介紹運(yùn)行專用網(wǎng)絡(luò)(你自己的以太網(wǎng)區(qū)域鏈與Geth)以及更多內(nèi)容。

======================================================================

分享一些以太坊、EOS、比特幣等區(qū)塊鏈相關(guān)的交互式在線編程實(shí)戰(zhàn)教程:

  • java以太坊開發(fā)教程,主要是針對java和android程序員進(jìn)行區(qū)塊鏈以太坊開發(fā)的web3j詳解。
  • python以太坊,主要是針對python工程師使用web3.py進(jìn)行區(qū)塊鏈以太坊開發(fā)的詳解。
  • php以太坊,主要是介紹使用php進(jìn)行智能合約開發(fā)交互,進(jìn)行賬號創(chuàng)建、交易、轉(zhuǎn)賬、代幣開發(fā)以及過濾器和交易等內(nèi)容。
  • 以太坊入門教程,主要介紹智能合約與dapp應(yīng)用開發(fā),適合入門。
  • 以太坊開發(fā)進(jìn)階教程,主要是介紹使用node.js、mongodb、區(qū)塊鏈、ipfs實(shí)現(xiàn)去中心化電商DApp實(shí)戰(zhàn),適合進(jìn)階。
  • C#以太坊,主要講解如何使用C#開發(fā)基于.Net的以太坊應(yīng)用,包括賬戶管理、狀態(tài)與交易、智能合約開發(fā)與交互、過濾器和交易等。
  • EOS教程,本課程幫助你快速入門EOS區(qū)塊鏈去中心化應(yīng)用的開發(fā),內(nèi)容涵蓋EOS工具鏈、賬戶與錢包、發(fā)行代幣、智能合約開發(fā)與部署、使用代碼與智能合約交互等核心知識點(diǎn),最后綜合運(yùn)用各知識點(diǎn)完成一個(gè)便簽DApp的開發(fā)。
  • java比特幣開發(fā)教程,本課程面向初學(xué)者,內(nèi)容即涵蓋比特幣的核心概念,例如區(qū)塊鏈存儲、去中心化共識機(jī)制、密鑰與腳本、交易與UTXO等,同時(shí)也詳細(xì)講解如何在Java代碼中集成比特幣支持功能,例如創(chuàng)建地址、管理錢包、構(gòu)造裸交易等,是Java工程師不可多得的比特幣開發(fā)學(xué)習(xí)課程。
  • php比特幣開發(fā)教程,本課程面向初學(xué)者,內(nèi)容即涵蓋比特幣的核心概念,例如區(qū)塊鏈存儲、去中心化共識機(jī)制、密鑰與腳本、交易與UTXO等,同時(shí)也詳細(xì)講解如何在Php代碼中集成比特幣支持功能,例如創(chuàng)建地址、管理錢包、構(gòu)造裸交易等,是Php工程師不可多得的比特幣開發(fā)學(xué)習(xí)課程。
  • tendermint區(qū)塊鏈開發(fā)詳解,本課程適合希望使用tendermint進(jìn)行區(qū)塊鏈開發(fā)的工程師,課程內(nèi)容即包括tendermint應(yīng)用開發(fā)模型中的核心概念,例如ABCI接口、默克爾樹、多版本狀態(tài)庫等,也包括代幣發(fā)行等豐富的實(shí)操代碼,是go語言工程師快速入門區(qū)塊鏈開發(fā)的最佳選擇。

匯智網(wǎng)原創(chuàng)翻譯,轉(zhuǎn)載請標(biāo)明出處。這里是原文Geth介紹及如何運(yùn)行以太坊節(jié)點(diǎn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容