Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
在本文中,我们将看看以太坊节点是什么,并探索最受欢迎的节点之一,称为Geth。
6 J0 T- F% D1 u& ]# S为了与区块链进行通信,我们必须使用区块链客户端。客户端是能够与其他客户建立p2p通信信道,签署和广播交易,挖掘,部署和与智能合约交互等的软件。客户端通常被称为节点。
# z& S- A3 [, k6 d( F以太坊节点必须遵循的功能的正式定义在以太坊黄皮书中定义。黄皮书定义了网络上节点所需的函数,挖掘算法,私钥/公钥ECDSA参数。它定义了使节点与以太坊客户端完全兼容的全部功能。
: U* j) @8 z) Y基于以太坊黄皮书,任何人都能够以他们认为合适的语言创建自己的以太坊节点实现。  I; L" T7 y' @2 z0 w5 Y
这里可以看到完整的客户端列表。
" f: @3 i" N  p2 t) F迄今为止最受欢迎的客户是Geth和Parity。实现的不同之处主要在于选择的编程语言:Geth使用Golang,而Parity使用Rust。( T2 Z8 f8 A1 D1 ^# m9 R
由于Geth是目前最受欢迎的客户端实现,我们现在将重点关注它。
3 p3 x8 i- i* s! P7 ?% V: |$ P7 p, S节点类型' B6 j; v/ r9 m! u! ]
当你加入以太坊网络时,你可以选择运行各种类型的节点。目前的选项是:
9 M4 K; c3 ^4 h3 R8 p

  •   B+ [: U8 Z$ t, `/ \# s9 Alight节点
    8 g8 j: X& }9 q& C& u5 L" F3 g" f: l
  • ' x5 J! t6 e' o1 {1 k& g9 y; Z
    full节点
    + ^  p* b- p" l" G) e

  • / t6 ~) O9 V4 V9 @7 z) w. fArchive节点2 U7 m9 M' ^9 Z) _

    - T9 Z; t( K/ J9 J
    ( s. _5 G; N% w& J7 H$ S" @! v( L
    Archive节点是full节点的特例,因此我们不会详细介绍它。我发现的节点类型的最佳摘要之一是在Stack Exchange上:
    9 ]. I/ o* @4 b% e5 ^1 N6 t8 F2 t2 U( G通常,我们可以将节点软件划分为两种类型:完整节点和轻(重量)节点。完整节点验证广播到网络上的块。也就是说,它们确保块中包含的交易(以及块本身)遵循以太坊规范中定义的规则。它们维护网络的当前状态(根据以太坊规范定义)。6 _: x! C$ ~! G
    不遵循规则的交易和块不用于确定以太坊网络的当前状态。例如,如果A尝试向B发送100以太,但A有0个ethers,并且一个块包含此交易,则完整节点将意识到这不遵循以太坊的规则并拒绝该块为无效。特别是,智能合约的执行是交易的一个例子。每当在交易中使用智能合约(例如,发送ERC-20代币)时,所有完整节点都必须运行所有指令以确保它们到达区块链的正确的,商定的下一状态。: _: m4 K* w' L
    到达同一个状态有多种方式。例如,如果A有101个以太,并且在一次交易中将其中的一百个给了B以支付1个以太的gas,那么最终结果将是如果A每次向B发送100个1以太的交易,每次交易支付0.01以太(无视谁收到交易费用)。要知道B现在是否允许发送100以太,就足以知道B的当前余额是多少。保留整个交易历史记录的完整节点称为完整归档节点。这些必须存在于网络上才能保持健康。& I7 A* H. [0 G
    节点也可以选择丢弃旧数据;如果B想要向C发送100以太,那么如何获得以太并不重要,只要B的账号包含100以太。相反,轻节点不会验证每个块或交易,也可能没有当前区块链状态的副本。他们依靠完整的节点为他们提供缺失的细节(或者只是缺少特定的功能)。轻型节点的优势在于它们可以更快地启动和运行,可以在更多计算/内存受限的设备上运行,并且不会占用几乎同样多的存储空间。在缺点方面,其他节点存在信任因素(它根据客户端和概率方法/启发式方法而有所不同,可用于降低风险)。一些完整的客户端包括具有更快同步的功能(例如,Parity的warp sync)。; d& T3 W5 E. C2 v+ e5 v5 o: \
    安装Geth
    $ X& c& |: Z6 H: H4 _" E可以在此处找到Geth在各种平台(Windows,macOS,Linux)上的安装说明。该列表非常全面,并且保持最新,所以我不会在文章中介绍它。5 G8 S9 ^, Y6 r3 l9 E# _
    运行Geth
    + Y8 y1 n: u7 Q5 X( b/ ?1 ]. r% J为了启动Geth节点,你唯一需要做的就是转到终端窗口并运行geth。当你这样做时,你应该得到类似于这样的输出:
      `9 h' z' c6 W4 u' c~ geth  a* q4 ?# L3 a1 a2 P5 d$ R
    INFO [06-03|11:03:13] Maximum peer count                       ETH=25 LES=0 total=25! g: a/ F7 D/ A+ k3 _, }
    INFO [06-03|11:03:13] Starting peer-to-peer node               instance=Geth/v1.8.10-stable/darwin-amd64/go1.10.2
    1 J7 _* G3 {* G% ]  H' S! VINFO [06-03|11:03:13] Allocated cache and file handles         database=/Users/mjvr/Library/Ethereum/geth/chaindata cache=768 handles=1280 F% a, [* x/ i5 @  F) k* s
    INFO [06-03|11:03:13] Writing default main-net genesis block+ \: R: p: _( p! |. V3 L
    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
    4 D( W1 R/ |. |  ?( S2 EINFO [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}"2 O' C! l$ h  d: `
    INFO [06-03|11:03:14] Disk storage enabled for ethash caches   dir=/Users/mjvr/Library/Ethereum/geth/ethash count=3
    % f2 z5 C! x* m5 `* t( a% GINFO [06-03|11:03:14] Disk storage enabled for ethash DAGs     dir=/Users/mjvr/.ethash                      count=2
    3 I! k! b1 Y9 UINFO [06-03|11:03:14] Initialising Ethereum protocol           versions="[63 62]" network=1/ g6 o0 ]* c/ Z  w6 m* X8 v9 R
    INFO [06-03|11:03:14] Loaded most recent local header          number=0 hash=d4e567…cb8fa3 td=17179869184" l5 E3 Z  H! O4 R( D3 Q! s
    INFO [06-03|11:03:14] Loaded most recent local full block      number=0 hash=d4e567…cb8fa3 td=171798691848 a% J, \9 `/ A; c9 s
    INFO [06-03|11:03:14] Loaded most recent local fast block      number=0 hash=d4e567…cb8fa3 td=171798691848 F0 p, I2 a- f5 S
    INFO [06-03|11:03:14] Regenerated local transaction journal    transactions=0 accounts=0
    7 T; G$ ~% r+ _/ w0 ^INFO [06-03|11:03:14] Starting P2P networking
    : b! K% w3 W8 z2 S: ^8 }8 c& CINFO [06-03|11:03:16] UDP listener up                          self=enode://a4cb08519bc2bceecb8ad421871c624d5212888653bbaee309fda960f3c87ca7aa9855ee14684d521836ae88ad1986b8ca944348e976760d2bd1247ed3ca7628@[::]:30303
    : {, e8 {" J2 e6 c* C! G- j- |9 U% kINFO [06-03|11:03:16] RLPx listener up                         self=enode://a4cb08519bc2bceecb8ad421871c624d5212888653bbaee309fda960f3c87ca7aa9855ee14684d521836ae88ad1986b8ca944348e976760d2bd1247ed3ca7628@[::]:30303& Y+ \6 e. Y1 k7 G) \+ n
    INFO [06-03|11:03:16] IPC endpoint opened                      url=/Users/mjvr/Library/Ethereum/geth.ipc2 R* A: K7 h' `) v8 S. Q
    在此之后,你应该看到定期出现新行,Geth说“导入新状态”或“导入新区块头”或“导入新收据”。状态,块头和交易是 Ethereum’s tree tries的一部分:必须下载它们才能使你的节点与以太坊区块链同步。) T/ F% B+ ~. x7 m3 @  v
    这个过程可能需要很长时间,因此你可以选择运行这样的轻型节点。% n/ ~4 f2 l8 N% x" @
    geth --light
    # ]- o% V0 C5 e0 b7 C3 r/ J0 \Geth现在需要做的只是拉动最新的块头并依赖其他完整节点来通过使用merkle证明来验证交易。1 h7 q  b: ]+ j; ~1 [$ L
    访问Geth控制台3 A% p6 Y5 a/ v, o* k9 a; r% q7 L
    现在你已经创建了一个节点,你可以通过在终端中打开一个新选项卡并运行以下命令来访问它:
    " ^$ ]: |8 f7 Kgeth attach1 H% \6 o/ {! ^& m  k% T
    这将把Geth控制台(一个用于与区块链通信的Javascript环境)连接到你的运行节点。这可以在完全客户端模式和轻模式下完成。' s% {, C/ T5 H+ |5 \
    打开控制台后,键入以下内容:0 N* @5 v$ @7 N) C( _. T
    web3.eth.blockNumber" d, s* J3 E$ l. N- ^4 j5 {* Z; x
    你应该输出一个数字(例如5631487),表示以太坊网络的当前块号。; d1 \2 N8 C! @
    创建一个新帐户
    # J) `; p( ^" W- L2 q# }要使用区块链,你需要拥有一个帐户。使用Geth,你可以通过在终端中运行以下命令来实现:
    ' P/ z: Q, K7 f8 I; O+ [geth account new
    ! k$ S" d7 s9 {8 x5 C3 B完成后,它会询问你输入密码,以保护你的帐户。确保使用安全密码并安全存储。
    5 k( \" ?; w+ F  ~1 F% q" ?* b  o运行geth account new时Geth所做的是更新Geth数据目录中的文件(Geth存储所有必要数据的目录,包括块和块头信息)。目录在每个平台的位置:$ P: J+ S0 L9 w
    macOS:~/Library/Ethereum
    - Z  m" o; z. w' g5 W6 ~Linux:~/.ethereum
    ) g8 n, I$ w& q8 f, @9 EWindows:%APPDATA%\Ethereum; S) K4 |1 F7 n3 I8 ?
    从其他客户端访问Geth+ Z* e' |9 ?5 m# K2 q
    当你启动Geth时,客户端会自动在端口8545启动RPC服务器。你可以通过使用web3js或web3j等库连接到localhost:8545或使用curl或wget手动调用它来访问此端口上的RPC服务器及其方法。
    8 L/ ^# t! K' @3 X9 ]5 S, L4 j要了解如何与正在运行的Geth实例(在启动你自己的区块链时是私有的,或在上面的说明中公开)的外部工具的连接,请参阅此文章。- E7 {  E; F' o$ d; v
    结论$ ~2 V) w. a7 E: I
    在这篇简短的介绍中,我们介绍了Geth,以太坊节点的类型及其目的。你现在可以运行自己的Geth节点,并使用第三方工具对其进行增强。在以后的文章中,我们将介绍运行专用网络(你自己的以太网区域链与Geth)以及更多内容
  • BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
    声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    成为第一个吐槽的人

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

      0

    • 关注

      7

    • 主题

      11