Hardhat-deploy: `hardhat-deploy`は` solidity-coverage`では機能しません

作成日 2021年06月22日  ·  14コメント  ·  ソース: wighawag/hardhat-deploy

再現するには:

  1. クローンhttps://github.com/wighawag/template-ethereum-contracts
  2. yarn
  3. yarn coverage

そして、あなたはこのエラーを得るはずです:

image

最も参考になるコメント

@GeekBerry wighawagが指しているコードを見ると、次のことがわかります: https

node_modules/solidity-coverage/plugins/resources/nomiclabs.utils.jsをハックして、行136をに変更します

env.network = Object.assign({
    name: networkName,
    config: networkConfig,
    provider: provider,
    isHardhatEVM: isHardhatEVM,
}, env.network);

その後、カバレッジを正常に実行します。

Solidity-coverageの作成者は、この問題を次のバージョンで修正する可能性があると思います。

全てのコメント14件

+1

@wighawagそれは私の側の問題ですか? それともhardhat-deployの問題ですか?

私も同じです、走っています:
├─@ nomiclabs / [email protected]
├─@ nomiclabs / [email protected]
├─[email protected]
├─[email protected]
├─ [email protected]

+1

これは0.8.x導入されたようです。 0.7.11うまくいきます。

報告してくれてありがとう。

返信が遅れて申し訳ありませんが、私は現在家族と一緒に旅行していて、ラップトップを使う時間があまりありません。

私は今日見てみましたが、問題はここでsolidity-coverageが新しいネットワークオブジェクトを作成することです: https

hardhat-deploy / solidity-coverageの互換性には、同じ理由で過去に同様の問題があり(https://github.com/sc-forks/solidity-coverage/issues/624を参照)、hardhat-deployが回避策を作成しました当時ですが、最新のhardhat-deployバージョンは、ネットワークオブジェクトにフィールドを追加する機能に依存しているため、プラグインのインポート時にネットワークオブジェクトにアクセスすることにも依存しているため、修正は確実にカバーされるはずです。 新しいオブジェクトを作成する代わりに、solidity-coverageは、既存のhre.networkを変更するだけで、他のプラグインからの追加を維持できます。

これらの行の置換https://github.com/sc-forks/solidity-coverage/blob/3c0f3a5c7db26e82974873bbf61cf462072a7c6d/plugins/resources/nomiclabs.utils.js#L136-L141

これらに:

env.network.name = networkName;
env.network.config = networkConfig;
env.network.provider = provider;
env.network.isHardhatEVM = isHardhatEVM;

それをすべき

@cgeweckeはどう思い

しかし、 env何ですか? どうすれば設定できますか?

@wighawag調査に時間を

@cgewecke

env.network.name = networkName;
env.network.config = networkConfig;
env.network.provider = provider;
env.network.isHardhatEVM = isHardhatEVM;

それをすべき

テスト済みで動作します。

env.network.name = networkName;
env.network.config = networkConfig;
env.network.provider = provider;
env.network.isHardhatEVM = isHardhatEVM;

それをすべき

テスト済みで動作します。

em〜ですが、 env何ですか? process.envまたはrequire('hardhat').network.isHardhatEVM

@GeekBerry wighawagが指しているコードを見ると、次のことがわかります: https

@GeekBerry wighawagが指しているコードを見ると、次のことがわかります: https

node_modules/solidity-coverage/plugins/resources/nomiclabs.utils.jsをハックして、行136をに変更します

env.network = Object.assign({
    name: networkName,
    config: networkConfig,
    provider: provider,
    isHardhatEVM: isHardhatEVM,
}, env.network);

その後、カバレッジを正常に実行します。

Solidity-coverageの作成者は、この問題を次のバージョンで修正する可能性があると思います。

+1

ねえ、問題はソリディティカバレッジ側にあります。hardhat-deployでは多くのことができないため、問題をクローズします。
私のテンプレートでは、solidity-coverageにpatch-packageでパッチを適用し、機能させています。httpsください。 .7.16.patch

solidity-coverageで修正するこのPRがあります//github.com/sc-forks/solidity-coverage/pull/647

このページは役に立ちましたか?
0 / 5 - 0 評価