主页 > imtoken安卓ico > geth接入节点_Geth介绍及如何运行以太坊节点《推荐合集》

geth接入节点_Geth介绍及如何运行以太坊节点《推荐合集》

imtoken安卓ico 2023-04-24 06:31:29

在本文中,我们将了解什么是以太坊节点,并探索最流行的节点之一,称为 Geth。

为了与区块链进行通信,我们必须使用区块链客户端。 客户端是能够与其他客户端建立p2p通信通道、签署和广播交易、挖掘、部署和与智能合约交互等的软件。客户端通常被称为节点。

以太坊节点必须遵循的功能的正式定义在以太坊黄皮书中定义。 黄皮书定义了网络上节点所需的功能、挖矿算法和私钥/公钥 ECDSA 参数。 它定义了使节点与以太坊客户端完全兼容的全部功能。

基于以太坊黄皮书,任何人都可以用他们认为合适的任何语言创建自己的以太坊节点实现。

可以在此处查看完整的客户列表。

目前最受欢迎的客户端是 Geth 和 Parity。 实现的主要区别在于选择的编程语言:Geth 使用 Golang,而 Parity 使用 Rust。

由于 Geth 是目前最流行的客户端实现,我们现在将重点关注它。

节点类型

当您加入以太坊网络时,您可以选择运行各种类型的节点。 当前选项是:

轻节点

全节点

归档节点

Archive 节点是全节点的特例,所以我们不会详细介绍。 我在 Stack Exchange 上找到了关于节点类型的最佳总结之一:

通常,我们可以将节点软件分为两种类型:全节点和轻(重量)节点。 全节点验证广播到网络的块。 也就是说,它们确保包含在区块(和区块本身)中的交易遵循以太坊规范中定义的规则。 它们维护网络的当前状态(由以太坊规范定义)。

不遵守规则的交易和区块不用于确定以太坊网络的当前状态。 例如,如果 A 试图向 B 发送 100 个以太币,但 A 有 0 个以太币如何在以太坊上获得私链代币,并且一个区块包含此交易,全节点将意识到这不符合以太坊的规则并拒绝该区块为无效。 特别是,智能合约的执行是交易的一个例子。 每当在交易中使用智能合约(例如,发送 ERC-20 令牌)时,所有完整节点都必须运行所有指令以确保它们到达正确的、商定的区块链下一个状态。

有多种方法可以达到相同的状态。 例如,如果 A 有 101 个以太币,并且在一次交易中将其中的一百个以太币交给 B,以支付 1 个以太币作为 gas,那么最终结果将是,如果 A 每次向 B 发送 100 个 1 个以太币的交易如何在以太坊上获得私链代币,支付 0.01 个以太币每笔交易(无论谁收到交易费)。 知道 B 现在是否允许发送 100 个以太币就足以知道 B 的当前余额是多少。 保存完整交易历史的全节点称为全存档节点。 这些必须存在于网络上才能保持健康。

节点也可以选择丢弃旧数据; 如果B想发送100个以太币给C,那么以太币是如何获得的并不重要,只要B的账户中有100个以太币即可。 相反,轻节点不会验证每个块或交易,并且可能没有当前区块链状态的副本。 他们依靠完整的节点来为他们提供缺失的细节(或者只是缺少特定的功能)。 轻量级节点的优势在于它们启动和运行速度更快,可以在更多计算/内存受限的设备上运行,并且几乎不会占用太多存储空间。 不利的一面是,其他节点存在信任因素(它因客户端而异,概率方法/启发式可用于降低风险)。 一些完整的客户端包括具有更快同步的功能(例如,Parity 的 warp 同步)。

安装 Geth

可以在此处找到 Geth 在各种平台(Windows、macOS、Linux)上的安装说明。 该列表非常全面并且不断更新,因此我不会在本文中介绍它。

运行geth

为了启动 Geth 节点,您唯一需要做的就是转到终端窗口并运行 geth。 当你这样做时,你应该得到类似这样的输出:

1个

2个

3个

4个

5个

6个

7

8个

9

10

11

12

13

14

15

16

17

18~geth

INFO [06-03|11:03:13] 最大对等点计数 ETH=25 LES=0 total=25

INFO [06-03|11:03:13] 启动对等节点实例=Geth/v1.8.10-stable/darwin-amd64/go1.10.2

INFO [06-03|11:03:13] 分配的缓存和文件句柄数据库=/Users/mjvr/Library/Ethereum/geth/chaindata cache=768 handles=128

INFO [06-03|11:03:13] 编写默认主网创世块

信息 [06-03|11:03:14] 来自内存数据库节点的持久 trie=12356 大小=2.34mB 时间=48.31016ms gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B

INFO [06-03|11:03:14] 初始化链配置 config="{ChainID: 1 Homestead: 1150000 DAO: 1920000 DAOSupport: true EIP150: 2463000 EIP155: 2675000 EIP158: 2675000 Byzantium000 eashant: 4}37"

信息 [06-03|11:03:14] 为 ethash 缓存启用的磁盘存储 dir=/Users/mjvr/Library/Ethereum/geth/ethash count=3

