如果你是一位区块链开发的小白,关于节点及它们是如何在区块链中工作的,肯定有很多疑问。包括什么是区块链节点?为什么运行自己的以太坊节点很难?什么是节点提供商,我为什么需要它?

相信我,关于这些内容的确非常令人困惑,以下就是“酷宇宙”给大家做个容易的介绍。

什么是区块链中的节点?

我们还是从基础开始吧!节点本质上是一个运行在单台计算机上的程序,它允许你与区块链上的其余部分进行连接。它与其他节点连接来回发送信息,验证节点之间发送的交易是否有效,并存储有关区块链的相关重要信息。

区块链在本质上是由许多不同节点所组成。也就是说,运行“以太坊”或“比特币”的区块链的物理硬件就是散布在全世界不同地点由个人运行的节点集合。区块链没有所谓的主服务器或单一的物理来源,这就是它去中心化的原因。

然后大家需要注意的是,如果不使用节点,就无法访问区块链上的信息,所以大家可以简单地将节点想象成区块链的浏览器。

打开网易新闻 查看更多图片

“区块链”是个人运行的计算机(节点)的集合,按照一定的规则集体参与验证该区块链的状态。

你可以通过API( 应用程序编程接口)向节点发送请求并从节点接收响应,从而在节点之间进行交互。假设你在计算机的端口8545上运行一个节点;

您可以发送如下请求: 使用Alchemy Composer在线尝试一下(直达链接),该请求将要求您的节点通过调用block number的方法返回最新的区块号或最近生成的块号,这是一个示例响应:

如您所见,本例中最新的块是0xa1c054,将它转换十进制形式为10600532。

为什么运行节点很困难?

有几件事让你连接到自己的节点上进行开发非常麻烦,让“酷宇宙”介绍一些原因:

节点需要很长时间来搭建,甚至长达数周!

任何开发人员的麻烦都是需要耗费大量时间来设置一个工具,而这个工具对有构建的东西没啥用,而节点是最糟糕的违规者之一。

通常有两种主要的节点类别:轻节点和全节点

轻节点仅同步块头和来自完整节点的查询请求,而全节点则保留了区块链的整个状态,包括曾经创建的每笔交易。大多数查询采用轻节点,但全节点是区块链的主干,它们是提供大多数信息所必需的。

轻节点相对简单,但仍然需要安装节点程序、设置配置变量、下载块头、检查端口及健康状况以确保它们的正常运行。

全节点相对麻烦,最大的问题是它需要从头开始下载从0到最新的每个区块,并手动重放任何人之前提交的每个块和交易。对于以太坊主网来说超过了1000万个区块和数十亿笔交易。这个过程可能需要耗费几周的同步时间。

在以太坊中还有一种被称为存档节点的类型,对于历史查找非常有用。

节点必须由你来管理! 接下来让我们来简单回顾一下:

  1. 节点每隔几周都需要升级一下,偶尔会从头开始重新构建(如硬分叉或客户端升级)
  2. 因为大多数节点在设计时并没有考虑到可靠性,所以某些查询(如eth_getLogs)可能涉及运行数百万个块和交易,因此经常出现超时或节点崩溃的情况,我们称之为“死亡查询”。因此你必须密切关注节点的运行状况,可能经常需要在凌晨3点来调试它们。
  3. 由于各种不同的原因(对等连接、滞留在过时的分支上、内部状态等)单个节点可能会滞后于网络。如果你的节点滞后了,可能会导致用户在不知情的情况下获得过时的数据,这是一种非常糟糕和危险的体验。

扩展到多个节点是很棘手的

当你在构建个人项目时,单个节点一般都没有问题(即使它确实会间歇性地在崩溃)。但当你不能让你的节点服务器强大到满足您发送的请求时将会发生什么?

"我将只运行两个节点,并在它们之间设置一个负载平衡器!"你可能会建议。我们也是这么想的!不幸的是,这种设置实际上非常难以保持一致,因为不同的节点以略微不同的方式“看到”区块链的最新状态,从而导致不一致的数据和其他用户问题。

想象一下:我们有两个节点在一个负载平衡器后面分别同步。节点A认为最新的区块是块5,节点B认为是块4。这是完全正常的情况,因为最新的信息在网络中传播的速度很慢,所以一些节点总是领先于其他节点。

