POL Price: $0.550398 (-13.54%)
 

Overview

Max Total Supply

55,379.513994129822729933 CASH

Holders

1,985 (0.00%)

Total Transfers

-

Market

Price

$0.00 @ 0.000000 POL

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Stabl.fi is a cross-chain fully collateralized organic yield-generating stable index coin protocol. Users mint $CASH by depositing stables into the Stabl protocol.

Contract Source Code Verified (Exact Match)

Contract Name:
CASHProxy

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 4 : Proxies.sol
// SPDX-License-Identifier: agpl-3.0
pragma solidity ^0.8.0;

import { InitializeGovernedUpgradeabilityProxy } from "./InitializeGovernedUpgradeabilityProxy.sol";


/**
 * @notice CASHProxy delegates calls to an CASH implementation
 */
contract BoxProxy is InitializeGovernedUpgradeabilityProxy {

}

/**
 * @notice CASHProxy delegates calls to an CASH implementation
 */
contract CASHProxy is InitializeGovernedUpgradeabilityProxy {

}

/**
 * @notice WrappedCASHProxy delegates calls to a WrappedCASH implementation
 */
contract WrappedCASHProxy is InitializeGovernedUpgradeabilityProxy {

}

/**
 * @notice VaultProxy delegates calls to a Vault implementation
 */
contract VaultProxy is InitializeGovernedUpgradeabilityProxy {

}

/**
 * @notice CompoundStrategyProxy delegates calls to a CompoundStrategy implementation
 */
contract CompoundStrategyProxy is InitializeGovernedUpgradeabilityProxy {

}

/**
 * @notice AaveStrategyUSDCProxy delegates calls to a AaveStrategy implementation
 */
contract AaveStrategyUSDCProxy is InitializeGovernedUpgradeabilityProxy {

}

/**
 * @notice AaveStrategyDAIProxy delegates calls to a AaveStrategy implementation
 */
contract AaveStrategyDAIProxy is InitializeGovernedUpgradeabilityProxy {

}

/**
 * @notice AaveStrategyUSDTProxy delegates calls to a AaveStrategy implementation
 */
contract AaveStrategyUSDTProxy is InitializeGovernedUpgradeabilityProxy {

}


/**
 * @notice ThreePoolStrategyProxy delegates calls to a ThreePoolStrategy implementation
 */
contract ThreePoolStrategyProxy is InitializeGovernedUpgradeabilityProxy {

}

/**
 * @notice ConvexStrategyProxy delegates calls to a ConvexStrategy implementation
 */
contract ConvexStrategyProxy is InitializeGovernedUpgradeabilityProxy {

}



/**
 * @notice DystopiaStrategyUsdcDaiProxy delegates calls to a DystopiaStrategy implementation
 */
contract DystopiaStrategyUsdcDaiProxy is InitializeGovernedUpgradeabilityProxy {

}

/**
 * @notice DystopiaStrategyUsdcUsdtProxy delegates calls to a DystopiaStrategy implementation
 */
contract DystopiaStrategyUsdcUsdtProxy is InitializeGovernedUpgradeabilityProxy {

}

/**
 * @notice DystopiaStrategyDaiUsdtProxy delegates calls to a DystopiaStrategy implementation
 */
contract DystopiaStrategyDaiUsdtProxy is InitializeGovernedUpgradeabilityProxy {

}




/**
 * @notice MeshSwapStrategyDAIProxy delegates calls to a MeshSwapStrategy implementation
 */
contract MeshSwapStrategyDAIProxy is InitializeGovernedUpgradeabilityProxy {

}

/**
 * @notice MeshSwapStrategyUSDTProxy delegates calls to a MeshSwapStrategy implementation
 */
contract MeshSwapStrategyUSDTProxy is InitializeGovernedUpgradeabilityProxy {

}

/**
 * @notice MeshSwapStrategyUSDCProxy delegates calls to a MeshSwapStrategy implementation
 */
