{"file_path":"src/WildcatMarketOracle.sol","creation_status":"success","source_code":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.25;\n\nimport {IOracle} from \"./interfaces/IOracle.sol\";\nimport {IWildcatMarket, MarketState} from \"./interfaces/IWildcatMarket.sol\";\n\n/// @title WildcatMarketOracle\n/// @notice Morpho Blue oracle for v-wmtUSDC (ERC-4626 wrapped Wildcat market token) collateral\n///         against USDC loan token. Uses a delinquency-based pricing model with three phases:\n///\n///         1. Grace period - linear ramp from 0% to gracePenaltyBps over gracePeriod.\n///            Gives the borrower time to remedy delinquency before pricing is affected.\n///\n///         2. Intermediary period - linear ramp from gracePenaltyBps to intermediaryPenaltyBps\n///            over intermediaryPeriod.\n///\n///         3. Final period - linear ramp from intermediaryPenaltyBps to maxDiscountBps\n///            over finalPeriod. After this, discount is capped at maxDiscountBps.\n///\n///         Input: timeDelinquent (seconds accumulator: +1s/s delinquent, -1s/s healthy).\n///\n///         Price formula:\n///           price = ORACLE_PRICE_SCALE * scaleFactor / RAY * (BPS - discount) / BPS\n/// @dev This oracle assumes that the oracle's penalty after gracePeriod is greater\n///     than the scaleFactor growth of the underlying Wildcat market (i.e. base+penalty+fee APR)\ncontract WildcatMarketOracle is IOracle {\n    uint256 constant ORACLE_PRICE_SCALE = 1e36;\n    uint256 constant RAY = 1e27;\n    uint256 constant BPS = 10_000;\n\n    IWildcatMarket public immutable market;\n\n    // Phase durations\n    uint256 public immutable gracePeriod;\n    uint256 public immutable intermediaryPeriod;\n    uint256 public immutable finalPeriod;\n\n    // Discount levels at each phase boundary\n    uint256 public immutable gracePenaltyBps;\n    uint256 public immutable intermediaryPenaltyBps;\n    uint256 public immutable maxDiscountBps;\n\n    constructor(\n        address _market,\n        uint256 _gracePenaltyBps,\n        uint256 _intermediaryPeriod,\n        uint256 _intermediaryPenaltyBps,\n        uint256 _finalPeriod,\n        uint256 _maxDiscountBps\n    ) {\n        require(_market != address(0), \"zero market\");\n        require(_intermediaryPeriod > 0, \"zero intermediaryPeriod\");\n        require(_finalPeriod > 0, \"zero finalPeriod\");\n        require(_gracePenaltyBps > 0 && _gracePenaltyBps < _intermediaryPenaltyBps, \"invalid gracePenalty\");\n        require(_intermediaryPenaltyBps < _maxDiscountBps, \"invalid intermediaryPenalty\");\n        require(_maxDiscountBps < BPS, \"invalid maxDiscount\");\n\n        market = IWildcatMarket(_market);\n\n        gracePeriod = market.delinquencyGracePeriod();\n        require(gracePeriod > 0, \"zero gracePeriod\");\n\n        gracePenaltyBps = _gracePenaltyBps;\n        intermediaryPeriod = _intermediaryPeriod;\n        intermediaryPenaltyBps = _intermediaryPenaltyBps;\n        finalPeriod = _finalPeriod;\n        maxDiscountBps = _maxDiscountBps;\n    }\n\n    /// @notice Returns the price of 1 v-wmtUSDC share in USDC, scaled by 1e36.\n    ///         Returns at least 1 to prevent division-by-zero in Morpho liquidation math.\n    function price() external view override returns (uint256) {\n        MarketState memory state = market.currentState();\n        uint256 discount = _delinquencyDiscount(uint256(state.timeDelinquent));\n        uint256 result = ORACLE_PRICE_SCALE * uint256(state.scaleFactor) / RAY * (BPS - discount) / BPS;\n        if (result == 0) result = 1;\n        return result;\n    }\n\n    /// @dev Computes the delinquency discount in basis points across three linear phases.\n    ///      Phase 1 (grace):        linear 0 -> gracePenaltyBps\n    ///      Phase 2 (intermediary): linear gracePenaltyBps -> intermediaryPenaltyBps\n    ///      Phase 3 (final):        linear intermediaryPenaltyBps -> maxDiscountBps, then capped\n    function _delinquencyDiscount(uint256 timeDelinquent) internal view returns (uint256) {\n        if (timeDelinquent == 0) return 0;\n\n        if (timeDelinquent <= gracePeriod) {\n            return timeDelinquent * gracePenaltyBps / gracePeriod;\n        }\n\n        uint256 elapsed = timeDelinquent - gracePeriod;\n\n        if (elapsed <= intermediaryPeriod) {\n            return gracePenaltyBps + elapsed * (intermediaryPenaltyBps - gracePenaltyBps) / intermediaryPeriod;\n        }\n\n        elapsed -= intermediaryPeriod;\n\n        if (elapsed >= finalPeriod) return maxDiscountBps;\n\n        return intermediaryPenaltyBps + elapsed * (maxDiscountBps - intermediaryPenaltyBps) / finalPeriod;\n    }\n}\n","deployed_bytecode":"0x608060405234801561000f575f80fd5b5060043610610086575f3560e01c8063a035b1fe11610059578063a035b1fe14610102578063a06db7dc14610120578063a5a621591461013e578063ab0962e01461015c57610086565b806306c16b0e1461008a5780630a103cfd146100a8578063301cf97e146100c657806380f55605146100e4575b5f80fd5b61009261017a565b60405161009f919061068f565b60405180910390f35b6100b061019e565b6040516100bd919061068f565b60405180910390f35b6100ce6101c2565b6040516100db919061068f565b60405180910390f35b6100ec6101e6565b6040516100f99190610722565b60405180910390f35b61010a61020a565b604051610117919061068f565b60405180910390f35b610128610337565b604051610135919061068f565b60405180910390f35b61014661035b565b604051610153919061068f565b60405180910390f35b61016461037f565b604051610171919061068f565b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000003cf81565b7f0000000000000000000000000000000000000000000000000000000000093a8081565b7f00000000000000000000000000000000000000000000000000000000000026ac81565b7f000000000000000000000000c9499006a149c553d18171747ed19aa7c6dd19e281565b5f807f000000000000000000000000c9499006a149c553d18171747ed19aa7c6dd19e273ffffffffffffffffffffffffffffffffffffffff16630c3f6acf6040518163ffffffff1660e01b81526004016101c060405180830381865afa158015610276573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061029a9190610a8e565b90505f6102b182610100015163ffffffff166103a3565b90505f612710826127106102c59190610ae7565b6b033b2e3c9fd0803ce80000008561018001516dffffffffffffffffffffffffffff166ec097ce7bc90715b34b9f10000000006103029190610b1a565b61030c9190610b88565b6103169190610b1a565b6103209190610b88565b90505f810361032e57600190505b80935050505090565b7f000000000000000000000000000000000000000000000000000000000002a30081565b7f000000000000000000000000000000000000000000000000000000000000006481565b7f00000000000000000000000000000000000000000000000000000000004f1a0081565b5f8082036103b3575f9050610672565b7f000000000000000000000000000000000000000000000000000000000002a3008211610438577f000000000000000000000000000000000000000000000000000000000002a3007f0000000000000000000000000000000000000000000000000000000000000064836104279190610b1a565b6104319190610b88565b9050610672565b5f7f000000000000000000000000000000000000000000000000000000000002a300836104659190610ae7565b90507f0000000000000000000000000000000000000000000000000000000000093a808111610543577f0000000000000000000000000000000000000000000000000000000000093a807f00000000000000000000000000000000000000000000000000000000000000647f00000000000000000000000000000000000000000000000000000000000003cf6104fb9190610ae7565b826105069190610b1a565b6105109190610b88565b7f000000000000000000000000000000000000000000000000000000000000006461053b9190610bb8565b915050610672565b7f0000000000000000000000000000000000000000000000000000000000093a808161056f9190610ae7565b90507f00000000000000000000000000000000000000000000000000000000004f1a0081106105c1577f00000000000000000000000000000000000000000000000000000000000026ac915050610672565b7f00000000000000000000000000000000000000000000000000000000004f1a007f00000000000000000000000000000000000000000000000000000000000003cf7f00000000000000000000000000000000000000000000000000000000000026ac61062e9190610ae7565b826106399190610b1a565b6106439190610b88565b7f00000000000000000000000000000000000000000000000000000000000003cf61066e9190610bb8565b9150505b919050565b5f819050919050565b61068981610677565b82525050565b5f6020820190506106a25f830184610680565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f819050919050565b5f6106ea6106e56106e0846106a8565b6106c7565b6106a8565b9050919050565b5f6106fb826106d0565b9050919050565b5f61070c826106f1565b9050919050565b61071c81610702565b82525050565b5f6020820190506107355f830184610713565b92915050565b5f604051905090565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6107928261074c565b810181811067ffffffffffffffff821117156107b1576107b061075c565b5b80604052505050565b5f6107c361073b565b90506107cf8282610789565b919050565b5f8115159050919050565b6107e8816107d4565b81146107f2575f80fd5b50565b5f81519050610803816107df565b92915050565b5f6fffffffffffffffffffffffffffffffff82169050919050565b61082d81610809565b8114610837575f80fd5b50565b5f8151905061084881610824565b92915050565b5f6cffffffffffffffffffffffffff82169050919050565b61086f8161084e565b8114610879575f80fd5b50565b5f8151905061088a81610866565b92915050565b5f63ffffffff82169050919050565b6108a881610890565b81146108b2575f80fd5b50565b5f815190506108c38161089f565b92915050565b5f61ffff82169050919050565b6108df816108c9565b81146108e9575f80fd5b50565b5f815190506108fa816108d6565b92915050565b5f6dffffffffffffffffffffffffffff82169050919050565b61092281610900565b811461092c575f80fd5b50565b5f8151905061093d81610919565b92915050565b5f6101c0828403121561095957610958610748565b5b6109646101c06107ba565b90505f610973848285016107f5565b5f8301525060206109868482850161083a565b602083015250604061099a8482850161083a565b60408301525060606109ae8482850161083a565b60608301525060806109c28482850161087c565b60808301525060a06109d68482850161087c565b60a08301525060c06109ea848285016108b5565b60c08301525060e06109fe848285016107f5565b60e083015250610100610a13848285016108b5565b61010083015250610120610a29848285016108ec565b61012083015250610140610a3f848285016108ec565b61014083015250610160610a55848285016108ec565b61016083015250610180610a6b8482850161092f565b610180830152506101a0610a81848285016108b5565b6101a08301525092915050565b5f6101c08284031215610aa457610aa3610744565b5b5f610ab184828501610943565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610af182610677565b9150610afc83610677565b9250828203905081811115610b1457610b13610aba565b5b92915050565b5f610b2482610677565b9150610b2f83610677565b9250828202610b3d81610677565b91508282048414831517610b5457610b53610aba565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610b9282610677565b9150610b9d83610677565b925082610bad57610bac610b5b565b5b828204905092915050565b5f610bc282610677565b9150610bcd83610677565b9250828201905080821115610be557610be4610aba565b5b9291505056fea2646970667358221220d92bfaee9c2b398ad7d522c773b64333a2975d6ed08afba91d4dc9a853af2e8e64736f6c63430008190033","optimization_enabled":false,"verified_twin_address_hash":null,"is_verified":true,"compiler_settings":{"evmVersion":"cancun","libraries":{},"metadata":{"appendCBOR":true,"bytecodeHash":"ipfs","useLiteralContent":false},"optimizer":{"enabled":false,"runs":200},"outputSelection":{"*":{"":["*"],"*":["*"]}},"remappings":["forge-std/=lib/forge-std/src/"],"viaIR":false},"optimization_runs":null,"sourcify_repo_url":null,"decoded_constructor_args":[["0xC9499006a149C553d18171747ED19Aa7C6Dd19E2",{"internalType":"address","name":"_market","type":"address"}],["100",{"internalType":"uint256","name":"_gracePenaltyBps","type":"uint256"}],["604800",{"internalType":"uint256","name":"_intermediaryPeriod","type":"uint256"}],["975",{"internalType":"uint256","name":"_intermediaryPenaltyBps","type":"uint256"}],["5184000",{"internalType":"uint256","name":"_finalPeriod","type":"uint256"}],["9900",{"internalType":"uint256","name":"_maxDiscountBps","type":"uint256"}]],"compiler_version":"v0.8.25+commit.b61c2a91","is_verified_via_verifier_alliance":false,"verified_at":"2026-04-27T17:33:19.764209Z","implementations":[],"proxy_type":null,"external_libraries":[],"creation_bytecode":"0x610160604052348015610010575f80fd5b50604051611431380380611431833981810160405281019061003291906103ac565b5f73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036100a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100979061048f565b60405180910390fd5b5f84116100e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100d9906104f7565b60405180910390fd5b5f8211610124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161011b9061055f565b60405180910390fd5b5f8511801561013257508285105b610171576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610168906105c7565b60405180910390fd5b8083106101b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101aa9061062f565b60405180910390fd5b61271081106101f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101ee90610697565b60405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663514a4cd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610276573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061029a91906106b5565b60a081815250505f60a051116102e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102dc9061072a565b60405180910390fd5b8461010081815250508360c081815250508261012081815250508160e08181525050806101408181525050505050505050610748565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6103488261031f565b9050919050565b6103588161033e565b8114610362575f80fd5b50565b5f815190506103738161034f565b92915050565b5f819050919050565b61038b81610379565b8114610395575f80fd5b50565b5f815190506103a681610382565b92915050565b5f805f805f8060c087890312156103c6576103c561031b565b5b5f6103d389828a01610365565b96505060206103e489828a01610398565b95505060406103f589828a01610398565b945050606061040689828a01610398565b935050608061041789828a01610398565b92505060a061042889828a01610398565b9150509295509295509295565b5f82825260208201905092915050565b7f7a65726f206d61726b65740000000000000000000000000000000000000000005f82015250565b5f610479600b83610435565b915061048482610445565b602082019050919050565b5f6020820190508181035f8301526104a68161046d565b9050919050565b7f7a65726f20696e7465726d656469617279506572696f640000000000000000005f82015250565b5f6104e1601783610435565b91506104ec826104ad565b602082019050919050565b5f6020820190508181035f83015261050e816104d5565b9050919050565b7f7a65726f2066696e616c506572696f64000000000000000000000000000000005f82015250565b5f610549601083610435565b915061055482610515565b602082019050919050565b5f6020820190508181035f8301526105768161053d565b9050919050565b7f696e76616c696420677261636550656e616c74790000000000000000000000005f82015250565b5f6105b1601483610435565b91506105bc8261057d565b602082019050919050565b5f6020820190508181035f8301526105de816105a5565b9050919050565b7f696e76616c696420696e7465726d65646961727950656e616c747900000000005f82015250565b5f610619601b83610435565b9150610624826105e5565b602082019050919050565b5f6020820190508181035f8301526106468161060d565b9050919050565b7f696e76616c6964206d6178446973636f756e74000000000000000000000000005f82015250565b5f610681601383610435565b915061068c8261064d565b602082019050919050565b5f6020820190508181035f8301526106ae81610675565b9050919050565b5f602082840312156106ca576106c961031b565b5b5f6106d784828501610398565b91505092915050565b7f7a65726f206772616365506572696f64000000000000000000000000000000005f82015250565b5f610714601083610435565b915061071f826106e0565b602082019050919050565b5f6020820190508181035f83015261074181610708565b9050919050565b60805160a05160c05160e051610100516101205161014051610c216108105f395f81816101c40152818161059a015261060501525f818161017c015281816104d2015281816105e4015261064501525f818161035d015281816103fd015281816104b1015261051201525f81816103810152818161057301526105c301525f81816101a00152818161046901528181610490015261054501525f8181610339015281816103b5015281816103dc015261043b01525f81816101e8015261020e0152610c215ff3fe608060405234801561000f575f80fd5b5060043610610086575f3560e01c8063a035b1fe11610059578063a035b1fe14610102578063a06db7dc14610120578063a5a621591461013e578063ab0962e01461015c57610086565b806306c16b0e1461008a5780630a103cfd146100a8578063301cf97e146100c657806380f55605146100e4575b5f80fd5b61009261017a565b60405161009f919061068f565b60405180910390f35b6100b061019e565b6040516100bd919061068f565b60405180910390f35b6100ce6101c2565b6040516100db919061068f565b60405180910390f35b6100ec6101e6565b6040516100f99190610722565b60405180910390f35b61010a61020a565b604051610117919061068f565b60405180910390f35b610128610337565b604051610135919061068f565b60405180910390f35b61014661035b565b604051610153919061068f565b60405180910390f35b61016461037f565b604051610171919061068f565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630c3f6acf6040518163ffffffff1660e01b81526004016101c060405180830381865afa158015610276573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061029a9190610a8e565b90505f6102b182610100015163ffffffff166103a3565b90505f612710826127106102c59190610ae7565b6b033b2e3c9fd0803ce80000008561018001516dffffffffffffffffffffffffffff166ec097ce7bc90715b34b9f10000000006103029190610b1a565b61030c9190610b88565b6103169190610b1a565b6103209190610b88565b90505f810361032e57600190505b80935050505090565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f8082036103b3575f9050610672565b7f00000000000000000000000000000000000000000000000000000000000000008211610438577f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000836104279190610b1a565b6104319190610b88565b9050610672565b5f7f0000000000000000000000000000000000000000000000000000000000000000836104659190610ae7565b90507f00000000000000000000000000000000000000000000000000000000000000008111610543577f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006104fb9190610ae7565b826105069190610b1a565b6105109190610b88565b7f000000000000000000000000000000000000000000000000000000000000000061053b9190610bb8565b915050610672565b7f00000000000000000000000000000000000000000000000000000000000000008161056f9190610ae7565b90507f000000000000000000000000000000000000000000000000000000000000000081106105c1577f0000000000000000000000000000000000000000000000000000000000000000915050610672565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061062e9190610ae7565b826106399190610b1a565b6106439190610b88565b7f000000000000000000000000000000000000000000000000000000000000000061066e9190610bb8565b9150505b919050565b5f819050919050565b61068981610677565b82525050565b5f6020820190506106a25f830184610680565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f819050919050565b5f6106ea6106e56106e0846106a8565b6106c7565b6106a8565b9050919050565b5f6106fb826106d0565b9050919050565b5f61070c826106f1565b9050919050565b61071c81610702565b82525050565b5f6020820190506107355f830184610713565b92915050565b5f604051905090565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6107928261074c565b810181811067ffffffffffffffff821117156107b1576107b061075c565b5b80604052505050565b5f6107c361073b565b90506107cf8282610789565b919050565b5f8115159050919050565b6107e8816107d4565b81146107f2575f80fd5b50565b5f81519050610803816107df565b92915050565b5f6fffffffffffffffffffffffffffffffff82169050919050565b61082d81610809565b8114610837575f80fd5b50565b5f8151905061084881610824565b92915050565b5f6cffffffffffffffffffffffffff82169050919050565b61086f8161084e565b8114610879575f80fd5b50565b5f8151905061088a81610866565b92915050565b5f63ffffffff82169050919050565b6108a881610890565b81146108b2575f80fd5b50565b5f815190506108c38161089f565b92915050565b5f61ffff82169050919050565b6108df816108c9565b81146108e9575f80fd5b50565b5f815190506108fa816108d6565b92915050565b5f6dffffffffffffffffffffffffffff82169050919050565b61092281610900565b811461092c575f80fd5b50565b5f8151905061093d81610919565b92915050565b5f6101c0828403121561095957610958610748565b5b6109646101c06107ba565b90505f610973848285016107f5565b5f8301525060206109868482850161083a565b602083015250604061099a8482850161083a565b60408301525060606109ae8482850161083a565b60608301525060806109c28482850161087c565b60808301525060a06109d68482850161087c565b60a08301525060c06109ea848285016108b5565b60c08301525060e06109fe848285016107f5565b60e083015250610100610a13848285016108b5565b61010083015250610120610a29848285016108ec565b61012083015250610140610a3f848285016108ec565b61014083015250610160610a55848285016108ec565b61016083015250610180610a6b8482850161092f565b610180830152506101a0610a81848285016108b5565b6101a08301525092915050565b5f6101c08284031215610aa457610aa3610744565b5b5f610ab184828501610943565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610af182610677565b9150610afc83610677565b9250828203905081811115610b1457610b13610aba565b5b92915050565b5f610b2482610677565b9150610b2f83610677565b9250828202610b3d81610677565b91508282048414831517610b5457610b53610aba565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610b9282610677565b9150610b9d83610677565b925082610bad57610bac610b5b565b5b828204905092915050565b5f610bc282610677565b9150610bcd83610677565b9250828201905080821115610be557610be4610aba565b5b9291505056fea2646970667358221220d92bfaee9c2b398ad7d522c773b64333a2975d6ed08afba91d4dc9a853af2e8e64736f6c63430008190033000000000000000000000000c9499006a149c553d18171747ed19aa7c6dd19e200000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000093a8000000000000000000000000000000000000000000000000000000000000003cf00000000000000000000000000000000000000000000000000000000004f1a0000000000000000000000000000000000000000000000000000000000000026ac","name":"WildcatMarketOracle","is_blueprint":false,"license_type":"none","is_fully_verified":false,"is_verified_via_eth_bytecode_db":true,"language":"solidity","evm_version":"cancun","can_be_visualized_via_sol2uml":true,"is_verified_via_sourcify":false,"additional_sources":[{"file_path":"src/interfaces/IOracle.sol","source_code":"// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity ^0.8.0;\n\n/// @title IOracle\n/// @notice Interface for Morpho Blue oracles.\ninterface IOracle {\n    /// @notice Returns the price of 1 asset of collateral token quoted in 1 asset of loan token,\n    ///         scaled by ORACLE_PRICE_SCALE (1e36).\n    function price() external view returns (uint256);\n}\n"},{"file_path":"src/interfaces/IWildcatMarket.sol","source_code":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nstruct MarketState {\n    bool isClosed;\n    uint128 maxTotalSupply;\n    uint128 accruedProtocolFees;\n    uint128 normalizedUnclaimedWithdrawals;\n    uint104 scaledTotalSupply;\n    uint104 scaledPendingWithdrawals;\n    uint32 pendingWithdrawalExpiry;\n    bool isDelinquent;\n    uint32 timeDelinquent;\n    uint16 protocolFeeBips;\n    uint16 annualInterestBips;\n    uint16 reserveRatioBips;\n    uint112 scaleFactor;\n    uint32 lastInterestAccruedTimestamp;\n}\n\ninterface IWildcatMarket {\n    function currentState() external view returns (MarketState memory);\n    function scaleFactor() external view returns (uint256);\n    function totalAssets() external view returns (uint256);\n    function borrower() external view returns (address);\n    function asset() external view returns (address);\n    function borrowableAssets() external view returns (uint256);\n    function decimals() external view returns (uint8);\n    function balanceOf(address account) external view returns (uint256);\n    function scaledBalanceOf(address account) external view returns (uint256);\n    function transfer(address to, uint256 amount) external returns (bool);\n    function approve(address spender, uint256 amount) external returns (bool);\n    function maxTotalSupply() external view returns (uint256);\n    function sentinel() external view returns (address);\n    function coverageLiquidity() external view returns (uint256);\n    function previousState() external view returns (MarketState memory);\n    function totalDebts() external view returns (uint256);\n    function delinquencyGracePeriod() external view returns (uint256);\n}\n"}],"certified":false,"conflicting_implementations":null,"abi":[{"inputs":[{"internalType":"address","name":"_market","type":"address"},{"internalType":"uint256","name":"_gracePenaltyBps","type":"uint256"},{"internalType":"uint256","name":"_intermediaryPeriod","type":"uint256"},{"internalType":"uint256","name":"_intermediaryPenaltyBps","type":"uint256"},{"internalType":"uint256","name":"_finalPeriod","type":"uint256"},{"internalType":"uint256","name":"_maxDiscountBps","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"finalPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gracePenaltyBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gracePeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"intermediaryPenaltyBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"intermediaryPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"market","outputs":[{"internalType":"contract IWildcatMarket","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxDiscountBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"is_changed_bytecode":false,"is_partially_verified":true,"constructor_args":"000000000000000000000000c9499006a149c553d18171747ed19aa7c6dd19e200000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000093a8000000000000000000000000000000000000000000000000000000000000003cf00000000000000000000000000000000000000000000000000000000004f1a0000000000000000000000000000000000000000000000000000000000000026ac"}