Infura 推出免费访问以太坊存档数据和所有网络API

您在 Infura 的构建之旅将变得更加轻松和美好。 从今天开始,我们将推出简化的定价计划,让您可以专注于构建和扩展您的产品,而不必担心基础设施。

我们将为所有用户自动启用支持的网络。 网络启动后,您将立即无缝访问在该网络上发送请求所需的端点。 无需附加组件或信用卡。 目前,Infura 支持 Ethereum、Polygon、Arbitrum、Optimism、Filecoin、NEAR 和 Aurora 网络。 有关如何在 Infura 仪表板上访问这些网络的更多信息,请参阅我们的文档

以太坊存档请求现在是免费的,对于 Core Free 用户,每天的存档数据最多占您每天总请求的 25%,对于开发者计划用户,每天最多占您每天总请求的 50%,对于团队和成长用户,最多不超过您的请求限制。 这将允许您更好地使用请求来为您的项目提供您和您的用户所需的数据。 要了解有关存档数据以及使用用途,请阅读本文的其余部分。

核心 (Core)
开发 (Developer)
团队 (Team)
增长 (Growth)
Free
$50/mo
$225/mo
$1000/mo
Multiple Blockchain Mainnet and Testnets
All core tier benefits, plus:
All developer tier benefits, plus:
All team tier benefits, plus:
100,000 Requests/Day
200,000 Requests/Day
1,000,000 Requests/Day
5,000,000 Requests/Day
25,000 Archive Requests/Day
100,000 Archive Requests/Day
Unlimited Archive Requests
Unlimited Archive Requests
Community Support Forum
Direct Customer Support

Direct Customer Support

在 Infura 计划中使用存档数据

如果您正在编写与历史数据交互的智能合约,那么您可能已经熟悉或使用集成的区块链开发套件,例如 Truffle 或 Hardhat。 它们都有各种各样的内置工具,可以让你的 dApp 的整个开发生命周期变得更加容易。 连接到存档节点就像将提供的 API URL 端点设置为要在前端代码中使用的变量一样简单。

Infura 使用的 Ethereum JSON-RPC 和 Websocket API 包括几种可能需要访问存档节点的方法。 这些方法包括一个额外的参数,用于指定请求的块号。 如果您有兴趣检查下面列出的任何方法的历史数据(最近 128 个块之外的数据),您的请求需要访问存档数据。

  • eth_getBalance
    • Returns the balance of the account of the given address.
    • -d '{"jsonrpc":"2.0","method":"eth_getBalance","params": ["0xc94770007dda54cF92009BFF0dE90c06F603a09f", "latest"],"id":1}'
  • eth_getCode
    • Returns the compiled smart contract code, if any, at a given address.
    • -d '{"jsonrpc":"2.0","method":"eth_getCode","params": ["0x06012c8cf97bead5deae237070f9587f8e7a266d", "0x65a8db"],"id":1}'
  • eth_getTransactionCount
    • Returns the number of transactions sent from an address.
    • -d '{"jsonrpc":"2.0","method":"eth_getTransactionCount","params": ["0xc94770007dda54cF92009BFF0dE90c06F603a09f","0x5bad55"],"id":1}'
  • eth_getStorageAt
    • Returns the value from a storage position at a given address.
    • -d '{"jsonrpc":"2.0","method":"eth_getStorageAt","params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9", "0x65a8db"],"id":1}'
  • eth_call
    • Executes a new message call immediately without creating a transaction on the blockchain
    • -d '{"jsonrpc":"2.0","method":"eth_call","params": [{"from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155","to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567","gas": "0x76c0","gasPrice": "0x9184e72a000","value": "0x9184e72a","data": "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675"}, "latest"],"id":1}'

我们为不熟悉存档节点的, 请留意下一部分。 如果您想跳到使用存档数据的示例教程,请单击此处。

什么是归档节点?

在最近的 128 个区块之前,需要一个存档节点来访问来自以太坊区块链的数据。以太坊的全节点不会存储每个区块验证生成的世界状态。它们只需要存储诸如标题和块内容之类的信息。