contract MeshSwapStrategyUSDCProxy is InitializeGovernedUpgradeabilityProxy {

}





/**
 * @notice MeshSwapStrategyUSDCUSDTProxy delegates calls to a MeshSwapStrategyDual implementation
 */
contract MeshSwapStrategyUSDCUSDTProxy is InitializeGovernedUpgradeabilityProxy {

}

/**
 * @notice MeshSwapStrategyUSDCDAIProxy delegates calls to a MeshSwapStrategyDual implementation
 */
contract MeshSwapStrategyUSDCDAIProxy is InitializeGovernedUpgradeabilityProxy {

}

/**
 * @notice MeshSwapStrategyUSDTDAIProxy delegates calls to a MeshSwapStrategyDual implementation
 */
contract MeshSwapStrategyUSDTDAIProxy is InitializeGovernedUpgradeabilityProxy {

}


/**
 * @notice QuickSwapStrategyUSDCDAIProxy delegates calls to a QuickSwapStrategy implementation
 */
contract QuickSwapStrategyUSDCDAIProxy is InitializeGovernedUpgradeabilityProxy {
}

/**
 * @notice QuickSwapStrategyUSDCUSDTProxy delegates calls to a QuickSwapStrategy implementation
 */
contract QuickSwapStrategyUSDCUSDTProxy is InitializeGovernedUpgradeabilityProxy {
}




/**
 * @notice Am3CurveStrategyProxy delegates calls to a Am3CurveStrategy implementation
 */
contract Am3CurveStrategyProxy is InitializeGovernedUpgradeabilityProxy {

}


/**
 * @notice Am3CurveStrategyUSDTProxy delegates calls to a Am3CurveStrategy implementation
 */
contract Am3CurveStrategyUSDTProxy is InitializeGovernedUpgradeabilityProxy {

}


/**
 * @notice SynapseStrategyProxy delegates calls to a SynapseStrategy implementation
 */
contract SynapseStrategyProxy is InitializeGovernedUpgradeabilityProxy {

}

/**
 * @notice SynapseStrategyUSDTProxy delegates calls to a SynapseStrategy implementation
 */
contract SynapseStrategyUSDTProxy is InitializeGovernedUpgradeabilityProxy {

}


/**
 * @notice DodoStrategyProxy delegates calls to a DodoStrategy implementation
 */
contract DodoStrategyProxy is InitializeGovernedUpgradeabilityProxy {

}


/**
 * @notice HarvesterProxy delegates calls to a Harvester implementation
 */
contract HarvesterProxy is InitializeGovernedUpgradeabilityProxy {

}

/**
 * @notice DripperProxy delegates calls to a Dripper implementation
 */
contract DripperProxy is InitializeGovernedUpgradeabilityProxy {

}

File 2 of 4 : InitializeGovernedUpgradeabilityProxy.sol
// SPDX-License-Identifier: agpl-3.0
pragma solidity ^0.8.0;

import { Address } from "@openzeppelin/contracts/utils/Address.sol";

import { Governable } from "../governance/Governable.sol";

/**
 * @title BaseGovernedUpgradeabilityProxy
 * @dev This contract combines an upgradeability proxy with our governor system.
 * It is based on an older version of OpenZeppelins BaseUpgradeabilityProxy
 * with Solidity ^0.8.0.
 * @author Stabl Protocol Inc
 */
