FallbackProvider 是ethers中可用的且最高级的Provider。
它使用一个quorum并连接到多个Providers作为后端,每个Providers都配置了一个优先级和权重。
当发出一个请求时,请求被分配给多个随机选择的后端(优先级较低的后端总是被先选中), 并将每个请求的结果与其他请求进行比较。只有达到quorum规定的数量后,该结果才会被接受并返回给调用方。
默认情况下,quorum需要50%(四舍五入)的后端响应(to agree)。权重可用于让一个后端Provider作用更强。
创建一个连接到providers的FallbackProvider的新实例。 如果quorum未指定,则设为provider权重总和的一半。
providers可以是Provider 或 FallbackProviderConfig的数组。 如果提供了Provider,默认的优先级为1,权重为1。
描述后端的Provider配置列表。
在得到结果之前,后端响应的quorum必须达成一致。默认情况下,这个值是权重之和的一半。
该配置的provider。
表示provider使用的优先级。Lower-value优先级比higher-value优先级更受欢迎。 如果多个providers共享相同的优先级,则随机选择它们。
超时后(以ms为单位)将会尝试其他的Provider。这不会影响到当前的Provider; 如果它返回一个结果,将会计数,并算入到quorum的一部分。
Lower values的Provider会造成更多的网络流量,但可能会减少响应的时间。
表示这个provider响应的权重。比如,你认为某个Provider更值得信任,就可以用这个参数去设置。
IpcProvider inherits JsonRpcProvider
IpcProvider 允许JSON-RPC API在文件系统的本地文件名上使用。 Geth, Parity和其他节点都会开放了这个功能。
这只能在node.js中使用,因为它需要访问文件系统,并且由于文件权限可能有增加额外的复杂性。(请参阅相关节点实现的文档)
这个Provider要连接的路径。
UrlJsonRpcProvider inherits JsonRpcProvider
这个类打算作为子类而不是直接使用。只需要额外生成一个SON-RPCURL后,就能通过JsonRpcProvider创建一个Provider。
子类通常不需要重写这一部分。相反应该重写静态的方法 getUrl
和可选的getApiKey
。
从InheritedClass.getApiKey
返回的apiKey的值。
这个函数应该检查apiKey以确保它是有效的,并返回一个(可能修改过的)值在getUrl
函数中使用。
这个URL在JsonRpcProvider 实例中使用。
Web3Provider inherits JsonRpcProvider
Web3Provider为了方便一个基于web3.js应用程序迁移到ethers,主要是通过将现有的Web3-compatible (比如一个 Web3HttpProvider, Web3IpcProvider 或者 Web3WsProvider) 打包进ethers.js作为ethers.js Provider,并将相应的接口暴露出去,它可以和ethers.js库的其他部分一起使用。
这也可以将一个标准的EIP-1193 Provider打包进去。
创建一个Web3Provider,它能将EIP-1193 Provider 或者 Web3Provider-compatible Provider打包进去。
这个provider用于创建一个实例。
ExternalProvider 可以是上面提到的 Web3 Providers (或者是其他兼容的) 又或者是一个EIP-1193 provider。
ExternalProvider必须提供以下签名之一,并且使用第一个匹配的签名:
它遵循EIP-1193 API 签名。
request 应该是一个标准的 JSON-RPC payload, 最少指定method
和 params
。
结果应该是实际的结果,它与Web3.js响应不同,后者是一个包装好的JSON-RPC响应。
它遵循Web3.js Provider Signature.
request 应该是一个标准的 JSON-RPC payload, 最少指定method
和 params
。
回调函数应该使用错误优先调用的语义,比如(error, result),其中result是JSON-RPC包装后的得到的。
这与sendAsync
是相同的。在历史上,这使用了一个同步的web请求,但当前没有浏览器支持这种方式,所以它的这种使用方式在很久以前就被弃用了。
WebSocketProvider inherits JsonRpcProvider
WebSocketProvider 连接到一个JSON-RPC websocket兼容的后端,它允许持久连接、多路复用请求和发布-子事件,以实现更即时的事件调度。
WebSocket API是较新的,如果运行自己的基础设施,请注意WebSockets对服务器资源的占用会很大, 因为它们必须管理和维护每个客户端的状态。由于这个原因,许多服务也可能会为使用他们的WebSocket端点而收取额外的费用。
通过一个url连接到网络,返回一个新的WebSocketProvider。
如果url未指定,默认值是"ws://localhost:8546"
。 如果network未被指定,它将会从网络中查询。