本文介绍了区块链节点提供商的概念,解释了为什么运行自己的以太坊节点很困难,以及使用节点提供商的必要性。文章还对比了Infura、Alchemy和Quicknode等不同的节点提供商,并进一步解释了Alchemy的优势,以及如何开始使用Alchemy。
如果你是区块链开发新手,那么关于节点以及它们在你的区块链堆栈中扮演的角色的概念会让你感到陌生。什么是区块链节点?为什么运行自己的以太坊节点很困难?什么是节点提供商?为什么我需要一个?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 项目吧。只是一个快速概述:
当你构建个人项目时,单个节点很好(即使它确实会间歇性地崩溃)。但是,当你无法使你的节点服务器足够大以跟上你发送的请求时会发生什么?
“我将运行两个节点——并在它们之间设置一个负载均衡器!“,你可能会建议。我们也是这么想的!不幸的是,这种设置实际上很难保持一致,因为不同的节点以略微不同的方式“看到”区块链的最新状态,从而导致数据不一致和其他面向用户的问题。
想象一下:我们有两个节点在负载均衡器后面单独同步。节点 A 认为最新的区块是区块 5,节点 B 认为它是区块 4。这是一种完全正常的情况——因为最新的信息通过网络缓慢传播,所以一些节点总会领先于其他节点。
你:嘿,负载均衡器先生,你看到的最新区块是什么?
LB 先生:(向节点 A 发送请求并返回响应):网络上的最新区块是区块 5。
你:谢谢!你能和我分享区块 5 中的信息吗?
LB 先生:(这次向节点 B 发送请求):对不起,我不知道区块 5。请重试。
在现实世界中,想象一下用户在你的应用程序上购买 NFT。他们可能会在向节点 A 发送请求时购买 NFT——但是当他们的查询开始发送到节点 B 时,他们的交易可能看起来从未发生过!像这样的一致性问题非常普遍且难以解决——尤其是在你扩展到数十个节点时。
节点提供商本质上是团队(像我们一样!),它们提供了一种访问区块链上的信息的方式,而无需运行自己的节点!本质上,你可以通过互联网将请求发送给提供商,而不是将请求发送到本地节点,该提供商提供相同的 API,该 API 运行完全同步、最新的节点,并且 24/7 全天候可用。
如果你还记得上面的 blockNumber 请求,那么这就是发送给提供商的节点请求的样子:
curl https://eth-mainnet.alchemyapi.io/v2/demo \
-X POST \
-H “Content-Type: application/json” \
-d ‘{“jsonrpc”:”2.0",”method”:”eth_blockNumber”,”params”:[],”id”:0}’
我们只是交换了端点!无需其他更改。
一个可靠的节点提供商将至少提供:
在你准备好将流量发送到公共测试网或主网之前,你不需要节点提供商!用于测试的区块链的本地版本(由 Hardhat 或 Truffle / Ganache 提供)是你构建和测试项目所需的全部。
一旦你想将你的应用程序部署到实时链,节点提供商就会成为你开发工作流程的关键组成部分。
首先,你需要一种通过交易将你的智能合约部署到区块链的方法——你只能通过区块链上的节点来做到这一点。这意味着运行你自己的节点,或将你的交易发送给提供商。
其次,你的应用程序可能需要继续提取有关区块链的信息以更新其内部状态。该信息也通过节点或节点提供商——并且你希望该通道是可靠且正确同步的,以便你不会向用户提供过时或损坏的数据。
如果你已经走到这里,那么你已经了解了我们存在的原因!我们本质上是一个区块链节点提供商,具有极高的可靠性、出色的客户支持和大量的开发者工具,这三个功能对我们的企业客户至关重要,并且是我们区块链中 70% 的顶级应用程序通过我们发送流量的原因。
如果你有兴趣了解 Alchemy 的 Supernode 基础设施如何解决上述一致性问题,你可以在这里了解更多信息。
还有一些其他的事情使我们与其他节点提供商区分开来:
使用 Alchemy 作为节点提供商非常简单——事实上,只需一行代码即可开始!如果你一直在使用 web3.js 或 ethers.js,那么只需创建一个免费的 Alchemy 帐户,生成一个 API 密钥,并将实例化替换为如下所示的内容:
// npm install alchemy-sdk import { Alchemy } from "alchemy-sdk";
const alchemy = new Alchemy();const blockNumber = await alchemy.core.getBlockNumber();
如果你需要完整的教程,请查看我们的Alchemy 入门文档! 最后,我们始终可以通过 Alchemy Discord 全天候提供帮助。过来打个招呼——我们很乐意帮助你成为一名羽翼丰满的区块链开发者!
- 原文链接: medium.com/alchemy-api/w...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!