contract InitializeGovernedUpgradeabilityProxy is Governable {
    /**
     * @dev Emitted when the implementation is upgraded.
     * @param implementation Address of the new implementation.
     */
    event Upgraded(address indexed implementation);

    /**
     * @dev Contract initializer with Governor enforcement
     * @param _logic Address of the initial implementation.
     * @param _initGovernor Address of the initial Governor.
     * @param _data Data to send as msg.data to the implementation to initialize
     * the proxied contract.
     * It should include the signature and the parameters of the function to be
     * called, as described in
     * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.
     * This parameter is optional, if no data is given the initialization call
     * to proxied contract will be skipped.
     */
    function initialize(
        address _logic,
        address _initGovernor,
        bytes memory _data
    ) public payable onlyGovernor {
        require(_implementation() == address(0), "implementation already set");
        assert(
            IMPLEMENTATION_SLOT ==
                bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1)
        );
        _changeGovernor(_initGovernor);
        _setImplementation(_logic);
        if (_data.length > 0) {
            (bool success, ) = _logic.delegatecall(_data);
            require(success);
        }
    }

    /**
     * @return The address of the proxy admin/it's also the governor.
     */
    function admin() external view returns (address) {
        return _governor();
    }

    /**
     * @return The address of the implementation.
     */
    function implementation() external view returns (address) {
        return _implementation();
    }

    /**
     * @dev Upgrade the backing implementation of the proxy.
     * Only the admin can call this function.
     * @param newImplementation Address of the new implementation.
     */
    function upgradeTo(address newImplementation) external onlyGovernor {
        _upgradeTo(newImplementation);
    }

    /**
     * @dev Upgrade the backing implementation of the proxy and call a function
     * on the new implementation.
     * This is useful to initialize the proxied contract.
     * @param newImplementation Address of the new implementation.
     * @param data Data to send as msg.data in the low level call.
     * It should include the signature and the parameters of the function to be called, as described in
     * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.
     */
    function upgradeToAndCall(address newImplementation, bytes calldata data)
        external
        payable
        onlyGovernor
    {
        _upgradeTo(newImplementation);
        (bool success, ) = newImplementation.delegatecall(data);
        require(success);
    }

    /**
     * @dev Fallback function.
     * Implemented entirely in `_fallback`.
     */
    fallback() external payable {
        _fallback();
    }

    /**
     * @dev Delegates execution to an implementation contract.
     * This is a low level function that doesn't return to its internal call site.
     * It will return to the external caller whatever the implementation returns.
     * @param _impl Address to delegate.
     */
    function _delegate(address _impl) internal {
        assembly {
            // Copy msg.data. We take full control of memory in this inline assembly
            // block because it will not return to Solidity code. We overwrite the
            // Solidity scratch pad at memory position 0.
            calldatacopy(0, 0, calldatasize())

            // Call the implementation.
            // out and outsize are 0 because we don't know the size yet.
            let result := delegatecall(gas(), _impl, 0, calldatasize(), 0, 0)

            // Copy the returned data.
            returndatacopy(0, 0, returndatasize())

            switch result
            // delegatecall returns 0 on error.
            case 0 {
                revert(0, returndatasize())
            }
            default {
                return(0, returndatasize())
            }
        }
    }

    /**
     * @dev Function that is run as the first thing in the fallback function.
     * Can be redefined in derived contracts to add functionality.
     * Redefinitions must call super._willFallback().
     */
    function _willFallback() internal {}

    /**
     * @dev fallback implementation.
     * Extracted to enable manual triggering.
     */
    function _fallback() internal {
        _willFallback();
        _delegate(_implementation());
    }

    /**
     * @dev Storage slot with the address of the current implementation.
     * This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1, and is
     * validated in the constructor.
     */
    bytes32 internal constant IMPLEMENTATION_SLOT =
        0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;

    /**
     * @dev Returns the current implementation.
     * @return impl Address of the current implementation
     */
    function _implementation() internal view returns (address impl) {
        bytes32 slot = IMPLEMENTATION_SLOT;
        assembly {
            impl := sload(slot)
        }
    }

    /**
     * @dev Upgrades the proxy to a new implementation.
     * @param newImplementation Address of the new implementation.
     */
    function _upgradeTo(address newImplementation) internal {
        _setImplementation(newImplementation);
        emit Upgraded(newImplementation);
    }

    /**
     * @dev Sets the implementation address of the proxy.
     * @param newImplementation Address of the new implementation.
     */
    function _setImplementation(address newImplementation) internal {
        require(
            Address.isContract(newImplementation),
            "Cannot set a proxy implementation to a non-contract address"
        );

        bytes32 slot = IMPLEMENTATION_SLOT;

        assembly {
            sstore(slot, newImplementation)
        }
    }
}

