diff --git a/foundry.toml b/foundry.toml index aa00631d..9b511b04 100644 --- a/foundry.toml +++ b/foundry.toml @@ -10,7 +10,7 @@ fs_permissions = [{ access = "read-write", path = "./" }] ffi = true solc = '0.8.23' evm_version = 'paris' -via_ir = true +via_ir = false optimizer = true optimizer_runs = 1000 remappings = [ diff --git a/justfile b/justfile index d2cedb63..f32cbdd4 100644 --- a/justfile +++ b/justfile @@ -213,15 +213,15 @@ set positional-arguments bun utils/ffi.ts deleteBatch $1 && \ echo "-> Deleted $1" -@frun script func: +@script script func: forge script $1 --sig "$2()" --ffi -vvv && \ echo "-> $1.$2() ran successfully" -@fbcast script func: +@send script func: forge script $1 --sig "$2()" --ffi --broadcast --skip-simulation -vvv && \ echo "-> $1.$2() ran successfully" -@ftest func: +@test func: forge test --mt ".*$1.*" --ffi -vvv && \ echo "-> $1.$2() ran successfully" diff --git a/out/foundry/deploy/42161/market-status-update-latest.json b/out/foundry/deploy/42161/market-status-update-latest.json new file mode 100644 index 00000000..87d365f0 --- /dev/null +++ b/out/foundry/deploy/42161/market-status-update-latest.json @@ -0,0 +1 @@ +{"AssetStateFacet":{"address":"0xa77521BA0e169d4F5A23bD42EFb027F0990B03f3","newSelectors":6,"oldSelectors":5},"CommonConfigFacet":{"address":"0x0a7A3b4bD997c44E5Dc12B29fa01348Ae491bf39","newSelectors":17,"oldSelectors":16},"CommonStateFacet":{"address":"0x87774CbcfC91b5a18bC375d6465D7a2DC5D21d3a","newSelectors":14,"oldSelectors":13},"MinterBurnFacet":{"address":"0x2F5DeB602361898032A4Ba73a498716Ee657BCae","newSelectors":1,"oldSelectors":1},"MinterLiquidationFacet":{"address":"0x4f6b41644DD0665B4897296fB208b8DF7A490960","newSelectors":2,"oldSelectors":2},"MinterMintFacet":{"address":"0x9b9893cE0600567d9b2e2296bFD13DE4cb7338ba","newSelectors":1,"oldSelectors":1},"SCDPFacet":{"address":"0xF941791E95D283564B68829050D696Da9bB0899c","newSelectors":8,"oldSelectors":8},"SCDPSwapFacet":{"address":"0xF78158919aea3aDBECAD1D3c4FE79e6Ea232893E","newSelectors":3,"oldSelectors":3},"ViewDataFacet":{"address":"0xc22d6C2D8765D90765452686178c8a6270B0C68a","newSelectors":9,"oldSelectors":9},"diamondCut-MarketStatusUpdate":{"calldata":"0x1f931c1c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001aa00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000004c0000000000000000000000000000000000000000000000000000000000000076000000000000000000000000000000000000000000000000000000000000009800000000000000000000000000000000000000000000000000000000000000bc00000000000000000000000000000000000000000000000000000000000000ce00000000000000000000000000000000000000000000000000000000000000e200000000000000000000000000000000000000000000000000000000000000ec00000000000000000000000000000000000000000000000000000000000000f60000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010a00000000000000000000000000000000000000000000000000000000000001180000000000000000000000000000000000000000000000000000000000000126000000000000000000000000000000000000000000000000000000000000013e00000000000000000000000000000000000000000000000000000000000001560000000000000000000000000000000000000000000000000000000000000170000000000000000000000000000000000000000000000000000000000000018a00000000000000000000000000000000000000000000000000000000000001960000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000001094d9150b00000000000000000000000000000000000000000000000000000000bd36412c0000000000000000000000000000000000000000000000000000000065289d02000000000000000000000000000000000000000000000000000000008233d0a600000000000000000000000000000000000000000000000000000000df9cda3800000000000000000000000000000000000000000000000000000000695b295500000000000000000000000000000000000000000000000000000000e74b981b00000000000000000000000000000000000000000000000000000000ba7439d7000000000000000000000000000000000000000000000000000000007303bd2c000000000000000000000000000000000000000000000000000000004ffa76650000000000000000000000000000000000000000000000000000000041b1c3c4000000000000000000000000000000000000000000000000000000007a229bf6000000000000000000000000000000000000000000000000000000007fe4048c00000000000000000000000000000000000000000000000000000000906d2c7c00000000000000000000000000000000000000000000000000000000b8f4496300000000000000000000000000000000000000000000000000000000c3f9c901000000000000000000000000000000000000000000000000000000000000000000000000000000000a7a3b4bd997c44e5dc12b29fa01348ae491bf3900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000001194d9150b00000000000000000000000000000000000000000000000000000000bd36412c0000000000000000000000000000000000000000000000000000000065289d02000000000000000000000000000000000000000000000000000000008233d0a600000000000000000000000000000000000000000000000000000000df9cda3800000000000000000000000000000000000000000000000000000000695b295500000000000000000000000000000000000000000000000000000000e74b981b00000000000000000000000000000000000000000000000000000000ba7439d7000000000000000000000000000000000000000000000000000000007303bd2c0000000000000000000000000000000000000000000000000000000001f96117000000000000000000000000000000000000000000000000000000004ffa76650000000000000000000000000000000000000000000000000000000041b1c3c4000000000000000000000000000000000000000000000000000000007a229bf6000000000000000000000000000000000000000000000000000000007fe4048c00000000000000000000000000000000000000000000000000000000906d2c7c00000000000000000000000000000000000000000000000000000000b8f4496300000000000000000000000000000000000000000000000000000000c3f9c90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000dcde9e52f000000000000000000000000000000000000000000000000000000008df5b34d000000000000000000000000000000000000000000000000000000005988a8ca000000000000000000000000000000000000000000000000000000004ccb20c0000000000000000000000000000000000000000000000000000000007c242a1c00000000000000000000000000000000000000000000000000000000217070ea00000000000000000000000000000000000000000000000000000000fa67d0510000000000000000000000000000000000000000000000000000000050bfac4000000000000000000000000000000000000000000000000000000000f6e25220000000000000000000000000000000000000000000000000000000005a22a61300000000000000000000000000000000000000000000000000000000ed3ce1ee00000000000000000000000000000000000000000000000000000000a056076c00000000000000000000000000000000000000000000000000000000317e4dc10000000000000000000000000000000000000000000000000000000000000000000000000000000087774cbcfc91b5a18bc375d6465d7a2dc5d21d3a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000ecde9e52f000000000000000000000000000000000000000000000000000000008df5b34d000000000000000000000000000000000000000000000000000000005988a8ca000000000000000000000000000000000000000000000000000000004ccb20c0000000000000000000000000000000000000000000000000000000007c242a1c00000000000000000000000000000000000000000000000000000000574cbeec00000000000000000000000000000000000000000000000000000000217070ea00000000000000000000000000000000000000000000000000000000fa67d0510000000000000000000000000000000000000000000000000000000050bfac4000000000000000000000000000000000000000000000000000000000f6e25220000000000000000000000000000000000000000000000000000000005a22a61300000000000000000000000000000000000000000000000000000000ed3ce1ee00000000000000000000000000000000000000000000000000000000a056076c00000000000000000000000000000000000000000000000000000000317e4dc100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000530b8b2c6000000000000000000000000000000000000000000000000000000000650e4290000000000000000000000000000000000000000000000000000000041976e0900000000000000000000000000000000000000000000000000000000c72f3dd700000000000000000000000000000000000000000000000000000000c7bf8cf500000000000000000000000000000000000000000000000000000000000000000000000000000000a77521ba0e169d4f5a23bd42efb027f0990b03f300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000630b8b2c6000000000000000000000000000000000000000000000000000000000650e429000000000000000000000000000000000000000000000000000000006cf027460000000000000000000000000000000000000000000000000000000041976e0900000000000000000000000000000000000000000000000000000000c72f3dd700000000000000000000000000000000000000000000000000000000c7bf8cf5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001f2358af3000000000000000000000000000000000000000000000000000000000000000000000000000000009b9893ce0600567d9b2e2296bfd13de4cb7338ba000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001f2358af30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000014228daf7000000000000000000000000000000000000000000000000000000000000000000000000000000002f5deb602361898032a4ba73a498716ee657bcae0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000014228daf7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000003af57c9c8000000000000000000000000000000000000000000000000000000001e7207e100000000000000000000000000000000000000000000000000000000f8581d9300000000000000000000000000000000000000000000000000000000000000000000000000000000f78158919aea3adbecad1d3c4fe79e6ea232893e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000003af57c9c8000000000000000000000000000000000000000000000000000000001e7207e100000000000000000000000000000000000000000000000000000000f8581d93000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000008f78453f000000000000000000000000000000000000000000000000000000000d42f4c910000000000000000000000000000000000000000000000000000000005ea6b6100000000000000000000000000000000000000000000000000000000199610820000000000000000000000000000000000000000000000000000000030d528a5000000000000000000000000000000000000000000000000000000008fa6e50e0000000000000000000000000000000000000000000000000000000035ffada30000000000000000000000000000000000000000000000000000000082d6fa1d00000000000000000000000000000000000000000000000000000000000000000000000000000000f941791e95d283564b68829050d696da9bb0899c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000008f78453f000000000000000000000000000000000000000000000000000000000d42f4c910000000000000000000000000000000000000000000000000000000005ea6b6100000000000000000000000000000000000000000000000000000000199610820000000000000000000000000000000000000000000000000000000030d528a5000000000000000000000000000000000000000000000000000000008fa6e50e0000000000000000000000000000000000000000000000000000000035ffada30000000000000000000000000000000000000000000000000000000082d6fa1d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000009cff9fda500000000000000000000000000000000000000000000000000000000ad1e72d700000000000000000000000000000000000000000000000000000000caf0340d00000000000000000000000000000000000000000000000000000000d5854f8d00000000000000000000000000000000000000000000000000000000a244df97000000000000000000000000000000000000000000000000000000000baf4ae20000000000000000000000000000000000000000000000000000000015a4352600000000000000000000000000000000000000000000000000000000ecc0dbc300000000000000000000000000000000000000000000000000000000e4073f6b00000000000000000000000000000000000000000000000000000000000000000000000000000000c22d6c2d8765d90765452686178c8a6270b0c68a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000009cff9fda500000000000000000000000000000000000000000000000000000000ad1e72d700000000000000000000000000000000000000000000000000000000caf0340d00000000000000000000000000000000000000000000000000000000d5854f8d00000000000000000000000000000000000000000000000000000000a244df97000000000000000000000000000000000000000000000000000000000baf4ae20000000000000000000000000000000000000000000000000000000015a4352600000000000000000000000000000000000000000000000000000000ecc0dbc300000000000000000000000000000000000000000000000000000000e4073f6b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000029d5cb88e00000000000000000000000000000000000000000000000000000000fdbfc7cd000000000000000000000000000000000000000000000000000000000000000000000000000000004f6b41644dd0665b4897296fb208b8df7a4909600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000029d5cb88e00000000000000000000000000000000000000000000000000000000fdbfc7cd000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","to":"0x0000000000177abD99485DCaea3eFaa91db3fe72"}} \ No newline at end of file diff --git a/src/contracts/core/common/interfaces/IMarketStatus.sol b/src/contracts/core/common/interfaces/IMarketStatus.sol index eed6c888..bb2a732b 100644 --- a/src/contracts/core/common/interfaces/IMarketStatus.sol +++ b/src/contracts/core/common/interfaces/IMarketStatus.sol @@ -16,17 +16,15 @@ interface IMarketStatus { function getExchangeStatus(bytes32) external view returns (bool); - function getExchangeStatuses( - bytes32[] calldata - ) external view returns (bool[] memory); + function getExchangeStatuses(bytes32[] calldata) external view returns (bool[] memory); function getExchange(bytes32) external view returns (bytes32); function getTickerStatus(bytes32) external view returns (bool); - function getTickerStatuses( - bytes32[] calldata - ) external view returns (bool[] memory); + function getTickerExchange(bytes32) external view returns (bytes32); + + function getTickerStatuses(bytes32[] calldata) external view returns (bool[] memory); function owner() external view returns (address); } diff --git a/src/contracts/scripts/MarketStatus.s.sol b/src/contracts/scripts/MarketStatus.s.sol index 3c38c546..88e3c0db 100644 --- a/src/contracts/scripts/MarketStatus.s.sol +++ b/src/contracts/scripts/MarketStatus.s.sol @@ -6,6 +6,7 @@ import {Help, Log} from "kresko-lib/utils/Libs.s.sol"; import {ProtocolUpgrader} from "scripts/utils/ProtocolUpgrader.s.sol"; import {DataV2} from "periphery/DataV2.sol"; import {IMarketStatus} from "common/interfaces/IMarketStatus.sol"; +import {deployPayload} from "scripts/payloads/Payloads.sol"; // solhint-disable no-empty-blocks, reason-string, state-visibility @@ -19,16 +20,28 @@ contract MarketStatusUpdate is ProtocolUpgrader, ArbScript { function setUp() public virtual { vm.createSelectFork("arbitrum"); + useMnemonic("MNEMONIC"); initUpgrader(kreskoAddr, factoryAddr, CreateMode.Create2); } + function deployData() external { + broadcastWith(getAddr(0)); + DataV2 newDataV2 = new DataV2(kreskoAddr, vaultAddr, kissAddr, address(quoter), kreskianAddr, questAddr); + dataV2 = newDataV2; + } + function payload0010() public output("market-status-update") { broadcastWith(safe); createFacetCut("CommonConfigFacet"); createFacetCut("CommonStateFacet"); createFacetCut("AssetStateFacet"); + createFacetCut("MinterMintFacet"); + createFacetCut("MinterBurnFacet"); + createFacetCut("SCDPSwapFacet"); + createFacetCut("SCDPFacet"); + createFacetCut("ViewDataFacet"); + createFacetCut("MinterLiquidationFacet"); executeCuts("MarketStatusUpdate", false); - dataV2 = new DataV2(kreskoAddr, vaultAddr, kissAddr, address(quoter), kreskianAddr, questAddr); kresko.setMarketStatusProvider(address(provider)); } } diff --git a/src/contracts/test/forked/MarketStatusUpdate.t.sol b/src/contracts/test/forked/MarketStatusUpdate.t.sol index bcd6f147..fba9940d 100644 --- a/src/contracts/test/forked/MarketStatusUpdate.t.sol +++ b/src/contracts/test/forked/MarketStatusUpdate.t.sol @@ -4,13 +4,26 @@ pragma solidity ^0.8.0; import {ShortAssert} from "kresko-lib/utils/ShortAssert.t.sol"; import {MarketStatusUpdate, DataV2} from "scripts/MarketStatus.s.sol"; +import {MintArgs, SwapArgs} from "common/Args.sol"; +import {Log} from "kresko-lib/utils/Libs.s.sol"; +import {Errors} from "common/Errors.sol"; contract MarketStatusUpdateTest is MarketStatusUpdate { + using Log for *; using ShortAssert for *; + bytes32[] tickers = [bytes32(0x43525950544f0000000000000000000000000000000000000000000000000000)]; + bool[] closed = [false]; + bool[] open = [true]; + function setUp() public override { super.setUp(); payload0010(); + + sender = getAddr(0); + prank(sender); + fetchPythAndUpdate(); + vm.warp(pythEP.getPriceUnsafe(0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43).timestamp); } function test_setMarketStatus() external { @@ -44,4 +57,52 @@ contract MarketStatusUpdateTest is MarketStatusUpdate { result[i].isMarketOpen.eq(true); } } + + function testSwapMarketStatus() external { + prank(provider.owner()); + provider.setStatus(tickers, closed); + + prank(sender); + vm.expectRevert(); + kresko.swapSCDP( + SwapArgs({ + receiver: sender, + assetIn: kissAddr, + assetOut: krSOLAddr, + amountIn: 1e18, + amountOutMin: 0, + prices: pythUpdate + }) + ); + + prank(provider.owner()); + provider.setStatus(tickers, open); + + prank(sender); + kresko.swapSCDP( + SwapArgs({ + receiver: sender, + assetIn: kissAddr, + assetOut: krSOLAddr, + amountIn: 1e18, + amountOutMin: 0, + prices: pythUpdate + }) + ); + } + + function testMintMarketStatus() external { + prank(provider.owner()); + provider.setStatus(tickers, closed); + + prank(sender); + vm.expectRevert(); + kresko.mintKreskoAsset(MintArgs({account: sender, receiver: sender, krAsset: kissAddr, amount: 1e18}), pythUpdate); + + prank(provider.owner()); + provider.setStatus(tickers, open); + + prank(sender); + kresko.mintKreskoAsset(MintArgs({account: sender, receiver: sender, krAsset: kissAddr, amount: 1e18}), pythUpdate); + } }