提供者(Provider)是以太坊网络连接的抽象,为标准以太坊节点功能提供简洁、一致的接口。
ethers.js 库 提供了几种选项应该涵盖了绝大多数用例,但如果需要个性化配置,也包括了子类化所需的函数和类。
大多数用户应该使用 默认的 Provider.
默认的 provider 是在Ethereum上最简单、最安全的方法方式,而且它也具备足够强的鲁棒性,可以在生产环境中使用。
它创建一个连接到尽可能多的后端服务的FallbackProvider。当发出一个请求时,它会同时发送到多个后端。当从每个后端返回响应时,会检查它们是否同意。 一旦达到规定数量(即足够多的后端同意),你的应用程序就会得到相应。
它会确保如果后端不同步或者被破坏,那么将会放弃这个响应,选择接受而支持大多数认同的响应。
返回一个新的Provider,由多个服务支持连接到 网络。如果没有提供 网络,那么将会使用 homestead (例如mainnet) 。
网络 也可以作为 URL 来连接,比如 http://localhost:8545
或 wss://example.com
。
options 参数是一个对象,有以下几个属性:
Property | Description | |
alchemy | Alchemy API Token | |
etherscan | Etherscan API Token | |
infura | INFURA Project ID 或 { projectId, projectSecret } | |
Pocket Network Application ID 或 { applicationId, applicationSecretKey } | ||
quorum | 必须满足规定的后端同意数量 (默认: 2 for mainnet, 1 for testnets) | |
Option 对象的属性 |
强烈建议在生产环境下,从每个服务商获取制定一个API Keys。
ethers提供的默认的API Keys是所有用户之间共享的,在大量服务加载的时候可能默认的API key服务会有所被限制,需要提前意识到这一点。
许多服务还具有监视和使用指标,这些指标只有在指定了API Key时才可用。这允许跟踪有多少请求正在被发送,以及哪些方法被使用得最多。
有些服务还提供额外的付费功能,这些功能只有在指定API Key时才可用。
有几个官方的通用以太坊网络,以及自定义网络和其他兼容项目。
任何接收Networkish 的API都可以传递一个通用名称(如 "mainnet"
or "ropsten"
) 或者 chain ID、自定义的参数来定义网络。
通过给定标准规范的aNetworkish Networkish,返回完整的 Network 。
这对于希望接受Networkish作为输入参数的函数和类非常有用。
这是因为通常需要在为Network 指定自定义属性来覆盖root ENS registry,或者是在一个通用的网络中拦截ENS 方法, 又或者是在一个开发环境的网络中(绝大多数开发环境中的网络中的ENS合约需要你手动部署)指定ENS registry。