JsonRpcProvider inherits Provider

JSON-RPC API是与以太坊交互比较流行的方法,在主要的以太坊节点实现(如GethParity)以及许多第三方web服务(如INFURA)中都可以用。

new ethers.providers.JsonRpcProvider( [ urlOrConnectionInfo [networkish ] ] )

使用 URL 或者 ConnectionInfo urlOrConnectionInfo 作为一个一个 JSON-RPC HTTP API 连接到 networkish 网络。

如果 urlOrConnectionInfo 没有被指定, 默认值是http://localhost:8545。 如果网络没有被指定, 它将会自动使用 eth_chaindId查询网络节点并返回 eth_networkId从而确定网络。

注意: 连接到本地节点

每个节点的实现略有不同,可能需要特定的命令行标志、配置或UI设置,以启用JSON-RPC、解锁帐户或公开特定的api。请参考他们的文档。

jsonRpcProvider.getSigner( [ addressOrIndex ] ) JsonRpcSigner

返回一个由该以太坊节点管理的JsonRpcSigner,地址为addressOrIndex。如果没有提供addressOrIndex,则使用第一个帐户(account #0)。

jsonRpcProvider.getUncheckedSigner( [ addressOrIndex ] ) JsonRpcUncheckedSigner
jsonRpcProvider.listAccounts( ) Promise< Array< string > >

返回此provider管理的所有帐户地址的列表。

jsonRpcProvider.send( methodparams ) Promise< any >

允许向provider发送原始消息。

这可以用于后端特定的调用,比如调试或特定的帐户管理。

JsonRpcSigner inherits Signer

JsonRpcSigner是一个简单的Signer,它由一个连接的JsonRpcProvider支持。

signer.provider JsonRpcProvider

创建这个signer的provider

signer.connectUnchecked( ) JsonRpcUncheckedSigner

返回一个新的Signer对象,该对象在发送交易时不执行额外的检查。详情请参阅getUncheckedSigner

signer.sendUncheckedTransaction( transaction ) Promise< string< DataHexString< 32 > > >

发送交易并返回一个解析为不透明交易哈希的Promise。

signer.unlock( password ) Promise< boolean >

使用密码请求节点解除锁定(如果被锁了)。

JsonRpcUncheckedSigner inherits Signer

JSON-RPC API仅在发送交易时提供交易哈希作为响应,但ether Provider要求在返回交易之前填充交易的所有细节。 例如,燃料价格(gas price)和燃料限制(gas limit)可能由节点或自动包含在内的nonce调整,在这种情况下,不透明的交易哈希已经丢弃了这一点。

为了解决这个问题,JsonRpcSigner立即查询provider的详细信息,用返回的交易哈希来填充TransactionResponse对象。

一些后端不立即响应,直到区块被挖出,才发布它负责签署的交易的细节。

UncheckedSigner不填充任何附加信息,并将一个模拟的类似TransactionResponse的对象作为立即返回的结果, 其中大部分属性设置为null,但如果只需要这些,则可以快速获得交易哈希。

StaticJsonRpcProvider inherits JsonRpcProvider

ethers Provider将频繁执行getNetwork调用,以确保网络调用和网络通信是一致的。

在像MetaMask这样的客户端情况下,这是需要的,因为用户可以随时改变网络,在这种情况下,检查chainId的成本是本地的,因此很便宜。

在像MetaMask这样的客户端情况下是非常有必要的,因为用户可能随时改变网络, 在这种情况下,检查chainId的成本是在本地的,因此很便宜。

众所周知,在某些情况下网络不能改变,如当连接到一个INFURA端点,在这种情况下,可以使用SStaticJsonRpcProvider来将一直缓存链ID,可以减少网络流量和往返查询chain ID的次数。

这个Provider 应在网络不能更改时使用。

节点特定的方法

许多方法是不常见的或特定于某些以太坊节点(例如ParityGeth)才有的。这些方法包括帐户和管理员管理、调试、更深层次的区块和交易探索以及其他服务(如Swarm和Whisper)。

可以使用jsonRpcProvider.send 来获得这些方法。