Providers

提供者(Provider)是以太坊网络连接的抽象,为标准以太坊节点功能提供简洁、一致的接口。

ethers.js 库 提供了几种选项应该涵盖了绝大多数用例,但如果需要个性化配置,也包括了子类化所需的函数和类。

大多数用户应该使用 默认的 Provider.

默认的 Provider

默认的 provider 是在Ethereum上最简单、最安全的方法方式,而且它也具备足够强的鲁棒性,可以在生产环境中使用。

它创建一个连接到尽可能多的后端服务的FallbackProvider。当发出一个请求时,它会同时发送到多个后端。当从每个后端返回响应时,会检查它们是否同意。 一旦达到规定数量(即足够多的后端同意),你的应用程序就会得到相应。

它会确保如果后端不同步或者被破坏,那么将会放弃这个响应,选择接受而支持大多数认同的响应。

ethers.getDefaultProvider( [ network , [ options ] ] ) Provider

返回一个新的Provider,由多个服务支持连接到 网络。如果没有提供 网络,那么将会使用 homestead (例如mainnet) 。

网络 也可以作为 URL 来连接,比如 http://localhost:8545wss://example.com

options 参数是一个对象,有以下几个属性:

PropertyDescription 
alchemyAlchemy API Token 
etherscanEtherscan API Token 
infuraINFURA Project ID 或 { projectId, projectSecret } 
pocketPocket Network Application ID 或 { applicationId, applicationSecretKey } 
quorum必须满足规定的后端同意数量 (默认: 2 for mainnet, 1 for testnets) 
Option 对象的属性 
注意: API Keys

强烈建议在生产环境下,从每个服务商获取制定一个API Keys。

ethers提供的默认的API Keys是所有用户之间共享的,在大量服务加载的时候可能默认的API key服务会有所被限制,需要提前意识到这一点。

许多服务还具有监视和使用指标,这些指标只有在指定了API Key时才可用。这允许跟踪有多少请求正在被发送,以及哪些方法被使用得最多。

有些服务还提供额外的付费功能,这些功能只有在指定API Key时才可用。

网络

有几个官方的通用以太坊网络,以及自定义网络和其他兼容项目。

任何接收Networkish 的API都可以传递一个通用名称(如 "mainnet" or "ropsten") 或者 chain ID、自定义的参数来定义网络。

ethers.providers.getNetwork( aNetworkish ) Network

通过给定标准规范的aNetworkish Networkish,返回完整的 Network

这对于希望接受Networkish作为输入参数的函数和类非常有用。

// 通过链名 getNetwork("homestead"); // { // chainId: 1, // ensAddress: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', // name: 'homestead' // } // 通过链ID getNetwork(1); // { // chainId: 1, // ensAddress: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', // name: 'homestead' // }

自定义的 ENS 合约

这是因为通常需要在为Network 指定自定义属性来覆盖root ENS registry,或者是在一个通用的网络中拦截ENS 方法, 又或者是在一个开发环境的网络中(绝大多数开发环境中的网络中的ENS合约需要你手动部署)指定ENS registry。

例子: 重写 ENS registry
const network = { name: "dev", chainId: 1337, ensAddress: customEnsAddress };

Provider 文档

Provider
账户的方法
区块的方法
以太坊域名服务 (ENS) 方法
EnsResolver
Logs 方法
Network Status Methods
Transactions 方法
Event Emitter 方法
校验方法
JsonRpcProvider
JsonRpcSigner
JsonRpcUncheckedSigner
StaticJsonRpcProvider
节点特定的方法
API Providers
EtherscanProvider
InfuraProvider
AlchemyProvider
CloudflareProvider
其他的 Providers
FallbackProvider
IpcProvider
UrlJsonRpcProvider
Web3Provider
WebSocketProvider
Types
BlockTag
Networkish
Network
FeeData
Block
Events and Logs
Transactions
Access Lists