如何在代理後面使用 HardHat
我在防火牆後面使用HardHat ( repo ),需要出站連接才能使用代理。這通常很容易,例如配置 NPM以使用代理,您可以設置環境變數
HTTP_PROXY
和HTTPS_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 月更新:
- 連結到問題 1280
HardHat 添加了在代理
HTTP_PROXY
和HTTPS_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", };
他們正在努力解決這個問題。