主页 > 最新imtoken官网下载地址 > Infura Ethereum API 入门教程

Infura Ethereum API 入门教程

最新imtoken官网下载地址 2023-06-16 07:29:21

HTTP/HTTPS 是“单向的”——客户端发送一个请求,然后服务器发送一个响应——它是一个“无状态”关联,这意味着每个请求都会得到一个响应,然后连接终止。 如果您获取的数据只需要收集一次或正在访问旧数据,则需要使用 HTTPS 接口。 您会看到 HTTPS 在简单的 RESTful 应用程序中大量使用。

看一个例子

在这个例子中,我们将编写一个 Node.js 程序,该程序使用 Rinkeby 节点并使用 eth_getBlockByNumber 向 Infura 发送 RPC 请求以获取最新的区块数据。 从那里,我们将块号从十六进制转换为整数,并将整数块号打印到终端。 准备好? 让我们开始吧!

编写此代码的第一步是安装 Node(您可以使用 npm 或下载,如果您还没有安装)、DotEnv 和相关依赖项。 如果您不熟悉 dotenv,它是一个单独的文件,不会上传到 GitHub,确保您的项目 ID 和项目秘密(在环境变量中配置)在代码中保持私有! 要了解更多信息,请查看这篇文章。

现在我们已经完成安装,继续创建 app.js 文件并在开头包含 dotenv 和 request。 用于访问包含在 dotenv 文件中的变量和请求数据。

const dotenv = require('dotenv').config();
var request = require('request');

接下来,我们查看文档以了解 eth_getBlockByNumber 所需的标头。 我们的请求标头需要包含 Content-Type: application/json,因此我们将其添加到我们的 app.js 文件中:

const dotenv = require('dotenv').config();
var request = require('request');
var headers = {
    'Content-Type': 'application/json'
};

接下来,我们将确定要发送到服务器的数据。 在这种情况下,指定我们想要什么:

JSON-RPC(最新版本)

被调用的方法

要包含的任何块参数(在这种情况下,我们需要最新的块数据,因此我们包含一个参数作为 ["latest", true])

ID

您可以将此 dataString 视为我们在将其提交给服务器之前填写的 HTML 表单的各个部分。

如果你想看看数据是如何组织的,你可以使用CURL命令查看文档中提供的示例(不一定是我们要找的参数,但你知道方法)

以太坊api文档_以太坊钱包 api对接_以太坊经典和以太坊

因此,查看语法并确保代码合适,我们将 var dataString 添加到 app.js:

const dotenv = require('dotenv').config();
var request = require('request');
var headers = {
    'Content-Type': 'application/json'
};
var dataString = '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["latest",true], "id":1}';

但我们究竟从哪里获取数据呢? 这是下一步该做什么。 我们需要创建一个变量来表示:

网址(网址)

方法(方法:即 POST/GET/等)。

以太坊钱包 api对接_以太坊经典和以太坊_以太坊api文档

标头(请求标头)

正文(请求正文)

auth:可能的授权信息(例如包含项目密码的信息)。

让我们一一分解这些含义:

url:用于访问API的URL; 您可以在我们的文档中找到所有网络及其相应 URL 的列表。 method:每次JSON-RPC调用的文档使用的具体HTTP方法(**与dataString中的方法ID不同) headers:调用所需的请求头 body:请求发送的任何信息 auth:可能是什么需要完成请求授权(不需要)

const dotenv = require('dotenv').config();
var request = require('request');
var headers = {
    'Content-Type': 'application/json'
};
var dataString = '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["latest",true], "id":1}';
var options = {
    url: `https://rinkeby.infura.io/v3/${process.env.PROJECT_ID}`,
    method: 'POST',
    headers: headers,
    body: dataString,
    // auth: {
    //   'user': '',
    //   'pass': `${process.env.PROJECT_SECRET}`
    // }
};

注意:模板的语法非常重要 - 如果您需要帮助,请查看它!