一般需要将这些信息保留足够长的时间,以便能够按需建立区块链历史状态(最近 128 个区块之外的数据)。与整个区块链状态相比,仅存储少量数据可以使全节点能够最小化存储和计算成本以及同步时间。

另一方面,存档节点除了具有完整节点的所有功能外,还存储 TB 的历史数据,从而可以在任何时间点查询任何块。在撰写本文时,以太坊存档节点现在占用了 12 TB 的空间,完全同步和存档可能需要 6 个多月的时间。使用 Infura 访问存档数据有助于节省您运行自己的节点的时间和计算成本。

为什么要访问存档数据?

存档节点是以太坊网络上存储历史区块链数据的特定节点。因为它们提供了这些历史信息,所以当您需要审计过去的交易历史或收集数据时,它们会很有帮助。在归档模式下运行的完整节点对于了解事务的历史结果是必要的。您可以在任何时间点的任何区块回答与账户余额、智能合约代码、交易计数、代币供应、代币价格等相关的问题。

此状态包含每个钱包的余额和所有智能合约内部变量的值。这是向以太坊区块链添加新区块所必需的,因为新交易可能会执行智能合约。这些交易的结果将取决于这些内部变量的内容。

存档节点还可以在无需在区块链上创建交易的情况下测试智能合约。例如,如果您使用 Ganache,它是 Truffle 开发工具套件中的个人区块链模拟器,它使您能够在完全存档模式下在以太坊分叉,以便在部署到实时区块链之前测试智能合约。

常见用例

Etherscan 和 Dune Analytics 等服务使用存档节点为其用户提供对区块链交易的可见性。任何人都可以自己运行或通过他们的 Infura API 端点访问存档数据。以下是我们从 Infura 客户的归档请求中看到的一些常见用例:

获取并检查过去超过 128 个区块的任何地址(无论是外部拥有的账户还是智能合约)的余额信息。这可能是最常见的用例,也是我们的大型以太坊客户(例如去中心化交易所、流动性池和钱包)启用存档的原因。

调用特定的智能合约函数以通过该函数读取数据(如 ERC-20 和 ERC-721 令牌标准中的 eth_balanceOf)。出于以下目的,您可能需要阅读有关用户的外部拥有帐户的信息并检查他们是否有某个代币的余额:

  • 去中心化交易所和流动资金池
  • 钱包
  • 使用 ERC-20 代币或 ERC-721 或任何其他具有 eth_balanceOf 功能的代币标准构建在以太坊上的游戏
  • 任何 NFT 市场(由于需要调用 eth_balanceOf)

如果您是以下情况,需要获取“时间点数据”(特别是从特定的块)

  • 索引器
  • 任何试图为其用户显示帐户历史记录的公司
  • 审计员、测试员或任何对智能合约进行取证分析的人,目的是弄清智能合约为何如此行事

教程:存档数据游乐场

我们创建了一个全栈应用程序,它为通过访问以太坊存档数据启用的各种用例提供参考实现和概念验证。


在此处查看存储库:https://github.com/anataliocs/Archive-Data-Playground

使用的技术:

• Java 11

• Spring Boot
• Gradle
• Typescript
• React/Redux
• node/npm

设置和配置

该项目使用 Java/Spring Boot 后端和 React 前端构建。 您需要在本地安装以下依赖项才能运行此项目:


获取您的 API 端点 URL 和项目 ID

前往https://infura.io/ 并转到您的项目设置页面:

Infura 推出免费访问以太坊存档数据和所有网络API

现在让我们设置我们的外部化配置,以便我们可以使用我们的项目 ID 而不会在 Github 上暴露这些细节。 Spring Boot 应用程序在本地运行时使用 Spring Dev Tools,因此我们可以使用本地“.spring-boot-devtools.properties”文件来配置属性。


MacOS 用户的配置:

创建属性文件:

touch~/.spring-boot-devtools.properties

打开属性文件:

vi ~/.spring-boot-devtools.properties

将以下行添加到属性文件:

infura.projectid=[YOUR_PROJECT_ID]

运行应用程序:

拉取源代码:

git clone git@github.com:anataliocs/Archive-Data-Playground.git

