diff --git a/spot-contracts/contracts/FeePolicy.sol b/spot-contracts/contracts/FeePolicy.sol index 8c4f59fa..f82a3d75 100644 --- a/spot-contracts/contracts/FeePolicy.sol +++ b/spot-contracts/contracts/FeePolicy.sol @@ -6,6 +6,7 @@ import { SubscriptionParams } from "./_interfaces/CommonTypes.sol"; import { InvalidPerc, InvalidTargetSRBounds, InvalidDRBounds } from "./_interfaces/ProtocolErrors.sol"; import { MathUpgradeable } from "@openzeppelin/contracts-upgradeable/utils/math/MathUpgradeable.sol"; +import { SignedMathUpgradeable } from "@openzeppelin/contracts-upgradeable/utils/math/SignedMathUpgradeable.sol"; import { SafeCastUpgradeable } from "@openzeppelin/contracts-upgradeable/utils/math/SafeCastUpgradeable.sol"; import { OwnableUpgradeable } from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; /** @@ -96,21 +97,22 @@ contract FeePolicy is IFeePolicy, OwnableUpgradeable { /// @dev NOTE: We updated the type of the parameters from int256 to uint256, which is an upgrade safe operation. struct RolloverFeeParams { - /// @notice The maximum debasement rate for perp, - /// i.e) the maximum rate perp pays the vault for rollovers. + /// @notice The minimum rollover fee percentage enforced by the contract. + /// @dev This is represented as signed fixed point number with {DECIMALS} places. + /// The rollover fee percentage returned by the fee policy will be no lower than + /// this specified value. + /// The parameter effectively controls perp's maximum debasement amount. + int256 minRolloverFeePerc; + /// @notice The slope of the linear rollover fee curve when (dr <= 1). /// @dev This is represented as fixed point number with {DECIMALS} places. - /// For example, setting this to (0.1 / 13), would mean that the yearly perp debasement rate is capped at ~10%. - uint256 maxPerpDebasementPerc; - /// @notice The slope of the linear fee curve when (dr <= 1). - /// @dev This is represented as fixed point number with {DECIMALS} places. - /// Setting it to (1.0 / 13), would mean that it would take 1 year for dr to increase to 1.0. + /// Setting it to say (28 / 365), given a 28 day bond cycle it would take 1 year for dr to increase to 1.0. /// (assuming no other changes to the system) - uint256 m1; - /// @notice The slope of the linear fee curve when (dr > 1). + uint256 perpDebasementSlope; + /// @notice The slope of the linear rollover fee curve when (dr > 1). /// @dev This is represented as fixed point number with {DECIMALS} places. - /// Setting it to (1.0 / 13), would mean that it would take 1 year for dr to decrease to 1.0. + /// Setting it to say (28 / 365), given a 28 day bond cycle it would take 1 year for dr to decrease to 1.0. /// (assuming no other changes to the system) - uint256 m2; + uint256 perpEnrichmentSlope; } /// @notice Parameters which control the perp rollover fee, @@ -155,14 +157,15 @@ contract FeePolicy is IFeePolicy, OwnableUpgradeable { vaultUnderlyingToPerpSwapFeePerc = ONE; vaultPerpToUnderlyingSwapFeePerc = ONE; - // NOTE: With the current bond length of 28 days, rollover rate is annualized by dividing by: 365/28 ~= 13 - perpRolloverFee.maxPerpDebasementPerc = ONE / (10 * 13); // 0.1/13 = 0.0077 (10% annualized) - perpRolloverFee.m1 = ONE / (3 * 13); // 0.025 - perpRolloverFee.m2 = ONE / (3 * 13); // 0.025 + // NOTE: With the current bond length of 28 days, + // rollover fee percentages are annualized by dividing by: 365/28 ~= 13 + perpRolloverFee.minRolloverFeePerc = -int256(ONE) / 13; // 0.077 (-100% annualized) + perpRolloverFee.perpDebasementSlope = ONE / 13; // 0.077 + perpRolloverFee.perpEnrichmentSlope = ONE / 13; // 0.077 - targetSubscriptionRatio = (ONE * 133) / 100; // 1.33 - deviationRatioBoundLower = (ONE * 75) / 100; // 0.75 - deviationRatioBoundUpper = 2 * ONE; // 2.0 + targetSubscriptionRatio = (ONE * 150) / 100; // 1.5 + deviationRatioBoundLower = (ONE * 90) / 100; // 0.9 + deviationRatioBoundUpper = 4 * ONE; // 4.0 } //----------------------------------------------------------------------------- @@ -272,17 +275,22 @@ contract FeePolicy is IFeePolicy, OwnableUpgradeable { } /// @inheritdoc IFeePolicy - function computePerpRolloverFeePerc(uint256 dr) external view override returns (int256) { + function computePerpRolloverFeePerc(uint256 dr) external view override returns (int256 rolloverFeePerc) { + RolloverFeeParams memory c = perpRolloverFee; if (dr <= ONE) { - uint256 negPerpRate = MathUpgradeable.min( - perpRolloverFee.m1.mulDiv(ONE - dr, ONE), - perpRolloverFee.maxPerpDebasementPerc - ); - return -1 * negPerpRate.toInt256(); + // The cappedSr is the essentially the percentage of perp's collateral which can be rolled over + // given the vault's current liquidity level. + // Said simply, if cappedSr is 0.5 only 50% of the perp's collateral can be rolled over. + // If cappedSr is 1.0, all of perp's collateral can be rolled over. + uint256 cappedSr = MathUpgradeable.min(dr * targetSubscriptionRatio, ONE); + uint256 negRolloverFeePerc = cappedSr > 0 + ? (ONE - dr).mulDiv(c.perpDebasementSlope, cappedSr, MathUpgradeable.Rounding.Up) + : c.perpDebasementSlope; + rolloverFeePerc = -negRolloverFeePerc.toInt256(); } else { - uint256 perpRate = perpRolloverFee.m2.mulDiv(dr - ONE, ONE); - return perpRate.toInt256(); + rolloverFeePerc = (dr - ONE).mulDiv(c.perpEnrichmentSlope, ONE).toInt256(); } + rolloverFeePerc = SignedMathUpgradeable.max(rolloverFeePerc, c.minRolloverFeePerc); } /// @inheritdoc IFeePolicy diff --git a/spot-contracts/package.json b/spot-contracts/package.json index 28a57f1d..6ddc74c5 100644 --- a/spot-contracts/package.json +++ b/spot-contracts/package.json @@ -54,7 +54,7 @@ "ethereum-waffle": "^3.4.4", "ethers": "^5.6.9", "ganache-cli": "^6.12.2", - "hardhat": "^2.19.4", + "hardhat": "^2.22.19", "hardhat-gas-reporter": "^1.0.9", "lodash": "^4.17.21", "prettier": "^2.7.1", diff --git a/spot-contracts/test/FeePolicy.ts b/spot-contracts/test/FeePolicy.ts index b7fb87b5..207c589f 100644 --- a/spot-contracts/test/FeePolicy.ts +++ b/spot-contracts/test/FeePolicy.ts @@ -24,9 +24,13 @@ describe("FeePolicy", function () { describe("#init", function () { it("should return the initial parameters", async function () { - expect(await feePolicy.targetSubscriptionRatio()).to.eq(toPerc("1.33")); - expect(await feePolicy.deviationRatioBoundLower()).to.eq(toPerc("0.75")); - expect(await feePolicy.deviationRatioBoundUpper()).to.eq(toPerc("2")); + expect(await feePolicy.targetSubscriptionRatio()).to.eq(toPerc("1.5")); + expect(await feePolicy.deviationRatioBoundLower()).to.eq(toPerc("0.9")); + expect(await feePolicy.deviationRatioBoundUpper()).to.eq(toPerc("4")); + const r = await feePolicy.perpRolloverFee(); + expect(await r.minRolloverFeePerc).to.eq(toPerc("-0.07692307")); + expect(await r.perpDebasementSlope).to.eq(toPerc("0.07692307")); + expect(await r.perpEnrichmentSlope).to.eq(toPerc("0.07692307")); }); it("should return owner", async function () { expect(await feePolicy.owner()).to.eq(await deployer.getAddress()); @@ -63,7 +67,7 @@ describe("FeePolicy", function () { describe("when triggered by owner", function () { it("should update the target sr", async function () { - expect(await feePolicy.targetSubscriptionRatio()).to.eq(toPerc("1.33")); + expect(await feePolicy.targetSubscriptionRatio()).to.eq(toPerc("1.5")); await feePolicy.connect(deployer).updateTargetSubscriptionRatio(toPerc("1.25")); expect(await feePolicy.targetSubscriptionRatio()).to.eq(toPerc("1.25")); }); @@ -97,8 +101,8 @@ describe("FeePolicy", function () { describe("when triggered by owner", function () { it("should update the target sr", async function () { - expect(await feePolicy.deviationRatioBoundLower()).to.eq(toPerc("0.75")); - expect(await feePolicy.deviationRatioBoundUpper()).to.eq(toPerc("2")); + expect(await feePolicy.deviationRatioBoundLower()).to.eq(toPerc("0.9")); + expect(await feePolicy.deviationRatioBoundUpper()).to.eq(toPerc("4")); await feePolicy.connect(deployer).updateDeviationRatioBounds(toPerc("0.5"), toPerc("1.5")); expect(await feePolicy.deviationRatioBoundLower()).to.eq(toPerc("0.5")); expect(await feePolicy.deviationRatioBoundUpper()).to.eq(toPerc("1.5")); @@ -165,9 +169,9 @@ describe("FeePolicy", function () { it("should revert", async function () { await expect( feePolicy.connect(otherUser).updatePerpRolloverFees({ - maxPerpDebasementPerc: toPerc("0.01"), - m1: toPerc("0.01"), - m2: toPerc("0.01"), + minRolloverFeePerc: toPerc("-0.01"), + perpDebasementSlope: toPerc("0.01"), + perpEnrichmentSlope: toPerc("0.01"), }), ).to.be.revertedWith("Ownable: caller is not the owner"); }); @@ -176,14 +180,14 @@ describe("FeePolicy", function () { describe("when triggered by owner", function () { it("should update parameters", async function () { await feePolicy.connect(deployer).updatePerpRolloverFees({ - maxPerpDebasementPerc: toPerc("0.01"), - m1: toPerc("0.02"), - m2: toPerc("0.03"), + minRolloverFeePerc: toPerc("-0.01"), + perpDebasementSlope: toPerc("0.02"), + perpEnrichmentSlope: toPerc("0.03"), }); const p = await feePolicy.perpRolloverFee(); - expect(p.maxPerpDebasementPerc).to.eq(toPerc("0.01")); - expect(p.m1).to.eq(toPerc("0.02")); - expect(p.m2).to.eq(toPerc("0.03")); + expect(p.minRolloverFeePerc).to.eq(toPerc("-0.01")); + expect(p.perpDebasementSlope).to.eq(toPerc("0.02")); + expect(p.perpEnrichmentSlope).to.eq(toPerc("0.03")); }); }); }); @@ -304,9 +308,9 @@ describe("FeePolicy", function () { await feePolicy.updatePerpMintFees(toPerc("0.025")); await feePolicy.updatePerpBurnFees(toPerc("0.035")); await feePolicy.updatePerpRolloverFees({ - maxPerpDebasementPerc: toPerc("0.1"), - m1: toPerc("0.3"), - m2: toPerc("0.6"), + minRolloverFeePerc: toPerc("-0.8"), + perpDebasementSlope: toPerc("1"), + perpEnrichmentSlope: toPerc("2"), }); await feePolicy.updateVaultUnderlyingToPerpSwapFeePerc(toPerc("0.1")); await feePolicy.updateVaultPerpToUnderlyingSwapFeePerc(toPerc("0.15")); @@ -447,25 +451,25 @@ describe("FeePolicy", function () { describe("rollover fee", function () { it("should compute fees as expected", async function () { - expect(await feePolicy.computePerpRolloverFeePerc(toPerc("0"))).to.eq(toPerc("-0.1")); - expect(await feePolicy.computePerpRolloverFeePerc(toPerc("0.01"))).to.eq(toPerc("-0.1")); - expect(await feePolicy.computePerpRolloverFeePerc(toPerc("0.25"))).to.eq(toPerc("-0.1")); - expect(await feePolicy.computePerpRolloverFeePerc(toPerc("0.5"))).to.eq(toPerc("-0.1")); - expect(await feePolicy.computePerpRolloverFeePerc(toPerc("0.66"))).to.eq(toPerc("-0.1")); - expect(await feePolicy.computePerpRolloverFeePerc(toPerc("0.7"))).to.eq(toPerc("-0.09")); - expect(await feePolicy.computePerpRolloverFeePerc(toPerc("0.8"))).to.eq(toPerc("-0.06")); - expect(await feePolicy.computePerpRolloverFeePerc(toPerc("0.9"))).to.eq(toPerc("-0.03")); - expect(await feePolicy.computePerpRolloverFeePerc(toPerc("0.99"))).to.eq(toPerc("-0.003")); + expect(await feePolicy.computePerpRolloverFeePerc(toPerc("0"))).to.eq(toPerc("-0.8")); + expect(await feePolicy.computePerpRolloverFeePerc(toPerc("0.01"))).to.eq(toPerc("-0.8")); + expect(await feePolicy.computePerpRolloverFeePerc(toPerc("0.25"))).to.eq(toPerc("-0.75")); + expect(await feePolicy.computePerpRolloverFeePerc(toPerc("0.5"))).to.eq(toPerc("-0.5")); + expect(await feePolicy.computePerpRolloverFeePerc(toPerc("0.66"))).to.eq(toPerc("-0.34")); + expect(await feePolicy.computePerpRolloverFeePerc(toPerc("0.7"))).to.eq(toPerc("-0.3")); + expect(await feePolicy.computePerpRolloverFeePerc(toPerc("0.8"))).to.eq(toPerc("-0.2")); + expect(await feePolicy.computePerpRolloverFeePerc(toPerc("0.9"))).to.eq(toPerc("-0.1")); + expect(await feePolicy.computePerpRolloverFeePerc(toPerc("0.99"))).to.eq(toPerc("-0.01")); expect(await feePolicy.computePerpRolloverFeePerc(toPerc("1"))).to.eq("0"); - expect(await feePolicy.computePerpRolloverFeePerc(toPerc("1.01"))).to.eq(toPerc("0.006")); - expect(await feePolicy.computePerpRolloverFeePerc(toPerc("1.05"))).to.eq(toPerc("0.03")); - expect(await feePolicy.computePerpRolloverFeePerc(toPerc("1.1"))).to.eq(toPerc("0.06")); - expect(await feePolicy.computePerpRolloverFeePerc(toPerc("1.25"))).to.eq(toPerc("0.15")); - expect(await feePolicy.computePerpRolloverFeePerc(toPerc("1.5"))).to.eq(toPerc("0.3")); - expect(await feePolicy.computePerpRolloverFeePerc(toPerc("1.75"))).to.eq(toPerc("0.45")); - expect(await feePolicy.computePerpRolloverFeePerc(toPerc("2"))).to.eq(toPerc("0.6")); - expect(await feePolicy.computePerpRolloverFeePerc(toPerc("5"))).to.eq(toPerc("2.4")); - expect(await feePolicy.computePerpRolloverFeePerc(toPerc("10"))).to.eq(toPerc("5.4")); + expect(await feePolicy.computePerpRolloverFeePerc(toPerc("1.01"))).to.eq(toPerc("0.02")); + expect(await feePolicy.computePerpRolloverFeePerc(toPerc("1.05"))).to.eq(toPerc("0.1")); + expect(await feePolicy.computePerpRolloverFeePerc(toPerc("1.1"))).to.eq(toPerc("0.2")); + expect(await feePolicy.computePerpRolloverFeePerc(toPerc("1.25"))).to.eq(toPerc("0.5")); + expect(await feePolicy.computePerpRolloverFeePerc(toPerc("1.5"))).to.eq(toPerc("1")); + expect(await feePolicy.computePerpRolloverFeePerc(toPerc("1.75"))).to.eq(toPerc("1.5")); + expect(await feePolicy.computePerpRolloverFeePerc(toPerc("2"))).to.eq(toPerc("2")); + expect(await feePolicy.computePerpRolloverFeePerc(toPerc("5"))).to.eq(toPerc("8")); + expect(await feePolicy.computePerpRolloverFeePerc(toPerc("10"))).to.eq(toPerc("18")); }); }); }); diff --git a/yarn.lock b/yarn.lock index 9fad116d..cbc32c12 100644 --- a/yarn.lock +++ b/yarn.lock @@ -59,7 +59,7 @@ __metadata: ethereum-waffle: ^3.4.4 ethers: ^5.6.9 ganache-cli: ^6.12.2 - hardhat: ^2.19.4 + hardhat: ^2.22.19 hardhat-gas-reporter: ^1.0.9 lodash: ^4.17.21 prettier: ^2.7.1 @@ -1334,13 +1334,6 @@ __metadata: languageName: node linkType: hard -"@nomicfoundation/edr-darwin-arm64@npm:0.4.1": - version: 0.4.1 - resolution: "@nomicfoundation/edr-darwin-arm64@npm:0.4.1" - checksum: 087e0e51a6181d85269097f1be667d7f07898b712d506c2c32218bde5f4e194a748165fa3fada3f827d2d47d1cf1b1374f34825468a41a3dd702f0476569b7f3 - languageName: node - linkType: hard - "@nomicfoundation/edr-darwin-arm64@npm:0.7.0": version: 0.7.0 resolution: "@nomicfoundation/edr-darwin-arm64@npm:0.7.0" @@ -1348,10 +1341,10 @@ __metadata: languageName: node linkType: hard -"@nomicfoundation/edr-darwin-x64@npm:0.4.1": - version: 0.4.1 - resolution: "@nomicfoundation/edr-darwin-x64@npm:0.4.1" - checksum: bd02d7f19f762efe92c7abc7b56372c85689d810de0c97c74467f5431547d593b8ce69244675d96e682db8be4ff487c29c63b163e8878f5b541b21cb713fa9ab +"@nomicfoundation/edr-darwin-arm64@npm:0.8.0": + version: 0.8.0 + resolution: "@nomicfoundation/edr-darwin-arm64@npm:0.8.0" + checksum: efae7cf00c6c18e9b3854d8bf3fbb4b1e3932279f83fabb82ddfd74d623886d3cf6b00d4c437b5e81e51d16d02a5759f5a27dae25e0d64eec33422df43251d16 languageName: node linkType: hard @@ -1362,10 +1355,10 @@ __metadata: languageName: node linkType: hard -"@nomicfoundation/edr-linux-arm64-gnu@npm:0.4.1": - version: 0.4.1 - resolution: "@nomicfoundation/edr-linux-arm64-gnu@npm:0.4.1" - checksum: 9cdb065a35680e808717195321d412e500bbb0e8867579c9026194485774356e3203cfc757fc6e8b28371810a07184272f4e71001345f0cdc08cd577468a33e8 +"@nomicfoundation/edr-darwin-x64@npm:0.8.0": + version: 0.8.0 + resolution: "@nomicfoundation/edr-darwin-x64@npm:0.8.0" + checksum: fdc298850dd83e4c6e9ca42b87de112dfd38a369b4f8d7b2fbeca6e6e3f1d24879bc6e57e2362eb173525c26bd9456621c95fd4209feb1d17e3b724d8d9ed232 languageName: node linkType: hard @@ -1376,10 +1369,10 @@ __metadata: languageName: node linkType: hard -"@nomicfoundation/edr-linux-arm64-musl@npm:0.4.1": - version: 0.4.1 - resolution: "@nomicfoundation/edr-linux-arm64-musl@npm:0.4.1" - checksum: d4fb68393f93b0dca040ae3aff339ca83c94a4e12b54b3839b67ba699cc2ef4431cad6af38ae0c7c4c7a0fce0880cbf86d2092743e87e8dbb40074ec63431154 +"@nomicfoundation/edr-linux-arm64-gnu@npm:0.8.0": + version: 0.8.0 + resolution: "@nomicfoundation/edr-linux-arm64-gnu@npm:0.8.0" + checksum: f1df885d79e7887a7fb67b17e1e2337d7eba65c415942d21f1ca1118265597ba9caec409a3ff226b96a8d2facb7bfc1e1fc1338f831e793621afa25a9e3d78ad languageName: node linkType: hard @@ -1390,10 +1383,10 @@ __metadata: languageName: node linkType: hard -"@nomicfoundation/edr-linux-x64-gnu@npm:0.4.1": - version: 0.4.1 - resolution: "@nomicfoundation/edr-linux-x64-gnu@npm:0.4.1" - checksum: cff5ebd95f8bc86438d8d4294f8d41f6db92ca03d3b1f21dcac90617f51835901e83421ce5e3ff95d9e20e31e2f25733681a2fe92c560ab9f431fc138ff9c267 +"@nomicfoundation/edr-linux-arm64-musl@npm:0.8.0": + version: 0.8.0 + resolution: "@nomicfoundation/edr-linux-arm64-musl@npm:0.8.0" + checksum: aa5de26be9d44b9e0e0538e1a5110aa173932cb9a21ab6c60deabe9499399f775cad02353f05ae7b8883fa59af6dd92e0f7a268fb7518736f3134a5d66d8f71c languageName: node linkType: hard @@ -1404,10 +1397,10 @@ __metadata: languageName: node linkType: hard -"@nomicfoundation/edr-linux-x64-musl@npm:0.4.1": - version: 0.4.1 - resolution: "@nomicfoundation/edr-linux-x64-musl@npm:0.4.1" - checksum: e4ee7c195b60f3d90fe710d1d5e15289e5fa56c0af485089d31f35fb3f8c98e3fb1494762c66790fa867c0b7dad26bdcbe1956697a9578015d31997ee564147a +"@nomicfoundation/edr-linux-x64-gnu@npm:0.8.0": + version: 0.8.0 + resolution: "@nomicfoundation/edr-linux-x64-gnu@npm:0.8.0" + checksum: 0eeda6028fa923a8bd2b46ae65344e7244a4b06817fdb509349802cb80c0a81c7751d2727e71cb780474453d74e9f286807e7efc714db22205c47d3f676d6bb4 languageName: node linkType: hard @@ -1418,10 +1411,10 @@ __metadata: languageName: node linkType: hard -"@nomicfoundation/edr-win32-x64-msvc@npm:0.4.1": - version: 0.4.1 - resolution: "@nomicfoundation/edr-win32-x64-msvc@npm:0.4.1" - checksum: 0c2081ad3d2ce60f0ef8fd5aa876d070568fa038b371859d9d253c072c8db7d66674fa9ea1c722915a434e04a0a46463821bbea97e6bf577c50ec3def3819309 +"@nomicfoundation/edr-linux-x64-musl@npm:0.8.0": + version: 0.8.0 + resolution: "@nomicfoundation/edr-linux-x64-musl@npm:0.8.0" + checksum: 87d8d3522f36b4b6023a05c53f7d33748afb432659cafb4e255dc012613757cc3f70687693d080c65ecf8d73092534d4a00959b9d69e9d596dbce230f2e76e87 languageName: node linkType: hard @@ -1432,18 +1425,10 @@ __metadata: languageName: node linkType: hard -"@nomicfoundation/edr@npm:^0.4.0": - version: 0.4.1 - resolution: "@nomicfoundation/edr@npm:0.4.1" - dependencies: - "@nomicfoundation/edr-darwin-arm64": 0.4.1 - "@nomicfoundation/edr-darwin-x64": 0.4.1 - "@nomicfoundation/edr-linux-arm64-gnu": 0.4.1 - "@nomicfoundation/edr-linux-arm64-musl": 0.4.1 - "@nomicfoundation/edr-linux-x64-gnu": 0.4.1 - "@nomicfoundation/edr-linux-x64-musl": 0.4.1 - "@nomicfoundation/edr-win32-x64-msvc": 0.4.1 - checksum: e3798101748df5d158a509e331c47754646071738721e10a30da95046066a61d4435de4e47e179279ce51ebb2f6e81bd0c9125f367c58bd46fca1abb0d0ee0dd +"@nomicfoundation/edr-win32-x64-msvc@npm:0.8.0": + version: 0.8.0 + resolution: "@nomicfoundation/edr-win32-x64-msvc@npm:0.8.0" + checksum: 764dbf36654aa377d4b33e751b3cb98381f5dad1124cce0acdc4a0cbc247fe1b51f163ec3b293009937c398cce482bd492d21e00383acbc201c25380f53bb87d languageName: node linkType: hard @@ -1462,6 +1447,21 @@ __metadata: languageName: node linkType: hard +"@nomicfoundation/edr@npm:^0.8.0": + version: 0.8.0 + resolution: "@nomicfoundation/edr@npm:0.8.0" + dependencies: + "@nomicfoundation/edr-darwin-arm64": 0.8.0 + "@nomicfoundation/edr-darwin-x64": 0.8.0 + "@nomicfoundation/edr-linux-arm64-gnu": 0.8.0 + "@nomicfoundation/edr-linux-arm64-musl": 0.8.0 + "@nomicfoundation/edr-linux-x64-gnu": 0.8.0 + "@nomicfoundation/edr-linux-x64-musl": 0.8.0 + "@nomicfoundation/edr-win32-x64-msvc": 0.8.0 + checksum: eeabb9f62174e1742d08d31904ae879c7c05de89f929980df2fa9dec5763528f3b8965bedca93fe7d1d4adb9e56c56a9dc8096992cf6f10b907d3f32f04c6676 + languageName: node + linkType: hard + "@nomicfoundation/ethereumjs-common@npm:4.0.4": version: 4.0.4 resolution: "@nomicfoundation/ethereumjs-common@npm:4.0.4" @@ -5304,7 +5304,7 @@ __metadata: languageName: node linkType: hard -"chokidar@npm:^3.0.2, chokidar@npm:^3.4.0, chokidar@npm:^3.5.3": +"chokidar@npm:^3.0.2, chokidar@npm:^3.5.3": version: 3.6.0 resolution: "chokidar@npm:3.6.0" dependencies: @@ -8339,15 +8339,6 @@ __metadata: languageName: node linkType: hard -"find-up@npm:^2.1.0": - version: 2.1.0 - resolution: "find-up@npm:2.1.0" - dependencies: - locate-path: ^2.0.0 - checksum: 43284fe4da09f89011f08e3c32cd38401e786b19226ea440b75386c1b12a4cb738c94969808d53a84f564ede22f732c8409e3cfc3f7fb5b5c32378ad0bbf28bd - languageName: node - linkType: hard - "find-up@npm:^3.0.0": version: 3.0.0 resolution: "find-up@npm:3.0.0" @@ -8935,20 +8926,6 @@ __metadata: languageName: node linkType: hard -"glob@npm:7.2.0": - version: 7.2.0 - resolution: "glob@npm:7.2.0" - dependencies: - fs.realpath: ^1.0.0 - inflight: ^1.0.4 - inherits: 2 - minimatch: ^3.0.4 - once: ^1.3.0 - path-is-absolute: ^1.0.0 - checksum: 78a8ea942331f08ed2e055cb5b9e40fe6f46f579d7fd3d694f3412fe5db23223d29b7fee1575440202e9a7ff9a72ab106a39fee39934c7bedafe5e5f8ae20134 - languageName: node - linkType: hard - "glob@npm:8.1.0, glob@npm:^8.0.3": version: 8.1.0 resolution: "glob@npm:8.1.0" @@ -9281,13 +9258,13 @@ __metadata: languageName: node linkType: hard -"hardhat@npm:^2.19.4": - version: 2.22.5 - resolution: "hardhat@npm:2.22.5" +"hardhat@npm:^2.22.18": + version: 2.22.18 + resolution: "hardhat@npm:2.22.18" dependencies: "@ethersproject/abi": ^5.1.2 "@metamask/eth-sig-util": ^4.0.0 - "@nomicfoundation/edr": ^0.4.0 + "@nomicfoundation/edr": ^0.7.0 "@nomicfoundation/ethereumjs-common": 4.0.4 "@nomicfoundation/ethereumjs-tx": 5.0.4 "@nomicfoundation/ethereumjs-util": 9.0.4 @@ -9299,31 +9276,32 @@ __metadata: aggregate-error: ^3.0.0 ansi-escapes: ^4.3.0 boxen: ^5.1.2 - chalk: ^2.4.2 - chokidar: ^3.4.0 + chokidar: ^4.0.0 ci-info: ^2.0.0 debug: ^4.1.1 enquirer: ^2.3.0 env-paths: ^2.2.0 ethereum-cryptography: ^1.0.3 ethereumjs-abi: ^0.6.8 - find-up: ^2.1.0 + find-up: ^5.0.0 fp-ts: 1.19.3 fs-extra: ^7.0.1 - glob: 7.2.0 immutable: ^4.0.0-rc.12 io-ts: 1.10.4 + json-stream-stringify: ^3.1.4 keccak: ^3.0.2 lodash: ^4.17.11 mnemonist: ^0.38.0 mocha: ^10.0.0 p-map: ^4.0.0 + picocolors: ^1.1.0 raw-body: ^2.4.1 resolve: 1.17.0 semver: ^6.3.0 - solc: 0.7.3 + solc: 0.8.26 source-map-support: ^0.5.13 stacktrace-parser: ^0.1.10 + tinyglobby: ^0.2.6 tsort: 0.0.1 undici: ^5.14.0 uuid: ^8.3.2 @@ -9338,17 +9316,17 @@ __metadata: optional: true bin: hardhat: internal/cli/bootstrap.js - checksum: 34ab9ae3820c26ea4c92db43aefb15668d0575787d214a408b3274d445a7626775f2966dca2cf82a8fa8d9f39ebfdc90f3fb7189409b9582e373ce5b66ec3855 + checksum: e350e80a96846a465e1ca0c92a30a83e5a04225b8def19c9703d049f4a05ac69ff12150f93bf647e3ce3f82e2264558c6a2cec1b8e8a8494b97ffbf241f54077 languageName: node linkType: hard -"hardhat@npm:^2.22.18": - version: 2.22.18 - resolution: "hardhat@npm:2.22.18" +"hardhat@npm:^2.22.19": + version: 2.22.19 + resolution: "hardhat@npm:2.22.19" dependencies: "@ethersproject/abi": ^5.1.2 "@metamask/eth-sig-util": ^4.0.0 - "@nomicfoundation/edr": ^0.7.0 + "@nomicfoundation/edr": ^0.8.0 "@nomicfoundation/ethereumjs-common": 4.0.4 "@nomicfoundation/ethereumjs-tx": 5.0.4 "@nomicfoundation/ethereumjs-util": 9.0.4 @@ -9400,7 +9378,7 @@ __metadata: optional: true bin: hardhat: internal/cli/bootstrap.js - checksum: e350e80a96846a465e1ca0c92a30a83e5a04225b8def19c9703d049f4a05ac69ff12150f93bf647e3ce3f82e2264558c6a2cec1b8e8a8494b97ffbf241f54077 + checksum: 08b6c1912528ed3c013d731a312836e22ad5bdbbce27a78f8dc395154548f723c6b13af90dcee71401bfd1ee910005ab252aafb44cc5e42daaee8a41e5b4c739 languageName: node linkType: hard @@ -11404,16 +11382,6 @@ __metadata: languageName: node linkType: hard -"locate-path@npm:^2.0.0": - version: 2.0.0 - resolution: "locate-path@npm:2.0.0" - dependencies: - p-locate: ^2.0.0 - path-exists: ^3.0.0 - checksum: 02d581edbbbb0fa292e28d96b7de36b5b62c2fa8b5a7e82638ebb33afa74284acf022d3b1e9ae10e3ffb7658fbc49163fcd5e76e7d1baaa7801c3e05a81da755 - languageName: node - linkType: hard - "locate-path@npm:^3.0.0": version: 3.0.0 resolution: "locate-path@npm:3.0.0" @@ -13082,15 +13050,6 @@ __metadata: languageName: node linkType: hard -"p-limit@npm:^1.1.0": - version: 1.3.0 - resolution: "p-limit@npm:1.3.0" - dependencies: - p-try: ^1.0.0 - checksum: 281c1c0b8c82e1ac9f81acd72a2e35d402bf572e09721ce5520164e9de07d8274451378a3470707179ad13240535558f4b277f02405ad752e08c7d5b0d54fbfd - languageName: node - linkType: hard - "p-limit@npm:^2.0.0": version: 2.3.0 resolution: "p-limit@npm:2.3.0" @@ -13109,15 +13068,6 @@ __metadata: languageName: node linkType: hard -"p-locate@npm:^2.0.0": - version: 2.0.0 - resolution: "p-locate@npm:2.0.0" - dependencies: - p-limit: ^1.1.0 - checksum: e2dceb9b49b96d5513d90f715780f6f4972f46987dc32a0e18bc6c3fc74a1a5d73ec5f81b1398af5e58b99ea1ad03fd41e9181c01fa81b4af2833958696e3081 - languageName: node - linkType: hard - "p-locate@npm:^3.0.0": version: 3.0.0 resolution: "p-locate@npm:3.0.0" @@ -13145,13 +13095,6 @@ __metadata: languageName: node linkType: hard -"p-try@npm:^1.0.0": - version: 1.0.0 - resolution: "p-try@npm:1.0.0" - checksum: 3b5303f77eb7722144154288bfd96f799f8ff3e2b2b39330efe38db5dd359e4fb27012464cd85cb0a76e9b7edd1b443568cb3192c22e7cffc34989df0bafd605 - languageName: node - linkType: hard - "p-try@npm:^2.0.0": version: 2.2.0 resolution: "p-try@npm:2.2.0" @@ -15017,25 +14960,6 @@ __metadata: languageName: node linkType: hard -"solc@npm:0.7.3": - version: 0.7.3 - resolution: "solc@npm:0.7.3" - dependencies: - command-exists: ^1.2.8 - commander: 3.0.2 - follow-redirects: ^1.12.1 - fs-extra: ^0.30.0 - js-sha3: 0.8.0 - memorystream: ^0.3.1 - require-from-string: ^2.0.0 - semver: ^5.5.0 - tmp: 0.0.33 - bin: - solcjs: solcjs - checksum: 2d8eb16c6d8f648213c94dc8d977cffe5099cba7d41c82d92d769ef71ae8320a985065ce3d6c306440a85f8e8d2b27fb30bdd3ac38f69e5c1fa0ab8a3fb2f217 - languageName: node - linkType: hard - "solc@npm:0.8.15": version: 0.8.15 resolution: "solc@npm:0.8.15"