Developer (Chinese)
  • 开始
  • 移动端钱包
    • 准备开始
    • Mobile SDK
      • iOS
      • Android
      • 常见问题
    • EOS MiniWallet SDK
      • iOS
      • Android
    • DeepLink方式拉起钱包操作
    • JS-SDK
    • EOS资源代付
    • 应用调试
    • 清除TP钱包缓存
  • 插件钱包
    • 指引
      • 介绍
      • 入门
      • 通用术语
      • 初始化dapp
      • 访问账户
      • 发送交易
    • API参考
      • 以太坊 Provider API
      • 波场 Provider API
      • RPC API
      • 签署数据
    • 常见问题
  • 二维码协议
    • 动态二维码
    • EVM网络
    • TRON
    • EOSIO
    • Solana
    • BTC
  • TIP协议
  • Wallet Connect
  • Token
    • Token价格显示支持
    • 添加 Token
    • 添加Token图标
    • FAQ
  • DApp
    • 添加DApp
    • FAQ
  • 公链
    • 公链唯一标识
    • 开放接口
      • Ethereum系列公链
      • Polkadot系列公链
      • EOSIO系列公链
    • 已支持的公链开放接口
      • 交易相关数据
      • 行情相关数据
    • 新增公链
      • 便捷加链介绍和展示
      • 初级支持介绍和展示
      • 高级支持介绍和展示
      • 添加定制链的支持
  • 常见问题
Powered by GitBook
On this page
  • 基本用法
  • Chain ID
  • Properties
  • Methods
  • Events
  • Errors
  • 旧版 API
  • 旧版属性
  • 传统方法
  1. 插件钱包
  2. API参考

以太坊 Provider API

PreviousAPI参考Next波场 Provider API

Last updated 1 year ago

推荐阅读

我们建议所有 web3 站点开发人员阅读部分。

TokenPocket Extension 将一个全局 API 注入到其用户访问的网站中window.ethereum。该 API 允许网站请求用户的以太坊账户,从用户连接的区块链读取数据,并建议用户签署消息和交易。Provider 对象的存在表示以太坊用户。

以太坊 JavaScript 提供程序 API 由.

基本用法

对于任何重要的以太坊网络应用程序——也就是 dapp、web3 站点等运行,你必须:

  • 检测以太坊 Provider ( window.ethereum或 window.tokenpocket.ethereum)

  • 检测用户连接到哪个以太坊网络

  • 获取用户的以太坊账户

  • 同时我们也支持

此页面顶部的代码段足以检测提供程序。Provider API 是您创建功能齐全的 web3 应用程序所需的一切。

您也可以使用一些使用起来更简单的库,而不是直接使用 Provider API,比如 。

Chain ID

这些是 TokenPocket Extension 默认支持的以太坊链的 ID。咨询更多。

十六进制

十进制

网络

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 请求。

ethereum.isConnected(): boolean;

如果 Provider 连接到当前链,则返回 true,否则返回false。

ethereum.request(args)

interface RequestArguments {
  method: string;
  params?: unknown[] | object;
}

ethereum.request(args: RequestArguments): Promise<unknown>

使用request通过 TokenPocket Extension 向以太坊提交 RPC 请求。它返回Promise解析为 RPC 方法的调用结果。

params和返回值将因 RPC 方法而异。在实践中,如果一个方法有几个 params,它们几乎总是 Array<any>类型。

TokenPocket Extension 支持大多数标准化的以太坊 RPC 方法,此外还有一些其他钱包可能不支持的方法。有关详细信息,请参阅 TokenPocket Extension RPC API 文档。

例子

params: [
  {
    from: '0xb60e8dd61c5d32be8058bb8eb970870f07233155',
    to: '0xd46e8dd67c5d32be8058bb8eb970870f07244567',
    gas: '0x76c0', // 30400
    gasPrice: '0x9184e72a000', // 10000000000000
    value: '0x9184e72a', // 2441406250
    data:
      '0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675',
  },
];

ethereum
  .request({
    method: 'eth_sendTransaction',
    params,
  })
  .then((result) => {
    // The result varies by RPC method.
    // For example, this method will return a transaction hash hexadecimal string on success.
  })
  .catch((error) => {
    // If the request fails, the Promise will reject with an error.
  });

Events

ethereum.on('accountsChanged', (accounts) => {
  // Handle the new accounts, or lack thereof.
  // "accounts" will always be an array, but it can be empty.
});

ethereum.on('chainChanged', (chainId) => {
  // Handle the new chain.
  // Correctly handling chain changes can be complicated.
  // We recommend reloading the page unless you have good reason not to.
  window.location.reload();
});

另外,一旦你开启监听器,不要忘记删除它们(例如在 React 或者 Vue 中卸载组件时):

function handleAccountsChanged(accounts) {
  // ...
}

ethereum.on('accountsChanged', handleAccountsChanged);

// Later

ethereum.removeListener('accountsChanged', handleAccountsChanged);

ethereum.removeListener第一个参数是事件名称,第二个参数是对已传递给ethereum.on第一个参数中提到的事件名称的同一函数的引用。

连接

interface ConnectInfo {
  chainId: string;
}
ethereum.on('connect', handler: (connectInfo: ConnectInfo) => void);

断开

ethereum.on('disconnect', handler: (error: ProviderRpcError) => void);

如果因为网络连接问题或者是未知的错误导致了 TokenPocket Extension Provider 无法向任何链发送 RPC 请求的时候就会发出这个事件。

帐户更改

ethereum.on('accountsChanged', handler: (accounts: Array<string>) => void);

每当 eth_accounts RPC 方法的返回值发送变化的时候 TokenPocket Extension 提供程序都会发出这个事件。返回值是一个空数组或者值为十六进制账户地址的数组,

