Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Geth介绍及如何运行以太坊节点

一夜雨十年灯潞
132 0 0
在本文中,我们将看看以太坊节点是什么,并探索最受欢迎的节点之一,称为Geth。/ ~% O: |' H2 d) x. B( H+ R) r$ X
为了与区块链进行通信,我们必须使用区块链客户端。客户端是能够与其他客户建立p2p通信信道,签署和广播交易,挖掘,部署和与智能合约交互等的软件。客户端通常被称为节点。* D( s# b7 l% _* C4 {6 Q
以太坊节点必须遵循的功能的正式定义在以太坊黄皮书中定义。黄皮书定义了网络上节点所需的函数,挖掘算法,私钥/公钥ECDSA参数。它定义了使节点与以太坊客户端完全兼容的全部功能。
' _0 _  O' N3 B# y& v; B基于以太坊黄皮书,任何人都能够以他们认为合适的语言创建自己的以太坊节点实现。
7 N6 K7 f/ H6 U% S* \" r这里可以看到完整的客户端列表。* O% ?: O2 Y5 ]. o* W
迄今为止最受欢迎的客户是Geth和Parity。实现的不同之处主要在于选择的编程语言:Geth使用Golang,而Parity使用Rust。; N4 j6 |$ @7 _: L1 N! U7 t1 H( Z
由于Geth是目前最受欢迎的客户端实现,我们现在将重点关注它。7 f/ T3 Z. [0 ^$ F# C0 _) m9 ?
节点类型
: h0 Y& z5 W/ K  \: t3 f5 h% E, g当你加入以太坊网络时,你可以选择运行各种类型的节点。目前的选项是:( H# q  n2 J$ H

  • ) u4 M/ M9 I/ o  \' H2 Ylight节点3 A( Q" A1 q6 i$ ?6 Y+ @

  • $ _1 m+ K* ?, Y& F3 ~4 @% N, E/ ^full节点" Y, t1 h; i5 m; q( ?

  • 6 w7 F/ J% |1 M  Q1 U8 mArchive节点2 A/ e, J% C+ E; K# |, P
    ! T7 I0 T+ ?# u" T( D0 O5 q! K
    & m; T  w3 }( c/ c- C
    Archive节点是full节点的特例,因此我们不会详细介绍它。我发现的节点类型的最佳摘要之一是在Stack Exchange上:+ V, l+ a! ]) w; Y  D1 v
    通常,我们可以将节点软件划分为两种类型:完整节点和轻(重量)节点。完整节点验证广播到网络上的块。也就是说,它们确保块中包含的交易(以及块本身)遵循以太坊规范中定义的规则。它们维护网络的当前状态(根据以太坊规范定义)。
      U' w4 `  }- w$ ?, z  F1 l* ?不遵循规则的交易和块不用于确定以太坊网络的当前状态。例如,如果A尝试向B发送100以太,但A有0个ethers,并且一个块包含此交易,则完整节点将意识到这不遵循以太坊的规则并拒绝该块为无效。特别是,智能合约的执行是交易的一个例子。每当在交易中使用智能合约(例如,发送ERC-20代币)时,所有完整节点都必须运行所有指令以确保它们到达区块链的正确的,商定的下一状态。5 u1 Y1 I3 ?, z/ ]5 Q
    到达同一个状态有多种方式。例如,如果A有101个以太,并且在一次交易中将其中的一百个给了B以支付1个以太的gas,那么最终结果将是如果A每次向B发送100个1以太的交易,每次交易支付0.01以太(无视谁收到交易费用)。要知道B现在是否允许发送100以太,就足以知道B的当前余额是多少。保留整个交易历史记录的完整节点称为完整归档节点。这些必须存在于网络上才能保持健康。( r1 v7 I# @9 K
    节点也可以选择丢弃旧数据;如果B想要向C发送100以太,那么如何获得以太并不重要,只要B的账号包含100以太。相反,轻节点不会验证每个块或交易,也可能没有当前区块链状态的副本。他们依靠完整的节点为他们提供缺失的细节(或者只是缺少特定的功能)。轻型节点的优势在于它们可以更快地启动和运行,可以在更多计算/内存受限的设备上运行,并且不会占用几乎同样多的存储空间。在缺点方面,其他节点存在信任因素(它根据客户端和概率方法/启发式方法而有所不同,可用于降低风险)。一些完整的客户端包括具有更快同步的功能(例如,Parity的warp sync)。) J' e7 T$ o& h# D- H5 K: c
    安装Geth7 c7 j" w, C3 S; n/ d! e( Z! l9 V
    可以在此处找到Geth在各种平台(Windows,macOS,Linux)上的安装说明。该列表非常全面,并且保持最新,所以我不会在文章中介绍它。' D! r1 g8 m0 o/ J5 J1 w
    运行Geth' @  y# `7 h+ q9 j9 Q" z
    为了启动Geth节点,你唯一需要做的就是转到终端窗口并运行geth。当你这样做时,你应该得到类似于这样的输出:3 k6 a- a$ T2 t# K8 w# H5 n+ [0 v
    ~ geth" h& b; P  Q- a  F% R5 K
    INFO [06-03|11:03:13] Maximum peer count                       ETH=25 LES=0 total=25! W4 Z* d0 Z- ^1 Q, t0 z, T' E
    INFO [06-03|11:03:13] Starting peer-to-peer node               instance=Geth/v1.8.10-stable/darwin-amd64/go1.10.2, j. {4 _% V" H) M% y7 j+ v6 S
    INFO [06-03|11:03:13] Allocated cache and file handles         database=/Users/mjvr/Library/Ethereum/geth/chaindata cache=768 handles=1289 |$ v9 o; W; A0 W- T) v3 m
    INFO [06-03|11:03:13] Writing default main-net genesis block
    ! i7 x0 s+ p- S0 A/ Q: xINFO [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' h. p9 T, U: d$ w2 ?5 m# r
    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}". o1 D" P2 q2 E
    INFO [06-03|11:03:14] Disk storage enabled for ethash caches   dir=/Users/mjvr/Library/Ethereum/geth/ethash count=3* V* H4 M, X- k5 N+ P
    INFO [06-03|11:03:14] Disk storage enabled for ethash DAGs     dir=/Users/mjvr/.ethash                      count=2
    3 N- y" P! C2 F' X7 W  l1 d; ~INFO [06-03|11:03:14] Initialising Ethereum protocol           versions="[63 62]" network=1) w, P0 b& e* t( B* b9 `, r
    INFO [06-03|11:03:14] Loaded most recent local header          number=0 hash=d4e567…cb8fa3 td=17179869184
    . S- }6 y# j# D: _! }INFO [06-03|11:03:14] Loaded most recent local full block      number=0 hash=d4e567…cb8fa3 td=171798691841 N4 Y; ?! ?- C& T
    INFO [06-03|11:03:14] Loaded most recent local fast block      number=0 hash=d4e567…cb8fa3 td=17179869184
    2 q0 C. y! r* @# D8 aINFO [06-03|11:03:14] Regenerated local transaction journal    transactions=0 accounts=0+ L9 e' R& \4 y! B. s, ~3 n! U
    INFO [06-03|11:03:14] Starting P2P networking# T+ O# r6 d/ H* {& v0 u1 A
    INFO [06-03|11:03:16] UDP listener up                          self=enode://a4cb08519bc2bceecb8ad421871c624d5212888653bbaee309fda960f3c87ca7aa9855ee14684d521836ae88ad1986b8ca944348e976760d2bd1247ed3ca7628@[::]:30303# g% y' _7 O2 T* L1 u' x, j& M# [+ D
    INFO [06-03|11:03:16] RLPx listener up                         self=enode://a4cb08519bc2bceecb8ad421871c624d5212888653bbaee309fda960f3c87ca7aa9855ee14684d521836ae88ad1986b8ca944348e976760d2bd1247ed3ca7628@[::]:30303
    ' R7 N- F1 q0 wINFO [06-03|11:03:16] IPC endpoint opened                      url=/Users/mjvr/Library/Ethereum/geth.ipc
    + @) \' |7 }1 i! T/ l% \在此之后,你应该看到定期出现新行,Geth说“导入新状态”或“导入新区块头”或“导入新收据”。状态,块头和交易是 Ethereum’s tree tries的一部分:必须下载它们才能使你的节点与以太坊区块链同步。" N) N( M2 k+ \+ }" C" e; [1 ~
    这个过程可能需要很长时间,因此你可以选择运行这样的轻型节点。; q- M3 f  {& z7 |) N. B
    geth --light
    9 u2 A" o2 ?$ Y6 C  ?2 HGeth现在需要做的只是拉动最新的块头并依赖其他完整节点来通过使用merkle证明来验证交易。
      O/ x: K, K/ T4 [访问Geth控制台
    1 D0 }+ T( {4 J) E7 n现在你已经创建了一个节点,你可以通过在终端中打开一个新选项卡并运行以下命令来访问它:
    7 A: Z( E, i9 ^$ {geth attach! A4 D$ I0 p) U4 U2 W( w; R
    这将把Geth控制台(一个用于与区块链通信的Javascript环境)连接到你的运行节点。这可以在完全客户端模式和轻模式下完成。6 r: L+ F; Q- `/ j$ S3 q; y. ~3 }
    打开控制台后,键入以下内容:+ R% y: j9 R3 f. W! G% Q1 K' k; E
    web3.eth.blockNumber% {: L+ s$ I% p3 R6 r
    你应该输出一个数字(例如5631487),表示以太坊网络的当前块号。: Y; g6 l( d7 A' T
    创建一个新帐户" `0 W8 G0 w3 @  j9 j; i
    要使用区块链,你需要拥有一个帐户。使用Geth,你可以通过在终端中运行以下命令来实现:
    2 U- ~& ~- }; Egeth account new
    + E4 ^0 P5 o3 L9 R( f完成后,它会询问你输入密码,以保护你的帐户。确保使用安全密码并安全存储。
    $ i2 v+ d. }- E运行geth account new时Geth所做的是更新Geth数据目录中的文件(Geth存储所有必要数据的目录,包括块和块头信息)。目录在每个平台的位置:
    6 M& v+ f, ], }" c* c: J, s3 j6 @macOS:~/Library/Ethereum2 Z- a! W: D! _5 g. z
    Linux:~/.ethereum
    + V0 H" ~$ K$ B+ s" |; kWindows:%APPDATA%\Ethereum
    0 |3 M5 U( @' `: P从其他客户端访问Geth$ \% P! U; m  m( a" u: ^5 r- E5 ^
    当你启动Geth时,客户端会自动在端口8545启动RPC服务器。你可以通过使用web3js或web3j等库连接到localhost:8545或使用curl或wget手动调用它来访问此端口上的RPC服务器及其方法。( e: n* E5 o; W, c9 B; q7 d
    要了解如何与正在运行的Geth实例(在启动你自己的区块链时是私有的,或在上面的说明中公开)的外部工具的连接,请参阅此文章。
    ( F6 V9 N% w# k8 R结论; x' v- z" b7 o. T0 m2 l5 |7 g' H
    在这篇简短的介绍中,我们介绍了Geth,以太坊节点的类型及其目的。你现在可以运行自己的Geth节点,并使用第三方工具对其进行增强。在以后的文章中,我们将介绍运行专用网络(你自己的以太网区域链与Geth)以及更多内容
  • BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
    声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    成为第一个吐槽的人

    一夜雨十年灯潞 初中生
    • 粉丝

      0

    • 关注

      7

    • 主题

      11