{"file_path":"src/PSMFed.sol","creation_status":"success","source_code":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.20;\n\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\ninterface IDOLA is IERC20 {\n    function mint(address to, uint256 amount) external;\n    function burn(uint256 amount) external;\n}\n\ncontract PSMFed {\n    address public immutable psm;\n    IDOLA public immutable DOLA;\n\n    address public gov;\n    address public pendingGov;\n    address public chair;\n    uint256 public supply; // Current DOLA amount supplied to the PSM\n    uint256 public supplyCap; // Maximum DOLA supply allowed in the PSM\n\n    event GovChanged(address indexed oldGov, address indexed newGov);\n    event PendingGovUpdated(address indexed pendingGov);\n    event ChairChanged(address indexed oldChair, address indexed newChair);\n    event SupplyCapUpdated(uint256 oldSupplyCap, uint256 newSupplyCap);\n    event Expansion(uint256 amount);\n    event Contraction(uint256 amount);\n\n    constructor(address _psm, address _gov, address _chair, address _dola) {\n        psm = _psm;\n        gov = _gov;\n        chair = _chair;\n        DOLA = IDOLA(_dola);\n    }\n\n    modifier onlyGov() {\n        require(msg.sender == gov, \"Not governance\");\n        _;\n    }\n\n    modifier onlyChair() {\n        require(msg.sender == chair, \"Not chair\");\n        _;\n    }\n\n    /**\n     * @notice Allows the chair to expand the supply of DOLA in the PSM.\n     * @dev This function increases the supply of DOLA in the PSM and mints\n     * the specified amount of DOLA.\n     * @dev The amount must be greater than zero and cannot exceed the supply cap.\n     * @param amount The amount of DOLA to expand.\n     */\n    function expansion(uint256 amount) external onlyChair {\n        require(amount > 0, \"Amount must be > 0\");\n        require(amount + supply <= supplyCap, \"Supply cap exceeded\");\n        supply += amount;\n        DOLA.mint(psm, amount);\n        emit Expansion(amount);\n    }\n\n    /**\n     * @notice Allows the chair to contract the supply of DOLA in the PSM.\n     * @dev This function reduces the supply of DOLA in the PSM and burns the\n     * specified amount of DOLA.\n     * @dev The amount must be greater than zero and cannot exceed the current supply.\n     * @param amount The amount of DOLA to contract.\n     */\n    function contraction(uint256 amount) external onlyChair {\n        require(amount > 0, \"Amount must be > 0\");\n        supply -= amount;\n        DOLA.transferFrom(psm, address(this), amount);\n        DOLA.burn(amount);\n        emit Contraction(amount);\n    }\n\n    /**\n     * @notice Allows governance to set a new supply cap.\n     * @param newSupplyCap The new supply cap for DOLA in the PSM.\n     */\n    function setSupplyCap(uint256 newSupplyCap) external onlyGov {\n        uint256 oldSupplyCap = supplyCap;\n        supplyCap = newSupplyCap;\n        emit SupplyCapUpdated(oldSupplyCap, newSupplyCap);\n    }\n\n    /**\n     * @notice Allows governance to set a new chair.\n     * @dev The new chair must not be the zero address.\n     * @param newChair Address of the new chair.\n     */\n    function setChair(address newChair) external onlyGov {\n        address oldChair = chair;\n        chair = newChair;\n        emit ChairChanged(oldChair, newChair);\n    }\n\n    /**\n     * @notice Allows the current chair to resign.\n     * @dev The chair can resign, leaving the chair address as zero.\n     */\n    function resign() external onlyChair {\n        address oldChair = chair;\n        chair = address(0);\n        emit ChairChanged(oldChair, address(0));\n    }\n\n    /**\n     * @notice Allows governance to set a new pending governance.\n     * @dev The pending governance must accept the role.\n     * @param _pendingGov Address of the new pending governance.\n     */\n    function setPendingGov(address _pendingGov) external onlyGov {\n        pendingGov = _pendingGov;\n        emit PendingGovUpdated(_pendingGov);\n    }\n\n    /**\n     * @notice Allows the pending governance to claim the governance role.\n     * @dev Can only be called by the pending governance.\n     */\n    function claimPendingGov() external {\n        require(msg.sender == pendingGov, \"Not pending gov\");\n        emit GovChanged(gov, pendingGov);\n        gov = pendingGov;\n        pendingGov = address(0);\n    }\n}\n","deployed_bytecode":"0x608060405234801561000f575f80fd5b50600436106100e5575f3560e01c806392c592d011610088578063ee1ef57511610063578063ee1ef57514610203578063efdf0bb014610216578063f0c9e46514610229578063fdf893f514610231575f80fd5b806392c592d0146101b6578063b6a3f59a146101dd578063e1a611b7146101f0575f80fd5b806325240810116100c357806325240810146101705780632720b22e1461019057806369652fcf146101a55780638f770ad0146101ad575f80fd5b8063047fc9aa146100e957806304bda2621461010557806312d43a5114610151575b5f80fd5b6100f260035481565b6040519081526020015b60405180910390f35b61012c7f0000000000000000000000001d02f2841afa3cc20435a8c804c24deac5f30dfa81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100fc565b5f5461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b60015461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a361019e366004610c27565b610251565b005b6101a36104cd565b6100f260045481565b61012c7f000000000000000000000000865377367054516e17014ccded1e7d814edc9ce481565b6101a36101eb366004610c27565b6105c0565b6101a36101fe366004610c27565b610685565b6101a3610211366004610c3e565b61092e565b6101a3610224366004610c3e565b610a24565b6101a3610b12565b60025461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b60025473ffffffffffffffffffffffffffffffffffffffff1633146102d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f74206368616972000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b5f8111610340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f416d6f756e74206d757374206265203e2030000000000000000000000000000060448201526064016102ce565b6004546003546103509083610ca5565b11156103b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f537570706c79206361702065786365656465640000000000000000000000000060448201526064016102ce565b8060035f8282546103c99190610ca5565b90915550506040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000001d02f2841afa3cc20435a8c804c24deac5f30dfa81166004830152602482018390527f000000000000000000000000865377367054516e17014ccded1e7d814edc9ce416906340c10f19906044015f604051808303815f87803b15801561047b575f80fd5b505af115801561048d573d5f803e3d5ffd5b505050507fdcc16fd18a808d877bcd9a09b544844b36ae8f0a4b222e317d7b777b2c18b032816040516104c291815260200190565b60405180910390a150565b60025473ffffffffffffffffffffffffffffffffffffffff16331461054e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f74206368616972000000000000000000000000000000000000000000000060448201526064016102ce565b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000811690915560405173ffffffffffffffffffffffffffffffffffffffff909116905f9082907f0a47357b37b43edfce3b49e26d073c29be56d40a540f4766153a6169d031e86e908390a350565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e6f7420676f7665726e616e636500000000000000000000000000000000000060448201526064016102ce565b600480549082905560408051828152602081018490527fb4d96b3a6638191d0f6aefa0fdc4d99af3592f4c97480e31feeb977723c63b53910160405180910390a15050565b60025473ffffffffffffffffffffffffffffffffffffffff163314610706576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f74206368616972000000000000000000000000000000000000000000000060448201526064016102ce565b5f811161076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f416d6f756e74206d757374206265203e2030000000000000000000000000000060448201526064016102ce565b8060035f8282546107809190610cbe565b90915550506040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000001d02f2841afa3cc20435a8c804c24deac5f30dfa81166004830152306024830152604482018390527f000000000000000000000000865377367054516e17014ccded1e7d814edc9ce416906323b872dd906064016020604051808303815f875af115801561083d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108619190610cd1565b506040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000865377367054516e17014ccded1e7d814edc9ce473ffffffffffffffffffffffffffffffffffffffff16906342966c68906024015f604051808303815f87803b1580156108e7575f80fd5b505af11580156108f9573d5f803e3d5ffd5b505050507f32d275175c36fa468b3e61c6763f9488ff3c9be127e35e011cf4e04d602224ba816040516104c291815260200190565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146109ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e6f7420676f7665726e616e636500000000000000000000000000000000000060448201526064016102ce565b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f0a47357b37b43edfce3b49e26d073c29be56d40a540f4766153a6169d031e86e905f90a35050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610aa4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e6f7420676f7665726e616e636500000000000000000000000000000000000060448201526064016102ce565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f0b1b3d8e19656af9f8acea883020be347ec617cada0060e56959226bb0109c49905f90a250565b60015473ffffffffffffffffffffffffffffffffffffffff163314610b93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f742070656e64696e6720676f76000000000000000000000000000000000060448201526064016102ce565b6001545f805460405173ffffffffffffffffffffffffffffffffffffffff93841693909116917f3d1e4c3a68fed9f4f8315582b7297cf8fa264bc8e6704287603ba8c72bf05ac291a3600180545f80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff841617909155169055565b5f60208284031215610c37575f80fd5b5035919050565b5f60208284031215610c4e575f80fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610c71575f80fd5b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115610cb857610cb8610c78565b92915050565b81810381811115610cb857610cb8610c78565b5f60208284031215610ce1575f80fd5b81518015158114610c71575f80fdfea264697066735822122036b7c9aa871b3c4aeaafcd7a910dc3a6d174e44d38a46c9060d0681b6bac34a064736f6c63430008140033","optimization_enabled":true,"verified_twin_address_hash":null,"is_verified":true,"compiler_settings":{"evmVersion":"shanghai","libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"enabled":true,"runs":10000},"remappings":[":@openzeppelin/contracts/=lib/openzeppelin/contracts/",":forge-std/=lib/forge-std/src/",":openzeppelin/=lib/openzeppelin/",":solmate/=lib/solmate/src/"]},"optimization_runs":10000,"sourcify_repo_url":"https://repo.sourcify.dev/contracts/full_match/1/0x67FC21332D24FC5250a3B7fc988191ad7F38f9cC/","decoded_constructor_args":[["0x1d02f2841afA3Cc20435a8c804C24dEaC5F30DFa",{"internalType":"address","name":"_psm","type":"address"}],["0x926dF14a23BE491164dCF93f4c468A50ef659D5B",{"internalType":"address","name":"_gov","type":"address"}],["0x8F97cCA30Dbe80e7a8B462F1dD1a51C32accDfC8",{"internalType":"address","name":"_chair","type":"address"}],["0x865377367054516e17014CcdED1e7d814EDC9ce4",{"internalType":"address","name":"_dola","type":"address"}]],"compiler_version":"0.8.20+commit.a1b79de6","is_verified_via_verifier_alliance":false,"verified_at":"2026-01-20T19:39:37.925225Z","implementations":[],"proxy_type":null,"external_libraries":[],"creation_bytecode":"0x60c060405234801561000f575f80fd5b50604051610e42380380610e4283398101604081905261002e91610087565b6001600160a01b039384166080525f80549385166001600160a01b03199485161790556002805492851692909316919091179091551660a0526100d8565b80516001600160a01b0381168114610082575f80fd5b919050565b5f805f806080858703121561009a575f80fd5b6100a38561006c565b93506100b16020860161006c565b92506100bf6040860161006c565b91506100cd6060860161006c565b905092959194509250565b60805160a051610d2661011c5f395f81816101bb0152818161043a015281816107f7015261089101525f818161010a0152818161040b01526107c20152610d265ff3fe608060405234801561000f575f80fd5b50600436106100e5575f3560e01c806392c592d011610088578063ee1ef57511610063578063ee1ef57514610203578063efdf0bb014610216578063f0c9e46514610229578063fdf893f514610231575f80fd5b806392c592d0146101b6578063b6a3f59a146101dd578063e1a611b7146101f0575f80fd5b806325240810116100c357806325240810146101705780632720b22e1461019057806369652fcf146101a55780638f770ad0146101ad575f80fd5b8063047fc9aa146100e957806304bda2621461010557806312d43a5114610151575b5f80fd5b6100f260035481565b6040519081526020015b60405180910390f35b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100fc565b5f5461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b60015461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a361019e366004610c27565b610251565b005b6101a36104cd565b6100f260045481565b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b6101a36101eb366004610c27565b6105c0565b6101a36101fe366004610c27565b610685565b6101a3610211366004610c3e565b61092e565b6101a3610224366004610c3e565b610a24565b6101a3610b12565b60025461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b60025473ffffffffffffffffffffffffffffffffffffffff1633146102d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f74206368616972000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b5f8111610340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f416d6f756e74206d757374206265203e2030000000000000000000000000000060448201526064016102ce565b6004546003546103509083610ca5565b11156103b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f537570706c79206361702065786365656465640000000000000000000000000060448201526064016102ce565b8060035f8282546103c99190610ca5565b90915550506040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018390527f000000000000000000000000000000000000000000000000000000000000000016906340c10f19906044015f604051808303815f87803b15801561047b575f80fd5b505af115801561048d573d5f803e3d5ffd5b505050507fdcc16fd18a808d877bcd9a09b544844b36ae8f0a4b222e317d7b777b2c18b032816040516104c291815260200190565b60405180910390a150565b60025473ffffffffffffffffffffffffffffffffffffffff16331461054e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f74206368616972000000000000000000000000000000000000000000000060448201526064016102ce565b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000811690915560405173ffffffffffffffffffffffffffffffffffffffff909116905f9082907f0a47357b37b43edfce3b49e26d073c29be56d40a540f4766153a6169d031e86e908390a350565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e6f7420676f7665726e616e636500000000000000000000000000000000000060448201526064016102ce565b600480549082905560408051828152602081018490527fb4d96b3a6638191d0f6aefa0fdc4d99af3592f4c97480e31feeb977723c63b53910160405180910390a15050565b60025473ffffffffffffffffffffffffffffffffffffffff163314610706576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f74206368616972000000000000000000000000000000000000000000000060448201526064016102ce565b5f811161076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f416d6f756e74206d757374206265203e2030000000000000000000000000000060448201526064016102ce565b8060035f8282546107809190610cbe565b90915550506040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152306024830152604482018390527f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906064016020604051808303815f875af115801561083d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108619190610cd1565b506040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906342966c68906024015f604051808303815f87803b1580156108e7575f80fd5b505af11580156108f9573d5f803e3d5ffd5b505050507f32d275175c36fa468b3e61c6763f9488ff3c9be127e35e011cf4e04d602224ba816040516104c291815260200190565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146109ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e6f7420676f7665726e616e636500000000000000000000000000000000000060448201526064016102ce565b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f0a47357b37b43edfce3b49e26d073c29be56d40a540f4766153a6169d031e86e905f90a35050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610aa4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e6f7420676f7665726e616e636500000000000000000000000000000000000060448201526064016102ce565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f0b1b3d8e19656af9f8acea883020be347ec617cada0060e56959226bb0109c49905f90a250565b60015473ffffffffffffffffffffffffffffffffffffffff163314610b93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f742070656e64696e6720676f76000000000000000000000000000000000060448201526064016102ce565b6001545f805460405173ffffffffffffffffffffffffffffffffffffffff93841693909116917f3d1e4c3a68fed9f4f8315582b7297cf8fa264bc8e6704287603ba8c72bf05ac291a3600180545f80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff841617909155169055565b5f60208284031215610c37575f80fd5b5035919050565b5f60208284031215610c4e575f80fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610c71575f80fd5b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115610cb857610cb8610c78565b92915050565b81810381811115610cb857610cb8610c78565b5f60208284031215610ce1575f80fd5b81518015158114610c71575f80fdfea264697066735822122036b7c9aa871b3c4aeaafcd7a910dc3a6d174e44d38a46c9060d0681b6bac34a064736f6c634300081400330000000000000000000000001d02f2841afa3cc20435a8c804c24deac5f30dfa000000000000000000000000926df14a23be491164dcf93f4c468a50ef659d5b0000000000000000000000008f97cca30dbe80e7a8b462f1dd1a51c32accdfc8000000000000000000000000865377367054516e17014ccded1e7d814edc9ce4","name":"PSMFed","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":true,"additional_sources":[{"file_path":"lib/openzeppelin/contracts/token/ERC20/IERC20.sol","source_code":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-20 standard as defined in the ERC.\n */\ninterface IERC20 {\n    /**\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\n     * another (`to`).\n     *\n     * Note that `value` may be zero.\n     */\n    event Transfer(address indexed from, address indexed to, uint256 value);\n\n    /**\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n     * a call to {approve}. `value` is the new allowance.\n     */\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n\n    /**\n     * @dev Returns the value of tokens in existence.\n     */\n    function totalSupply() external view returns (uint256);\n\n    /**\n     * @dev Returns the value of tokens owned by `account`.\n     */\n    function balanceOf(address account) external view returns (uint256);\n\n    /**\n     * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transfer(address to, uint256 value) external returns (bool);\n\n    /**\n     * @dev Returns the remaining number of tokens that `spender` will be\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\n     * zero by default.\n     *\n     * This value changes when {approve} or {transferFrom} are called.\n     */\n    function allowance(address owner, address spender) external view returns (uint256);\n\n    /**\n     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n     * caller's tokens.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\n     * that someone may use both the old and the new allowance by unfortunate\n     * transaction ordering. One possible solution to mitigate this race\n     * condition is to first reduce the spender's allowance to 0 and set the\n     * desired value afterwards:\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n     *\n     * Emits an {Approval} event.\n     */\n    function approve(address spender, uint256 value) external returns (bool);\n\n    /**\n     * @dev Moves a `value` amount of tokens from `from` to `to` using the\n     * allowance mechanism. `value` is then deducted from the caller's\n     * allowance.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n"}],"certified":false,"conflicting_implementations":null,"abi":[{"inputs":[{"internalType":"address","name":"_psm","type":"address"},{"internalType":"address","name":"_gov","type":"address"},{"internalType":"address","name":"_chair","type":"address"},{"internalType":"address","name":"_dola","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldChair","type":"address"},{"indexed":true,"internalType":"address","name":"newChair","type":"address"}],"name":"ChairChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Contraction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Expansion","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldGov","type":"address"},{"indexed":true,"internalType":"address","name":"newGov","type":"address"}],"name":"GovChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pendingGov","type":"address"}],"name":"PendingGovUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldSupplyCap","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newSupplyCap","type":"uint256"}],"name":"SupplyCapUpdated","type":"event"},{"inputs":[],"name":"DOLA","outputs":[{"internalType":"contract IDOLA","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"chair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimPendingGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"contraction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"expansion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gov","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingGov","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"psm","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"resign","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newChair","type":"address"}],"name":"setChair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pendingGov","type":"address"}],"name":"setPendingGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSupplyCap","type":"uint256"}],"name":"setSupplyCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"supplyCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"is_changed_bytecode":false,"is_partially_verified":false,"constructor_args":"0000000000000000000000001d02f2841afa3cc20435a8c804c24deac5f30dfa000000000000000000000000926df14a23be491164dcf93f4c468a50ef659d5b0000000000000000000000008f97cca30dbe80e7a8b462f1dd1a51c32accdfc8000000000000000000000000865377367054516e17014ccded1e7d814edc9ce4"}