本文介绍了区块链节点的基本概念,阐述了运行以太坊节点的困难之处,解释了什么是节点提供商以及为什么需要它。文章还对比了Infura、Alchemy和Quicknode等不同节点提供商的差异,并重点介绍了Alchemy作为节点提供商的优势,例如高可靠性、优质客户支持和丰富的开发者工具。
由 Brady Werkheiser 审核
上次更新时间:2024 年 2 月 15 日,阅读时长 7 分钟
如果你是区块链开发的新手,围绕节点以及它们在你的区块链堆栈中扮演的角色,有很多不熟悉的概念。什么是区块链节点?为什么运行你自己的以太坊节点很困难?什么是节点提供商,为什么我需要一个?Infura、Alchemy 和 Quicknode 等提供商之间有什么区别?
相信我,我们经历过这些。这非常令人困惑。以下是你需要了解的快速概览。
让我们从基础开始!节点本质上是在单台计算机上运行的程序,它允许你与区块链网络的其余部分连接。它与其他节点连接以发送和接收信息,检查人与人之间发送的交易是否有效,并存储关于区块链状态的重要信息。
特别地,区块链网络的一个特点是,该网络本质上只由节点组成:也就是说,运行以太坊或比特币等区块链的物理硬件只是由个人运行的全球所有节点的集合。没有主服务器或单一的信息来源——这就是它去中心化的原因!
最后,重要的是要注意,没有使用节点就无法访问区块链上的信息。不可能做到。把它想象成区块链的浏览器。
“区块链”只是由个人运行的计算机(节点)的集合,它们共同参与验证遵循特定规则的区块链状态。
你可以通过向节点发送请求并从节点接收响应来通过 API 与之交互。例如,你可以发送如下请求,假设你正在计算机上的 8545 端口上运行一个节点:
已复制
curl localhost:8545 \-X POST \-H "Content-Type: application/json"
-d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":0}'
使用 Alchemy Composer 在线试用! 此请求将调用 blockNumber 方法,要求你的节点返回最新的区块编号,或网络上最近生成的区块。这是一个示例响应:
已复制
{ "jsonrpc": "2.0", "id": 0, "result": "0xa1c054"}
正如你所看到的,在这种情况下,最新的区块是 0xa1c054,它转换为十进制形式的 10600532 区块。
有一些事情使得在你自己的连接到网络的节点上进行开发特别麻烦。让我们来探讨一些原因:
任何开发人员的噩梦都是花费大量时间设置一个 не直接贡献于他们想要构建的工具,而节点是最糟糕的罪魁祸首之一。
通常有两种主要的节点类别——轻节点和完整节点。轻节点只同步区块头,并从完整节点请求许多查询,而完整节点保留区块链的整个状态——曾经创建的每笔交易。大多数查询适用于轻节点,但完整节点是区块链的支柱——它们对于服务大多数信息是必要的。
轻节点在过去变得相对简单,但仍然需要安装节点程序、设置配置变量、下载区块头以及检查端口和健康状况,以确保它们正常运行。如果你能在 30 分钟内运行你的第一个轻节点,请在 Discord 上 ping 我们,我们将为你颁发一个自定义徽章👏👏。
完整节点甚至更糟糕:最大的问题是完整节点需要从头开始下载从 0 到最新的每个区块,并手动重放任何人在任何时候提交的每个区块和交易。对于以太坊主网,这超过 1000 万个区块,并且大约有数十亿笔交易。这可能需要数周的同步时间。
注意:在以太坊中,还有一种称为归档节点的节点,它对于历史查找非常有用。我们不会在这里深入介绍它们。
准备好迎接来自地狱的 dev-ops 项目吧。只是一个快速概述:
节点需要定期每隔几周升级一次,并且在硬分叉和节点客户端升级的情况下偶尔需要从头开始重建。
因为大多数节点的设计都没有考虑到可靠性,所以某些查询(例如 eth_getLogs)可能涉及运行数百万个区块和交易,并且经常超时或使节点崩溃——我们称它们为“死亡查询”。因此,你必须密切关注节点的健康状况,并且经常在凌晨 3 点醒来调试它们。
单个节点可能因各种原因而落后于网络——对等连接和连接问题,滞留在过时的分支上,内部状态问题。如果它们落后了,你的用户将获得过时的数据,但不会意识到——这可能是一种非常糟糕的体验。
当你构建个人项目时,单个节点很好而且很棒(即使它确实会间歇性地崩溃)。但是,当你无法使你的节点服务器足够大以跟上你发送的请求时会发生什么?
“我将只运行两个节点——并在它们之间设置一个负载均衡器!”,你可能会建议。我们也是这么想的!不幸的是,这种设置实际上非常难以保持一致,因为不同的节点以略有不同的方式“看到”区块链的最新状态,导致数据不一致和其他面向用户的问题。
想象一下:我们有两个节点在负载均衡器后面单独同步。节点 A 认为最新的区块是区块 5,而节点 B 认为它是区块 4。这是一个完全正常的情况——因为最新的信息通过网络缓慢传播,所以有些节点总是会领先于其他节点。
你:嘿,负载均衡器先生,你看到的最新区块是什么?
负载均衡器先生:(向节点 A 发送请求并返回响应):网络上的最新区块是区块 5。
你:谢谢!你能与我分享区块 5 中的信息吗?
负载均衡器先生:(这次向节点 B 发送请求):对不起,我不知道区块 5。请重试。
在现实世界的情况下,想象一下用户在你的应用程序上购买 NFT。他们可能会在向节点 A 发送请求时购买 NFT——但是当他们的查询开始发送到节点 B 时,它可能看起来好像他们的交易从未发生过!像这样的一致性问题非常普遍并且非常难以解决——尤其是在你扩展到数十个节点时。
节点提供商本质上是团队(像我们一样!),他们提供一种访问区块链上的信息的方式,而无需运行你自己的节点!从本质上讲,你可以通过互联网将你的请求发送给提供商,而不是将你的请求发送到本地节点,该提供商提供一个相同的 API,该 API 正在运行完全同步、最新的节点,并且 24/7 全天候可用。
如果你还记得上面的 blockNumber 请求,这就是发送到提供商的节点请求的样子:
已复制
curl https://eth-mainnet.alchemyapi.io/v2/your-api-key \
-X POST \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":0}'
我们只是交换了端点!没有其他更改是必要的。
一个可靠的节点提供商至少会提供:
访问具有定期更新的节点和警报的轻节点和完整节点,因此你无需担心分叉或网络更改。
访问用于历史交易数据的归档节点(仅 Alchemy 免费提供此功能!)
可扩展性和可靠性:节点应在你想要的任何时候可用,并且尽可能多地使用。
一致性:提供商应处理类似于上述最新区块问题的棘手边缘情况。当使用 Infura 或其他提供商时,这通常是一个问题。
在你准备好将流量发送到公共测试网或主网之前,你不需要节点提供商!用于测试的区块链的本地版本(由 Hardhat 或 Truffle / Ganache 提供)是你构建和测试项目所需的全部。
一旦你想将你的应用程序部署到实时链上,节点提供商就会成为你开发工作流程的关键部分。
首先,你需要一种通过交易将你的智能合约部署到区块链的方法——你只能通过区块链上的节点来实现。这意味着运行你自己的节点,或将你的交易发送给提供商。
其次,你的应用程序可能需要继续提取有关区块链的信息以更新其内部状态。该信息也通过节点或节点提供商传递——并且你希望该通道可靠且正确同步,以便你不会向用户提供过时或损坏的数据。
如果你已经到了这一点,你已经了解了我们存在的原因!我们本质上是一个区块链节点提供商,具有极高的可靠性、出色的客户支持和大量的开发人员工具,这三个功能对我们的企业客户至关重要,并且是我们有 70% 的顶级应用程序通过我们发送流量的原因。
如果你有兴趣了解 Alchemy 的 Supernode 基础设施如何解决上述一致性问题,你可以在此处了解更多信息。
还有几件事使我们与其他节点提供商区分开来:
开发者工具: 你如何知道你的用户发送了哪些请求?如果他们的请求失败,你如何查看/调试它们?你已发送的正在等待挖掘的交易发生了什么?我们在 Alchemy 仪表板中提供了许多工具,这些工具允许你分析你的 dApp 上的流量,否则这将需要浏览页面日志。
推送通知: 如果你希望在你要关注的以太坊用户(例如,Vitalik Buterin)进行交易时收到警报,你会怎么做?你可以编写一个脚本来读取每个区块并搜索特定地址并 24/7 全天候运行它——或者你可以使用像 Alchemy Notify 这样的工具,这是一种专有工具,用于为区块链上的事件发送推送通知(webhook)。
增强 API: 如果你想搜索单个 ETH 用户进行的所有交易怎么办?虽然这在 SQL 数据库中可能很简单,但在区块链中却非常困难——你基本上需要扫描区块链中的每笔交易(同样,在 ETH 主网上以数十亿计!)以查看它是否包含一个地址。我们构建了几个增强 API,允许你立即执行此查询和其他类似查询。
使用 Alchemy 作为节点提供商非常简单——事实上,只需要一行代码即可开始!如果你一直在使用 web3.js 或 ethers.js,那么只需创建一个免费的 Alchemy 帐户,生成一个 API 密钥,并将实例化替换为如下内容:
已复制
const web3 = createAlchemyWeb3("https://eth-mainnet.alchemyapi.io/");
如果你想要完整的教程,请查看我们的Alchemy 入门文档!
最后,我们始终可以在我们的 Alchemy Discord 上 24/7 全天候提供帮助。顺道过来打个招呼——我们很乐意帮助你踏上成为一名成熟的区块链开发人员的旅程!
使用 Alchemy 的开发者工具免费开始构建 web3 产品 获取你的 API 密钥
Supercharged | Alchemy | Substack
📚 目录
分享:
- 原文链接: alchemy.com/blog/what-is...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!