信息 [06-03|11:03:14] 为 ethash DAG 启用的磁盘存储 dir=/Users/mjvr/.ethash count=2

信息[06-03|11:03:14]初始化以太坊协议版本=“[63 62]”网络=1

INFO [06-03|11:03:14] 加载的最新本地标头编号=0 hash=d4e567...cb8fa3 td=17179869184

INFO [06-03|11:03:14] 加载最近的本地完整块数=0 hash=d4e567...cb8fa3 td=17179869184

INFO [06-03|11:03:14] 加载最近的本地快速块数=0 hash=d4e567...cb8fa3 td=17179869184

INFO [06-03|11:03:14] 重新生成的本地交易日志交易=0 个账户=0

信息 [06-03|11:03:14] 启动 P2P 网络

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

信息 [06-03|11:03:16] IPC 端点打开 url=/Users/mjvr/Library/Ethereum/geth.ipc

在此之后,您应该看到周期性出现新行,Geth 说“导入新状态”或“导入新块头”或“导入新收据”。 状态、区块头和交易是以太坊树尝试的一部分:必须下载它们才能让您的节点与以太坊区块链同步。

这个过程可能需要很长时间,所以你可以选择运行这样一个轻量级的节点。

1geth--光

Geth 现在需要做的就是拉取最新的区块头,并依靠其他全节点使用 merkle 证明来验证交易。

访问 Geth 控制台

现在您已经创建了一个节点,您可以通过在终端中打开一个新选项卡并运行以下命令来访问它:

1geth附加

这会将 Geth 控制台(用于与区块链通信的 Javascript 环境)连接到您的运行节点。 这可以在全客户端模式和轻模式下完成。

控制台打开后,键入以下内容:

1web3.eth.block编号

您应该输出一个数字(例如 5631487),代表以太坊网络的当前区块号。

创建一个新账户

要使用区块链,您需要有一个帐户。 使用 Geth,您可以通过在终端中运行以下命令来执行此操作:

1geth帐户新

完成后,它会要求您输入密码以保护您的帐户。 确保使用安全密码并妥善保存。

当你运行 geth account new 时,Geth 所做的是更新 Geth 数据目录(Geth 存储所有必要数据的目录,包括块和块头信息)中的文件。 目录在各个平台的位置:

macOS:~/图书馆/以太坊

Linux: ~/.ethereum

Windows: %APPDATA%\以太坊

从其他客户端访问 Geth

当你启动 Geth 时,客户端会自动在端口 8545 上启动一个 RPC 服务器。你可以通过使用 web3js 或 web3j 等库连接到 localhost:8545 或使用 curl 或 wget 手动调用它来访问此端口上的 RPC 服务器及其方法.

要了解如何从正在运行的 Geth 实例(在启动您自己的区块链时是私有的,或者在上面的说明中公开)与外部工具进行交互,请参阅这篇文章。

综上所述

在这个简短的介绍中,我们介绍了 Geth、以太坊节点的类型及其用途。 您现在可以运行自己的 Geth 节点并使用第三方工具对其进行增强。 在以后的文章中,我们将介绍运行私有网络(您自己的带有 Geth 的以太坊区块链)等等。

================================================ == =====================

分享一些以太坊、EOS、比特币等区块链相关的交互式在线编程实战教程:

Java以太坊开发教程,主要为java和android程序员讲解区块链以太坊开发的web3j详解。

Python Ethereum,主要供python工程师使用web3.py详细开发区块链以太坊。

PHP Ethereum主要介绍使用PHP进行智能合约开发交互、账户创建、交易、转账、代币开发、过滤器和交易等。

以太坊入门教程,主要介绍智能合约和dapp应用开发,适合入门。

以太坊开发进阶教程,主要介绍使用node.js、mongodb、blockchain、ipfs实现去中心化电商DApp实战,适合进阶。

C#以太坊主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器与交易等。

EOS教程,本课程帮助您快速上手开发EOS区块链去中心化应用,涵盖EOS工具链、账户钱包、发行代币、智能合约开发部署、使用代码与智能合约交互等核心知识点,以及最终利用所有知识点完成一个笔记DApp的开发。

Java比特币开发教程,本课程面向初学者,内容涵盖了比特币的核心概念,如区块链存储、去中心化共识机制、密钥和脚本、交易和UTXO等,还详细讲解了如何使用Java Integrating比特币在代码中的支持功能,如创建地址、管理钱包、构造裸交易等,是Java工程师不可多得的比特币开发学习教程。

Php比特币开发教程,本课程面向初学者,内容涵盖了比特币的核心概念,如区块链存储、去中心化共识机制、密钥和脚本、交易和UTXO等,同时还详细讲解了如何使用Php Integrating比特币在代码中的支持功能,如创建地址、管理钱包、构造裸交易等,是Php工程师不可多得的比特币开发学习教程。

tendermint区块链开发详解。 本课程适合想要使用tendermint进行区块链开发的工程师。 课程内容包含了tendermint应用开发模型中的核心概念,如ABCI接口、Merkle树、多版本状态库等,包含了丰富的代币发行等实用代码,是go语言工程师快速上手的最佳选择开始区块链开发。