好吧,现在我们终于准备好了! 我们剩下的就是实际编写函数来发送请求、获取响应并从该响应中获取 JSON:

const dotenv = require('dotenv').config();
var request = require('request');
var headers = {
    'Content-Type': 'application/json'
};

以太坊经典和以太坊_以太坊钱包 api对接_以太坊api文档

var dataString = '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["latest",true], "id":1}'; var options = { url: `https://rinkeby.infura.io/v3/${process.env.PROJECT_ID}`, method: 'POST', headers: headers, body: dataString, }; function callback(error, response, body) { if (!error && response.statusCode == 200) { json = response.body; var obj = JSON.parse(json); console.log(obj) } } request(options, callback);

下图为我们提供了完整的原始 JSON 响应:

以太坊经典和以太坊_以太坊钱包 api对接_以太坊api文档

但是,我们要查找的最新区块号(这是一个十六进制数,我们将其转换为整数以供打印):

对于特定情况,您可以使用最近的交易来获取其块号并使用它来获取最新的块,但是如果没有交易,这将不起作用! 使用以下内容将获得阻止信息,无论它是否有交易:

查看前面打印输出中的 JSON 数据,我们可以看到 obj.result.number 为我们提供了最新区块号的十六进制:

以太坊经典和以太坊_以太坊api文档_以太坊钱包 api对接

每个块还有一个唯一的散列,存储在散列字段中,通常对后续请求更有用,但现在我们只关注数字。 当我们使用 console.log(obj.result.number) 时,我们得到相同的突出显示的十六进制值(最好仔细检查您对代码的期望):

以太坊api文档_以太坊钱包 api对接_以太坊经典和以太坊

所以,我们可以在代码中定义 hex 为 obj.result.number 来访问 hex 值:

const dotenv = require('dotenv').config();
var request = require('request');
var headers = {

以太坊经典和以太坊_以太坊钱包 api对接_以太坊api文档

'Content-Type': 'application/json' }; var dataString = '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["latest",true], "id":1}'; var options = { url: `https://rinkeby.infura.io/v3/${process.env.PROJECT_ID}`, method: 'POST', headers: headers, body: dataString, }; function callback(error, response, body) { if (!error && response.statusCode == 200) { json = response.body; var obj = JSON.parse(json); hex = obj.result.number; } } request(options, callback);

现在,挑战的最后一部分:将十六进制转换为整数并打印该整数! 我们将调用 parseInt(hex, 16) 将十六进制字符串转换为整数以太坊api文档,然后在控制台记录最终结果。 hex 是我们在上一步中找到的十六进制代码,16 表示 hex 是以 16 为底的十六进制(如果不指定,任何以 0x 开头的字符串都将被视为十六进制,因此以 16 为底;否则以 10 为底):

const dotenv = require('dotenv').config();
var request = require('request');
var headers = {
    'Content-Type': 'application/json'
};
var dataString = '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["latest",true], "id":1}';
var options = {

以太坊经典和以太坊_以太坊api文档_以太坊钱包 api对接

url: `https://rinkeby.infura.io/v3/${process.env.PROJECT_ID}`, method: 'POST', headers: headers, body: dataString, }; function callback(error, response, body) { if (!error && response.statusCode == 200) { json = response.body; var obj = JSON.parse(json); hex = obj.result.number; final = parseInt(hex, 16) console.log(final) } } request(options, callback);

当我们运行代码时,我们得到:

以太坊钱包 api对接_以太坊经典和以太坊_以太坊api文档

成功! 您现在知道如何使用 Infura API 通过 HTTPS 访问以太坊节点了! 如果您正在寻找更多历史数据或只需要一次数据,这很好以太坊api文档,但如果您需要滚动数据怎么办? 您需要使用 WebSocket 连接!

WebSocket