这就是说您可以监听accountsChanged来得到用户每次切换的地址。

链改变

提示

ethereum.on('chainChanged', handler: (chainId: string) => void);

信息

interface ProviderMessage {
  type: string;
  data: unknown;
}

ethereum.on('message', handler: (message: ProviderMessage) => void);

TokenPocket Extension Provider 在收到一些应该通知用户的消息时发出此事件。消息的种类由字符串标识。

RPC 订阅更新是该 message 事件的常见用例。例如,如果使用 eth_subscribe 创建订阅,则每个订阅更新都将作为一个消息事件发出,该消息事件的类型为 eth_subscribe。

Errors

TokenPocket Extension 提供程序抛出或返回的所有错误都遵循此接口:

interface ProviderRpcError extends Error {
  message: string;
  code: number;
  data?: unknown;
}
  • 4001

    • 请求被用户拒绝

  • -32602

    • 参数无效

  • -32603

    • 内部错误

提示

旧版 API

警告

在实践中,您永远不应依赖这些方法、属性或事件中的任何一个。

旧版属性

ethereum.chainId(已弃用)

警告

此属性是非标准的,因此已弃用。

此属性的值可以随时更改。

表示当前链 ID 的十六进制字符串。

ethereum.networkVersion(已弃用)

警告

您应该使用 chain ID 而不是 network ID。

此属性的值可以随时更改。

表示当前区块链 network ID 的十进制字符串。

ethereum.selectedAddress(已弃用)

警告

此属性的值可以随时更改。

返回代表用户“当前选择”地址的十六进制字符串。

“当前选择的”地址是返回的数组中的第一项eth_accounts。

传统方法

ethereum.enable()(已弃用)

警告

ethereum.sendAsync()(已弃用)

警告

interface JsonRpcRequest {
  id: string | undefined;
  jsonrpc: '2.0';
  method: string;
  params?: Array<any>;
}

interface JsonRpcResponse {
  id: string | undefined;
  jsonrpc: '2.0';
  method: string;
  result?: unknown;
  error?: Error;
}

type JsonRpcCallback = (error: Error, response: JsonRpcResponse) => unknown;

ethereum.sendAsync(payload: JsonRpcRequest, callback: JsonRpcCallback): void;

这是ethereum.request 以前的方法。 它仅适用于 JSON-RPC 方法,并将 JSON-RPC 请求负载对象和错误优先回调函数作为其参数。

ethereum.send()(已弃用)

警告

改为使用ethereum.request()。

ethereum.send(
  methodOrPayload: string | JsonRpcRequest,
  paramsOrCallback: Array<unknown> | JsonRpcCallback,
): Promise<JsonRpcResponse> | void;

ethereum.send()可以通过三种不同的方式调用:

// 1.
ethereum.send(payload: JsonRpcRequest, callback: JsonRpcCallback): void;

// 2.
ethereum.send(method: string, params?: Array<unknown>): Promise<JsonRpcResponse>;

// 3.
ethereum.send(payload: JsonRpcRequest): unknown;

您可以将这些签名视为如下:

  1. 这个签名一模一样ethereum.sendAsync()

  2. 这个签名就像一个ethereum.sendAsync()带有method和params作为参数的异步,而不是 JSON-RPC 有效负载和回调

  3. 此签名使您能够同步调用以下 RPC 方法:

    • eth_accounts

    • eth_coinbase

    • eth_uninstallFilter

    • net_version

如果 Provider 未连接,则必须重新加载页面才能重新建立连接。请参阅和事件了解更多信息。

如果请求因任何原因失败,Promise 将拒绝并。

TokenPocket Extension Provider 实现了API。本节详细介绍了通过该 API 发出的事件,您可以监听这样的事件:

当 TokenPocket Extension Provider 第一次能够向链提交 RPC 请求时,它会发出此事件。我们建议使用connect事件处理程序和来确定何时/是否连接了提供程序。

并且一旦disconnect这个事件发出之后 Provider 将不能再接受任何新的请求,除非重新加载页面并且建立连接,我们还提供了 来确定提供程序是否已断开连接。

有关TokenPocket Extension 的默认链及其 chain ID,请参阅。

该抛出错误。您通常可以使用 errorcode属性来确定请求失败的原因。常见代码及其含义包括:

有关错误的完整列表,请参阅和.

这包实现了 TokenPocket Extension Provider 抛出的所有 RPC 错误,并且可以帮助您识别它们的含义。

本节记录了我们的旧提供程序 API。TokenPocket Extension 仅在 Provider API 通过2020 年。因此,您可能会发现使用此 API 的 web3 站点或其他实现它的 providers。

如果您需要检索当前 chain ID,请使用. 有关如何处理 chain ID 的更多信息,另请参阅事件。

如果您必须获取 network ID,请使用.

改为使用。

改为使用。

改为使用。

查看详情。

这种方法的行为不可预测,请避免使用它。它本质上是.

Node.jsEventEmitter
EIP-1193
EIP-1474
eth-rpc-errors
EIP-1193标准化之前支持此 API
以太坊 JSON-RPC API
EIP-1193指定
EIP-6963
ethers
chainid.network
基本用法
connect
disconnect
返回 Ethereum RPC Error
ethereum.isConnected()方法
ethereum.isConnected()方法
Chain ID 部分
ethereum.request(args)方法
ethereum.request({ method: 'eth_chainId' })
chainChanged
ethereum.request({ method: 'net_version' })
ethereum.request({ method: 'eth_accounts' })
ethereum.request({ method: 'eth_requestAccounts' })
ethereum.request()
ethereum.sendAsync()