API Providers

有很多服务都提供了访问以太坊区块链的web API。这些提供商允许连接到它们,因为你不需要运行你自己的实例或以太坊节点集群,这就简化了开发。

然而,这种对第三方服务的依赖会降低弹性和安全性,并增加所需的信任度。为了缓解这些问题,建议您使用 Default Provider

EtherscanProvider inherits Provider

EtherscanProvider是由各种Etherscan APIs的组合所支持。

new ethers.providers.EtherscanProvider( [ network = "homestead" , [ apiKey ] ] )

使用可选的apiKey创建一个新的EtherscanProvider连接到网络

这个网络可以被指定为一个字符串类型的网络名称、或number类型的链ID,或[网络对象]provider-(network)。

如果没有提供apiKey,将使用一个共享的API key,这可能会导致性能降低和请求受限。 强烈推荐在生产环境中使用您在Etherscan上注册的API密钥。

注意: 默认的 API keys

如果没有提供apiKey,将使用一个共享的API key,这可能会导致性能降低和请求受限。

强烈推荐在生产环境中使用您在Etherscan上注册的API密钥。

支持的网络

  • homestead - Homestead (Mainnet)
  • goerli - Görli (clique testnet)
  • sepolia - Sepolia (proof-of-authority testnet)
  • arbitrum - Arbitrum Optimistic L2
  • arbitrum-goerli - Arbitrum Optimistic L2 testnet
  • matic - Polgon mainnet
  • maticmum - Polgon testnet
  • optimism - Optimism Optimistic L2
  • optimism-goerli - Optimism Optimistic L2 testnet

Etherscan 例子
// 连接主网 (homestead) provider = new EtherscanProvider(); // 连接 rinkeby 测试网(以下这两种方式是等价的) provider = new EtherscanProvider("goerli"); provider = new EtherscanProvider(5); network = ethers.providers.getNetwork("goerli"); // { // chainId: 5, // ensAddress: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', // name: 'goerli' // } provider = new EtherscanProvider(network); // 通过API key 连接主网(homestead) provider = new EtherscanProvider(null, apiKey); provider = new EtherscanProvider("homestead", apiKey);
provider.getHistory( address ) Array< History >

@TODO... Explain

InfuraProvider inherits UrlJsonRpcProvider

InfuraProvider 被流行的INFURA以太坊服务所支持。

new ethers.providers.InfuraProvider( [ network = "homestead" , [ apiKey ] ] )

使用可选的apiKey创建一个新的InfuraProvider连接到网络

这个网络可以被指定为一个字符串类型的网络名称、或number类型的链ID,或[网络对象]provider-(network)。

apiKey可以是一个string类型的Project ID,也可以是一个带有projectIdprojectSecret属性对象, 用于指定一个可以在非公共源(如服务器)上使用的Project Secret, 以进一步保护你的API access 和 quotas。

InfuraProvider.getWebSocketProvider( [ network [ , apiKey ] ] ) WebSocketProvider

Create a new WebSocketProvider 使用 INFURA web-socket 端点创建一个新的WebSocketProvider,并使用可选的apiKey连接到网络。 网络和apiKey的设定与构造函数相同。

网络apiKey 的设定与构造函数相同。

注意: 默认的 API keys

如果没有提供apiKey,将使用一个共享的API key,这可能会导致性能降低和请求受限。

强烈推荐在生产环境中使用您通过INFURA注册的API密钥。

支持的网络

  • homestead - Homestead (Mainnet)
  • goerli - Görli (clique testnet)
  • sepolia - Sepolia (proof-of-authority testnet)
  • arbitrum - Arbitrum Optimistic L2
  • arbitrum-goerli - Arbitrum Optimistic L2 testnet
  • matic - Polgon mainnet
  • maticmum - Polgon testnet
  • optimism - Optimism Optimistic L2
  • optimism-goerli - Optimism Optimistic L2 testnet

INFURA 例子
// 连接到主网 (homestead) provider = new InfuraProvider(); // 连接到 goerli 测试网 // (see EtherscanProvider above for other network examples) provider = new InfuraProvider("goerli"); // 使用一个Project ID连接到主网(以下这两种方式是等价的) provider = new InfuraProvider(null, projectId); provider = new InfuraProvider("homestead", projectId); // 使用Project ID 和 Project Secret 连接到主网 provider = new InfuraProvider("homestead", { projectId: projectId, projectSecret: projectSecret }); // 使用一个 WebSocketProvider 连接到 INFURA WebSocket 端点 provider = InfuraProvider.getWebSocketProvider()

AlchemyProvider inherits UrlJsonRpcProvider

AlchemyProvider 是被Alchemy所支持的。

new ethers.providers.AlchemyProvider( [ network = "homestead" , [ apiKey ] ] )

通过可选的apiKey创建一个新的AlchemyProvider 连接到网络

这个网络可以被指定为一个字符串类型的网络名称、或number类型的链ID,或[网络对象]provider-(network)。

注意: 默认的 API keys

如果没有提供apiKey,将使用一个共享的API key,这可能会导致性能降低和请求受限。

强烈推荐在生产环境中使用您通过Alchemy 注册的API密钥。

支持的网络

  • homestead - Homestead (Mainnet)
  • goerli - Görli (clique testnet)
  • sepolia - Sepolia (proof-of-authority testnet)
  • arbitrum - Arbitrum Optimistic L2
  • arbitrum-goerli - Arbitrum Optimistic L2 testnet
  • matic - Polgon mainnet
  • maticmum - Polgon testnet
  • optimism - Optimism Optimistic L2
  • optimism-goerli - Optimism Optimistic L2 testnet

Alchemy Examples
// 连接到主网(homestead) provider = new AlchemyProvider(); // 连接到 goerli 测试网 // (see EtherscanProvider above for other network examples) provider = new AlchemyProvider("goerli"); // 使用 apiKey 连接到主网(以下这两种方式是等价的) provider = new AlchemyProvider(null, apiKey); provider = new AlchemyProvider("homestead", apiKey); // 使用一个 WebSocketProvider 连接到 Alchemy WebSocket 端点 provider = AlchemyProvider.getWebSocketProvider()

CloudflareProvider inherits UrlJsonRpcProvider

CloudflareProvider 是被 Cloudflare Ethereum Gateway所支持的。

new ethers.providers.CloudflareProvider( )

创建一个新的CloudflareProvider 连接到主网(homestead)。

支持的网络

  • Homestead (主网)

Cloudflare 例子
// 连接到主网(homestead) provider = new CloudflareProvider();