Contract Overview
My Name Tag:
Not Available
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
PanaTreasuryV2
Compiler Version
v0.7.5+commit.eb77ed08
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity >=0.7.5; import "../interfaces/IPanaAuthority.sol"; abstract contract PanaAccessControlled { /* ========== EVENTS ========== */ event AuthorityUpdated(IPanaAuthority indexed authority); string UNAUTHORIZED = "UNAUTHORIZED"; // save gas /* ========== STATE VARIABLES ========== */ IPanaAuthority public authority; /* ========== Constructor ========== */ constructor(IPanaAuthority _authority) { authority = _authority; emit AuthorityUpdated(_authority); } /* ========== MODIFIERS ========== */ modifier onlyGovernor() { require(msg.sender == authority.governor(), UNAUTHORIZED); _; } modifier onlyGuardian() { require(msg.sender == authority.guardian(), UNAUTHORIZED); _; } modifier onlyPolicy() { require(msg.sender == authority.policy(), UNAUTHORIZED); _; } modifier onlyVault() { require(msg.sender == authority.vault(), UNAUTHORIZED); _; } /* ========== GOV ONLY ========== */ function setAuthority(IPanaAuthority _newAuthority) external onlyGovernor { authority = _newAuthority; emit AuthorityUpdated(_newAuthority); } }
// SPDX-License-Identifier: AGPL-3.0 pragma solidity >=0.7.5; interface IBondingCalculator { function valuation( address pair_, uint amount_, uint256 _baseValue ) external view returns ( uint _value ); }
// SPDX-License-Identifier: AGPL-3.0 pragma solidity >=0.7.5; interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: AGPL-3.0 pragma solidity >=0.7.5; import "./IERC20.sol"; interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); }
// SPDX-License-Identifier: AGPL-3.0 pragma solidity >=0.7.5; import "./IERC20.sol"; interface IPana is IERC20 { event DistributionConcluded(uint256 totalDistributed); function mint(address account_, uint256 amount_) external; function burn(uint256 amount) external; function burnFrom(address account_, uint256 amount_) external; }
// SPDX-License-Identifier: AGPL-3.0 pragma solidity >=0.7.5; interface IPanaAuthority { /* ========== EVENTS ========== */ event GovernorPushed(address indexed from, address indexed to, bool _effectiveImmediately); event GuardianPushed(address indexed from, address indexed to, bool _effectiveImmediately); event PolicyPushed(address indexed from, address indexed to, bool _effectiveImmediately); event VaultPushed(address indexed from, address indexed to, bool _effectiveImmediately); event DistributionVaultPushed(address indexed from, address indexed to, bool _effectiveImmediately); event GovernorPulled(address indexed from, address indexed to); event GuardianPulled(address indexed from, address indexed to); event PolicyPulled(address indexed from, address indexed to); event VaultPulled(address indexed from, address indexed to); event DistributionVaultPulled(address indexed from, address indexed to); /* ========== VIEW ========== */ function governor() external view returns (address); function guardian() external view returns (address); function policy() external view returns (address); function vault() external view returns (address); function distributionVault() external view returns (address); }
// SPDX-License-Identifier: AGPL-3.0 pragma solidity >=0.7.5; interface ISupplyContoller { /* ========== EVENTS ========== */ event SupplyControlParamsSet(uint256 lossRatio, uint256 cf, uint256 cc, uint256 samplingTime, uint256 oldLossRatio, uint256 oldCf, uint256 oldCc, uint256 oldSamplingTime); event Burnt(uint256 totalSupply, uint256 panaInPool, uint256 slp, uint256 panaResidue, uint256 tokenResidue); event Supplied(uint256 totalSupply, uint256 panaInPool, uint256 slp, uint256 panaSupplied, uint256 panaResidue, uint256 tokenResidue); function supplyControlEnabled() external view returns (bool); function paramsSet() external view returns (bool); function setSupplyControlParams(uint256 _lossRatio, uint256 _cf, uint256 _cc, uint256 _samplingTime) external; function enableSupplyControl() external; function disableSupplyControl() external; function compute() external view returns (uint256 _pana, uint256 _slp, bool _burn); function burn(uint256 _slp) external; function add(uint256 _pana) external; }
// SPDX-License-Identifier: AGPL-3.0 pragma solidity >=0.7.5; interface ITreasury { function deposit( uint256 _amount, address _token, uint256 _payout ) external returns (uint256); function depositForRedemption(uint _amount, address _token) external returns (uint256 send_); function tokenValue(address _token, uint256 _amount) external view returns (uint256 value_); function mint(address _recipient, uint256 _amount) external; function manage(address _token, uint256 _amount) external; function baseSupply() external view returns (uint256); }
// SPDX-License-Identifier: AGPL-3.0 pragma solidity >=0.7.5; import "./IERC20.sol"; interface IsPana is IERC20 { function rebase( uint256 panaProfit_, uint epoch_) external returns (uint256); function circulatingSupply() external view returns (uint256); function gonsForBalance( uint amount ) external view returns ( uint ); function balanceForGons( uint gons ) external view returns ( uint ); function index() external view returns ( uint ); function toKARSHA(uint amount) external view returns (uint); function fromKARSHA(uint amount) external view returns (uint); }
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity >=0.7.5; import {IERC20} from "../interfaces/IERC20.sol"; /// @notice Safe IERC20 and ETH transfer library that safely handles missing return values. /// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v3-periphery/blob/main/contracts/libraries/TransferHelper.sol) /// Taken from Solmate library SafeERC20 { function safeTransferFrom( IERC20 token, address from, address to, uint256 amount ) internal { (bool success, bytes memory data) = address(token).call( abi.encodeWithSelector(IERC20.transferFrom.selector, from, to, amount) ); require(success && (data.length == 0 || abi.decode(data, (bool))), "TRANSFER_FROM_FAILED"); } function safeTransfer( IERC20 token, address to, uint256 amount ) internal { (bool success, bytes memory data) = address(token).call( abi.encodeWithSelector(IERC20.transfer.selector, to, amount) ); require(success && (data.length == 0 || abi.decode(data, (bool))), "TRANSFER_FAILED"); } function safeApprove( IERC20 token, address to, uint256 amount ) internal { (bool success, bytes memory data) = address(token).call( abi.encodeWithSelector(IERC20.approve.selector, to, amount) ); require(success && (data.length == 0 || abi.decode(data, (bool))), "APPROVE_FAILED"); } function safeTransferETH(address to, uint256 amount) internal { (bool success, ) = to.call{value: amount}(new bytes(0)); require(success, "ETH_TRANSFER_FAILED"); } }
// SPDX-License-Identifier: AGPL-3.0 pragma solidity ^0.7.5; // TODO(zx): Replace all instances of SafeMath with OZ implementation library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } // Only used in the BondingCalculator.sol function sqrrt(uint256 a) internal pure returns (uint c) { if (a > 3) { c = a; uint b = add( div( a, 2), 1 ); while (b < c) { c = b; b = div( add( div( a, b ), b), 2 ); } } else if (a != 0) { c = 1; } } }
// SPDX-License-Identifier: AGPL-3.0 pragma solidity ^0.7.5; import "../libraries/SafeMath.sol"; import "../libraries/SafeERC20.sol"; import "../interfaces/IERC20.sol"; import "../interfaces/IERC20Metadata.sol"; import "../interfaces/IPana.sol"; import "../interfaces/IsPana.sol"; import "../interfaces/IBondingCalculator.sol"; import "../interfaces/ITreasury.sol"; import "../interfaces/ISupplyContoller.sol"; import "../access/PanaAccessControlled.sol"; contract PanaTreasuryV2 is PanaAccessControlled, ITreasury { /* ========== DEPENDENCIES ========== */ using SafeMath for uint256; using SafeERC20 for IERC20; /* ========== EVENTS ========== */ event Deposit(address indexed token, uint256 amount, uint256 payout); event DepositForRedemption(address indexed token, uint256 amount, uint256 send); event Managed(address indexed token, uint256 amount); event Minted(address indexed caller, address indexed recipient, uint256 amount); event TreasuryPanaUsed(address indexed caller, address indexed recipient, uint256 amount); event PermissionQueued(STATUS indexed status, address queued); event Permissioned(address addr, STATUS indexed status, bool result); event MintedForNFTTreasury(uint256 amount, address treasury); /* ========== DATA STRUCTURES ========== */ enum STATUS { RESERVEDEPOSITOR, RESERVETOKEN, RESERVEMANAGER, LIQUIDITYDEPOSITOR, LIQUIDITYTOKEN, LIQUIDITYMANAGER, REWARDMANAGER, SPANA, PANAREDEEMER, NFTTREASURY } struct Queue { STATUS managing; address toPermit; address supplyController; uint256 timelockEnd; bool nullify; bool executed; } /* ========== STATE VARIABLES ========== */ IPana public immutable PANA; IsPana public sPANA; mapping(STATUS => address[]) public registry; mapping(STATUS => mapping(address => bool)) public permissions; mapping(address => address) public supplyController; Queue[] public permissionQueue; uint256 public immutable blocksNeededForQueue; bool public timelockEnabled; bool public initialized; uint256 public onChainGovernanceTimelock; // Percentage of PANA balance available for redemption. // Percentage specified to 4 precision digits. 100 = 1% = 0.01 uint256 public redemptionLimit; /* boolean variable use to drive if Treasury fund (Pana) should be used before minting new Pana at various actions in Protocol life cycle. */ bool public useTreasuryPana; string internal notAccepted = "Treasury: not accepted"; string internal notApproved = "Treasury: not approved"; string internal invalidToken = "Treasury: invalid token"; string internal noValuation = "Treasury: asset is not a reserve token"; /* ========== CONSTRUCTOR ========== */ constructor( address _pana, uint256 _timelock, address _authority ) PanaAccessControlled(IPanaAuthority(_authority)) { require(_pana != address(0), "Zero address: PANA"); PANA = IPana(_pana); timelockEnabled = false; initialized = false; blocksNeededForQueue = _timelock; } /* ========== MUTATIVE FUNCTIONS ========== */ /** * @notice allow approved address to deposit an asset for PANA * @param _amount uint256 * @param _token address * @param _payout uint256 * @return send_ uint256 */ function deposit( uint256 _amount, address _token, uint256 _payout ) external override returns (uint256) { if (permissions[STATUS.RESERVETOKEN][_token]) { require(permissions[STATUS.RESERVEDEPOSITOR][msg.sender], notApproved); } else if (permissions[STATUS.LIQUIDITYTOKEN][_token]) { require(permissions[STATUS.LIQUIDITYDEPOSITOR][msg.sender], notApproved); } else { revert(invalidToken); } IERC20(_token).safeTransferFrom(msg.sender, address(this), _amount); _doMinting(msg.sender, _payout); emit Deposit(_token, _amount, _payout); if(permissions[STATUS.LIQUIDITYTOKEN][_token] && supplyController[_token] != address(0) && ISupplyContoller(supplyController[_token]).supplyControlEnabled() && ISupplyContoller(supplyController[_token]).paramsSet()) { _updateSupplyRatio(_token); } return _payout; } /** * @notice allow approved address to deposit reserve token for available PANA. No new PANA is minted. * @param _amount uint256 * @param _token address * @return send_ uint256 */ function depositForRedemption(uint _amount, address _token) external override returns (uint256 send_) { require(permissions[STATUS.RESERVETOKEN][_token], notAccepted); require(permissions[STATUS.PANAREDEEMER][msg.sender], notApproved); // redemption is always calculated as 1:100 send_ = tokenValue(_token, _amount); require(send_ <= availableForRedemption(), "Not enough PANA reserves"); IERC20(_token).safeTransferFrom(msg.sender, address(this), _amount); IERC20(PANA).safeTransfer(msg.sender, send_); emit DepositForRedemption(_token, _amount, send_); } /** * @notice executes loss ratio management * @dev this function is for internal usage, it expects all required checks to be performed before a call * @param _lpToken a target liquidity token */ function _updateSupplyRatio(address _lpToken) internal { ISupplyContoller controller = ISupplyContoller(supplyController[_lpToken]); (uint256 pana, uint256 slp, bool burn) = controller.compute(); if (pana > 0) { if (burn) { // send LP tokens to supplyController and burn liquidity uint256 toBurn = IERC20(_lpToken).balanceOf(address(this)); if (toBurn != 0){ if (toBurn > slp) { toBurn = slp; } IERC20(_lpToken).safeTransfer(address(controller), toBurn); controller.burn(toBurn); } } else { // send PANA to supplyController and add liquidity uint256 toAdd = IERC20(PANA).balanceOf(address(this)); if (toAdd != 0){ if (toAdd > pana) { toAdd = pana; } IERC20(PANA).safeTransfer(address(controller), toAdd); controller.add(toAdd); } } } } /** * @notice internal minting function of Pana based upon useTreasuryPana variable. */ function _doMinting(address _recipient, uint256 _amount) internal { if (useTreasuryPana) { uint256 availablePana = PANA.balanceOf(address(this)); if (availablePana >= _amount) { // Use Treasury fund to pay Pana IERC20(PANA).safeTransfer(_recipient, _amount); emit TreasuryPanaUsed(msg.sender, _recipient, _amount); } else { // if fund is not available in Treasury, Mint fresh Pana. PANA.mint(_recipient, _amount); emit Minted(msg.sender, _recipient, _amount); } } else { PANA.mint(_recipient, _amount); emit Minted(msg.sender, _recipient, _amount); } } /** * @notice externally called version of _updateSupplyRatio * @dev performs additional configuration checks and reverts if any condition fails * @param _lpToken a target liquidity token */ function updateSupplyRatio(address _lpToken) external { require(permissions[STATUS.LIQUIDITYTOKEN][_lpToken], "Not an LP token"); require(supplyController[_lpToken] != address(0), "Supply controller is not configured"); require(ISupplyContoller(supplyController[_lpToken]).supplyControlEnabled(), "Supply controller is not enabled"); require(ISupplyContoller(supplyController[_lpToken]).paramsSet(), "Supply controller is not initialized"); _updateSupplyRatio(_lpToken); } /** * @notice allow approved Assurance/Parametrics Insurance NFT Treasury to mint Pana from Master Treasury. * @param _amount uint256 amount of Pana to mint */ function mintForNFTTreasury(uint256 _amount) external { require(permissions[STATUS.NFTTREASURY][msg.sender], notApproved); _doMinting(msg.sender, _amount); emit MintedForNFTTreasury(_amount, msg.sender); } /** * @notice allow approved address to withdraw assets * @param _token address * @param _amount uint256 */ function manage(address _token, uint256 _amount) external override { if (permissions[STATUS.LIQUIDITYTOKEN][_token]) { require(permissions[STATUS.LIQUIDITYMANAGER][msg.sender], notApproved); } else { require(permissions[STATUS.RESERVEMANAGER][msg.sender], notApproved); } IERC20(_token).safeTransfer(msg.sender, _amount); emit Managed(_token, _amount); } /** * @notice mint new PANA * @param _recipient address * @param _amount uint256 */ function mint(address _recipient, uint256 _amount) external override { require(permissions[STATUS.REWARDMANAGER][msg.sender], notApproved); _doMinting(_recipient, _amount); } /** * @notice sets new PANA redemption limit * @param _limit percentage (as a decimal with 4 precision digits) of PANA balance available for redemption */ function setRedemptionLimit(uint256 _limit) external onlyGovernor { require(_limit <= 10000, "Limit cannot exceed 100 percent"); redemptionLimit = _limit; } /** * @notice sets variable that drive decision to use Treasury funds before minting new Pana. * @param _useTreasuryPana boolean value */ function setTreasuryPanaUsageFlag(bool _useTreasuryPana) external onlyGovernor { useTreasuryPana = _useTreasuryPana; } /** * @notice enable permission from queue * @param _status STATUS * @param _address address * @param _supplyController address */ function enable( STATUS _status, address _address, address _supplyController ) external onlyGovernor { require(timelockEnabled == false, "Use queueTimelock"); if (_status == STATUS.SPANA) { sPANA = IsPana(_address); } else { permissions[_status][_address] = true; if (_status == STATUS.LIQUIDITYTOKEN) { supplyController[_address] = _supplyController; } (bool registered, ) = indexInRegistry(_address, _status); if (!registered) { registry[_status].push(_address); } } emit Permissioned(_address, _status, true); } /** * @notice disable permission from address * @param _status STATUS * @param _toDisable address */ function disable(STATUS _status, address _toDisable) external { require(msg.sender == authority.governor() || msg.sender == authority.guardian(), "Only governor or guardian"); permissions[_status][_toDisable] = false; emit Permissioned(_toDisable, _status, false); } /** * @notice check if registry contains address * @return (bool, uint256) */ function indexInRegistry(address _address, STATUS _status) public view returns (bool, uint256) { address[] memory entries = registry[_status]; for (uint256 i = 0; i < entries.length; i++) { if (_address == entries[i]) { return (true, i); } } return (false, 0); } /* ========== TIMELOCKED FUNCTIONS ========== */ // functions are used prior to enabling on-chain governance /** * @notice queue address to receive permission * @param _status STATUS * @param _address address * @param _supplyController address */ function queueTimelock( STATUS _status, address _address, address _supplyController ) external onlyGovernor { require(_address != address(0)); require(timelockEnabled == true, "Timelock is disabled, use enable"); uint256 timelock = block.number.add(blocksNeededForQueue); if (_status == STATUS.RESERVEMANAGER || _status == STATUS.LIQUIDITYMANAGER) { timelock = block.number.add(blocksNeededForQueue.mul(2)); } permissionQueue.push( Queue({managing: _status, toPermit: _address, supplyController: _supplyController, timelockEnd: timelock, nullify: false, executed: false}) ); emit PermissionQueued(_status, _address); } /** * @notice enable queued permission * @param _index uint256 */ function execute(uint256 _index) external { require(timelockEnabled == true, "Timelock is disabled, use enable"); Queue memory info = permissionQueue[_index]; require(!info.nullify, "Action has been nullified"); require(!info.executed, "Action has already been executed"); require(block.number >= info.timelockEnd, "Timelock not complete"); if (info.managing == STATUS.SPANA) { // 9 sPANA = IsPana(info.toPermit); } else { permissions[info.managing][info.toPermit] = true; if (info.managing == STATUS.LIQUIDITYTOKEN) { supplyController[info.toPermit] = info.supplyController; } (bool registered, ) = indexInRegistry(info.toPermit, info.managing); if (!registered) { registry[info.managing].push(info.toPermit); if (info.managing == STATUS.LIQUIDITYTOKEN) { (bool reg, uint256 index) = indexInRegistry(info.toPermit, STATUS.RESERVETOKEN); if (reg) { delete registry[STATUS.RESERVETOKEN][index]; } } else if (info.managing == STATUS.RESERVETOKEN) { (bool reg, uint256 index) = indexInRegistry(info.toPermit, STATUS.LIQUIDITYTOKEN); if (reg) { delete registry[STATUS.LIQUIDITYTOKEN][index]; } } } } permissionQueue[_index].executed = true; emit Permissioned(info.toPermit, info.managing, true); } /** * @notice cancel timelocked action * @param _index uint256 */ function nullify(uint256 _index) external onlyGovernor { permissionQueue[_index].nullify = true; } /** * @notice disables timelocked functions */ function disableTimelock() external onlyGovernor { require(timelockEnabled == true, "timelock already disabled"); if (onChainGovernanceTimelock != 0 && onChainGovernanceTimelock <= block.number) { timelockEnabled = false; } else { onChainGovernanceTimelock = block.number.add(blocksNeededForQueue.mul(7)); // 7-day timelock } } /** * @notice enables timelocks after initilization */ function initialize() external onlyGovernor { require(initialized == false, "Already initialized"); timelockEnabled = true; initialized = true; } /* ========== VIEW FUNCTIONS ========== */ /** * @notice returns PANA valuation of asset as 1:100 * The protocol has no intrinsic valuation for external tokens * This function values any given asset at 100 PANA * Only to be used for valuation of RESERVE TOKENS * Not to be used to valuate LP tokens * @param _token address * @param _amount uint256 * @return value_ uint256 */ function tokenValue(address _token, uint256 _amount) public view override returns (uint256 value_) { require(permissions[STATUS.RESERVETOKEN][_token], noValuation); value_ = _amount.mul(1e11).mul(10**IERC20Metadata(address(PANA)).decimals()) .div(10**9).div(10**IERC20Metadata(_token).decimals()); } /** * @notice returns supply metric * @dev use this any time you need to query supply * @return uint256 */ function baseSupply() external view override returns (uint256) { return PANA.totalSupply(); } /** * @notice returns current amount of PANA available for redemption * @return uint256 */ function availableForRedemption() public view returns (uint256) { return PANA.balanceOf(address(this)).mul(redemptionLimit).div(10**4); } }
{ "evmVersion": "istanbul", "libraries": {}, "metadata": { "bytecodeHash": "none", "useLiteralContent": true }, "optimizer": { "enabled": true, "runs": 800 }, "remappings": [], "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
[{"inputs":[{"internalType":"address","name":"_pana","type":"address"},{"internalType":"uint256","name":"_timelock","type":"uint256"},{"internalType":"address","name":"_authority","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IPanaAuthority","name":"authority","type":"address"}],"name":"AuthorityUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"payout","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"send","type":"uint256"}],"name":"DepositForRedemption","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Managed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Minted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"treasury","type":"address"}],"name":"MintedForNFTTreasury","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum PanaTreasuryV2.STATUS","name":"status","type":"uint8"},{"indexed":false,"internalType":"address","name":"queued","type":"address"}],"name":"PermissionQueued","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"},{"indexed":true,"internalType":"enum PanaTreasuryV2.STATUS","name":"status","type":"uint8"},{"indexed":false,"internalType":"bool","name":"result","type":"bool"}],"name":"Permissioned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TreasuryPanaUsed","type":"event"},{"inputs":[],"name":"PANA","outputs":[{"internalType":"contract IPana","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"authority","outputs":[{"internalType":"contract IPanaAuthority","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"availableForRedemption","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blocksNeededForQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_payout","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"}],"name":"depositForRedemption","outputs":[{"internalType":"uint256","name":"send_","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum PanaTreasuryV2.STATUS","name":"_status","type":"uint8"},{"internalType":"address","name":"_toDisable","type":"address"}],"name":"disable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum PanaTreasuryV2.STATUS","name":"_status","type":"uint8"},{"internalType":"address","name":"_address","type":"address"},{"internalType":"address","name":"_supplyController","type":"address"}],"name":"enable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"enum PanaTreasuryV2.STATUS","name":"_status","type":"uint8"}],"name":"indexInRegistry","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"manage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintForNFTTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"nullify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"onChainGovernanceTimelock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"permissionQueue","outputs":[{"internalType":"enum PanaTreasuryV2.STATUS","name":"managing","type":"uint8"},{"internalType":"address","name":"toPermit","type":"address"},{"internalType":"address","name":"supplyController","type":"address"},{"internalType":"uint256","name":"timelockEnd","type":"uint256"},{"internalType":"bool","name":"nullify","type":"bool"},{"internalType":"bool","name":"executed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum PanaTreasuryV2.STATUS","name":"","type":"uint8"},{"internalType":"address","name":"","type":"address"}],"name":"permissions","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum PanaTreasuryV2.STATUS","name":"_status","type":"uint8"},{"internalType":"address","name":"_address","type":"address"},{"internalType":"address","name":"_supplyController","type":"address"}],"name":"queueTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"redemptionLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum PanaTreasuryV2.STATUS","name":"","type":"uint8"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"registry","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sPANA","outputs":[{"internalType":"contract IsPana","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IPanaAuthority","name":"_newAuthority","type":"address"}],"name":"setAuthority","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setRedemptionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_useTreasuryPana","type":"bool"}],"name":"setTreasuryPanaUsageFlag","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"supplyController","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timelockEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"tokenValue","outputs":[{"internalType":"uint256","name":"value_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_lpToken","type":"address"}],"name":"updateSupplyRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"useTreasuryPana","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
610100604052600c60c08190526b15539055551213d49256915160a21b60e090815262000030916000919062000240565b506040805180820190915260168082527f54726561737572793a206e6f742061636365707465640000000000000000000060209092019182526200007791600b9162000240565b506040805180820190915260168082527f54726561737572793a206e6f7420617070726f766564000000000000000000006020909201918252620000be91600c9162000240565b506040805180820190915260178082527f54726561737572793a20696e76616c696420746f6b656e00000000000000000060209092019182526200010591600d9162000240565b5060405180606001604052806026815260200162003aa26026913980516200013691600e9160209091019062000240565b503480156200014457600080fd5b5060405162003ac838038062003ac8833981810160405260608110156200016a57600080fd5b5080516020820151604092830151600180546001600160a01b0319166001600160a01b038316908117909155935192939192909182917f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad90600090a2506001600160a01b03831662000218576040805162461bcd60e51b81526020600482015260126024820152715a65726f20616464726573733a2050414e4160701b604482015290519081900360640190fd5b5060609190911b6001600160601b0319166080526007805461ffff1916905560a052620002ec565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620002785760008555620002c3565b82601f106200029357805160ff1916838001178555620002c3565b82800160010185558215620002c3579182015b82811115620002c3578251825591602001919060010190620002a6565b50620002d1929150620002d5565b5090565b5b80821115620002d15760008155600101620002d6565b60805160601c60a05161374e62000354600039806109d05280610a2852806115595280611f5e52508061128a52806116ec5280611ec2528061238852806124335280612e775280612f245280612f92528061306852806132e7528061339e525061374e6000f3fe608060405234801561001057600080fd5b506004361061020b5760003560e01c806393988b531161012a578063bf7e214f116100bd578063f18217831161008c578063f417f22111610071578063f417f221146105fd578063fe0d94c11461061c578063ffb29023146106395761020b565b8063f1821783146105c9578063f2adbe57146105f55761020b565b8063bf7e214f1461055c578063ce2b7f0c14610564578063d07f390f1461058a578063e4e33ef8146105925761020b565b8063b39df88e116100f9578063b39df88e146104d9578063bbb11112146104e1578063bc157ac1146104fe578063bcb8e701146105305761020b565b806393988b53146104595780639fef32cc146104a3578063a44b8287146104ab578063b320f6a9146104d15761020b565b80635a941ea2116101a25780637a9e5e4b116101715780637a9e5e4b1461041b5780637d921af0146104415780638129fc1c14610449578063860f5048146104515761020b565b80635a941ea21461039a57806366e991c4146103b457806371a45c95146103da57806377e93ca8146103f75761020b565b806340c10f19116101de57806340c10f19146102c05780634146f103146102ec578063503edcf0146102f4578063529918311461036b5761020b565b80630b0eee3014610210578063158ef93e1461023e5780631d6d5f051461025a578063330dd34514610291575b600080fd5b61023c6004803603604081101561022657600080fd5b506001600160a01b038135169060200135610656565b005b61024661085f565b604080519115158252519081900360200190f35b61023c6004803603606081101561027057600080fd5b5060ff813516906001600160a01b036020820135811691604001351661086d565b610246600480360360408110156102a757600080fd5b50803560ff1690602001356001600160a01b0316610bbf565b61023c600480360360408110156102d657600080fd5b506001600160a01b038135169060200135610bdf565b610246610c86565b6103116004803603602081101561030a57600080fd5b5035610c8f565b6040518087600981111561032157fe5b8152602001866001600160a01b03168152602001856001600160a01b0316815260200184815260200183151581526020018215158152602001965050505050505060405180910390f35b61023c6004803603604081101561038157600080fd5b50803560ff1690602001356001600160a01b0316610ce6565b6103a2610eee565b60408051918252519081900360200190f35b61023c600480360360208110156103ca57600080fd5b50356001600160a01b0316610ef4565b61023c600480360360208110156103f057600080fd5b5035611168565b6103ff611288565b604080516001600160a01b039092168252519081900360200190f35b61023c6004803603602081101561043157600080fd5b50356001600160a01b03166112ac565b61023c6113e2565b61023c611585565b6103a26116e8565b6104886004803603604081101561046f57600080fd5b5080356001600160a01b0316906020013560ff16611774565b60408051921515835260208301919091528051918290030190f35b6103ff61185c565b6103ff600480360360408110156104c157600080fd5b5060ff813516906020013561186b565b6102466118a3565b6103a26118ac565b61023c600480360360208110156104f757600080fd5b50356118b2565b6103a26004803603606081101561051457600080fd5b508035906001600160a01b036020820135169060400135611992565b6103a26004803603604081101561054657600080fd5b50803590602001356001600160a01b0316611cfd565b6103ff611f32565b6103ff6004803603602081101561057a57600080fd5b50356001600160a01b0316611f41565b6103a2611f5c565b61023c600480360360608110156105a857600080fd5b5060ff813516906001600160a01b0360208201358116916040013516611f80565b6103a2600480360360408110156105df57600080fd5b506001600160a01b03813516906020013561224f565b6103a2612423565b61023c6004803603602081101561061357600080fd5b503515156124d5565b61023c6004803603602081101561063257600080fd5b50356125d4565b61023c6004803603602081101561064f57600080fd5b5035612ae5565b6001600160a01b03821660009081527f1a1e6821cde7d0159c0d293177871e09677b4e42307c7db3ba94f8648a5a050f602052604090205460ff161561076e573360009081527f04cde762ef08b6b6c5ded8e8c4c0b3f4e5c9ad7342c88fcc93681b4588b73f056020526040902054600c9060ff166107685760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107595780601f1061072e57610100808354040283529160200191610759565b820191906000526020600020905b81548152906001019060200180831161073c57829003601f168201915b50509250505060405180910390fd5b50610808565b3360009081527f91da3fd0782e51c6b3986e9e672fd566868e71f3dbc2d6c2cd6fbb3e361af2a76020526040902054600c9060ff166108065760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107595780601f1061072e57610100808354040283529160200191610759565b505b61081c6001600160a01b0383163383612c2d565b6040805182815290516001600160a01b038416917fb4460e34f1e91c4fa28eb7fac4cbd88cf530ef54a67e1978cd5edd9f77033ead919081900360200190a25050565b600754610100900460ff1681565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b1580156108bb57600080fd5b505afa1580156108cf573d6000803e3d6000fd5b505050506040513d60208110156108e557600080fd5b50516000906001600160a01b031633146109585760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107595780601f1061072e57610100808354040283529160200191610759565b506001600160a01b03821661096c57600080fd5b60075460ff1615156001146109c8576040805162461bcd60e51b815260206004820181905260248201527f54696d656c6f636b2069732064697361626c65642c2075736520656e61626c65604482015290519081900360640190fd5b60006109f4437f0000000000000000000000000000000000000000000000000000000000000000612dac565b90506002846009811115610a0457fe5b1480610a1b57506005846009811115610a1957fe5b145b15610a5857610a55610a4e7f00000000000000000000000000000000000000000000000000000000000000006002612e0f565b4390612dac565b90505b60066040518060c00160405280866009811115610a7157fe5b81526001600160a01b0380871660208084019190915290861660408301526060820185905260006080830181905260a090920182905283546001818101865594835291208251600490920201805492939092839160ff1990911690836009811115610ad857fe5b0217905550602082015181547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b03928316810291909117835560408401516001840180546001600160a01b03191691909316179091556060830151600283015560808301516003909201805460a09094015160ff199094169215159290921761ff00191692151502919091179055836009811115610b7d57fe5b604080516001600160a01b038616815290517fc822ff41836a6dc998393c71843db8adcbbf01721f41b32389f6838ecb1ea9c89181900360200190a250505050565b600460209081526000928352604080842090915290825290205460ff1681565b3360009081527fc59312466997bb42aaaf719ece141047820e6b34531e1670dc1852a453648f0f6020526040902054600c9060ff16610c775760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107595780601f1061072e57610100808354040283529160200191610759565b50610c828282612e68565b5050565b600a5460ff1681565b60068181548110610c9f57600080fd5b6000918252602090912060049091020180546001820154600283015460039093015460ff80841695506001600160a01b036101009485900481169593169382821692041686565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b158015610d3457600080fd5b505afa158015610d48573d6000803e3d6000fd5b505050506040513d6020811015610d5e57600080fd5b50516001600160a01b0316331480610df75750600160009054906101000a90046001600160a01b03166001600160a01b031663452a93206040518163ffffffff1660e01b815260040160206040518083038186803b158015610dbf57600080fd5b505afa158015610dd3573d6000803e3d6000fd5b505050506040513d6020811015610de957600080fd5b50516001600160a01b031633145b610e48576040805162461bcd60e51b815260206004820152601960248201527f4f6e6c7920676f7665726e6f72206f7220677561726469616e00000000000000604482015290519081900360640190fd5b600060046000846009811115610e5a57fe5b6009811115610e6557fe5b8152602080820192909252604090810160009081206001600160a01b03861682529092529020805460ff1916911515919091179055816009811115610ea657fe5b604080516001600160a01b03841681526000602082015281517f7531a7aefe3985500c4dec2dcb6049a708f14c6a8a9022b435b8841bdb8e1713929181900390910190a25050565b60095481565b6001600160a01b03811660009081527f1a1e6821cde7d0159c0d293177871e09677b4e42307c7db3ba94f8648a5a050f602052604090205460ff16610f80576040805162461bcd60e51b815260206004820152600f60248201527f4e6f7420616e204c5020746f6b656e0000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b0381811660009081526005602052604090205416610fd65760405162461bcd60e51b81526004018080602001828103825260238152602001806136da6023913960400191505060405180910390fd5b6001600160a01b038082166000908152600560209081526040918290205482516376ad5a4d60e01b815292519316926376ad5a4d926004808201939291829003018186803b15801561102757600080fd5b505afa15801561103b573d6000803e3d6000fd5b505050506040513d602081101561105157600080fd5b50516110a4576040805162461bcd60e51b815260206004820181905260248201527f537570706c7920636f6e74726f6c6c6572206973206e6f7420656e61626c6564604482015290519081900360640190fd5b6001600160a01b0380821660009081526005602090815260409182902054825163506bedc760e11b8152925193169263a0d7db8e926004808201939291829003018186803b1580156110f557600080fd5b505afa158015611109573d6000803e3d6000fd5b505050506040513d602081101561111f57600080fd5b505161115c5760405162461bcd60e51b81526004018080602001828103825260248152602001806136fd6024913960400191505060405180910390fd5b61116581613139565b50565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b1580156111b657600080fd5b505afa1580156111ca573d6000803e3d6000fd5b505050506040513d60208110156111e057600080fd5b50516000906001600160a01b031633146112535760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107595780601f1061072e57610100808354040283529160200191610759565b5060016006828154811061126357fe5b60009182526020909120600490910201600301805460ff191691151591909117905550565b7f000000000000000000000000000000000000000000000000000000000000000081565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b1580156112fa57600080fd5b505afa15801561130e573d6000803e3d6000fd5b505050506040513d602081101561132457600080fd5b50516000906001600160a01b031633146113975760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107595780601f1061072e57610100808354040283529160200191610759565b50600180546001600160a01b0319166001600160a01b0383169081179091556040517f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad90600090a250565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b15801561143057600080fd5b505afa158015611444573d6000803e3d6000fd5b505050506040513d602081101561145a57600080fd5b50516000906001600160a01b031633146114cd5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107595780601f1061072e57610100808354040283529160200191610759565b5060075460ff16151560011461152a576040805162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b20616c72656164792064697361626c656400000000000000604482015290519081900360640190fd5b6008541580159061153d57504360085411155b15611551576007805460ff19169055611583565b61157f610a4e7f00000000000000000000000000000000000000000000000000000000000000006007612e0f565b6008555b565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b1580156115d357600080fd5b505afa1580156115e7573d6000803e3d6000fd5b505050506040513d60208110156115fd57600080fd5b50516000906001600160a01b031633146116705760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107595780601f1061072e57610100808354040283529160200191610759565b50600754610100900460ff16156116ce576040805162461bcd60e51b815260206004820152601360248201527f416c726561647920696e697469616c697a656400000000000000000000000000604482015290519081900360640190fd5b6007805461ff001960ff1990911660011716610100179055565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561174357600080fd5b505afa158015611757573d6000803e3d6000fd5b505050506040513d602081101561176d57600080fd5b5051905090565b60008060606003600085600981111561178957fe5b600981111561179457fe5b81526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156117f657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116117d8575b5050505050905060005b815181101561184b5781818151811061181557fe5b60200260200101516001600160a01b0316866001600160a01b03161415611843576001935091506118559050565b600101611800565b5060008092509250505b9250929050565b6002546001600160a01b031681565b6003602052816000526040600020818154811061188757600080fd5b6000918252602090912001546001600160a01b03169150829050565b60075460ff1681565b60085481565b3360009081527f4ad5a04d53b5856f318545bb721f67d3f6d0a5a999f25eec7e20eaeb4c47b9336020526040902054600c9060ff1661194a5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107595780601f1061072e57610100808354040283529160200191610759565b506119553382612e68565b6040805182815233602082015281517f090407aa1149a57c208d834ce95f1e5f0dbc47bac5b4858b4a2e5306c650db96929181900390910190a150565b6001600160a01b03821660009081527fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe05602052604081205460ff1615611a705760046000805b60098111156119e357fe5b815260208082019290925260409081016000908120338252909252902054600c9060ff16611a6a5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107595780601f1061072e57610100808354040283529160200191610759565b50611b1c565b6001600160a01b03831660009081527f1a1e6821cde7d0159c0d293177871e09677b4e42307c7db3ba94f8648a5a050f602052604090205460ff1615611abb576004600060036119d8565b60405162461bcd60e51b8152602060048201908152600d8054600260001961010060018416150201909116046024840181905290928291604490910190849080156107595780601f1061072e57610100808354040283529160200191610759565b611b316001600160a01b03841633308761342c565b611b3b3383612e68565b604080518581526020810184905281516001600160a01b038616927f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15928290030190a26001600160a01b03831660009081527f1a1e6821cde7d0159c0d293177871e09677b4e42307c7db3ba94f8648a5a050f602052604090205460ff168015611bde57506001600160a01b038381166000908152600560205260409020541615155b8015611c6357506001600160a01b038084166000908152600560209081526040918290205482516376ad5a4d60e01b815292519316926376ad5a4d926004808201939291829003018186803b158015611c3657600080fd5b505afa158015611c4a573d6000803e3d6000fd5b505050506040513d6020811015611c6057600080fd5b50515b8015611ce857506001600160a01b0380841660009081526005602090815260409182902054825163506bedc760e11b8152925193169263a0d7db8e926004808201939291829003018186803b158015611cbb57600080fd5b505afa158015611ccf573d6000803e3d6000fd5b505050506040513d6020811015611ce557600080fd5b50515b15611cf657611cf683613139565b5092915050565b6001600160a01b03811660009081527fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe056020526040812054600b9060ff16611d9e5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107595780601f1061072e57610100808354040283529160200191610759565b503360009081527f2645749a946633740611cfc8178319f0958659d6922e4bf7e3a08b44789f53a46020526040902054600c9060ff16611e375760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107595780601f1061072e57610100808354040283529160200191610759565b50611e42828461224f565b9050611e4c612423565b811115611ea0576040805162461bcd60e51b815260206004820152601860248201527f4e6f7420656e6f7567682050414e412072657365727665730000000000000000604482015290519081900360640190fd5b611eb56001600160a01b03831633308661342c565b611ee96001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383612c2d565b604080518481526020810183905281516001600160a01b038516927f4a4b015d5d009102c176c319f709dd2078a8f42103ac46297c4ded381b1d9db9928290030190a292915050565b6001546001600160a01b031681565b6005602052600090815260409020546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b158015611fce57600080fd5b505afa158015611fe2573d6000803e3d6000fd5b505050506040513d6020811015611ff857600080fd5b50516000906001600160a01b0316331461206b5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107595780601f1061072e57610100808354040283529160200191610759565b5060075460ff16156120c4576040805162461bcd60e51b815260206004820152601160248201527f55736520717565756554696d656c6f636b000000000000000000000000000000604482015290519081900360640190fd5b60078360098111156120d257fe5b14156120f857600280546001600160a01b0319166001600160a01b0384161790556121fa565b60016004600085600981111561210a57fe5b600981111561211557fe5b8152602080820192909252604090810160009081206001600160a01b03871682529092529020805460ff1916911515919091179055600483600981111561215857fe5b141561218d576001600160a01b03828116600090815260056020526040902080546001600160a01b0319169183169190911790555b60006121998385611774565b509050806121f857600360008560098111156121b157fe5b60098111156121bc57fe5b8152602080820192909252604001600090812080546001810182559082529190200180546001600160a01b0319166001600160a01b0385161790555b505b82600981111561220657fe5b604080516001600160a01b03851681526001602082015281517f7531a7aefe3985500c4dec2dcb6049a708f14c6a8a9022b435b8841bdb8e1713929181900390910190a2505050565b6001600160a01b03821660009081527fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe056020526040812054600e9060ff166122f05760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107595780601f1061072e57610100808354040283529160200191610759565b5061241c836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561232d57600080fd5b505afa158015612341573d6000803e3d6000fd5b505050506040513d602081101561235757600080fd5b50516040805163313ce56760e01b8152905160ff909216600a0a9161241691633b9aca009183916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163313ce56791600480820192602092909190829003018186803b1580156123cf57600080fd5b505afa1580156123e3573d6000803e3d6000fd5b505050506040513d60208110156123f957600080fd5b505160ff16600a0a6124108864174876e800612e0f565b90612e0f565b906135ac565b9392505050565b60006124d06127106124166009547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561249e57600080fd5b505afa1580156124b2573d6000803e3d6000fd5b505050506040513d60208110156124c857600080fd5b505190612e0f565b905090565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b15801561252357600080fd5b505afa158015612537573d6000803e3d6000fd5b505050506040513d602081101561254d57600080fd5b50516000906001600160a01b031633146125c05760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107595780601f1061072e57610100808354040283529160200191610759565b50600a805460ff1916911515919091179055565b60075460ff161515600114612630576040805162461bcd60e51b815260206004820181905260248201527f54696d656c6f636b2069732064697361626c65642c2075736520656e61626c65604482015290519081900360640190fd5b6126386136a2565b6006828154811061264557fe5b600091825260209091206040805160c081019091526004909202018054829060ff16600981111561267257fe5b600981111561267d57fe5b815281546001600160a01b03610100918290048116602084015260018401541660408301526002830154606083015260039092015460ff80821615156080808501919091529390910416151560a09091015281015190915015612727576040805162461bcd60e51b815260206004820152601960248201527f416374696f6e20686173206265656e206e756c6c696669656400000000000000604482015290519081900360640190fd5b8060a001511561277e576040805162461bcd60e51b815260206004820181905260248201527f416374696f6e2068617320616c7265616479206265656e206578656375746564604482015290519081900360640190fd5b80606001514310156127d7576040805162461bcd60e51b815260206004820152601560248201527f54696d656c6f636b206e6f7420636f6d706c6574650000000000000000000000604482015290519081900360640190fd5b6007815160098111156127e657fe5b1415612815576020810151600280546001600160a01b0319166001600160a01b03909216919091179055612a4d565b6001600460008360000151600981111561282b57fe5b600981111561283657fe5b815260208082019290925260409081016000908120858401516001600160a01b031682529092529020805460ff191691151591909117905560048151600981111561287d57fe5b14156128be576040818101516020808401516001600160a01b039081166000908152600590925292902080546001600160a01b031916929091169190911790555b60006128d282602001518360000151611774565b50905080612a4b5760036000836000015160098111156128ee57fe5b60098111156128f957fe5b81526020808201929092526040016000908120848301518154600181018355918352929091200180546001600160a01b0319166001600160a01b0390921691909117905560048251600981111561294c57fe5b14156129c65760008061296484602001516001611774565b9150915081156129bf57600160005260036020527fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c8054829081106129a557fe5b600091825260209091200180546001600160a01b03191690555b5050612a4b565b6001825160098111156129d557fe5b1415612a4b576000806129ed84602001516004611774565b915091508115612a4857600460005260036020527f83ec6a1f0257b830b5e016457c9cf1435391bf56cc98f369a58a54fe93772465805482908110612a2e57fe5b600091825260209091200180546001600160a01b03191690555b50505b505b600160068381548110612a5c57fe5b6000918252602090912060036004909202010180549115156101000261ff001990921691909117905580516009811115612a9257fe5b7f7531a7aefe3985500c4dec2dcb6049a708f14c6a8a9022b435b8841bdb8e17138260200151600160405180836001600160a01b0316815260200182151581526020019250505060405180910390a25050565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b158015612b3357600080fd5b505afa158015612b47573d6000803e3d6000fd5b505050506040513d6020811015612b5d57600080fd5b50516000906001600160a01b03163314612bd05760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107595780601f1061072e57610100808354040283529160200191610759565b50612710811115612c28576040805162461bcd60e51b815260206004820152601f60248201527f4c696d69742063616e6e6f7420657863656564203130302070657263656e7400604482015290519081900360640190fd5b600955565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310612cbf5780518252601f199092019160209182019101612ca0565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612d21576040519150601f19603f3d011682016040523d82523d6000602084013e612d26565b606091505b5091509150818015612d54575080511580612d545750808060200190516020811015612d5157600080fd5b50515b612da5576040805162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c45440000000000000000000000000000000000604482015290519081900360640190fd5b5050505050565b600082820183811015612e06576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b600082612e1e57506000612e09565b82820282848281612e2b57fe5b0414612e065760405162461bcd60e51b81526004018080602001828103825260218152602001806137216021913960400191505060405180910390fd5b600a5460ff16156130665760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612ee257600080fd5b505afa158015612ef6573d6000803e3d6000fd5b505050506040513d6020811015612f0c57600080fd5b50519050818110612f9057612f4b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168484612c2d565b6040805183815290516001600160a01b0385169133917fbbcdd4054b9d2897b75da71421b17d4b9f024932923d789d0de25635d7b26ad39181900360200190a3613060565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166340c10f1984846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561300757600080fd5b505af115801561301b573d6000803e3d6000fd5b50506040805185815290516001600160a01b03871693503392507f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f09181900360200190a35b50610c82565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166340c10f1983836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156130dd57600080fd5b505af11580156130f1573d6000803e3d6000fd5b50506040805184815290516001600160a01b03861693503392507f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f09181900360200190a35050565b6001600160a01b03808216600090815260056020526040808220548151630348786760e31b81529151931692829182918591631a43c338916004808301926060929190829003018186803b15801561319057600080fd5b505afa1580156131a4573d6000803e3d6000fd5b505050506040513d60608110156131ba57600080fd5b508051602082015160409092015190945090925090508215612da55780156132e3576000856001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561322b57600080fd5b505afa15801561323f573d6000803e3d6000fd5b505050506040513d602081101561325557600080fd5b5051905080156132dd578281111561326a5750815b61327e6001600160a01b0387168683612c2d565b846001600160a01b03166342966c68826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156132c457600080fd5b505af11580156132d8573d6000803e3d6000fd5b505050505b50612da5565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561335257600080fd5b505afa158015613366573d6000803e3d6000fd5b505050506040513d602081101561337c57600080fd5b50519050801561342457838111156133915750825b6133c56001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168683612c2d565b846001600160a01b0316631003e2d2826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561340b57600080fd5b505af115801561341f573d6000803e3d6000fd5b505050505b505050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106134c65780518252601f1990920191602091820191016134a7565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613528576040519150601f19603f3d011682016040523d82523d6000602084013e61352d565b606091505b509150915081801561355b57508051158061355b575080806020019051602081101561355857600080fd5b50515b613424576040805162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c4544000000000000000000000000604482015290519081900360640190fd5b600061241c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250600081836136755760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561363a578181015183820152602001613622565b50505050905090810190601f1680156136675780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161368157fe5b04905083858161368d57fe5b0681850201851461369a57fe5b949350505050565b6040805160c08101909152806000815260006020820181905260408201819052606082018190526080820181905260a0909101529056fe537570706c7920636f6e74726f6c6c6572206973206e6f7420636f6e66696775726564537570706c7920636f6e74726f6c6c6572206973206e6f7420696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a164736f6c6343000705000a54726561737572793a206173736574206973206e6f742061207265736572766520746f6b656e000000000000000000000000369eb8197062093a20402935d3a707b4ae414e9d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cc654fbb3c1b12be82d36bc9c7e1ce075a422f80
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000369eb8197062093a20402935d3a707b4ae414e9d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cc654fbb3c1b12be82d36bc9c7e1ce075a422f80
-----Decoded View---------------
Arg [0] : _pana (address): 0x369eb8197062093a20402935d3a707b4ae414e9d
Arg [1] : _timelock (uint256): 0
Arg [2] : _authority (address): 0xcc654fbb3c1b12be82d36bc9c7e1ce075a422f80
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000369eb8197062093a20402935d3a707b4ae414e9d
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [2] : 000000000000000000000000cc654fbb3c1b12be82d36bc9c7e1ce075a422f80
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.