diff --git a/.eslintignore b/.eslintignore index dc142da..bf2f493 100644 --- a/.eslintignore +++ b/.eslintignore @@ -13,6 +13,11 @@ artifacts cache typechain-types +# foundry +cache_forge +out +docs + # production dist build diff --git a/.github/workflows/pull-requests.yml b/.github/workflows/pull-requests.yml index d41300e..5179e62 100644 --- a/.github/workflows/pull-requests.yml +++ b/.github/workflows/pull-requests.yml @@ -16,6 +16,9 @@ jobs: node-version: 20 cache: yarn + - name: "Install Foundry" + uses: "foundry-rs/foundry-toolchain@v1" + - name: Install dependencies run: yarn @@ -69,6 +72,9 @@ jobs: node-version: 20 cache: yarn + - name: "Install Foundry" + uses: "foundry-rs/foundry-toolchain@v1" + - name: Install dependencies run: yarn diff --git a/.prettierignore b/.prettierignore index a919fdc..5a11770 100644 --- a/.prettierignore +++ b/.prettierignore @@ -13,6 +13,11 @@ artifacts cache typechain-types +# foundry +cache_forge +out +docs + # production dist build diff --git a/.prettierrc.json b/.prettierrc.json index 27140f2..717fb52 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -1,5 +1,6 @@ { "semi": false, "arrowParens": "always", - "trailingComma": "none" + "trailingComma": "none", + "plugins": ["prettier-plugin-solidity"] } diff --git a/apps/docs/package.json b/apps/docs/package.json index e9ec979..b9b7464 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -37,7 +37,7 @@ "remark-mdx": "^3.0.1", "remark-preset-lint-consistent": "^6.0.0", "remark-preset-lint-recommended": "^7.0.0", - "typescript": "~5.5.0" + "typescript": "5.3" }, "browserslist": { "production": [ diff --git a/apps/website/package.json b/apps/website/package.json index 13e1c05..d186839 100644 --- a/apps/website/package.json +++ b/apps/website/package.json @@ -8,7 +8,7 @@ "preview": "vite preview" }, "devDependencies": { - "typescript": "^5.5.0", + "typescript": "5.3", "vite": "^5.4.1" } } diff --git a/package.json b/package.json index 968deaa..125c4be 100644 --- a/package.json +++ b/package.json @@ -16,8 +16,8 @@ "@commitlint/cli": "^19.5.0", "@commitlint/config-conventional": "^19.5.0", "@types/node": "^22.5.5", - "@typescript-eslint/eslint-plugin": "^7.0.2", - "@typescript-eslint/parser": "^7.0.2", + "@typescript-eslint/eslint-plugin": "^6.0.0", + "@typescript-eslint/parser": "^6.0.0", "changelogithub": "^0.13.10", "czg": "^1.9.4", "eslint": "^8.56.0", @@ -31,9 +31,10 @@ "husky": "^9.1.6", "lint-staged": "^15.2.10", "prettier": "^3.3.3", + "prettier-plugin-solidity": "^1.4.1", "rimraf": "^6.0.1", "ts-node": "^10.9.2", - "typescript": "^5.5.0" + "typescript": "5.3" }, "scripts": { "build": "yarn build:docs && yarn build:website && yarn build:packages", @@ -45,14 +46,14 @@ "test:coverage": "yarn test:contracts-coverage", "test:contracts": "yarn workspace excubiae-contracts test", "test:contracts-coverage": "yarn workspace excubiae-contracts test:coverage", - "format": "prettier -c . && yarn workspace excubiae-docs format", - "format:write": "prettier -w . && yarn workspace excubiae-docs format:write", + "format": "prettier -c . && yarn workspace excubiae-docs format && yarn workspace excubiae-contracts format:forge", + "format:write": "prettier -w . && yarn workspace excubiae-docs format:write && yarn workspace excubiae-contracts format:forge && yarn workspace excubiae-docs format", "lint": "eslint . && yarn workspace excubiae-contracts lint", "lint:fix": "eslint . --fix && yarn workspace excubiae-contracts lint:fix", "version:bump": "scripts/version.ts ${0}", "version:publish": "scripts/publish.ts", "version:release": "changelogithub", - "clean": "scripts/clean-apps.ts && scripts/clean-packages.ts && rimraf node_modules", + "clean": "scripts/clean-apps.ts && scripts/clean-packages.ts && rimraf node_modules coverage", "remove:stable-version-field": "scripts/remove-stable-version-field.ts && yarn format:write", "precommit": "lint-staged", "postinstall": "husky && git config --local core.editor cat" diff --git a/packages/contracts/.gitignore b/packages/contracts/.gitignore index e8c12ff..50a694e 100644 --- a/packages/contracts/.gitignore +++ b/packages/contracts/.gitignore @@ -5,6 +5,11 @@ node_modules /cache /artifacts +# Forge files +/out +/cache_forge +/docs + # TypeChain files /typechain /typechain-types diff --git a/packages/contracts/.prettierrc.json b/packages/contracts/.prettierrc.json deleted file mode 100644 index 717fb52..0000000 --- a/packages/contracts/.prettierrc.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "semi": false, - "arrowParens": "always", - "trailingComma": "none", - "plugins": ["prettier-plugin-solidity"] -} diff --git a/packages/contracts/.solhint.json b/packages/contracts/.solhint.json index 5abdd3c..27252e4 100644 --- a/packages/contracts/.solhint.json +++ b/packages/contracts/.solhint.json @@ -1,6 +1,5 @@ { "extends": "solhint:recommended", - "plugins": ["prettier"], "rules": { "code-complexity": ["error", 7], "compiler-version": ["error", ">=0.8.0"], @@ -11,12 +10,6 @@ "func-visibility": ["error", { "ignoreConstructors": true }], "max-line-length": ["error", 120], "not-rely-on-time": "off", - "prettier/prettier": [ - "error", - { - "endOfLine": "auto" - } - ], "reason-string": ["warn", { "maxLength": 80 }] } } diff --git a/packages/contracts/.solhintignore b/packages/contracts/.solhintignore new file mode 100644 index 0000000..d0089ea --- /dev/null +++ b/packages/contracts/.solhintignore @@ -0,0 +1 @@ +contracts/node_modules \ No newline at end of file diff --git a/packages/contracts/contracts/package.json b/packages/contracts/contracts/package.json index 1d9e376..56c069c 100644 --- a/packages/contracts/contracts/package.json +++ b/packages/contracts/contracts/package.json @@ -23,5 +23,8 @@ "publishConfig": { "access": "public" }, - "packageManager": "yarn@4.5.0" + "packageManager": "yarn@4.5.0", + "dependencies": { + "@openzeppelin/contracts": "^5.0.2" + } } diff --git a/packages/contracts/contracts/Lock.sol b/packages/contracts/contracts/src/Lock.sol similarity index 76% rename from packages/contracts/contracts/Lock.sol rename to packages/contracts/contracts/src/Lock.sol index 52512f2..ca5c91c 100644 --- a/packages/contracts/contracts/Lock.sol +++ b/packages/contracts/contracts/src/Lock.sol @@ -1,12 +1,13 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.27; +import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; + // Uncomment this line to use console.log // import "hardhat/console.sol"; -contract Lock { +contract Lock is Ownable(msg.sender) { uint256 public unlockTime; - address payable public owner; event Withdrawal(uint256 amount, uint256 when); @@ -14,18 +15,15 @@ contract Lock { require(block.timestamp < _unlockTime, "Unlock time should be in the future"); unlockTime = _unlockTime; - owner = payable(msg.sender); } - function withdraw() public { + function withdraw() public onlyOwner { // Uncomment this line, and the import of "hardhat/console.sol", to print a log in your terminal // console.log("Unlock time is %o and block timestamp is %o", unlockTime, block.timestamp); - require(block.timestamp >= unlockTime, "You can't withdraw yet"); - require(msg.sender == owner, "You aren't the owner"); emit Withdrawal(address(this).balance, block.timestamp); - owner.transfer(address(this).balance); + payable(owner()).transfer(address(this).balance); } } diff --git a/packages/contracts/contracts/test/Lock.t.sol b/packages/contracts/contracts/test/Lock.t.sol new file mode 100644 index 0000000..ff3fcbd --- /dev/null +++ b/packages/contracts/contracts/test/Lock.t.sol @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity >=0.8.25 <0.9.0; + +import {Test} from "forge-std/src/Test.sol"; +import {console2} from "forge-std/src/console2.sol"; + +import {Lock} from "../src/Lock.sol"; + +contract LockTest is Test { + Lock internal lock; + + function setUp() public virtual { + // Set unlock time to 1 hour from now + lock = new Lock{value: 1 ether}(block.timestamp + 1 hours); + } + + function test_CannotWithdrawYet() external { + // Attempt to withdraw before unlock time + vm.expectRevert("You can't withdraw yet"); + lock.withdraw(); + } +} diff --git a/packages/contracts/foundry.toml b/packages/contracts/foundry.toml new file mode 100644 index 0000000..0d5e169 --- /dev/null +++ b/packages/contracts/foundry.toml @@ -0,0 +1,6 @@ +[profile.default] +src = 'contracts/src' +out = 'out' +libs = ['node_modules'] +test = 'contracts/test' +cache_path = 'cache_forge' \ No newline at end of file diff --git a/packages/contracts/hardhat.config.ts b/packages/contracts/hardhat.config.ts index 1007685..fc92787 100644 --- a/packages/contracts/hardhat.config.ts +++ b/packages/contracts/hardhat.config.ts @@ -1,8 +1,15 @@ import { HardhatUserConfig } from "hardhat/config" import "@nomicfoundation/hardhat-toolbox" +import "@nomicfoundation/hardhat-foundry" const config: HardhatUserConfig = { - solidity: "0.8.27" + solidity: "0.8.27", + paths: { + sources: "./contracts/src", + tests: "./test", + cache: "./cache", + artifacts: "./artifacts" + } } export default config diff --git a/packages/contracts/package.json b/packages/contracts/package.json index e298a1a..bbc9588 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -1,20 +1,30 @@ { "name": "excubiae-contracts", - "packageManager": "yarn@4.5.0", + "private": true, + "installConfig": { + "hoistingLimits": "dependencies" + }, "scripts": { - "start": "hardhat node", - "compile": "hardhat compile", + "start:hardhat": "hardhat node", + "start:anvil": "anvil", + "compile": "yarn compile:hardhat && yarn compile:forge", + "compile:hardhat": "hardhat compile", + "compile:forge": "forge compile", "deploy": "hardhat deploy", - "test": "hardhat test", - "test:report-gas": "REPORT_GAS=true hardhat test", - "test:coverage": "hardhat coverage", + "test": "yarn test:hardhat && yarn test:forge", + "test:hardhat": "hardhat test", + "test:forge": "forge test", + "test:report-gas": "REPORT_GAS=true yarn test && forge test --gas-report", + "test:coverage": "hardhat coverage && forge coverage", "typechain": "hardhat typechain", + "format:forge": "forge fmt", "lint": "solhint 'contracts/**/*.sol'", "lint:fix": "solhint 'contracts/**/*.sol' --fix --noPrompt" }, "devDependencies": { "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", "@nomicfoundation/hardhat-ethers": "^3.0.0", + "@nomicfoundation/hardhat-foundry": "^1.1.2", "@nomicfoundation/hardhat-ignition": "^0.15.5", "@nomicfoundation/hardhat-ignition-ethers": "^0.15.0", "@nomicfoundation/hardhat-network-helpers": "^1.0.0", @@ -25,16 +35,19 @@ "@typechain/hardhat": "^9.0.0", "@types/chai": "^4.2.0", "@types/mocha": ">=9.1.0", + "@types/node": "^22.6.1", "chai": "^4.2.0", "ethers": "^6.4.0", + "forge-std": "github:foundry-rs/forge-std#v1.9.2", "hardhat": "^2.22.11", "hardhat-gas-reporter": "^1.0.8", - "prettier-plugin-solidity": "^1.4.1", "solhint": "^5.0.3", - "solhint-plugin-prettier": "^0.1.0", "solidity-coverage": "^0.8.1", "ts-node": "^10.9.2", "typechain": "^8.3.0", - "typescript": "^5.5.0" + "typescript": "5.3" + }, + "dependencies": { + "@openzeppelin/contracts": "^5.0.2" } } diff --git a/packages/contracts/remappings.txt b/packages/contracts/remappings.txt new file mode 100644 index 0000000..b0866a6 --- /dev/null +++ b/packages/contracts/remappings.txt @@ -0,0 +1,2 @@ +@openzeppelin/=node_modules/@openzeppelin/ +forge-std/=node_modules/forge-std/ diff --git a/packages/contracts/test/Lock.ts b/packages/contracts/test/Lock.ts index 2e65aa1..61cf3ce 100644 --- a/packages/contracts/test/Lock.ts +++ b/packages/contracts/test/Lock.ts @@ -67,7 +67,10 @@ describe("Lock", () => { await time.increaseTo(unlockTime) // We use lock.connect() to send a transaction from another account - await expect(lock.connect(otherAccount).withdraw()).to.be.revertedWith("You aren't the owner") + await expect(lock.connect(otherAccount).withdraw()).to.be.revertedWithCustomError( + lock, + "OwnableUnauthorizedAccount" + ) }) it("Shouldn't fail if the unlockTime has arrived and the owner calls it", async () => { diff --git a/scripts/clean-packages.ts b/scripts/clean-packages.ts index caccf8b..c26cad6 100755 --- a/scripts/clean-packages.ts +++ b/scripts/clean-packages.ts @@ -3,7 +3,19 @@ import { readdirSync, rmSync } from "fs" const folderName = "packages" -const gitIgnored = ["node_modules", "dist", "build", "artifacts", "typechain-types", "cache"] +const gitIgnored = [ + "node_modules", + "dist", + "build", + "artifacts", + "typechain-types", + "cache", + "cache_forge", + "docs", + "out", + "coverage.json", + "lib" +] async function main() { const folders = readdirSync(folderName, { withFileTypes: true }) diff --git a/scripts/version.ts b/scripts/version.ts index 12ee259..cd827a9 100755 --- a/scripts/version.ts +++ b/scripts/version.ts @@ -10,7 +10,7 @@ async function main() { // Apply the versions execSync("yarn version apply --all", { stdio: "inherit" }) - await import("./remove-stable-version-field") + await import("./remove-stable-version-field.js") execSync("yarn format:write") execSync(`NO_HOOK=1 git commit -am 'chore: v${version}'`) diff --git a/yarn.lock b/yarn.lock index 878aa07..e072eb9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2636,7 +2636,7 @@ __metadata: languageName: node linkType: hard -"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.6.1": +"@eslint-community/regexpp@npm:^4.5.1, @eslint-community/regexpp@npm:^4.6.1": version: 4.11.1 resolution: "@eslint-community/regexpp@npm:4.11.1" checksum: 10/934b6d3588c7f16b18d41efec4fdb89616c440b7e3256b8cb92cfd31ae12908600f2b986d6c1e61a84cbc10256b1dd3448cd1eec79904bd67ac365d0f1aba2e2 @@ -3105,6 +3105,8 @@ __metadata: "@excubiae/contracts@workspace:packages/contracts/contracts": version: 0.0.0-use.local resolution: "@excubiae/contracts@workspace:packages/contracts/contracts" + dependencies: + "@openzeppelin/contracts": "npm:^5.0.2" languageName: unknown linkType: soft @@ -3542,6 +3544,17 @@ __metadata: languageName: node linkType: hard +"@nomicfoundation/hardhat-foundry@npm:^1.1.2": + version: 1.1.2 + resolution: "@nomicfoundation/hardhat-foundry@npm:1.1.2" + dependencies: + chalk: "npm:^2.4.2" + peerDependencies: + hardhat: ^2.17.2 + checksum: 10/e722f71167ab62bbe1999ff7398820e1094a802f5240276b7c62450bf24e4e5cee7f45d424746f1cfe66e6637ec1785f640d3049d97544f3baa395380b6ce150 + languageName: node + linkType: hard + "@nomicfoundation/hardhat-ignition-ethers@npm:^0.15.0": version: 0.15.5 resolution: "@nomicfoundation/hardhat-ignition-ethers@npm:0.15.5" @@ -3829,6 +3842,13 @@ __metadata: languageName: node linkType: hard +"@openzeppelin/contracts@npm:^5.0.2": + version: 5.0.2 + resolution: "@openzeppelin/contracts@npm:5.0.2" + checksum: 10/938ebffbdade7dc59ea3df5b562c0e457bbefde9d82be8fa2acfd11da887df11653ac07922f41746b80cdbc106430e1e6978ce244fe99b00a7d9dc1418fc7670 + languageName: node + linkType: hard + "@pkgjs/parseargs@npm:^0.11.0": version: 0.11.0 resolution: "@pkgjs/parseargs@npm:0.11.0" @@ -3870,15 +3890,6 @@ __metadata: languageName: node linkType: hard -"@prettier/sync@npm:^0.3.0": - version: 0.3.0 - resolution: "@prettier/sync@npm:0.3.0" - peerDependencies: - prettier: ^3.0.0 - checksum: 10/10520d2479830c18256bf2b18349a15a8964f968059f7ccaa1f6d455c133a26e6c96bd7aea7c64ef6701700e8007ad68619b16ec83391b356b5d4a741cbae504 - languageName: node - linkType: hard - "@rollup/rollup-android-arm-eabi@npm:4.22.4": version: 4.22.4 resolution: "@rollup/rollup-android-arm-eabi@npm:4.22.4" @@ -4710,7 +4721,7 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:^7.0.4, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": +"@types/json-schema@npm:^7.0.12, @types/json-schema@npm:^7.0.4, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" checksum: 10/1a3c3e06236e4c4aab89499c428d585527ce50c24fe8259e8b3926d3df4cfbbbcf306cfc73ddfb66cbafc973116efd15967020b0f738f63e09e64c7d260519e7 @@ -4823,6 +4834,15 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:^22.6.1": + version: 22.6.1 + resolution: "@types/node@npm:22.6.1" + dependencies: + undici-types: "npm:~6.19.2" + checksum: 10/98852ff9d4b1e9180d82010d5a639ddb3676741b1dee361ec52f59f3526634127f76d6a030db0ff7c5f2ac88b330f745cacce898d309b9262972860e9dba2c1b + languageName: node + linkType: hard + "@types/node@npm:^8.0.0": version: 8.10.66 resolution: "@types/node@npm:8.10.66" @@ -4948,6 +4968,13 @@ __metadata: languageName: node linkType: hard +"@types/semver@npm:^7.5.0": + version: 7.5.8 + resolution: "@types/semver@npm:7.5.8" + checksum: 10/3496808818ddb36deabfe4974fd343a78101fa242c4690044ccdc3b95dcf8785b494f5d628f2f47f38a702f8db9c53c67f47d7818f2be1b79f2efb09692e1178 + languageName: node + linkType: hard + "@types/send@npm:*": version: 0.17.4 resolution: "@types/send@npm:0.17.4" @@ -5040,121 +5067,126 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:^7.0.2": - version: 7.18.0 - resolution: "@typescript-eslint/eslint-plugin@npm:7.18.0" +"@typescript-eslint/eslint-plugin@npm:^6.0.0": + version: 6.21.0 + resolution: "@typescript-eslint/eslint-plugin@npm:6.21.0" dependencies: - "@eslint-community/regexpp": "npm:^4.10.0" - "@typescript-eslint/scope-manager": "npm:7.18.0" - "@typescript-eslint/type-utils": "npm:7.18.0" - "@typescript-eslint/utils": "npm:7.18.0" - "@typescript-eslint/visitor-keys": "npm:7.18.0" + "@eslint-community/regexpp": "npm:^4.5.1" + "@typescript-eslint/scope-manager": "npm:6.21.0" + "@typescript-eslint/type-utils": "npm:6.21.0" + "@typescript-eslint/utils": "npm:6.21.0" + "@typescript-eslint/visitor-keys": "npm:6.21.0" + debug: "npm:^4.3.4" graphemer: "npm:^1.4.0" - ignore: "npm:^5.3.1" + ignore: "npm:^5.2.4" natural-compare: "npm:^1.4.0" - ts-api-utils: "npm:^1.3.0" + semver: "npm:^7.5.4" + ts-api-utils: "npm:^1.0.1" peerDependencies: - "@typescript-eslint/parser": ^7.0.0 - eslint: ^8.56.0 + "@typescript-eslint/parser": ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 10/6ee4c61f145dc05f0a567b8ac01b5399ef9c75f58bc6e9a3ffca8927b15e2be2d4c3fd32a2c1a7041cc0848fdeadac30d9cb0d3bcd3835d301847a88ffd19c4d + checksum: 10/a57de0f630789330204cc1531f86cfc68b391cafb1ba67c8992133f1baa2a09d629df66e71260b040de4c9a3ff1252952037093c4128b0d56c4dbb37720b4c1d languageName: node linkType: hard -"@typescript-eslint/parser@npm:^7.0.2": - version: 7.18.0 - resolution: "@typescript-eslint/parser@npm:7.18.0" +"@typescript-eslint/parser@npm:^6.0.0": + version: 6.21.0 + resolution: "@typescript-eslint/parser@npm:6.21.0" dependencies: - "@typescript-eslint/scope-manager": "npm:7.18.0" - "@typescript-eslint/types": "npm:7.18.0" - "@typescript-eslint/typescript-estree": "npm:7.18.0" - "@typescript-eslint/visitor-keys": "npm:7.18.0" + "@typescript-eslint/scope-manager": "npm:6.21.0" + "@typescript-eslint/types": "npm:6.21.0" + "@typescript-eslint/typescript-estree": "npm:6.21.0" + "@typescript-eslint/visitor-keys": "npm:6.21.0" debug: "npm:^4.3.4" peerDependencies: - eslint: ^8.56.0 + eslint: ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 10/36b00e192a96180220ba100fcce3c777fc3e61a6edbdead4e6e75a744d9f0cbe3fabb5f1c94a31cce6b28a4e4d5de148098eec01296026c3c8e16f7f0067cb1e + checksum: 10/4d51cdbc170e72275efc5ef5fce48a81ec431e4edde8374f4d0213d8d370a06823e1a61ae31d502a5f1b0d1f48fc4d29a1b1b5c2dcf809d66d3872ccf6e46ac7 languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:7.18.0": - version: 7.18.0 - resolution: "@typescript-eslint/scope-manager@npm:7.18.0" +"@typescript-eslint/scope-manager@npm:6.21.0": + version: 6.21.0 + resolution: "@typescript-eslint/scope-manager@npm:6.21.0" dependencies: - "@typescript-eslint/types": "npm:7.18.0" - "@typescript-eslint/visitor-keys": "npm:7.18.0" - checksum: 10/9eb2ae5d69d9f723e706c16b2b97744fc016996a5473bed596035ac4d12429b3d24e7340a8235d704efa57f8f52e1b3b37925ff7c2e3384859d28b23a99b8bcc + "@typescript-eslint/types": "npm:6.21.0" + "@typescript-eslint/visitor-keys": "npm:6.21.0" + checksum: 10/fe91ac52ca8e09356a71dc1a2f2c326480f3cccfec6b2b6d9154c1a90651ab8ea270b07c67df5678956c3bbf0bbe7113ab68f68f21b20912ea528b1214197395 languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:7.18.0": - version: 7.18.0 - resolution: "@typescript-eslint/type-utils@npm:7.18.0" +"@typescript-eslint/type-utils@npm:6.21.0": + version: 6.21.0 + resolution: "@typescript-eslint/type-utils@npm:6.21.0" dependencies: - "@typescript-eslint/typescript-estree": "npm:7.18.0" - "@typescript-eslint/utils": "npm:7.18.0" + "@typescript-eslint/typescript-estree": "npm:6.21.0" + "@typescript-eslint/utils": "npm:6.21.0" debug: "npm:^4.3.4" - ts-api-utils: "npm:^1.3.0" + ts-api-utils: "npm:^1.0.1" peerDependencies: - eslint: ^8.56.0 + eslint: ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 10/bcc7958a4ecdddad8c92e17265175773e7dddf416a654c1a391e69cb16e43960b39d37b6ffa349941bf3635e050f0ca7cd8f56ec9dd774168f2bbe7afedc9676 + checksum: 10/d03fb3ee1caa71f3ce053505f1866268d7ed79ffb7fed18623f4a1253f5b8f2ffc92636d6fd08fcbaf5bd265a6de77bf192c53105131e4724643dfc910d705fc languageName: node linkType: hard -"@typescript-eslint/types@npm:7.18.0": - version: 7.18.0 - resolution: "@typescript-eslint/types@npm:7.18.0" - checksum: 10/0e30c73a3cc3c67dd06360a5a12fd12cee831e4092750eec3d6c031bdc4feafcb0ab1d882910a73e66b451a4f6e1dd015e9e2c4d45bf6bf716a474e5d123ddf0 +"@typescript-eslint/types@npm:6.21.0": + version: 6.21.0 + resolution: "@typescript-eslint/types@npm:6.21.0" + checksum: 10/e26da86d6f36ca5b6ef6322619f8ec55aabcd7d43c840c977ae13ae2c964c3091fc92eb33730d8be08927c9de38466c5323e78bfb270a9ff1d3611fe821046c5 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:7.18.0": - version: 7.18.0 - resolution: "@typescript-eslint/typescript-estree@npm:7.18.0" +"@typescript-eslint/typescript-estree@npm:6.21.0": + version: 6.21.0 + resolution: "@typescript-eslint/typescript-estree@npm:6.21.0" dependencies: - "@typescript-eslint/types": "npm:7.18.0" - "@typescript-eslint/visitor-keys": "npm:7.18.0" + "@typescript-eslint/types": "npm:6.21.0" + "@typescript-eslint/visitor-keys": "npm:6.21.0" debug: "npm:^4.3.4" globby: "npm:^11.1.0" is-glob: "npm:^4.0.3" - minimatch: "npm:^9.0.4" - semver: "npm:^7.6.0" - ts-api-utils: "npm:^1.3.0" + minimatch: "npm:9.0.3" + semver: "npm:^7.5.4" + ts-api-utils: "npm:^1.0.1" peerDependenciesMeta: typescript: optional: true - checksum: 10/b01e66235a91aa4439d02081d4a5f8b4a7cf9cb24f26b334812f657e3c603493e5f41e5c1e89cf4efae7d64509fa1f73affc16afc5e15cb7f83f724577c82036 + checksum: 10/b32fa35fca2a229e0f5f06793e5359ff9269f63e9705e858df95d55ca2cd7fdb5b3e75b284095a992c48c5fc46a1431a1a4b6747ede2dd08929dc1cbacc589b8 languageName: node linkType: hard -"@typescript-eslint/utils@npm:7.18.0": - version: 7.18.0 - resolution: "@typescript-eslint/utils@npm:7.18.0" +"@typescript-eslint/utils@npm:6.21.0": + version: 6.21.0 + resolution: "@typescript-eslint/utils@npm:6.21.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.4.0" - "@typescript-eslint/scope-manager": "npm:7.18.0" - "@typescript-eslint/types": "npm:7.18.0" - "@typescript-eslint/typescript-estree": "npm:7.18.0" + "@types/json-schema": "npm:^7.0.12" + "@types/semver": "npm:^7.5.0" + "@typescript-eslint/scope-manager": "npm:6.21.0" + "@typescript-eslint/types": "npm:6.21.0" + "@typescript-eslint/typescript-estree": "npm:6.21.0" + semver: "npm:^7.5.4" peerDependencies: - eslint: ^8.56.0 - checksum: 10/f43fedb4f4d2e3836bdf137889449063a55c0ece74fdb283929cd376197b992313be8ef4df920c1c801b5c3076b92964c84c6c3b9b749d263b648d0011f5926e + eslint: ^7.0.0 || ^8.0.0 + checksum: 10/b404a2c55a425a79d054346ae123087d30c7ecf7ed7abcf680c47bf70c1de4fabadc63434f3f460b2fa63df76bc9e4a0b9fa2383bb8a9fcd62733fb5c4e4f3e3 languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:7.18.0": - version: 7.18.0 - resolution: "@typescript-eslint/visitor-keys@npm:7.18.0" +"@typescript-eslint/visitor-keys@npm:6.21.0": + version: 6.21.0 + resolution: "@typescript-eslint/visitor-keys@npm:6.21.0" dependencies: - "@typescript-eslint/types": "npm:7.18.0" - eslint-visitor-keys: "npm:^3.4.3" - checksum: 10/b7cfe6fdeae86c507357ac6b2357813c64fb2fbf1aaf844393ba82f73a16e2599b41981b34200d9fc7765d70bc3a8181d76b503051e53f04bcb7c9afef637eab + "@typescript-eslint/types": "npm:6.21.0" + eslint-visitor-keys: "npm:^3.4.1" + checksum: 10/30422cdc1e2ffad203df40351a031254b272f9c6f2b7e02e9bfa39e3fc2c7b1c6130333b0057412968deda17a3a68a578a78929a8139c6acef44d9d841dc72e1 languageName: node linkType: hard @@ -9336,27 +9368,29 @@ __metadata: dependencies: "@nomicfoundation/hardhat-chai-matchers": "npm:^2.0.0" "@nomicfoundation/hardhat-ethers": "npm:^3.0.0" + "@nomicfoundation/hardhat-foundry": "npm:^1.1.2" "@nomicfoundation/hardhat-ignition": "npm:^0.15.5" "@nomicfoundation/hardhat-ignition-ethers": "npm:^0.15.0" "@nomicfoundation/hardhat-network-helpers": "npm:^1.0.0" "@nomicfoundation/hardhat-toolbox": "npm:^5.0.0" "@nomicfoundation/hardhat-verify": "npm:^2.0.0" "@nomicfoundation/ignition-core": "npm:^0.15.5" + "@openzeppelin/contracts": "npm:^5.0.2" "@typechain/ethers-v6": "npm:^0.5.0" "@typechain/hardhat": "npm:^9.0.0" "@types/chai": "npm:^4.2.0" "@types/mocha": "npm:>=9.1.0" + "@types/node": "npm:^22.6.1" chai: "npm:^4.2.0" ethers: "npm:^6.4.0" + forge-std: "github:foundry-rs/forge-std#v1.9.2" hardhat: "npm:^2.22.11" hardhat-gas-reporter: "npm:^1.0.8" - prettier-plugin-solidity: "npm:^1.4.1" solhint: "npm:^5.0.3" - solhint-plugin-prettier: "npm:^0.1.0" solidity-coverage: "npm:^0.8.1" ts-node: "npm:^10.9.2" typechain: "npm:^8.3.0" - typescript: "npm:^5.5.0" + typescript: "npm:5.3" languageName: unknown linkType: soft @@ -9382,7 +9416,7 @@ __metadata: remark-preset-lint-consistent: "npm:^6.0.0" remark-preset-lint-recommended: "npm:^7.0.0" sass: "npm:^1.79.3" - typescript: "npm:~5.5.0" + typescript: "npm:5.3" languageName: unknown linkType: soft @@ -9390,7 +9424,7 @@ __metadata: version: 0.0.0-use.local resolution: "excubiae-website@workspace:apps/website" dependencies: - typescript: "npm:^5.5.0" + typescript: "npm:5.3" vite: "npm:^5.4.1" languageName: unknown linkType: soft @@ -9402,8 +9436,8 @@ __metadata: "@commitlint/cli": "npm:^19.5.0" "@commitlint/config-conventional": "npm:^19.5.0" "@types/node": "npm:^22.5.5" - "@typescript-eslint/eslint-plugin": "npm:^7.0.2" - "@typescript-eslint/parser": "npm:^7.0.2" + "@typescript-eslint/eslint-plugin": "npm:^6.0.0" + "@typescript-eslint/parser": "npm:^6.0.0" changelogithub: "npm:^0.13.10" czg: "npm:^1.9.4" eslint: "npm:^8.56.0" @@ -9417,9 +9451,10 @@ __metadata: husky: "npm:^9.1.6" lint-staged: "npm:^15.2.10" prettier: "npm:^3.3.3" + prettier-plugin-solidity: "npm:^1.4.1" rimraf: "npm:^6.0.1" ts-node: "npm:^10.9.2" - typescript: "npm:^5.5.0" + typescript: "npm:5.3" languageName: unknown linkType: soft @@ -9563,7 +9598,7 @@ __metadata: languageName: node linkType: hard -"fast-diff@npm:^1.1.2, fast-diff@npm:^1.2.0": +"fast-diff@npm:^1.2.0": version: 1.3.0 resolution: "fast-diff@npm:1.3.0" checksum: 10/9e57415bc69cd6efcc720b3b8fe9fdaf42dcfc06f86f0f45378b1fa512598a8aac48aa3928c8751d58e2f01bb4ba4f07e4f3d9bc0d57586d45f1bd1e872c6cde @@ -9834,6 +9869,13 @@ __metadata: languageName: node linkType: hard +"forge-std@github:foundry-rs/forge-std#v1.9.2": + version: 1.9.2 + resolution: "forge-std@https://github.com/foundry-rs/forge-std.git#commit=1714bee72e286e73f76e320d110e0eaf5c4e649d" + checksum: 10/e80f468eadf2a0801f33bbe64d5d3395d7b0d46325de0823a22ad8947493ee50de50cef9b141a354b0ba645f7c58086deb110b7260a9b6087d34a2a32ac1e932 + languageName: node + linkType: hard + "fork-ts-checker-webpack-plugin@npm:^6.5.0": version: 6.5.3 resolution: "fork-ts-checker-webpack-plugin@npm:6.5.3" @@ -11223,7 +11265,7 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^5.0.0, ignore@npm:^5.1.1, ignore@npm:^5.2.0, ignore@npm:^5.2.4, ignore@npm:^5.3.1": +"ignore@npm:^5.0.0, ignore@npm:^5.1.1, ignore@npm:^5.2.0, ignore@npm:^5.2.4": version: 5.3.2 resolution: "ignore@npm:5.3.2" checksum: 10/cceb6a457000f8f6a50e1196429750d782afce5680dd878aa4221bd79972d68b3a55b4b1458fc682be978f4d3c6a249046aa0880637367216444ab7b014cfc98 @@ -13774,6 +13816,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:9.0.3": + version: 9.0.3 + resolution: "minimatch@npm:9.0.3" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10/c81b47d28153e77521877649f4bab48348d10938df9e8147a58111fe00ef89559a2938de9f6632910c4f7bf7bb5cd81191a546167e58d357f0cfb1e18cecc1c5 + languageName: node + linkType: hard + "minimatch@npm:^10.0.0": version: 10.0.1 resolution: "minimatch@npm:10.0.1" @@ -15488,15 +15539,6 @@ __metadata: languageName: node linkType: hard -"prettier-linter-helpers@npm:^1.0.0": - version: 1.0.0 - resolution: "prettier-linter-helpers@npm:1.0.0" - dependencies: - fast-diff: "npm:^1.1.2" - checksum: 10/00ce8011cf6430158d27f9c92cfea0a7699405633f7f1d4a45f07e21bf78e99895911cbcdc3853db3a824201a7c745bd49bfea8abd5fb9883e765a90f74f8392 - languageName: node - linkType: hard - "prettier-plugin-solidity@npm:^1.4.1": version: 1.4.1 resolution: "prettier-plugin-solidity@npm:1.4.1" @@ -17691,19 +17733,6 @@ __metadata: languageName: node linkType: hard -"solhint-plugin-prettier@npm:^0.1.0": - version: 0.1.0 - resolution: "solhint-plugin-prettier@npm:0.1.0" - dependencies: - "@prettier/sync": "npm:^0.3.0" - prettier-linter-helpers: "npm:^1.0.0" - peerDependencies: - prettier: ^3.0.0 - prettier-plugin-solidity: ^1.0.0 - checksum: 10/241caa07b9d1570117cf0cc56371cc81c69fb17706dbc68136dfb112279c8c1cf815dbaa70c146acd06876e16d9a7385312b63302f2381868c02c3bdfa23715b - languageName: node - linkType: hard - "solhint@npm:^5.0.3": version: 5.0.3 resolution: "solhint@npm:5.0.3" @@ -18583,7 +18612,7 @@ __metadata: languageName: node linkType: hard -"ts-api-utils@npm:^1.3.0": +"ts-api-utils@npm:^1.0.1": version: 1.3.0 resolution: "ts-api-utils@npm:1.3.0" peerDependencies: @@ -18874,43 +18903,23 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^5.5.0": - version: 5.6.2 - resolution: "typescript@npm:5.6.2" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10/f95365d4898f357823e93d334ecda9fcade54f009b397c7d05b7621cd9e865981033cf89ccde0f3e3a7b73b1fdbae18e92bc77db237b43e912f053fef0f9a53b - languageName: node - linkType: hard - -"typescript@npm:~5.5.0": - version: 5.5.4 - resolution: "typescript@npm:5.5.4" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10/1689ccafef894825481fc3d856b4834ba3cc185a9c2878f3c76a9a1ef81af04194849840f3c69e7961e2312771471bb3b460ca92561e1d87599b26c37d0ffb6f - languageName: node - linkType: hard - -"typescript@patch:typescript@npm%3A^5.5.0#optional!builtin": - version: 5.6.2 - resolution: "typescript@patch:typescript@npm%3A5.6.2#optional!builtin::version=5.6.2&hash=8c6c40" +"typescript@npm:5.3": + version: 5.3.3 + resolution: "typescript@npm:5.3.3" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10/8bfc7ca0d9feca4c3fcbd6c70741abfcd714197d6448e68225ae71e462447d904d3bfba49759a8fbe4956d87f054e2d346833c8349c222daa594a2626d4e1be8 + checksum: 10/6e4e6a14a50c222b3d14d4ea2f729e79f972fa536ac1522b91202a9a65af3605c2928c4a790a4a50aa13694d461c479ba92cedaeb1e7b190aadaa4e4b96b8e18 languageName: node linkType: hard -"typescript@patch:typescript@npm%3A~5.5.0#optional!builtin": - version: 5.5.4 - resolution: "typescript@patch:typescript@npm%3A5.5.4#optional!builtin::version=5.5.4&hash=379a07" +"typescript@patch:typescript@npm%3A5.3#optional!builtin": + version: 5.3.3 + resolution: "typescript@patch:typescript@npm%3A5.3.3#optional!builtin::version=5.3.3&hash=e012d7" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10/746fdd0865c5ce4f15e494c57ede03a9e12ede59cfdb40da3a281807853fe63b00ef1c912d7222143499aa82f18b8b472baa1830df8804746d09b55f6cf5b1cc + checksum: 10/c93786fcc9a70718ba1e3819bab56064ead5817004d1b8186f8ca66165f3a2d0100fee91fa64c840dcd45f994ca5d615d8e1f566d39a7470fc1e014dbb4cf15d languageName: node linkType: hard