Hardhat

如何在代理後面使用 HardHat

  • April 11, 2022

我在防火牆後面使用HardHat ( repo ),需要出站連接才能使用代理。這通常很容易,例如配置 NPM以使用代理,您可以設置環境變數HTTP_PROXYHTTPS_PROXY.

在 HardHat 中,當執行類似的命令時npx hardhat compile,HardHat 會伸出手來https://solc-bin.ethereum.org/windows-amd64/list.json獲取solidity 編譯器的最新版本列表solc。該命令失敗,因為它無法訪問該地址,導致獲取失敗,隨後命令失敗。(錯誤消息在下面的堆棧跟踪中)

有沒有…

A) 配置 HardHat 以使用代理?

或者

B)手動安裝(使用和更新之solc類的東西)並禁用HardHat檢查編譯器列表和安裝編譯器?yarn add solc``hardhat.config.js

錯誤:

HardhatError: HH502: Couldn't download compiler versions list. Please check your connection.
   at CompilerDownloader.downloadCompilersList (C:\Projects\myProject\node_modules\hardhat\src\internal\solidity\compiler\downloader.ts:185:13)
   at processTicksAndRejections (internal/process/task_queues.js:97:5)

   Caused by: FetchError: request to https://solc-bin.ethereum.org/windows-amd64/list.json failed, reason: read ECONNRESET
       at ClientRequest.<anonymous> (C:\Projects\myProject\node_modules\node-fetch\lib\index.js:1461:11)
       at ClientRequest.emit (events.js:315:20)
       at TLSSocket.socketErrorListener (_http_client.js:426:9)
       at TLSSocket.emit (events.js:315:20)
       at emitErrorNT (internal/streams/destroy.js:92:8)
       at emitErrorAndCloseNT (internal/streams/destroy.js:60:3)
       at processTicksAndRejections (internal/process/task_queues.js:84:21)

編輯/更新:

我找到了任務名稱subtask(TASK_COMPILE_SOLIDITY_RUN_SOLCJS)來使用 solcjs 進行編譯。有沒有辦法將 solcjs 配置為預設編譯器?可能通過 ENV 變數?

2021 年 5 月更新:

HardHat 添加了在代理HTTP_PROXYHTTPS_PROXY 配置中設置的功能,正如@beijingjazzpanda用PR1291指出的那樣。

警告

Hardhat 將自動下載您設置的 solc 版本。如果您使用 HTTP 代理,則可能需要將 HTTP_PROXY 或 HTTPS_PROXY 環境變數設置為代理的 URL。

對於某些可能無法訪問 Internet 的情況,請考慮擴展本範例hardhat.config.js中所示的以引用特定版本,類似於以下內容:solc

const { TASK_COMPILE_SOLIDITY_GET_SOLC_BUILD } = require("hardhat/builtin-tasks/task-names");
const path = require("path");

subtask(TASK_COMPILE_SOLIDITY_GET_SOLC_BUILD, async (args, hre, runSuper) => {
 if (args.solcVersion === "0.8.5") {
   const compilerPath = path.join(__dirname, "soljson-v0.8.5-nightly.2021.5.12+commit.98e2b4e5.js");

   return {
     compilerPath,
     isSolcJs: true, // if you are using a native compiler, set this to false
     version: args.solcVersion,
     // this is used as extra information in the build-info files, but other than
     // that is not important
     longVersion: "0.8.5-nightly.2021.5.12+commit.98e2b4e5"
   }
 }

 // we just use the default subtask if the version is not 0.8.5
 return runSuper();
})

module.exports = {
 solidity: "0.8.5",
};

他們正在努力解決這個問題。

https://github.com/nomiclabs/hardhat/pull/1291

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