File 3 of 4 : Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 4 of 4 : Governable.sol
// SPDX-License-Identifier: agpl-3.0
pragma solidity ^0.8.0;

/**
 * @title CASH Governable Contract
 * @dev Copy of the openzeppelin Ownable.sol contract with nomenclature change
 *      from owner to governor and renounce methods removed. Does not use
 *      Context.sol like Ownable.sol does for simplification.
 * @author Stabl Protocol Inc
 */
contract Governable {
    // Storage position of the owner and pendingOwner of the contract
    // keccak256("CASH.governor");
    bytes32 private constant governorPosition =
        0x83f34c88ec39d54d1e423bd8a181ebc59ede5dcc9996c2df334668b4f89fdd73;

    // keccak256("CASH.pending.governor");
    bytes32 private constant pendingGovernorPosition =
        0x7eaf9a7750884803435dfabc67aa617a7d8fefb23d8d84b3c9722bd69e48c4bc;

    // keccak256("CASH.reentry.status");
    bytes32 private constant reentryStatusPosition =
        0x48a06827bfe8bfc0a59fe65d0fa78f553938265ed1f971326fc09947d19a593c;

    // See OpenZeppelin ReentrancyGuard implementation
    uint256 constant _NOT_ENTERED = 1;
    uint256 constant _ENTERED = 2;

    event PendingGovernorshipTransfer(
        address indexed previousGovernor,
        address indexed newGovernor
    );

    event GovernorshipTransferred(
        address indexed previousGovernor,
        address indexed newGovernor
    );

    /**
     * @dev Initializes the contract setting the deployer as the initial Governor.
     */
    constructor() {
        _setGovernor(msg.sender);
        emit GovernorshipTransferred(address(0), _governor());
    }

    /**
     * @dev Returns the address of the current Governor.
     */
    function governor() public view returns (address) {
        return _governor();
    }

    /**
     * @dev Returns the address of the current Governor.
     */
    function _governor() internal view returns (address governorOut) {
        bytes32 position = governorPosition;
        assembly {
            governorOut := sload(position)
        }
    }

    /**
     * @dev Returns the address of the pending Governor.
     */
    function _pendingGovernor()
        internal
        view
        returns (address pendingGovernor)
    {
        bytes32 position = pendingGovernorPosition;
        assembly {
            pendingGovernor := sload(position)
        }
    }

    /**
     * @dev Throws if called by any account other than the Governor.
     */
    modifier onlyGovernor() {
        require(isGovernor(), "Caller is not the Governor");
        _;
    }

    /**
     * @dev Returns true if the caller is the current Governor.
     */
    function isGovernor() public view returns (bool) {
        return msg.sender == _governor();
    }

    function _setGovernor(address newGovernor) internal {
        bytes32 position = governorPosition;
        assembly {
            sstore(position, newGovernor)
        }
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        bytes32 position = reentryStatusPosition;
        uint256 _reentry_status;
        assembly {
            _reentry_status := sload(position)
        }

        // On the first call to nonReentrant, _notEntered will be true
        require(_reentry_status != _ENTERED, "Reentrant call");

        // Any calls to nonReentrant after this point will fail
        assembly {
            sstore(position, _ENTERED)
        }

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        assembly {
            sstore(position, _NOT_ENTERED)
        }
    }

    function _setPendingGovernor(address newGovernor) internal {
        bytes32 position = pendingGovernorPosition;
        assembly {
            sstore(position, newGovernor)
        }
    }

    /**
     * @dev Transfers Governance of the contract to a new account (`newGovernor`).
     * Can only be called by the current Governor. Must be claimed for this to complete
     * @param _newGovernor Address of the new Governor
     */
    function transferGovernance(address _newGovernor) external onlyGovernor {
        _setPendingGovernor(_newGovernor);
        emit PendingGovernorshipTransfer(_governor(), _newGovernor);
    }

    /**
     * @dev Claim Governance of the contract to a new account (`newGovernor`).
     * Can only be called by the new Governor.
     */
    function claimGovernance() external {
        require(
            msg.sender == _pendingGovernor(),
            "Only the pending Governor can complete the claim"
        );
        _changeGovernor(msg.sender);
    }

    /**
     * @dev Change Governance of the contract to a new account (`newGovernor`).
     * @param _newGovernor Address of the new Governor
     */
    function _changeGovernor(address _newGovernor) internal {
        require(_newGovernor != address(0), "New Governor is address(0)");
        emit GovernorshipTransferred(_governor(), _newGovernor);
        _setGovernor(_newGovernor);
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "metadata": {
    "useLiteralContent": true
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousGovernor","type":"address"},{"indexed":true,"internalType":"address","name":"newGovernor","type":"address"}],"name":"GovernorshipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousGovernor","type":"address"},{"indexed":true,"internalType":"address","name":"newGovernor","type":"address"}],"name":"PendingGovernorshipTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"governor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"address","name":"_initGovernor","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"isGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newGovernor","type":"address"}],"name":"transferGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"}]

