您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Geth分析及如何運行以太坊節(jié)點,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
為了與區(qū)塊鏈進行通信,我們必須使用區(qū)塊鏈客戶端。客戶端是能夠與其他客戶建立p2p通信信道,簽署和廣播交易,挖掘,部署和與智能合約交互等的軟件??蛻舳送ǔ1环Q為節(jié)點。
以太坊節(jié)點必須遵循的功能的正式定義在以太坊黃皮書中定義。黃皮書定義了網(wǎng)絡上節(jié)點所需的函數(shù),挖掘算法,私鑰/公鑰ECDSA參數(shù)。它定義了使節(jié)點與以太坊客戶端完全兼容的全部功能。
基于以太坊黃皮書,任何人都能夠以他們認為合適的語言創(chuàng)建自己的以太坊節(jié)點實現(xiàn)。
這里可以看到完整的客戶端列表。
迄今為止最受歡迎的客戶是Geth和Parity。實現(xiàn)的不同之處主要在于選擇的編程語言:Geth使用Golang,而Parity使用Rust。
由于Geth是目前最受歡迎的客戶端實現(xiàn),我們現(xiàn)在將重點關注它。
當你加入以太坊網(wǎng)絡時,你可以選擇運行各種類型的節(jié)點。目前的選項是:
light節(jié)點
full節(jié)點
Archive節(jié)點
Archive節(jié)點是full節(jié)點的特例,因此我們不會詳細介紹它。我發(fā)現(xiàn)的節(jié)點類型的最佳摘要之一是在Stack Exchange上:
通常,我們可以將節(jié)點軟件劃分為兩種類型:完整節(jié)點和輕(重量)節(jié)點。完整節(jié)點驗證廣播到網(wǎng)絡上的塊。也就是說,它們確保塊中包含的交易(以及塊本身)遵循以太坊規(guī)范中定義的規(guī)則。它們維護網(wǎng)絡的當前狀態(tài)(根據(jù)以太坊規(guī)范定義)。
不遵循規(guī)則的交易和塊不用于確定以太坊網(wǎng)絡的當前狀態(tài)。例如,如果A嘗試向B發(fā)送100以太,但A有0個ethers,并且一個塊包含此交易,則完整節(jié)點將意識到這不遵循以太坊的規(guī)則并拒絕該塊為無效。特別是,智能合約的執(zhí)行是交易的一個例子。每當在交易中使用智能合約(例如,發(fā)送ERC-20代幣)時,所有完整節(jié)點都必須運行所有指令以確保它們到達區(qū)塊鏈的正確的,商定的下一狀態(tài)。
到達同一個狀態(tài)有多種方式。例如,如果A有101個以太,并且在一次交易中將其中的一百個給了B以支付1個以太的gas,那么最終結果將是如果A每次向B發(fā)送100個1以太的交易,每次交易支付0.01以太(無視誰收到交易費用)。要知道B現(xiàn)在是否允許發(fā)送100以太,就足以知道B的當前余額是多少。保留整個交易歷史記錄的完整節(jié)點稱為完整歸檔節(jié)點。這些必須存在于網(wǎng)絡上才能保持健康。
節(jié)點也可以選擇丟棄舊數(shù)據(jù);如果B想要向C發(fā)送100以太,那么如何獲得以太并不重要,只要B的賬號包含100以太。相反,輕節(jié)點不會驗證每個塊或交易,也可能沒有當前區(qū)塊鏈狀態(tài)的副本。他們依靠完整的節(jié)點為他們提供缺失的細節(jié)(或者只是缺少特定的功能)。輕型節(jié)點的優(yōu)勢在于它們可以更快地啟動和運行,可以在更多計算/內存受限的設備上運行,并且不會占用幾乎同樣多的存儲空間。在缺點方面,其他節(jié)點存在信任因素(它根據(jù)客戶端和概率方法/啟發(fā)式方法而有所不同,可用于降低風險)。一些完整的客戶端包括具有更快同步的功能(例如,Parity的warp sync)。
可以在此處找到Geth在各種平臺(Windows,macOS,Linux)上的安裝說明。該列表非常全面,并且保持最新,所以我不會在文章中介紹它。
為了啟動Geth節(jié)點,你唯一需要做的就是轉到終端窗口并運行geth。當你這樣做時,你應該得到類似于這樣的輸出:
~ 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
在此之后,你應該看到定期出現(xiàn)新行,Geth說“導入新狀態(tài)”或“導入新區(qū)塊頭”或“導入新收據(jù)”。狀態(tài),塊頭和交易是 Ethereum’s tree tries的一部分:必須下載它們才能使你的節(jié)點與以太坊區(qū)塊鏈同步。
這個過程可能需要很長時間,因此你可以選擇運行這樣的輕型節(jié)點。
geth --light
Geth現(xiàn)在需要做的只是拉動最新的塊頭并依賴其他完整節(jié)點來通過使用merkle證明來驗證交易。
現(xiàn)在你已經(jīng)創(chuàng)建了一個節(jié)點,你可以通過在終端中打開一個新選項卡并運行以下命令來訪問它:
geth attach
這將把Geth控制臺(一個用于與區(qū)塊鏈通信的Javascript環(huán)境)連接到你的運行節(jié)點。這可以在完全客戶端模式和輕模式下完成。
打開控制臺后,鍵入以下內容:
web3.eth.blockNumber
你應該輸出一個數(shù)字(例如5631487),表示以太坊網(wǎng)絡的當前塊號。
要使用區(qū)塊鏈,你需要擁有一個帳戶。使用Geth,你可以通過在終端中運行以下命令來實現(xiàn):
geth account new
完成后,它會詢問你輸入密碼,以保護你的帳戶。確保使用安全密碼并安全存儲。
運行geth account new
時Geth所做的是更新Geth數(shù)據(jù)目錄中的文件(Geth存儲所有必要數(shù)據(jù)的目錄,包括塊和塊頭信息)。目錄在每個平臺的位置:
macOS:~/Library/Ethereum
Linux:~/.ethereum
Windows:%APPDATA%\Ethereum
當你啟動Geth時,客戶端會自動在端口8545
啟動RPC服務器。你可以通過使用web3js
或web3j
等庫連接到localhost:8545
或使用curl
或wget
手動調用它來訪問此端口上的RPC服務器及其方法。
關于Geth分析及如何運行以太坊節(jié)點就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。