将项目导入您的 IDE,它应该会自动构建。我们的项目使用 gradle 构建后端,使用 npm 构建前端 UI。

将目录更改为项目文件夹:

cd archivedataplayground/

然后要运行完整堆栈,调用 Gradle 包装器:

./gradlew

此命令将在开发模式下启动 Spring Boot 后端,并在一个命令中启动 React 前端!

应用程序启动后,您应该看到以下内容:

Infura 推出免费访问以太坊存档数据和所有网络API

在浏览器中通过 http://localhost:8080/ 导航到本地服务器

Infura 推出免费访问以太坊存档数据和所有网络API

在右上角单击帐户-> 登录并使用预设的登录名和密码“admin/admin”

Infura 推出免费访问以太坊存档数据和所有网络API

然后,您将有权访问该应用程序。 登录流程来自用于创建基本项目骨架的基本 Jhipster 项目脚手架工具。

如果导航到 http://localhost:8080/admin/docs 或单击 Administration -> API,则可以直接查询 Infura JSON-RPC 端点

这将带您进入 Swagger UI 界面,您可以在其中调用 JSON-RPC 端点,例如获取超过 128 个块的块,这些块可通过具有水合事务的存档节点获得。 然后可以在 Block Explorer 风格的应用程序或其他用例中使用这些调用。

Infura 推出免费访问以太坊存档数据和所有网络API

一些有助于启用此功能的特定代码块包括:

https://github.com/anataliocs/Archive-Data-Playground/blob/main/src/main/java/io/infura/archivedataplayground/config/InfuraConfig.java

InfuraConfig.java

Infura 推出免费访问以太坊存档数据和所有网络API

这段代码提供了一个“RestTemplate”单例,可以将它注入到需要它的类中,并帮助抽象出对 Infura 进行 JSON-RPC 调用的复杂性。

“dto.infura”包包含 POJO 对象,表示 Infura RPC 调用中使用的请求和响应 JSON。

https://github.com/anataliocs/Archive-Data-Playground/tree/main/src/main/java/io/infura/archivedataplayground/service/dto/infura

例如,以下 3 个 DTO 对象包含来自 eth_getBlockByNumber JSON-RPC 调用的块和水合交易响应,可用于从以太坊历史中获取存档块。

GetBlockByNumberResponse.java

Infura 推出免费访问以太坊存档数据和所有网络API

Infura POJO 响应JSON的反序列化

GetBlockByNumberResult.java

Infura 推出免费访问以太坊存档数据和所有网络API

Infura POJO 响应JSON的反序列化

Transaction.java

Infura 推出免费访问以太坊存档数据和所有网络API

包含的“RestTemplate”将自动将响应编组/解组到这些对象类型中。

您还可以考虑使用 https://github.com/web3j/web3j 来帮助促进使用 Spring Boot 后端进行的 Infura JSON–RPC 调用。

前端

存档数据启用的一项功能是块探索。

Infura 推出免费访问以太坊存档数据和所有网络API

此区块浏览器显示有关以太坊历史上著名区块的信息,例如:

前沿 (Frontier)

块高度:0

创世区块

2015 年 7 月 30 日

前沿解冻(Frontier Thawing)

区块高度:200000

以太坊价格:1.24 美元

2015 年 9 月 7 日

Homestead

区块高度:1,150,000

以太坊价格:12.50 美元

2016 年 3 月 14 日

前端是使用 React 和 Typescript 实现的。 此表单允许您提交区块编号并查找该区块的数据和水合交易。

infura.tsx

Infura 推出免费访问以太坊存档数据和所有网络API

提交表单会向 Spring Boot API 发送一个请求,并使用 reducer 解析从后端返回的 JSON。

Infura 推出免费访问以太坊存档数据和所有网络API

这只是访问存档数据启用的功能的一个简单示例。 使用这个基本框架,您可以创建以太坊区块分析、更详细的区块浏览器、交易算法的回溯测试和区块链取证应用程序!

立即注册免费帐户,开始在 Infura 上使用免费的以太坊存档数据进行构建。

要获取有关如何为您的项目使用存档数据的更多信息,请通过 support@infura.io 与我们联系。