Forráskód Böngészése

Automatically deploy entrypoint, and make it available in the hre (#5391)

Hadrien Croubois 9 hónapja
szülő
commit
d4ed5f9068

+ 31 - 0
hardhat/common-contracts.js

@@ -0,0 +1,31 @@
+const { task } = require('hardhat/config');
+const { TASK_TEST_SETUP_TEST_ENVIRONMENT } = require('hardhat/builtin-tasks/task-names');
+const { setCode } = require('@nomicfoundation/hardhat-network-helpers');
+
+const fs = require('fs');
+const path = require('path');
+
+const INSTANCES = {
+  entrypoint: {
+    address: '0x0000000071727De22E5E9d8BAf0edAc6f37da032',
+    abi: JSON.parse(fs.readFileSync(path.resolve(__dirname, '../test/bin/EntryPoint070.abi'), 'utf-8')),
+    bytecode: fs.readFileSync(path.resolve(__dirname, '../test/bin/EntryPoint070.bytecode'), 'hex'),
+  },
+  senderCreator: {
+    address: '0xEFC2c1444eBCC4Db75e7613d20C6a62fF67A167C',
+    abi: JSON.parse(fs.readFileSync(path.resolve(__dirname, '../test/bin/SenderCreator070.abi'), 'utf-8')),
+    bytecode: fs.readFileSync(path.resolve(__dirname, '../test/bin/SenderCreator070.bytecode'), 'hex'),
+  },
+};
+
+task(TASK_TEST_SETUP_TEST_ENVIRONMENT).setAction((_, env, runSuper) =>
+  runSuper().then(() =>
+    Promise.all(
+      Object.entries(INSTANCES).map(([name, { address, abi, bytecode }]) =>
+        setCode(address, '0x' + bytecode.replace(/0x/, '')).then(() =>
+          env.ethers.getContractAt(abi, address).then(instance => (env[name] = instance)),
+        ),
+      ),
+    ),
+  ),
+);

+ 8 - 9
test/account/utils/draft-ERC4337Utils.test.js

@@ -1,19 +1,18 @@
-const { ethers } = require('hardhat');
+const { ethers, entrypoint } = require('hardhat');
 const { expect } = require('chai');
 const { loadFixture } = require('@nomicfoundation/hardhat-network-helpers');
 
 const { packValidationData, UserOperation } = require('../../helpers/erc4337');
-const { deployEntrypoint } = require('../../helpers/erc4337-entrypoint');
 const { MAX_UINT48 } = require('../../helpers/constants');
 const ADDRESS_ONE = '0x0000000000000000000000000000000000000001';
 
 const fixture = async () => {
-  const { entrypoint } = await deployEntrypoint();
   const [authorizer, sender, factory, paymaster] = await ethers.getSigners();
   const utils = await ethers.deployContract('$ERC4337Utils');
   const SIG_VALIDATION_SUCCESS = await utils.$SIG_VALIDATION_SUCCESS();
   const SIG_VALIDATION_FAILED = await utils.$SIG_VALIDATION_FAILED();
-  return { utils, authorizer, sender, entrypoint, factory, paymaster, SIG_VALIDATION_SUCCESS, SIG_VALIDATION_FAILED };
+
+  return { utils, authorizer, sender, factory, paymaster, SIG_VALIDATION_SUCCESS, SIG_VALIDATION_FAILED };
 };
 
 describe('ERC4337Utils', function () {
@@ -173,14 +172,14 @@ describe('ERC4337Utils', function () {
       const otherChainId = 0xdeadbeef;
 
       // check that helper matches entrypoint logic
-      expect(this.entrypoint.getUserOpHash(userOp.packed)).to.eventually.equal(userOp.hash(this.entrypoint, chainId));
+      expect(entrypoint.getUserOpHash(userOp.packed)).to.eventually.equal(userOp.hash(entrypoint, chainId));
 
       // check library against helper
-      expect(this.utils.$hash(userOp.packed, this.entrypoint, chainId)).to.eventually.equal(
-        userOp.hash(this.entrypoint, chainId),
+      expect(this.utils.$hash(userOp.packed, entrypoint, chainId)).to.eventually.equal(
+        userOp.hash(entrypoint, chainId),
       );
-      expect(this.utils.$hash(userOp.packed, this.entrypoint, otherChainId)).to.eventually.equal(
-        userOp.hash(this.entrypoint, otherChainId),
+      expect(this.utils.$hash(userOp.packed, entrypoint, otherChainId)).to.eventually.equal(
+        userOp.hash(entrypoint, otherChainId),
       );
     });
   });

+ 0 - 31
test/helpers/erc4337-entrypoint.js

@@ -1,31 +0,0 @@
-const { ethers } = require('hardhat');
-const { setCode } = require('@nomicfoundation/hardhat-network-helpers');
-const fs = require('fs');
-const path = require('path');
-
-const INSTANCES = {
-  entrypoint: {
-    address: '0x0000000071727De22E5E9d8BAf0edAc6f37da032',
-    abi: JSON.parse(fs.readFileSync(path.resolve(__dirname, '../bin/EntryPoint070.abi'), 'utf-8')),
-    bytecode: fs.readFileSync(path.resolve(__dirname, '../bin/EntryPoint070.bytecode'), 'hex'),
-  },
-  sendercreator: {
-    address: '0xEFC2c1444eBCC4Db75e7613d20C6a62fF67A167C',
-    abi: JSON.parse(fs.readFileSync(path.resolve(__dirname, '../bin/SenderCreator070.abi'), 'utf-8')),
-    bytecode: fs.readFileSync(path.resolve(__dirname, '../bin/SenderCreator070.bytecode'), 'hex'),
-  },
-};
-
-function deployEntrypoint() {
-  return Promise.all(
-    Object.entries(INSTANCES).map(([name, { address, abi, bytecode }]) =>
-      setCode(address, '0x' + bytecode.replace(/0x/, ''))
-        .then(() => ethers.getContractAt(abi, address))
-        .then(instance => ({ [name]: instance })),
-    ),
-  ).then(namedInstances => Object.assign(...namedInstances));
-}
-
-module.exports = {
-  deployEntrypoint,
-};