Etherscan

ethersjs 中的 ethers.getDefaultProvider() 和 providers.EtherscanProvider() 有什麼區別?

  • December 28, 2021

ethersjs 中的 ethers.getDefaultProvider() 和 providers.EtherscanProvider() 有什麼區別,什麼時候應該使用一個而不是另一個?

來自ethers 文件

ethers.getDefaultProvider()將您連接到乙太坊網路上的節點。當您想直接與區塊鏈互動時使用它。

new ethers.providers.EtherscanProvider()將您連接到Etherscan 區塊鍊網路服務 API。如果您只需要來自 Etherscan Web 服務 API 的數據,請使用它。

ethers.getDefaultProvider()基本上是用於原型設計和測試。當您使用自己的 API 密鑰連接到特定提供商時,您可以獲得更好的性能和對通信指標的訪問。(見文件)

這些 API 密鑰作為社區資源由後端服務提供,用於低流量項目和早期原型設計。

由於這些

$$ default provider $$API 密鑰由所有使用者(尚未獲得自己的 API 密鑰)共享,它們被嚴格限制,這意味著重試發生得更頻繁,響應更慢。 強烈建議您為每個服務的免費層級註冊一個免費的 API 密鑰,這(取決於服務)包括許多優點:

  • 更高的請求率和並發請求限制
  • 更快的響應,更少的重試和超時
  • 用於性能調整和分析客戶行為的有用指標跟踪
  • 更高級的 API,例如存檔數據或高級日誌查詢

例如,要連接到 Ropsten 測試網路上的 Infura 節點:

let provider = new ethers.providers.InfuraProvider("ropsten", infuraProjectID);

對於 WebSockets:

let infuraRopstenWSProvider = new ethers.providers.InfuraProvider.getWebSocketProvider("ropsten", process.env.RPC_INFURA_PROJECTID);

您也可以使用更簡單的 JRPC URL,但是 JRPC 連接是只讀的:

let JRPC_infuraRopstenProvider = new ethers.providers.JsonRpcProvider(process.env.RPC_INFURA_HTTP_ROPSTEN_URL);

這也是一個不錯的Ethers.js 備忘單,用於其他功能。

引用自:https://ethereum.stackexchange.com/questions/108031