608060405234801561001057600080fd5b5061002733600080516020610a3083398151915255565b600080516020610a30833981519152546040516001600160a01b03909116906000907fc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a908290a36109b38061007d6000396000f3fe6080604052600436106100865760003560e01c80635d36b190116100595780635d36b1901461010a578063c7af33521461011f578063cf7a1d7714610144578063d38bfff414610157578063f851a4401461009057610086565b80630c340a24146100905780633659cfe6146100c25780634f1ef286146100e25780635c60da1b146100f5575b61008e610177565b005b34801561009c57600080fd5b506100a5610197565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100ce57600080fd5b5061008e6100dd3660046106f3565b6101b4565b61008e6100f03660046107e7565b6101ed565b34801561010157600080fd5b506100a561028a565b34801561011657600080fd5b5061008e6102a2565b34801561012b57600080fd5b50610134610346565b60405190151581526020016100b9565b61008e610152366004610715565b610377565b34801561016357600080fd5b5061008e6101723660046106f3565b610488565b61019561019060008051602061095e8339815191525490565b61052c565b565b60006101af60008051602061093e8339815191525490565b905090565b6101bc610346565b6101e15760405162461bcd60e51b81526004016101d8906108b5565b60405180910390fd5b6101ea81610550565b50565b6101f5610346565b6102115760405162461bcd60e51b81526004016101d8906108b5565b61021a83610550565b6000836001600160a01b0316838360405161023692919061086a565b600060405180830381855af49150503d8060008114610271576040519150601f19603f3d011682016040523d82523d6000602084013e610276565b606091505b505090508061028457600080fd5b50505050565b60006101af60008051602061095e8339815191525490565b7f7eaf9a7750884803435dfabc67aa617a7d8fefb23d8d84b3c9722bd69e48c4bc546001600160a01b0316336001600160a01b03161461033d5760405162461bcd60e51b815260206004820152603060248201527f4f6e6c79207468652070656e64696e6720476f7665726e6f722063616e20636f60448201526f6d706c6574652074686520636c61696d60801b60648201526084016101d8565b61019533610590565b600061035e60008051602061093e8339815191525490565b6001600160a01b0316336001600160a01b031614905090565b61037f610346565b61039b5760405162461bcd60e51b81526004016101d8906108b5565b60006103b360008051602061095e8339815191525490565b6001600160a01b0316146104095760405162461bcd60e51b815260206004820152601a60248201527f696d706c656d656e746174696f6e20616c72656164792073657400000000000060448201526064016101d8565b61043460017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd6108ec565b60008051602061095e8339815191521461045057610450610911565b61045982610590565b61046283610651565b805115610483576000836001600160a01b031682604051610236919061087a565b505050565b610490610346565b6104ac5760405162461bcd60e51b81526004016101d8906108b5565b6104d4817f7eaf9a7750884803435dfabc67aa617a7d8fefb23d8d84b3c9722bd69e48c4bc55565b806001600160a01b03166104f460008051602061093e8339815191525490565b6001600160a01b03167fa39cc5eb22d0f34d8beaefee8a3f17cc229c1a1d1ef87a5ad47313487b1c4f0d60405160405180910390a350565b3660008037600080366000845af43d6000803e80801561054b573d6000f35b3d6000fd5b61055981610651565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105e65760405162461bcd60e51b815260206004820152601a60248201527f4e657720476f7665726e6f72206973206164647265737328302900000000000060448201526064016101d8565b806001600160a01b031661060660008051602061093e8339815191525490565b6001600160a01b03167fc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a60405160405180910390a36101ea8160008051602061093e83398151915255565b803b6106c55760405162461bcd60e51b815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e74726163742061646472657373000000000060648201526084016101d8565b60008051602061095e83398151915255565b80356001600160a01b03811681146106ee57600080fd5b919050565b60006020828403121561070557600080fd5b61070e826106d7565b9392505050565b60008060006060848603121561072a57600080fd5b610733846106d7565b9250610741602085016106d7565b9150604084013567ffffffffffffffff8082111561075e57600080fd5b818601915086601f83011261077257600080fd5b81358181111561078457610784610927565b604051601f8201601f19908116603f011681019083821181831017156107ac576107ac610927565b816040528281528960208487010111156107c557600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000806000604084860312156107fc57600080fd5b610805846106d7565b9250602084013567ffffffffffffffff8082111561082257600080fd5b818601915086601f83011261083657600080fd5b81358181111561084557600080fd5b87602082850101111561085757600080fd5b6020830194508093505050509250925092565b8183823760009101908152919050565b6000825160005b8181101561089b5760208186018101518583015201610881565b818111156108aa576000828501525b509190910192915050565b6020808252601a908201527f43616c6c6572206973206e6f742074686520476f7665726e6f72000000000000604082015260600190565b60008282101561090c57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052604160045260246000fdfe83f34c88ec39d54d1e423bd8a181ebc59ede5dcc9996c2df334668b4f89fdd73360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca264697066735822122060022d1b5933e491f8fe7f548ad9aa6ffcaef001a55074ef9e2e27fc2cb2133164736f6c6343000806003383f34c88ec39d54d1e423bd8a181ebc59ede5dcc9996c2df334668b4f89fdd73

