Ethereum Provider API

868 阅读1分钟

web app通过provider跟eth chain, wallet,client 进行监听,交互。主要有request方法发送rpc并响应事件,和监听events事件两种方式。

四个基本概念

1 Provider

一个javascript对象,用来访问eth链。

2 Client

接收 Provider 发出的 RPC请求的一个点,并返回结果。

3 Wallet

用来管理密钥和执行签名操作的应用,位于provider 和 client 之间。

4 Remote Procedure Call (RPC)

方法:

request

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

Provider.request(args: RequestArguments): Promise<unknown>;

interface ProviderRpcError extends Error { code: number; data?: unknown; }

Provider 错误类型

Status codeNameDescription
4001User Rejected RequestThe user rejected the request.
4100UnauthorizedThe requested method and/or account has not been authorized by the user.
4200Unsupported MethodThe Provider does not support the requested method.
4900DisconnectedThe Provider is disconnected from all chains.
4901Chain DisconnectedThe Provider is not connected to the requested chain.

Events

message

Subscriptions

connect

disconnect

chainChanged

accountsChanged

总结

Provider 的目的是提供一个可以跟eth链交互的consumer,所以它必须给dapp提供:

1 向eth链发送rpc请求

2 监听eth链,wallet 和 client 的上变化

provider的api只提供了一种方法和5种event。其中events可以分成两类

1 是否可以发送RPC了 connect disconnect

2 client 和 wallet 是否发生变化了 chainChanged accountsChanged

目前实现了provider API 的库有:

buidler.dev ethers.js eth-provider MetaMask WalletConnect web3.js

目前uniswap用到的是ethers.js