{"file_path":"contracts/pendle/contracts/oracles/internal/PendleSparkLinearDiscountOracle.sol","creation_status":"success","source_code":"// SPDX-License-Identifier: SEE LICENSE IN LICENSE\npragma solidity ^0.8.19;\n\ncontract PendleSparkLinearDiscountOracle {\n    uint256 private constant SECONDS_PER_YEAR = 365 days;\n    uint256 private constant ONE = 1e18;\n\n    address public immutable PT;\n    uint256 public immutable maturity;\n    uint256 public immutable baseDiscountPerYear; // 100% = 1e18\n\n    constructor(address _pt, uint256 _baseDiscountPerYear) {\n        require(_baseDiscountPerYear <= 1e18, \"invalid discount\");\n        require(_pt != address(0), \"zero address\");\n\n        PT = _pt;\n        maturity = PTExpiry(PT).expiry();\n        baseDiscountPerYear = _baseDiscountPerYear;\n    }\n\n    function latestRoundData()\n        external\n        view\n        returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound)\n    {\n        uint256 timeLeft = (maturity > block.timestamp) ? maturity - block.timestamp : 0;\n        uint256 discount = getDiscount(timeLeft);\n\n        require(discount <= ONE, \"discount overflow\");\n\n        return (0, int256(ONE - discount), 0, 0, 0);\n    }\n\n    function decimals() external pure returns (uint8) {\n        return 18;\n    }\n\n    function getDiscount(uint256 timeLeft) public view returns (uint256) {\n        return (timeLeft * baseDiscountPerYear) / SECONDS_PER_YEAR;\n    }\n}\n\ninterface PTExpiry {\n    function expiry() external view returns (uint256);\n}\n","deployed_bytecode":"0x6080806040526004361015610012575f80fd5b5f3560e01c908163204f83f9146102ef575080632336dbe4146102ab578063313ce56714610272578063598e54511461021a578063d94073d4146101ac5763feaf968c1461005e575f80fd5b346101a8575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a8577f000000000000000000000000000000000000000000000000000000006b0776804281111561019e57428103908111610113576100c890610345565b670de0b6b3a7640000811161014057670de0b6b3a764000003670de0b6b3a764000081116101135760a090604051905f825260208201525f60408201525f60608201525f6080820152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f646973636f756e74206f766572666c6f770000000000000000000000000000006044820152fd5b506100c85f610345565b5f80fd5b346101a8575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a857602060405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000dc169abe56461a2e0c034da431ac2a3ebf596094168152f35b346101a8575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a85760206040517f000000000000000000000000000000000000000000000000016345785d8a00008152f35b346101a8575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a857602060405160128152f35b346101a85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a85760206102e7600435610345565b604051908152f35b346101a8575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a8576020907f000000000000000000000000000000000000000000000000000000006b0776808152f35b7f000000000000000000000000000000000000000000000000016345785d8a000090818102918183041490151715610113576301e1338090049056fea264697066735822122093412547ef46717938ff7b757db5c6fea123f297792bbcb6dd83138ac034e7e064736f6c634300081c0033","optimization_enabled":true,"verified_twin_address_hash":null,"is_verified":true,"compiler_settings":{"evmVersion":"shanghai","libraries":{},"optimizer":{"enabled":true,"runs":1000000},"outputSelection":{"*":{"":["ast"],"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata","devdoc","userdoc","storageLayout","evm.gasEstimates"]},"contracts/pendle/contracts/oracles/internal/PendleSparkLinearDiscountOracle.sol":{"PendleSparkLinearDiscountOracle":["*"]}},"viaIR":true},"optimization_runs":1000000,"sourcify_repo_url":null,"decoded_constructor_args":[["0xdC169AbE56461A2E0c034Da431Ac2a3ebf596094",{"internalType":"address","name":"_pt","type":"address"}],["100000000000000000",{"internalType":"uint256","name":"_baseDiscountPerYear","type":"uint256"}]],"compiler_version":"0.8.28+commit.7893614a","is_verified_via_verifier_alliance":true,"verified_at":"2026-07-10T11:05:25.537709Z","implementations":[],"proxy_type":null,"external_libraries":[],"creation_bytecode":"0x60e080604052346100eb5760408161055d803803809161001f828561016e565b8339810103126100eb578051906001600160a01b038216908183036100eb576020015191670de0b6b3a76400008311610136578115610102576080526040516370c264df60e11b815290602090829060049082905afa9081156100f7575f916100c1575b5060a05260c0526040516103b790816101a68239608051816101f6015260a051818181608e0152610322015260c05181818161024f01526103470152f35b90506020813d6020116100ef575b816100dc6020938361016e565b810103126100eb57515f610083565b5f80fd5b3d91506100cf565b6040513d5f823e3d90fd5b60405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b6044820152606490fd5b60405162461bcd60e51b815260206004820152601060248201526f1a5b9d985b1a5908191a5cd8dbdd5b9d60821b6044820152606490fd5b601f909101601f19168101906001600160401b0382119082101761019157604052565b634e487b7160e01b5f52604160045260245ffdfe6080806040526004361015610012575f80fd5b5f3560e01c908163204f83f9146102ef575080632336dbe4146102ab578063313ce56714610272578063598e54511461021a578063d94073d4146101ac5763feaf968c1461005e575f80fd5b346101a8575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a8577f00000000000000000000000000000000000000000000000000000000000000004281111561019e57428103908111610113576100c890610345565b670de0b6b3a7640000811161014057670de0b6b3a764000003670de0b6b3a764000081116101135760a090604051905f825260208201525f60408201525f60608201525f6080820152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f646973636f756e74206f766572666c6f770000000000000000000000000000006044820152fd5b506100c85f610345565b5f80fd5b346101a8575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a857602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101a8575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a85760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346101a8575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a857602060405160128152f35b346101a85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a85760206102e7600435610345565b604051908152f35b346101a8575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a8576020907f00000000000000000000000000000000000000000000000000000000000000008152f35b7f000000000000000000000000000000000000000000000000000000000000000090818102918183041490151715610113576301e1338090049056fea264697066735822122093412547ef46717938ff7b757db5c6fea123f297792bbcb6dd83138ac034e7e064736f6c634300081c0033000000000000000000000000dc169abe56461a2e0c034da431ac2a3ebf596094000000000000000000000000000000000000000000000000016345785d8a0000","name":"PendleSparkLinearDiscountOracle","is_blueprint":false,"license_type":"none","is_fully_verified":true,"is_verified_via_eth_bytecode_db":true,"language":"solidity","evm_version":"shanghai","can_be_visualized_via_sol2uml":true,"is_verified_via_sourcify":false,"additional_sources":[],"certified":false,"conflicting_implementations":null,"abi":[{"inputs":[{"internalType":"address","name":"_pt","type":"address"},{"internalType":"uint256","name":"_baseDiscountPerYear","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"PT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseDiscountPerYear","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"timeLeft","type":"uint256"}],"name":"getDiscount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestRoundData","outputs":[{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maturity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"is_changed_bytecode":false,"is_partially_verified":false,"constructor_args":"0x000000000000000000000000dc169abe56461a2e0c034da431ac2a3ebf596094000000000000000000000000000000000000000000000000016345785d8a0000"}