{
  "address": "0x063a57223EE477d7CB959bc7328d3A06494931A9",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "market",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "duration",
          "type": "uint32"
        }
      ],
      "name": "getOracleState",
      "outputs": [
        {
          "internalType": "bool",
          "name": "increaseCardinalityRequired",
          "type": "bool"
        },
        {
          "internalType": "uint16",
          "name": "cardinalityRequired",
          "type": "uint16"
        },
        {
          "internalType": "bool",
          "name": "oldestObservationSatisfied",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "market",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "duration",
          "type": "uint32"
        }
      ],
      "name": "getPtToAssetRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "name": "ptToAssetRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "market",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "duration",
          "type": "uint32"
        },
        {
          "internalType": "uint256",
          "name": "rate",
          "type": "uint256"
        }
      ],
      "name": "setPtToAssetRate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "transactionHash": "0x1f4cd8850104318f4f6ef247d6a431e0e0ac380dff0292a3f487cd73e2dc0c8e",
  "receipt": {
    "to": null,
    "from": "0x5295D4272bcA61321DFC40b8409F8d6f93F68ABE",
    "contractAddress": "0x063a57223EE477d7CB959bc7328d3A06494931A9",
    "transactionIndex": 80,
    "gasUsed": "295538",
    "logsBloom": "0x00000040000000000000000000000000000000000000000000800000000000000000000011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000040000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000001000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000",
    "blockHash": "0xbdb1f25218f6eac1d144671d7ca8caa6cfcc571b30ea6ac1aca127349b84b36d",
    "transactionHash": "0x1f4cd8850104318f4f6ef247d6a431e0e0ac380dff0292a3f487cd73e2dc0c8e",
    "logs": [
      {
        "transactionIndex": 80,
        "blockNumber": 7269968,
        "transactionHash": "0x1f4cd8850104318f4f6ef247d6a431e0e0ac380dff0292a3f487cd73e2dc0c8e",
        "address": "0x063a57223EE477d7CB959bc7328d3A06494931A9",
        "topics": [
          "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0",
          "0x0000000000000000000000000000000000000000000000000000000000000000",
          "0x0000000000000000000000005295d4272bca61321dfc40b8409f8d6f93f68abe"
        ],
        "data": "0x",
        "logIndex": 250,
        "blockHash": "0xbdb1f25218f6eac1d144671d7ca8caa6cfcc571b30ea6ac1aca127349b84b36d"
      }
    ],
    "blockNumber": 7269968,
    "cumulativeGasUsed": "11977085",
    "status": 1,
    "byzantium": true
  },
  "args": [],
  "numDeployments": 1,
  "solcInputHash": "c9234768a0e90787a3e044ab631ca909",
  "metadata": "{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"market\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"duration\",\"type\":\"uint32\"}],\"name\":\"getOracleState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"increaseCardinalityRequired\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"cardinalityRequired\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"oldestObservationSatisfied\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"market\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"duration\",\"type\":\"uint32\"}],\"name\":\"getPtToAssetRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"ptToAssetRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"market\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"duration\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"name\":\"setPtToAssetRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/oracles/mocks/MockPendlePtOracle.sol\":\"MockPendlePtOracle\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\",\"keccak256\":\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n}\\n\",\"keccak256\":\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\",\"license\":\"MIT\"},\"contracts/interfaces/IPendlePtOracle.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\ninterface IPendlePtOracle {\\n    function getPtToAssetRate(address market, uint32 duration) external view returns (uint256);\\n    function getOracleState(\\n        address market,\\n        uint32 duration\\n    )\\n        external\\n        view\\n        returns (bool increaseCardinalityRequired, uint16 cardinalityRequired, bool oldestObservationSatisfied);\\n}\\n\",\"keccak256\":\"0x74f0784277968051c863fc74e10b376b8893f7dcfca39e97f48d3253224943a3\",\"license\":\"BSD-3-Clause\"},\"contracts/oracles/mocks/MockPendlePtOracle.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport \\\"../../interfaces/IPendlePtOracle.sol\\\";\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\ncontract MockPendlePtOracle is IPendlePtOracle, Ownable {\\n    mapping(address => mapping(uint32 => uint256)) public ptToAssetRate;\\n\\n    constructor() Ownable() {}\\n\\n    function setPtToAssetRate(address market, uint32 duration, uint256 rate) external onlyOwner {\\n        ptToAssetRate[market][duration] = rate;\\n    }\\n\\n    function getPtToAssetRate(address market, uint32 duration) external view returns (uint256) {\\n        return ptToAssetRate[market][duration];\\n    }\\n\\n    function getOracleState(\\n        address market,\\n        uint32 duration\\n    )\\n        external\\n        view\\n        returns (bool increaseCardinalityRequired, uint16 cardinalityRequired, bool oldestObservationSatisfied)\\n    {\\n        return (false, 0, true);\\n    }\\n}\\n\",\"keccak256\":\"0x9e065e6cb36154fc47264b2e4be0f7b124bdebcf7743ef24c48c77e678be8d2c\",\"license\":\"BSD-3-Clause\"}},\"version\":1}",
  "bytecode": "0x6080604052348015600f57600080fd5b50601733601b565b606b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6103ed8061007a6000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b14610106578063abca0eab14610121578063b861c67c1461015f578063f2fde38b1461017257600080fd5b80636784827514610082578063715018a6146100c0578063873e9600146100ca575b600080fd5b6100ad610090366004610326565b600160209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6100c8610185565b005b6100e46100d8366004610326565b60008060019250925092565b60408051931515845261ffff90921660208401521515908201526060016100b7565b6000546040516001600160a01b0390911681526020016100b7565b6100ad61012f366004610326565b6001600160a01b038216600090815260016020908152604080832063ffffffff8516845290915290205492915050565b6100c861016d366004610359565b610199565b6100c8610180366004610395565b6101ce565b61018d61024c565b61019760006102a6565b565b6101a161024c565b6001600160a01b03909216600090815260016020908152604080832063ffffffff90941683529290522055565b6101d661024c565b6001600160a01b0381166102405760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b610249816102a6565b50565b6000546001600160a01b031633146101975760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610237565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461030d57600080fd5b919050565b803563ffffffff8116811461030d57600080fd5b6000806040838503121561033957600080fd5b610342836102f6565b915061035060208401610312565b90509250929050565b60008060006060848603121561036e57600080fd5b610377846102f6565b925061038560208501610312565b9150604084013590509250925092565b6000602082840312156103a757600080fd5b6103b0826102f6565b939250505056fea26469706673582212206d01bf8aa451ad5577973ff2ff41456d5bdbfdcf8dcbdb586a04deacd5bb2c0864736f6c63430008190033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b14610106578063abca0eab14610121578063b861c67c1461015f578063f2fde38b1461017257600080fd5b80636784827514610082578063715018a6146100c0578063873e9600146100ca575b600080fd5b6100ad610090366004610326565b600160209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6100c8610185565b005b6100e46100d8366004610326565b60008060019250925092565b60408051931515845261ffff90921660208401521515908201526060016100b7565b6000546040516001600160a01b0390911681526020016100b7565b6100ad61012f366004610326565b6001600160a01b038216600090815260016020908152604080832063ffffffff8516845290915290205492915050565b6100c861016d366004610359565b610199565b6100c8610180366004610395565b6101ce565b61018d61024c565b61019760006102a6565b565b6101a161024c565b6001600160a01b03909216600090815260016020908152604080832063ffffffff90941683529290522055565b6101d661024c565b6001600160a01b0381166102405760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b610249816102a6565b50565b6000546001600160a01b031633146101975760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610237565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461030d57600080fd5b919050565b803563ffffffff8116811461030d57600080fd5b6000806040838503121561033957600080fd5b610342836102f6565b915061035060208401610312565b90509250929050565b60008060006060848603121561036e57600080fd5b610377846102f6565b925061038560208501610312565b9150604084013590509250925092565b6000602082840312156103a757600080fd5b6103b0826102f6565b939250505056fea26469706673582212206d01bf8aa451ad5577973ff2ff41456d5bdbfdcf8dcbdb586a04deacd5bb2c0864736f6c63430008190033",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "renounceOwnership()": {
        "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      }
    },
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  },
  "storageLayout": {
    "storage": [
      {
        "astId": 1417,
        "contract": "contracts/oracles/mocks/MockPendlePtOracle.sol:MockPendlePtOracle",
        "label": "_owner",
        "offset": 0,
        "slot": "0",
        "type": "t_address"
      },
      {
        "astId": 9893,
        "contract": "contracts/oracles/mocks/MockPendlePtOracle.sol:MockPendlePtOracle",
        "label": "ptToAssetRate",
        "offset": 0,
        "slot": "1",
        "type": "t_mapping(t_address,t_mapping(t_uint32,t_uint256))"
      }
    ],
    "types": {
      "t_address": {
        "encoding": "inplace",
        "label": "address",
        "numberOfBytes": "20"
      },
      "t_mapping(t_address,t_mapping(t_uint32,t_uint256))": {
        "encoding": "mapping",
        "key": "t_address",
        "label": "mapping(address => mapping(uint32 => uint256))",
        "numberOfBytes": "32",
        "value": "t_mapping(t_uint32,t_uint256)"
      },
      "t_mapping(t_uint32,t_uint256)": {
        "encoding": "mapping",
        "key": "t_uint32",
        "label": "mapping(uint32 => uint256)",
        "numberOfBytes": "32",
        "value": "t_uint256"
      },
      "t_uint256": {
        "encoding": "inplace",
        "label": "uint256",
        "numberOfBytes": "32"
      },
      "t_uint32": {
        "encoding": "inplace",
        "label": "uint32",
        "numberOfBytes": "4"
      }
    }
  }
}
