diff --git a/foundry.toml b/foundry.toml index 8603db6..c192de7 100644 --- a/foundry.toml +++ b/foundry.toml @@ -1,10 +1,27 @@ [default] src = 'contracts' out = 'out' -libs = [ - 'lib' +libs = ['lib'] +remappings = ['@forge-std/=lib/forge-std/', '@contracts/=contracts/'] +ffi = true +auto_detect_solc = true +verbosity = 5 + +[build] +src = 'src' +out = 'bout' # output directory conflicts with dapptools +libs = ['lib'] +auto_detect_solc = true +remappings = [ + '@utils/=src/utils/', + '@openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/', + '@contracts/=src/contracts/', + '@openzeppelin/=lib/openzeppelin-contracts/', + 'ds-test/=lib/ds-test/src/', + 'openzeppelin-contracts/=lib/openzeppelin-contracts/', ] -ffi=true -verbosity=5 +optimizer = true +optimizer_runs = 200 +via_ir = true -# See more config options https://github.com/foundry-rs/foundry/tree/master/config \ No newline at end of file +# See more config options https://github.com/foundry-rs/foundry/tree/master/config diff --git a/package.json b/package.json index 9b18441..8712008 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,7 @@ { "name": "hardhat-project", "dependencies": { - "@nomiclabs/hardhat-ethers": "^2.0.6" + "@nomiclabs/hardhat-ethers": "^2.0.6", + "ethers": "^5.6.9" } } diff --git a/remappings.txt b/remappings.txt new file mode 100644 index 0000000..ba7635d --- /dev/null +++ b/remappings.txt @@ -0,0 +1,2 @@ +@contracts/=/contracts/ +@forge-std/=lib/forge-std/ diff --git a/scripts/genSelectors.js b/scripts/genSelectors.js index a2108d8..6b9b979 100644 --- a/scripts/genSelectors.js +++ b/scripts/genSelectors.js @@ -1,36 +1,45 @@ -const { artifacts, ethers } = require('hardhat') -const hre = require('hardhat') -const args = process.argv.slice(2) +const ethers = require("ethers"); +const path = require("path/posix"); + +const args = process.argv.slice(2); if (args.length != 1) { console.log(`please supply the correct parameters: facetName - `) - process.exit(1) + `); + process.exit(1); } -async function printSelectors(contractName) { - const target = await ethers.getContractFactory(contractName) - const signatures = Object.keys(target.interface.functions) +async function printSelectors(contractName, artifactFolderPath = "../out") { + const contractFilePath = path.join( + artifactFolderPath, + `${contractName}.sol`, + `${contractName}.json` + ); + const contractArtifact = require(contractFilePath); + const abi = contractArtifact.abi; + const bytecode = contractArtifact.bytecode; + const target = new ethers.ContractFactory(abi, bytecode); + const signatures = Object.keys(target.interface.functions); const selectors = signatures.reduce((acc, val) => { - if (val !== 'init(bytes)') { - acc.push(target.interface.getSighash(val)) + if (val !== "init(bytes)") { + acc.push(target.interface.getSighash(val)); } - return acc - }, []) + return acc; + }, []); - const coder = ethers.utils.defaultAbiCoder - const coded = coder.encode(['bytes4[]'], [selectors]) + const coder = ethers.utils.defaultAbiCoder; + const coded = coder.encode(["bytes4[]"], [selectors]); - process.stdout.write(coded) + process.stdout.write(coded); } // We recommend this pattern to be able to use async/await everywhere // and properly handle errors. -printSelectors(args[0]) +printSelectors(args[0], args[1]) .then(() => process.exit(0)) .catch((error) => { - console.error(error) - process.exit(1) - }) + console.error(error); + process.exit(1); + }); diff --git a/test/deployDiamond.t.sol b/test/deployDiamond.t.sol index 7076292..25bd303 100644 --- a/test/deployDiamond.t.sol +++ b/test/deployDiamond.t.sol @@ -5,8 +5,9 @@ import "../contracts/interfaces/IDiamondCut.sol"; import "../contracts/facets/DiamondCutFacet.sol"; import "../contracts/facets/DiamondLoupeFacet.sol"; import "../contracts/facets/OwnershipFacet.sol"; -import "../../lib/forge-std/src/Test.sol"; + import "../contracts/Diamond.sol"; +import "@forge-std/src/Test.sol"; contract DiamondDeployer is Test, IDiamondCut { //contract types of facets to be deployed