WebSocket 是双向和有状态的,这意味着客户端和服务器之间的连接将保持活动状态,直到被任何一方(客户端或服务器)终止。 当连接关闭时,连接将被终止。 当你想持续推送/传输数据到一个已经打开的连接时,这是选择 WebSocket 的最佳时机,例如在加密货币交易平台、游戏应用程序或聊天应用程序中,你希望不断(即时)更新数据.

例子

在此示例中,我们将编写一个 Node.js 程序,该程序再次使用 Rinkeby 节点并使用 WebSocket 连接通过该 WebSocket 连接上的 newHeads 订阅类型获取最新的区块头。 对于这个例子,我们希望在日志的尾部看到来自 WebSocket 连接输出的最新区块头数据。 开始吧!

首先,我们必须执行 npm install 并引入必要的依赖项 - dotenv 和 ws(用于 WebSocket)。 dotenv 将允许我们隐藏项目 ID 和秘密,用于连接到 WebSocket。

const dotenv = require('dotenv').config();
const WebSocket = require('ws');

接下来,我们将通过创建一个新的 WebSocket 实例来打开一个 WebSocket 连接:

const dotenv = require('dotenv').config();
const WebSocket = require('ws');
const ws = new WebSocket(`wss://ropsten.infura.io/ws/v3/${process.env.PROJECT_ID}`);

以太坊api文档_以太坊经典和以太坊_以太坊钱包 api对接

此外,使用 dotenv 文件将项目 ID 保密,这就是此处有模板文本的原因。

如果您仔细阅读了 HTTPS 部分,希望其中的一些内容对您来说很熟悉! 使用 WebSocket,我们打开它并基于它发送数据(就像我们向服务器提交表单并告诉它我们想要什么)。 在这种情况下,我们的方法是 eth_subscribe(因为我们正在订阅以获取最新的区块头),我们的参数是 newHeads ,因为这是我们从中获得结果的订阅类型:

const dotenv = require('dotenv').config();
const WebSocket = require('ws');
const ws = new WebSocket(`wss://ropsten.infura.io/ws/v3/${process.env.PROJECT_ID}`);
ws.on('open', function open() {
    ws.send('{"jsonrpc":"2.0","method":"eth_subscribe","params":["newHeads"], "id":1}');
});

现在,我们希望能够查看响应中的数据,因此我们将为解析后的 JSON 数据分配一个变量,并在 console.log 中记录它以获取我们需要的块头数据:

const dotenv = require('dotenv').config();
const WebSocket = require('ws');
const ws = new WebSocket(`wss://ropsten.infura.io/ws/v3/${process.env.PROJECT_ID}`);
    ws.on('open', function open() {
    ws.send('{"jsonrpc":"2.0","method":"eth_subscribe","params":["newHeads"], "id":1}');
});
ws.on('message', function incoming(data) {
    var obj = JSON.parse(data);
    console.log(obj);
    ws.close()
});

请注意,我们在最后关闭了 WebSocket——当我们只需要获取最新的区块头数据时,这是一个重要的步骤! 由于我们已经关闭了 WebSocket 连接,我们的响应正是我们想要的(最新的块头及其数据):

以太坊钱包 api对接_以太坊api文档_以太坊经典和以太坊

想知道如果不关闭 WebSocket 连接会发生什么? 当然可以! 我们很快就会得到这份打印输出,然后不断更新、更新和更新,然后……你明白了。 下面是一个当我们保持 WebSocket 连接打开时会发生什么的例子:

以太坊钱包 api对接_以太坊经典和以太坊_以太坊api文档

就是这样! 现在,您知道了如何打开 WebSocket 连接、调用带参数的方法以及获取最新块的输出(如果需要,还可以继续获取最新块的运行列表)。

立即开始探索 Infura API!

想探索更多?

在我们的文档中,您可以看到可以通过 HTTPS 和 WebSocket 发出的所有可能的请求,以及一些更复杂的概念,例如速率限制:

以太坊api文档_以太坊经典和以太坊_以太坊钱包 api对接

以太坊钱包 api对接_以太坊api文档_以太坊经典和以太坊

本翻译由 Cell Network 赞助。