简介:Infura 是以太坊和 IPFS 的 API 服务提供商。Infura 一开始只是为 ConsenSys 内部项目提供稳定可靠的 RPC 访问,后来随着以太坊生态发展,他们意识到自己可以起到更大作用,于是开始面向开发者提供公共 API 服务。本文整理使用 Infura API 执行以太坊合约 call 调用的实现。
Infura 是以太坊和 IPFS 的 API 服务提供商。Infura 一开始只是为 ConsenSys 内部项目提供稳定可靠的 RPC 访问,后来随着以太坊生态发展,他们意识到自己可以起到更大作用,于是开始面向开发者提供公共 API 服务。
本文整理使用 Infura API 执行以太坊合约 call 调用的实现。
Infura API 官方文档:https://infura.io/docs
使用 API 需要申请 Project ID
,ID 是免费申请的,申请流程为“注册 - 登录 - 创建新项目”,不需要审核,几分钟就能搞定。
Infura API 标准请求端口格式:
https://<network>.infura.io/v3/{Your Project ID}
本例中我们使用基于 HTTP 的以太坊主网 JSON-RPC 端口:
https://mainnet.infura.io/v3/{Your Project ID}
Infura API 执行以太坊合约 call 调用:
请求参数:
TRANSACTION CALL OBJECT
[必需]
from
: [可选] 20个字节 - 发送事务的地址
to
:20个字节 - 事务所针对的地址
gas
:[可选]为事务执行提供的 gas 整数。eth_call 消耗 0 gas,但某些执行可能需要此参数
gasPrice
:[可选]用于每一个支付 gas 的 gasPrice 整数
value
:[可选]与此事务一起发送的值的整数
data
:[可选]方法签名和编码参数的哈希值。有关详细信息,请参阅以太坊合约ABI
BLOCK PARAMETER
[必需] - 整数块编号,或字符串“latest”,“earliest”或“pending”,参阅:https://github.com/ethereum/wiki/wiki/JSON-RPC#the-default-block-parameter
Curl 示例:
## JSON-RPC over HTTPS POST
## Replace YOUR-PROJECT-ID with a Project ID from your Infura Dashboard
## You can also replace mainnet with a different supported network
curl https://mainnet.infura.io/v3/YOUR-PROJECT-ID \
-X POST \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_call","params": [{"from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155","to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567","gas": "0x76c0","gasPrice": "0x9184e72a000","value": "0x9184e72a","data": "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675"}, "latest"],"id":1}'
Node.js 示例:
const fetch = require('node-fetch');
fetch('https://mainnet.infura.io/v3/{Your Project ID}', {
method: 'post',
body: JSON.stringify({
jsonrpc:2.0,
method:'eth_call',
params:[{from: '0xb60e8dd61c5d32be8058bb8eb970870f07233155',
to: '0xd46e8dd67c5d32be8058bb8eb970870f07244567',
gas: '0x76c0',
gasPrice: '0x9184e72a000',
value: '0x9184e72a',
data: '0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675'},
'latest'],
id:1
})
}).then(response => response.json()
.then(data => console.log(data)));
返回的 JSON 示例:
{ jsonrpc: '2.0', id: 1, result: '0x' }
Infura API 服务思维导图:
Infura API我们有一个区块链知识星球,做区块链前沿资料的归纳整理以方便大家检索查询使用,也是国内顶尖区块链技术社区,欢迎感兴趣的朋友加入。如果你对上面内容有疑问,也可以加入知识星球提问我:
区块链社群 知识星球
网友评论