以太坊 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