smock icon indicating copy to clipboard operation
smock copied to clipboard

Dependency conflict with Hardhat V5

Open robhyrk opened this issue 10 months ago • 5 comments

Describe the bug Cannot install if using Hardhat V5 due to deps conflict with Ethers v6

Reproduction steps

  1. npm install @defi-wonderland/smock

Expected behavior Should install without error.

Screenshots

npm error code ERESOLVE
npm error ERESOLVE could not resolve
npm error
npm error While resolving: [email protected]
npm error Found: [email protected]
npm error node_modules/ethers
npm error   peer ethers@"^6.1.0" from @nomicfoundation/[email protected]
npm error   node_modules/@nomicfoundation/hardhat-chai-matchers
npm error     peer @nomicfoundation/hardhat-chai-matchers@"^2.0.0" from @nomicfoundation/[email protected]
npm error     node_modules/@nomicfoundation/hardhat-toolbox
npm error       dev @nomicfoundation/hardhat-toolbox@"^5.0.0" from the root project
npm error   peer ethers@"^6.1.0" from @nomicfoundation/[email protected]
npm error   node_modules/@nomicfoundation/hardhat-ethers
npm error     peer @nomicfoundation/hardhat-ethers@"^3.0.0" from @nomicfoundation/[email protected]
npm error     node_modules/@nomicfoundation/hardhat-chai-matchers
npm error       peer @nomicfoundation/hardhat-chai-matchers@"^2.0.0" from @nomicfoundation/[email protected]
npm error       node_modules/@nomicfoundation/hardhat-toolbox
npm error         dev @nomicfoundation/hardhat-toolbox@"^5.0.0" from the root project
npm error     peer @nomicfoundation/hardhat-ethers@"^3.0.4" from @nomicfoundation/[email protected]
npm error     node_modules/@nomicfoundation/hardhat-ignition-ethers
npm error       peer @nomicfoundation/hardhat-ignition-ethers@"^0.15.0" from @nomicfoundation/[email protected]
npm error       node_modules/@nomicfoundation/hardhat-toolbox
npm error         dev @nomicfoundation/hardhat-toolbox@"^5.0.0" from the root project
npm error     1 more (@nomicfoundation/hardhat-toolbox)
npm error   5 more (@nomicfoundation/hardhat-ignition-ethers, ...)
npm error
npm error Could not resolve dependency:
npm error dev @defi-wonderland/smock@"*" from the root project
npm error
npm error Conflicting peer dependency: [email protected]
npm error node_modules/ethers
npm error   peer ethers@"^5" from @defi-wonderland/[email protected]
npm error   node_modules/@defi-wonderland/smock
npm error     dev @defi-wonderland/smock@"*" from the root project
npm error
npm error Fix the upstream dependency conflict, or retry
npm error this command with --force or --legacy-peer-deps
npm error to accept an incorrect (and potentially broken) dependency resolution.

System Specs:

  • OS: Version 14.6.1
  • Package Version (or commit hash): 2.4.0

robhyrk avatar Jan 28 '25 16:01 robhyrk

Thanks for reporting this. This package is indeed coupled to ethers v5 and supporting ethers v6 would require some refactoring and a major version change. We can get to it eventually, but can't promise anything in the short term.'

0xteddybear avatar Jan 31 '25 21:01 0xteddybear

Does anyone have advice for getting this to work? Any workarounds?

blundin avatar Feb 06 '25 03:02 blundin

Does anyone have advice for getting this to work? Any workarounds?

if you want to take care of this, we could review & merge it. While you could just edit the peer dependency specification and have npm install work, you'll find lots of errors down the line due to various API changes in ethers v5 vs v4.

The correct way to go about this would be as follows

  • [ ] update ethers devDependency in this project to v5, and probably a lot of others to make it work [1]
  • [ ] fix all tests so ethers invocations are compliant with the new API
  • [ ] use an existing project as a guinea pig to see if ^ miss anything
  • [ ] only after that, publish a release on NPM

[1]: I tried to asses the feasibility of this, and so far I had to edit many dependencies. I got it to the point where the project would compile IIRC, but tests crashed instantly, see patch below:

diff --git a/hardhat.config.ts b/hardhat.config.ts
index 5ab3210..11639a6 100644
--- a/hardhat.config.ts
+++ b/hardhat.config.ts
@@ -21,7 +21,7 @@ const config: HardhatUserConfig = {
   },
   typechain: {
     outDir: 'typechained',
-    target: 'ethers-v5',
+    target: 'ethers-v6',
   },
 };
 
diff --git a/package.json b/package.json
index f60e927..dd90d1e 100644
--- a/package.json
+++ b/package.json
@@ -63,10 +63,10 @@
   "devDependencies": {
     "@commitlint/cli": "12.1.4",
     "@commitlint/config-conventional": "12.1.4",
-    "@nomiclabs/hardhat-ethers": "2.0.2",
-    "@nomiclabs/hardhat-waffle": "2.0.1",
-    "@typechain/ethers-v5": "7.0.1",
-    "@typechain/hardhat": "2.0.2",
+    "@nomiclabs/hardhat-ethers": "2.2.3",
+    "@nomiclabs/hardhat-waffle": "2.0.6",
+    "@typechain/ethers-v6": "0.5.1",
+    "@typechain/hardhat": "9.1.0",
     "@types/chai": "4.2.18",
     "@types/chai-as-promised": "7.1.5",
     "@types/debug": "^4.1.4",
@@ -82,7 +82,7 @@
     "chai-as-promised": "7.1.1",
     "cross-env": "7.0.3",
     "ethereum-waffle": "3.4.0",
-    "ethers": "5.4.1",
+    "ethers": "6.13.5",
     "hardhat": "^2.21.0",
     "hardhat-preprocessor": "0.1.4",
     "husky": "6.0.0",
@@ -99,15 +99,15 @@
     "standard-version": "9.3.0",
     "ts-node": "10.0.0",
     "tsconfig-paths": "^3.9.0",
-    "typechain": "5.1.1",
+    "typechain": "8.3.2",
     "typescript": "4.9.5"
   },
   "peerDependencies": {
-    "@ethersproject/abi": "^5",
-    "@ethersproject/abstract-provider": "^5",
-    "@ethersproject/abstract-signer": "^5",
+    "@ethersproject/abi": "^5 || ^6",
+    "@ethersproject/abstract-provider": "^5 || ^6",
+    "@ethersproject/abstract-signer": "^5 || ^6",
     "@nomiclabs/hardhat-ethers": "^2",
-    "ethers": "^5",
+    "ethers": "^5 || ^6",
     "hardhat": "^2.21.0"
   }
 }

0xteddybear avatar Feb 10 '25 14:02 0xteddybear

@0xteddybear do you have a branch open where you started these changes? I'd be open to checking it out and attempting to continue chipping away at this.

I'm new to solidity but I came across this package in a course I was doing. would be great to have it updated.

robhyrk avatar Feb 10 '25 17:02 robhyrk

do you have a branch open where you started these changes? I'd be open to checking it out and attempting to continue chipping away at this.

All the changes I tried out so far are contained in the patch above (well, sans the yarn.lock, but there's no use adding it to the patch I share)

I'm new to solidity but I came across this package in a course I was doing. would be great to have it updated

If you are starting out I highly recommend to try out foundry and our re-implementation of this: https://github.com/defi-wonderland/smock-foundry .

0xteddybear avatar Feb 11 '25 14:02 0xteddybear