以太坊 Provider API
推荐阅读
我们建议所有 web3 站点开发人员阅读基本用法部分。
TokenPocket Extension 将一个全局 API 注入到其用户访问的网站中window.ethereum
。该 API 允许网站请求用户的以太坊账户,从用户连接的区块链读取数据,并建议用户签署消息和交易。Provider 对象的存在表示以太坊用户。
以太坊 JavaScript 提供程序 API 由EIP-1193指定.
基本用法
对于任何重要的以太坊网络应用程序——也就是 dapp、web3 站点等运行,你必须:
检测以太坊 Provider (
window.ethereum
或window.tokenpocket.ethereum
)检测用户连接到哪个以太坊网络
获取用户的以太坊账户
同时我们也支持 EIP-6963
此页面顶部的代码段足以检测提供程序。Provider API 是您创建功能齐全的 web3 应用程序所需的一切。
您也可以使用一些使用起来更简单的库,而不是直接使用 Provider API,比如 ethers。
Chain ID
这些是 TokenPocket Extension 默认支持的以太坊链的 ID。咨询chainid.network更多。
十六进制 | 十进制 | 网络 |
0x1 | 1 | 以太坊主网(Mainnet) |
0x38 | 56 | 币安智能链 |
0x80 | 128 | 火币生态链 |
0x42 | 66 | OKExChain |
0x89 | 137 | Polygon(Matic) |
0xa86a | 43114 | Avalanche C-Chain |
0x141 | 321 | KCC Mainnet |
0x63564c40 | 1666600000 | Harmony |
0xfa | 250 | Fantom |
0x2019 | 8217 | Klaytn |
0xa4b1 | 42161 | Arbitrum |
0x4e454152 | 1313161554 | Aurora |
0xa | 10 | Optimistic Ethereum |
0x46 | 70 | 虎符智能链 |
0x406 | 1030 | Conflux eSpace |
0x504 | 1284 | Moonbeam |
0x64 | 100 | Gnosis Chain (xDai) |
Properties
ethereum.isTokenPocket
如果用户的浏览器安装了 TokenPocket Extension 则返回true
,否则返回false
。
Methods
ethereum.isConnected()
提示
请注意,此方法与用户的帐户无关。
您可能经常会遇到“已连接”这个词,指的是 web3 站点是否可以访问用户的帐户。然而,在 Provider 接口中,“已连接”和“已断开”是指 Provider 是否可以向当前链发出 RPC 请求。
如果 Provider 连接到当前链,则返回 true
,否则返回false
。
如果 Provider 未连接,则必须重新加载页面才能重新建立连接。请参阅connect
和disconnect
事件了解更多信息。
ethereum.request(args)
使用request
通过 TokenPocket Extension 向以太坊提交 RPC 请求。它返回Promise
解析为 RPC 方法的调用结果。
params
和返回值将因 RPC 方法而异。在实践中,如果一个方法有几个 params
,它们几乎总是 Array<any>
类型。
如果请求因任何原因失败,Promise 将拒绝并返回 Ethereum RPC Error。
TokenPocket Extension 支持大多数标准化的以太坊 RPC 方法,此外还有一些其他钱包可能不支持的方法。有关详细信息,请参阅 TokenPocket Extension RPC API 文档。
例子
Events
TokenPocket Extension Provider 实现了Node.jsEventEmitter
API。本节详细介绍了通过该 API 发出的事件,您可以监听这样的事件:
另外,一旦你开启监听器,不要忘记删除它们(例如在 React 或者 Vue 中卸载组件时):
ethereum.removeListener
第一个参数是事件名称,第二个参数是对已传递给ethereum.on
第一个参数中提到的事件名称的同一函数的引用。
连接
当 TokenPocket Extension Provider 第一次能够向链提交 RPC 请求时,它会发出此事件。我们建议使用connect
事件处理程序和ethereum.isConnected()
方法来确定何时/是否连接了提供程序。
断开
如果因为网络连接问题或者是未知的错误导致了 TokenPocket Extension Provider 无法向任何链发送 RPC 请求的时候就会发出这个事件。
并且一旦disconnect这个事件发出之后 Provider 将不能再接受任何新的请求,除非重新加载页面并且建立连接,我们还提供了 ethereum.isConnected()
方法来确定提供程序是否已断开连接。
帐户更改
每当 eth_accounts RPC 方法的返回值发送变化的时候 TokenPocket Extension 提供程序都会发出这个事件。返回值是一个空数组或者值为十六进制账户地址的数组,
这就是说您可以监听accountsChanged
来得到用户每次切换的地址。
链改变
提示
有关TokenPocket Extension 的默认链及其 chain ID,请参阅Chain ID 部分。
信息
TokenPocket Extension Provider 在收到一些应该通知用户的消息时发出此事件。消息的种类由字符串标识。
RPC 订阅更新是该 message
事件的常见用例。例如,如果使用 eth_subscribe
创建订阅,则每个订阅更新都将作为一个消息事件发出,该消息事件的类型为 eth_subscribe
。
Errors
TokenPocket Extension 提供程序抛出或返回的所有错误都遵循此接口:
该ethereum.request(args)
方法抛出错误。您通常可以使用 errorcode
属性来确定请求失败的原因。常见代码及其含义包括:
4001
请求被用户拒绝
-32602
参数无效
-32603
内部错误
有关错误的完整列表,请参阅EIP-1193和EIP-1474.
提示
这eth-rpc-errors
包实现了 TokenPocket Extension Provider 抛出的所有 RPC 错误,并且可以帮助您识别它们的含义。
旧版 API
警告
在实践中,您永远不应依赖这些方法、属性或事件中的任何一个。
本节记录了我们的旧提供程序 API。TokenPocket Extension 仅在 Provider API 通过EIP-1193标准化之前支持此 API2020 年。因此,您可能会发现使用此 API 的 web3 站点或其他实现它的 providers。
旧版属性
ethereum.chainId(已弃用)
警告
此属性是非标准的,因此已弃用。
如果您需要检索当前 chain ID,请使用ethereum.request({ method: 'eth_chainId' })
. chainChanged
有关如何处理 chain ID 的更多信息,另请参阅事件。
此属性的值可以随时更改。
表示当前链 ID 的十六进制字符串。
ethereum.networkVersion(已弃用)
警告
您应该使用 chain ID 而不是 network ID。
如果您必须获取 network ID,请使用ethereum.request({ method: 'net_version' })
.
此属性的值可以随时更改。
表示当前区块链 network ID 的十进制字符串。
ethereum.selectedAddress(已弃用)
返回代表用户“当前选择”地址的十六进制字符串。
“当前选择的”地址是返回的数组中的第一项eth_accounts
。
传统方法
ethereum.enable()(已弃用)
ethereum.sendAsync()(已弃用)
警告
改为使用ethereum.request()
。
这是ethereum.request
以前的方法。 它仅适用于 JSON-RPC 方法,并将 JSON-RPC 请求负载对象和错误优先回调函数作为其参数。
查看以太坊 JSON-RPC API详情。
ethereum.send()(已弃用)
警告
改为使用ethereum.request()
。
这种方法的行为不可预测,请避免使用它。它本质上是ethereum.sendAsync()
.
ethereum.send()
可以通过三种不同的方式调用:
您可以将这些签名视为如下:
这个签名一模一样
ethereum.sendAsync()
这个签名就像一个
ethereum.sendAsync()
带有method
和params
作为参数的异步,而不是 JSON-RPC 有效负载和回调此签名使您能够同步调用以下 RPC 方法:
eth_accounts
eth_coinbase
eth_uninstallFilter
net_version
Last updated