其他的 Providers

FallbackProvider inherits Provider

FallbackProvider 是ethers中可用的且最高级的Provider

它使用一个quorum并连接到多个Providers作为后端,每个Providers都配置了一个优先级权重

当发出一个请求时,请求被分配给多个随机选择的后端(优先级较低的后端总是被先选中), 并将每个请求的结果与其他请求进行比较。只有达到quorum规定的数量后,该结果才会被接受并返回给调用方。

默认情况下,quorum需要50%(四舍五入)的后端响应(to agree)。权重可用于让一个后端Provider作用更强。

new ethers.providers.FallbackProvider( providers [ , quorum ] )

创建一个连接到providers的FallbackProvider的新实例。 如果quorum未指定,则设为provider权重总和的一半。

providers可以是ProviderFallbackProviderConfig的数组。 如果提供了Provider,默认的优先级为1,权重为1。

provider.providerConfigs Array< FallbackProviderConfig >

描述后端的Provider配置列表。

provider.quorum number

在得到结果之前,后端响应的quorum必须达成一致。默认情况下,这个值是权重之和的一半

FallbackProviderConfig

fallbackProviderConfig.provider Provider

该配置的provider。

fallbackProviderConfig.priority number

表示provider使用的优先级。Lower-value优先级比higher-value优先级更受欢迎。 如果多个providers共享相同的优先级,则随机选择它们。

fallbackProviderConfig.stallTimeout number

超时后(以ms为单位)将会尝试其他的Provider。这不会影响到当前的Provider; 如果它返回一个结果,将会计数,并算入到quorum的一部分。

Lower values的Provider会造成更多的网络流量,但可能会减少响应的时间。

fallbackProviderConfig.weight number

表示这个provider响应的权重。比如,你认为某个Provider更值得信任,就可以用这个参数去设置。

IpcProvider inherits JsonRpcProvider

IpcProvider 允许JSON-RPC API在文件系统的本地文件名上使用。 Geth, Parity和其他节点都会开放了这个功能。

这只能在node.js中使用,因为它需要访问文件系统,并且由于文件权限可能有增加额外的复杂性。(请参阅相关节点实现的文档)

ipcProvider.path string

这个Provider要连接的路径。

UrlJsonRpcProvider inherits JsonRpcProvider

这个类打算作为子类而不是直接使用。只需要额外生成一个SON-RPCURL后,就能通过JsonRpcProvider创建一个Provider

new ethers.providers.UrlJsonRpcProvider( [ network [ , apiKey ] ] )

子类通常不需要重写这一部分。相反应该重写静态的方法 getUrl 和可选的getApiKey

urlJsonRpcProvider.apiKey any

InheritedClass.getApiKey返回的apiKey的值。

InheritingClass.getApiKey( apiKey ) any

这个函数应该检查apiKey以确保它是有效的,并返回一个(可能修改过的)值在getUrl函数中使用。

InheritingClass.getUrl( network , apiKey ) string

这个URL在JsonRpcProvider 实例中使用。

Web3Provider inherits JsonRpcProvider

Web3Provider为了方便一个基于web3.js应用程序迁移到ethers,主要是通过将现有的Web3-compatible (比如一个 Web3HttpProvider, Web3IpcProvider 或者 Web3WsProvider) 打包进ethers.js作为ethers.js Provider,并将相应的接口暴露出去,它可以和ethers.js库的其他部分一起使用。

这也可以将一个标准的EIP-1193 Provider打包进去。

new ethers.providers.Web3Provider( externalProvider [ , network ] )

创建一个Web3Provider,它能将EIP-1193 Provider 或者 Web3Provider-compatible Provider打包进去。

web3Provider.provider Web3CompatibleProvider

这个provider用于创建一个实例。

ExternalProvider

ExternalProvider 可以是上面提到的 Web3 Providers (或者是其他兼容的) 又或者是一个EIP-1193 provider。

ExternalProvider必须提供以下签名之一,并且使用第一个匹配的签名:

externalProvider.request( request ) Promise< any >

它遵循EIP-1193 API 签名。

request 应该是一个标准的 JSON-RPC payload, 最少指定methodparams

结果应该是实际的结果,它与Web3.js响应不同,后者是一个包装好的JSON-RPC响应。

externalProvider.sendAsync( request , callback ) void

它遵循Web3.js Provider Signature.

request 应该是一个标准的 JSON-RPC payload, 最少指定methodparams

回调函数应该使用错误优先调用的语义,比如(error, result),其中result是JSON-RPC包装后的得到的。

externalProvider.send( request , callback ) void

这与sendAsync是相同的。在历史上,这使用了一个同步的web请求,但当前没有浏览器支持这种方式,所以它的这种使用方式在很久以前就被弃用了。

WebSocketProvider inherits JsonRpcProvider

WebSocketProvider 连接到一个JSON-RPC websocket兼容的后端,它允许持久连接、多路复用请求和发布-子事件,以实现更即时的事件调度。

WebSocket API是较新的,如果运行自己的基础设施,请注意WebSockets对服务器资源的占用会很大, 因为它们必须管理和维护每个客户端的状态。由于这个原因,许多服务也可能会为使用他们的WebSocket端点而收取额外的费用。

new ethers.providers.WebSocketProvider( [ url [ , network ] ] )

通过一个url连接到网络,返回一个新的WebSocketProvider

如果url未指定,默认值是"ws://localhost:8546"。 如果network未被指定,它将会从网络中查询。