摘要
Enjin 运行两条基于 Substrate 的链:Enjin Matrix Chain(NFT 和代币的应用层)和 Enjin Relay Chain(共识和安全层)。两者都使用 Substrate RPC(而非 EVM JSON-RPC),因此开发者需要使用 Polkadot.js 或原始的 WebSocket/HTTPS 调用。本文涵盖公共和私有 RPC 端点、链设置、常见 RPC 方法以及如何为生产级 dApp 选择基础设施。
Enjin RPC 决策检查清单
在集成 Enjin RPC 端点之前,请考虑以下标准:
| 标准 | 检查内容 | 重要性 |
|---|---|---|
| 链类型 | Matrix Chain(应用层) vs Relay Chain(共识层) | 每条链有独立的端点和 RPC 方法。NFT 和代币操作使用 Matrix Chain。 |
| 协议 | Substrate RPC(非 EVM) | 不能使用 eth_* 方法。请使用 Polkadot.js 或原始的 Substrate JSON-RPC。 |
| 数据保留 | 归档节点 vs 全节点 vs 修剪节点 | 归档节点存储完整历史记录,用于历史查询。 |
| 端点类型 | 公共 vs 私有 vs 专用 | 公共端点有速率限制;私有/专用端点提供更高的吞吐量和可靠性。 |
| 吞吐量需求 | 每秒请求数(RPS) | 估算峰值负载。共享计划可能限流;专用节点提供一致的性能。 |
| WebSocket 支持 | 用于实时订阅的 WSS | 事件监听(如新区块、代币转账)必需。 |
| 地理延迟 | 节点相对于用户的位置 | 低延迟可提高 dApp 响应速度。 |
| 提供商声誉 | 运行时间历史、支持、文档 | 查看独立评论和提供商的 SLA。 |
什么是 Enjin RPC?
Enjin 是一个专注于 NFT 和游戏的区块链生态系统,基于 Substrate 构建,作为 Polkadot 平行链运行。它由两条链组成:
- Enjin Matrix Chain:应用层,NFT、代币和智能合约在此运行。大多数 dApp 交互发生在此。
- Enjin Relay Chain:共识和安全层,继承自 Polkadot。开发者很少直接与之交互,但它提供最终性和跨链通信。
两条链都通过 Substrate JSON-RPC 协议暴露 RPC 端点。这与以太坊的 JSON-RPC 不同:没有 eth_* 方法。相反,您使用 system_*、chain_*、state_* 和自定义 pallet 方法。
Enjin RPC 端点
要与 Enjin 网络交互,您需要一个 RPC 端点。选项包括:
- 公共端点:免费但有速率限制,适用于测试和低流量应用。
- 私有端点:由 OnFinality 等基础设施服务提供,具有更高的速率限制和专门支持。
- 专用节点:完全控制节点实例,最适合高吞吐量的生产工作负载。
示例端点(仅供说明)
| 链 | HTTPS | WSS |
|---|---|---|
| Matrix Chain | https://enjin-matrix-rpc.example.com | wss://enjin-matrix-rpc.example.com |
| Relay Chain | https://enjin-relay-rpc.example.com | wss://enjin-relay-rpc.example.com |
注意:请替换为您的提供商的实际端点。OnFinality 在其支持的网络中提供 Enjin RPC 端点。
连接到 Enjin RPC
使用 Polkadot.js
Polkadot.js 是与 Substrate 链交互的标准库。
const { ApiPromise, WsProvider } = require('@polkadot/api');
async function main() {
const wsProvider = new WsProvider('wss://enjin-matrix-rpc.example.com');
const api = await ApiPromise.create({ provider: wsProvider });
// 获取链信息
const chain = await api.rpc.system.chain();
const version = await api.rpc.system.version();
console.log(`已连接到 ${chain} v${version}`);
// 获取最新区块哈希
const lastHash = await api.rpc.chain.getBlockHash();
console.log(`最新区块哈希: ${lastHash}`);
}
main().catch(console.error);
使用 curl(HTTPS)
curl -s -X POST https://enjin-matrix-rpc.example.com \
-H 'Content-Type: application/json' \
-d '{"id":1,"jsonrpc":"2.0","method":"chain_getBlockHash","params":[0]}'
使用 WebSocket(原始)
wscat -c wss://enjin-matrix-rpc.example.com
> {"id":1,"jsonrpc":"2.0","method":"chain_getBlockHash","params":[0]}
常见 RPC 方法
Enjin 暴露标准的 Substrate RPC 方法以及用于 NFT 操作的自定义 pallet 方法。
系统方法
system_chain– 返回链名称。system_version– 返回节点版本。system_health– 返回节点健康状态(对等节点数、同步状态)。
链方法
chain_getBlock– 根据哈希或编号返回区块。chain_getBlockHash– 根据编号返回区块哈希。chain_getHeader– 返回区块头。chain_subscribeNewHeads– 订阅新区块头。
状态方法
state_getStorage– 返回给定键的存储值。state_getMetadata– 返回运行时元数据。state_queryStorage– 查询特定区块的存储。
NFT 方法(Enjin 特有)
Enjin 的多代币标准内置于运行时。常见操作包括:
nft.balanceOf(account, tokenId)– 获取代币余额。nft.totalSupply(tokenId)– 获取总供应量。nft.ownerOf(tokenId)– 获取代币所有者。
注意:具体方法名称取决于运行时版本。请查阅 Enjin 文档 获取最新的 pallet 详情。
选择 RPC 提供商
为 Enjin 选择 RPC 提供商时,请考虑:
- 支持的链:确保提供商同时提供 Matrix Chain 和 Relay Chain 端点。
- 速率限制:公共端点通常限制每秒请求数。对于生产环境,请使用私有或专用节点。
- WebSocket 支持:实时功能(如事件订阅)必需。
- 地理分布:具有多个区域的提供商可减少延迟。
- 归档数据:如果需要历史状态,请选择归档节点提供商。
OnFinality 提供 Enjin RPC 端点,具有灵活的方案,包括共享和专用选项。详情请参阅 RPC 定价 和 支持的网络。
常见陷阱与故障排除
1. 使用 EVM 方法
Enjin 不兼容 EVM。调用 eth_blockNumber 会失败。始终使用 Substrate 方法。
2. 速率限制
公共端点可能会限制高频请求。如果遇到 HTTP 429 错误,请升级到私有端点或在客户端实现退避策略。
3. WebSocket 断开
WebSocket 连接可能因网络问题或服务器负载而断开。在客户端实现重连逻辑。
4. 区块最终性
Enjin Relay Chain 在几个区块后提供最终性。对于不可逆交易,请等待最终确认后再操作。
5. 数据保留
全节点会修剪历史状态。对于过去区块的查询,请使用归档节点或 Enjin Platform 等索引器。
关键要点
- Enjin 使用 Substrate RPC,而非 EVM JSON-RPC。请使用 Polkadot.js 或原始的 Substrate 调用。
- 两条链:Matrix Chain(应用层)和 Relay Chain(共识层)。大多数交互发生在 Matrix Chain。
- 公共端点适用于开发;生产应用需要私有或专用基础设施。
- OnFinality 提供 Enjin RPC 端点,包括共享和专用选项。请查看支持的网络了解可用性。
- 在扩展之前,始终使用小规模工作负载进行测试。
常见问题
问:我可以在 Enjin 上使用 MetaMask 吗? 答:不可以,Enjin 不兼容 EVM。请使用 Polkadot.js 或 Substrate 钱包。
问:Matrix Chain 和 Relay Chain 有什么区别? 答:Matrix Chain 处理应用逻辑(NFT、代币)。Relay Chain 提供共识和安全。大多数 dApp 与 Matrix Chain 交互。
问:如何获取用于 gas 的 ENJ 代币? 答:ENJ 是 Matrix Chain 的原生代币。您可以从交易所或水龙头(测试网)获取。
问:Enjin 支持 WebSocket 订阅吗? 答:是的,两条链都支持 WSS 用于实时更新。
问:在哪里可以找到最新的 Enjin RPC 方法?
答:请参考 Enjin 文档 以及通过 state_getMetadata 获取的运行时元数据。