你:嘿!负载平衡器先生,你看到的最新区块是什么?
LB先生:(向节点A发送请求并返回响应):网络上最新的区块是块5。
你:谢谢!你能和我分享块5中的信息吗?
LB先生:(这次向节点B发送请求):对不起,我不知道块5。请再试一次。

打开网易新闻 查看更多图片

在现实世界中,想象一个用户在你的应用程序上购买了一枚NFT。他们可能会向节点A发送请求购买了NFT,但是当他们的查询请求是发送给节点B时,这个时候看起来好像之前购买NFT的交易似乎从未发生过一样!像这样的“一致性问题”普遍存在并且非常难解决,尤其是当您扩展到几十个节点时。

什么是节点提供商?

节点提供商本质上是一个团队,它们提供了一种无需运行自己的节点就可以访问区块链上信息的方法。从本质上讲,你可以通过Internet将请求发送到提供相同API的提供商。而不是将请求发送到本地节点,该提供商的运行是完全同步的、24/7可用的最新节点。

如果你还记得之前的blockNumber请求,这是节点请求发送到提供者时的样子:

我们只是交换了端点,无需进行其他更改。

一个可靠的节点提供商至少会提供:

  1. 定期更新的节点和可以警报访问轻节点和全节点,不必担心分叉或网络更改;
  2. 访问历史交易数据的存档节点(只有Alchemy可以免费完成此操作)
  3. 可扩展性和可靠性:节点随时可用,可以随心所欲。
  4. 提供商可以处理一些棘手的区块问题。

我在本地运行我的dApp,效果很好!但为什么还需要一个节点提供商?

在你准备好向公共测试网或主网发送流量之前,你不需要节点提供商!用于测试的区块链的本地版本(由Hardhat或Truffle/Ganache提供)是您构建和测试项目所需的全部。

一旦你想要将应用程序部署到实时链中,节点提供商就成为开发工作流程中的一个关键部分。

首先,你需要一种通过交易将智能合约部署到区块链的方法,您只能通过区块链上的节点来实现。这意味着运行自己的节点,或者将交易发送给提供商。

其次,你的应用程序可能需要继续提取有关区块链的信息来更新其内部状态。这些信息也会通过节点或节点提供商所传递。你会希望该通道可靠并能正确同步,这样您就不会向用户提供陈旧或损坏的数据。

什么是Alchemy?它与其他节点提供商有何不同?

Alchemy本质上是一家区块链节点提供商,拥有极高的可靠性、出色的客户支持和大量的开发工具,它号称有70%的区块链顶级应用通过其发送流量的。

它号称有几个因素使它们有别于该领域的其他节点提供商:

  1. 开发者工具:你如何知道你的用户正在发送什么请求?如果他们的请求失败,您如何查看和调试它们?你发送的等待挖掘的交易是怎么回事?Alchemy Dashboard中提供了许多工具,允许让你分析dApp上的流量,否则会涉及大量的日志页面。
  2. 推送通知:如果你希望在您关注的以太坊用户(例Vitalik Buterin)进行交易时收到提醒,您应该怎么做?您可以编写一个脚本来读取每个块并搜索特定的地址并全天候运行它,或者您可以使用Alchemy Notify这样的工具,这是一个为区块链上的事件发送推送通知(webhooks)的工具。
  3. 增强的API:如果你想搜索单个ETH用户进行的所有交易,该怎么办?尽管这在SQL数据库中可能很简单,但在区块链却非常复杂,你基本上需要扫描区块链的每笔交易(同样,在以太网上有数十亿笔)来查看它是否包括一个地址。我们已经构建了几个增强的API,允许您即时进行这个查询和其他类似的查询。

我该如何开始?

使用Alchemy作为你的节点提供商非常简单。事实上只需要一行代码即可开始使用!如果您一直在使用web3.js或ethers.js,那么创建一个免费的Alchemy帐户,生成API密匙并用类似下面的内容替换实例化就很简单.

本文部分内容摘自网络,由酷宇宙负责翻译整理,此文并不代表酷宇宙的观点和立场,不包含任何投资建议,注意任何投资和交易都会有风险。如需详细了解或加入社群,请关注Crypoe.com(酷宇宙)。