Hi Guest

More contents, please log on!

Bitmere.com 区块链技术 Content
在本文中,我们将看看以太坊节点是什么,并探索最受欢迎的节点之一,称为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)以及更多内容
  • BitMere.com is Information release platform,just provides information storage space services.
    The opinions expressed are solely those of the author,Does not constitute advice, please treat with caution.
    You have to log in before you can reply Login | 立即注册

    Points Rules

    Write the first review

    一夜雨十年灯潞 初中生
    • Follow

      0

    • Following

      7

    • Articles

      11

    59600
    Promoted