• <option id="cacee"><noscript id="cacee"></noscript></option>
  • <table id="cacee"><noscript id="cacee"></noscript></table>
  • <td id="cacee"></td>
  • <option id="cacee"></option>
  • <table id="cacee"></table>
  • <option id="cacee"><option id="cacee"></option></option>
  • <table id="cacee"><source id="cacee"></source></table><td id="cacee"><rt id="cacee"></rt></td>
    <option id="cacee"><option id="cacee"></option></option>
     找回密碼
     立即注冊

    掃一掃,登錄網站

    首頁 自媒體 查看內容
    • 6917
    • 1
    • 分享到

    Geth介紹及如何運行以太坊節點

    2018-12-20 11:19

    來源: blockchainbrother

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


    為了與區塊鏈進行通信,我們必須使用區塊鏈客戶端。客戶端是能夠與其他客戶建立p2p通信信道,簽署和廣播交易,挖掘,部署和與智能合約交互等的軟件。客戶端通常被稱為節點。


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


    基于以太坊黃皮書,任何人都能夠以他們認為合適的語言創建自己的以太坊節點實現。


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


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


    由于Geth是目前最受歡迎的客戶端實現,我們現在將重點關注它。

    節點類型


    當你加入以太坊網絡時,你可以選擇運行各種類型的節點。目前的選項是:


    • light節點

    • full節點

    • Archive節點


    Archive節點是full節點的特例,因此我們不會詳細介紹它。我發現的節點類型的最佳摘要之一是在Stack Exchange上:


    通常,我們可以將節點軟件劃分為兩種類型:完整節點和輕(重量)節點。完整節點驗證廣播到網絡上的塊。也就是說,它們確保塊中包含的交易(以及塊本身)遵循以太坊規范中定義的規則。它們維護網絡的當前狀態(根據以太坊規范定義)。


    不遵循規則的交易和塊不用于確定以太坊網絡的當前狀態。例如,如果A嘗試向B發送100以太,但A有0個ethers,并且一個塊包含此交易,則完整節點將意識到這不遵循以太坊的規則并拒絕該塊為無效。特別是,智能合約的執行是交易的一個例子。每當在交易中使用智能合約(例如,發送ERC-20代幣)時,所有完整節點都必須運行所有指令以確保它們到達區塊鏈的正確的,商定的下一狀態。


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


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

    安裝Geth


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

    運行Geth


    為了啟動Geth節點,你唯一需要做的就是轉到終端窗口并運行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: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

    在此之后,你應該看到定期出現新行,Geth說“導入新狀態”或“導入新區塊頭”或“導入新收據”。狀態,塊頭和交易是 Ethereum’s tree tries的一部分:必須下載它們才能使你的節點與以太坊區塊鏈同步。


    這個過程可能需要很長時間,因此你可以選擇運行這樣的輕型節點。


    geth --light

    Geth現在需要做的只是拉動最新的塊頭并依賴其他完整節點來通過使用merkle證明來驗證交易。

    訪問Geth控制臺


    現在你已經創建了一個節點,你可以通過在終端中打開一個新選項卡并運行以下命令來訪問它:


    geth attach

    這將把Geth控制臺(一個用于與區塊鏈通信的Javascript環境)連接到你的運行節點。這可以在完全客戶端模式和輕模式下完成。


    打開控制臺后,鍵入以下內容:


    web3.eth.blockNumber

    你應該輸出一個數字(例如5631487),表示以太坊網絡的當前塊號。

    創建一個新帳戶


    要使用區塊鏈,你需要擁有一個帳戶。使用Geth,你可以通過在終端中運行以下命令來實現:


    geth account new

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


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


    • macOS:~/Library/Ethereum

    • Linux:~/.ethereum

    • Windows:%APPDATA%\Ethereum

    從其他客戶端訪問Geth


    當你啟動Geth時,客戶端會自動在端口8545啟動RPC服務器。你可以通過使用web3js或web3j等庫連接到localhost:8545或使用curl或wget手動調用它來訪問此端口上的RPC服務器及其方法。


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

    結論


    在這篇簡短的介紹中,我們介紹了Geth,以太坊節點的類型及其目的。你現在可以運行自己的Geth節點,并使用第三方工具對其進行增強。在以后的文章中,我們將介紹運行專用網絡(你自己的以太網區域鏈與Geth)以及更多內容。

    版權申明:本內容來自于互聯網,屬第三方匯集推薦平臺。本文的版權歸原作者所有,文章言論不代表鏈門戶的觀點,鏈門戶不承擔任何法律責任。如有侵權請聯系QQ:3341927519進行反饋。
    相關新聞
    發表評論

    請先 注冊/登錄 后參與評論

      回頂部
    • <option id="cacee"><noscript id="cacee"></noscript></option>
    • <table id="cacee"><noscript id="cacee"></noscript></table>
    • <td id="cacee"></td>
    • <option id="cacee"></option>
    • <table id="cacee"></table>
    • <option id="cacee"><option id="cacee"></option></option>
    • <table id="cacee"><source id="cacee"></source></table><td id="cacee"><rt id="cacee"></rt></td>
      <option id="cacee"><option id="cacee"></option></option>
      妖精视频