Deployed Bytecode

0x6080604052600436106100865760003560e01c80635d36b190116100595780635d36b1901461010a578063c7af33521461011f578063cf7a1d7714610144578063d38bfff414610157578063f851a4401461009057610086565b80630c340a24146100905780633659cfe6146100c25780634f1ef286146100e25780635c60da1b146100f5575b61008e610177565b005b34801561009c57600080fd5b506100a5610197565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100ce57600080fd5b5061008e6100dd3660046106f3565b6101b4565b61008e6100f03660046107e7565b6101ed565b34801561010157600080fd5b506100a561028a565b34801561011657600080fd5b5061008e6102a2565b34801561012b57600080fd5b50610134610346565b60405190151581526020016100b9565b61008e610152366004610715565b610377565b34801561016357600080fd5b5061008e6101723660046106f3565b610488565b61019561019060008051602061095e8339815191525490565b61052c565b565b60006101af60008051602061093e8339815191525490565b905090565b6101bc610346565b6101e15760405162461bcd60e51b81526004016101d8906108b5565b60405180910390fd5b6101ea81610550565b50565b6101f5610346565b6102115760405162461bcd60e51b81526004016101d8906108b5565b61021a83610550565b6000836001600160a01b0316838360405161023692919061086a565b600060405180830381855af49150503d8060008114610271576040519150601f19603f3d011682016040523d82523d6000602084013e610276565b606091505b505090508061028457600080fd5b50505050565b60006101af60008051602061095e8339815191525490565b7f7eaf9a7750884803435dfabc67aa617a7d8fefb23d8d84b3c9722bd69e48c4bc546001600160a01b0316336001600160a01b03161461033d5760405162461bcd60e51b815260206004820152603060248201527f4f6e6c79207468652070656e64696e6720476f7665726e6f722063616e20636f60448201526f6d706c6574652074686520636c61696d60801b60648201526084016101d8565b61019533610590565b600061035e60008051602061093e8339815191525490565b6001600160a01b0316336001600160a01b031614905090565b61037f610346565b61039b5760405162461bcd60e51b81526004016101d8906108b5565b60006103b360008051602061095e8339815191525490565b6001600160a01b0316146104095760405162461bcd60e51b815260206004820152601a60248201527f696d706c656d656e746174696f6e20616c72656164792073657400000000000060448201526064016101d8565b61043460017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd6108ec565b60008051602061095e8339815191521461045057610450610911565b61045982610590565b61046283610651565b805115610483576000836001600160a01b031682604051610236919061087a565b505050565b610490610346565b6104ac5760405162461bcd60e51b81526004016101d8906108b5565b6104d4817f7eaf9a7750884803435dfabc67aa617a7d8fefb23d8d84b3c9722bd69e48c4bc55565b806001600160a01b03166104f460008051602061093e8339815191525490565b6001600160a01b03167fa39cc5eb22d0f34d8beaefee8a3f17cc229c1a1d1ef87a5ad47313487b1c4f0d60405160405180910390a350565b3660008037600080366000845af43d6000803e80801561054b573d6000f35b3d6000fd5b61055981610651565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105e65760405162461bcd60e51b815260206004820152601a60248201527f4e657720476f7665726e6f72206973206164647265737328302900000000000060448201526064016101d8565b806001600160a01b031661060660008051602061093e8339815191525490565b6001600160a01b03167fc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a60405160405180910390a36101ea8160008051602061093e83398151915255565b803b6106c55760405162461bcd60e51b815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e74726163742061646472657373000000000060648201526084016101d8565b60008051602061095e83398151915255565b80356001600160a01b03811681146106ee57600080fd5b919050565b60006020828403121561070557600080fd5b61070e826106d7565b9392505050565b60008060006060848603121561072a57600080fd5b610733846106d7565b9250610741602085016106d7565b9150604084013567ffffffffffffffff8082111561075e57600080fd5b818601915086601f83011261077257600080fd5b81358181111561078457610784610927565b604051601f8201601f19908116603f011681019083821181831017156107ac576107ac610927565b816040528281528960208487010111156107c557600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000806000604084860312156107fc57600080fd5b610805846106d7565b9250602084013567ffffffffffffffff8082111561082257600080fd5b818601915086601f83011261083657600080fd5b81358181111561084557600080fd5b87602082850101111561085757600080fd5b6020830194508093505050509250925092565b8183823760009101908152919050565b6000825160005b8181101561089b5760208186018101518583015201610881565b818111156108aa576000828501525b509190910192915050565b6020808252601a908201527f43616c6c6572206973206e6f742074686520476f7665726e6f72000000000000604082015260600190565b60008282101561090c57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052604160045260246000fdfe83f34c88ec39d54d1e423bd8a181ebc59ede5dcc9996c2df334668b4f89fdd73360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca264697066735822122060022d1b5933e491f8fe7f548ad9aa6ffcaef001a55074ef9e2e27fc2cb2133164736f6c63430008060033

Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.