千家信息网

Geth分析及如何运行以太坊节点

发表于:2024-11-13 作者:千家信息网编辑
千家信息网最后更新 2024年11月13日,这篇文章将为大家详细讲解有关Geth分析及如何运行以太坊节点,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。为了与区块链进行通信,我们必须使用区块链客户
千家信息网最后更新 2024年11月13日Geth分析及如何运行以太坊节点

这篇文章将为大家详细讲解有关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。当你这样做时,你应该得到类似于这样的输出:

~ gethINFO [06-03|11:03:13] Maximum peer count                       ETH=25 LES=0 total=25INFO [06-03|11:03:13] Starting peer-to-peer node               instance=Geth/v1.8.10-stable/darwin-amd64/go1.10.2INFO [06-03|11:03:13] Allocated cache and file handles         database=/Users/mjvr/Library/Ethereum/geth/chaindata cache=768 handles=128INFO [06-03|11:03:13] Writing default main-net genesis blockINFO [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.00BINFO [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=3INFO [06-03|11:03:14] Disk storage enabled for ethash DAGs     dir=/Users/mjvr/.ethash                      count=2INFO [06-03|11:03:14] Initialising Ethereum protocol           versions="[63 62]" network=1INFO [06-03|11:03:14] Loaded most recent local header          number=0 hash=d4e567…cb8fa3 td=17179869184INFO [06-03|11:03:14] Loaded most recent local full block      number=0 hash=d4e567…cb8fa3 td=17179869184INFO [06-03|11:03:14] Loaded most recent local fast block      number=0 hash=d4e567…cb8fa3 td=17179869184INFO [06-03|11:03:14] Regenerated local transaction journal    transactions=0 accounts=0INFO [06-03|11:03:14] Starting P2P networkingINFO [06-03|11:03:16] UDP listener up                          self=enode://a4cb08519bc2bceecb8ad421871c624d5212888653bbaee309fda960f3c87ca7aa9855ee14684d521836ae88ad1986b8ca944348e976760d2bd1247ed3ca7628@[::]:30303INFO [06-03|11:03:16] RLPx listener up                         self=enode://a4cb08519bc2bceecb8ad421871c624d5212888653bbaee309fda960f3c87ca7aa9855ee14684d521836ae88ad1986b8ca944348e976760d2bd1247ed3ca7628@[::]:30303INFO [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服务器。你可以通过使用web3jsweb3j等库连接到localhost:8545或使用curlwget手动调用它来访问此端口上的RPC服务器及其方法。

关于Geth分析及如何运行以太坊节点就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

节点 以太 交易 运行 客户 客户端 区块 状态 网络 功能 块头 类型 选择 内容 可以通过 合约 帐户 控制台 数据 文章 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库应用技术形考任务5答案 非结构化数据库审计 数据库运维作业指导书 网络安全模式怎么进 吉林统一软件开发过程有哪些 惠州电商软件开发电话 软件管理端在服务器上打不开 山东省网络安全选拔 关系数据库的操作运算有哪几种 直销软件开发哪家好又便宜 贵阳市中小学家庭教育与网络安全 江西省第八届网络安全教育宣传周 服务器a标签 杭州时橙网络技术 软件开发兼职工资多少 烟台戴尔服务器销售电话 开源数据库安全怎么保障 有效数据库服务器 接收服务器地址 迈远科技定位服务器 软件开发监理怎么卡乙方 遂宁软件开发市场价 中关村网络安全学校 西餐桌上点餐软件开发 网易版开服务器一定要知道的事 存储控制机制实现数据库安全的 tp6异步读取数据库异常 网络安全为人民靠人民示意图 实验九 数据库安全 软件开发中需求谁来做
0