Contract 0xe840b73e5287865eec17d250bfb1536704b43b21 1

 
 
Txn Hash
Method
Block
From
To
Value [Txn Fee]
0x207f65d1ba7e59363700981b2a7bef7a849b1c274ad5203439d7060b01d06c55Redeem386617872023-01-29 10:52:242 days 12 hrs ago0x3b4f93dc624b1d2109985488c3224784d888275e IN  mStable: mStable USD (Polygon PoS) Token0 MATIC0.0258668508 70.8
0x358c88bde27ffe54b075e649e790660fb723036a5d9db7f6cf9f315fbe54e659Swap384008112023-01-22 19:41:099 days 3 hrs ago0x8492b459ce3131603151ddb45df9998311e23792 IN  mStable: mStable USD (Polygon PoS) Token0 MATIC0.022407578625 40.102690134
0x110be6d925f395312e3948cc7cf63612939e4e5983b225c5ebae47ac01d7b87bRedeem383334162023-01-21 3:00:2210 days 20 hrs ago0x84c66aa20b71c299e61f8b667c341f646ff6d2e8 IN  mStable: mStable USD (Polygon PoS) Token0 MATIC0.04987682 140
0x713c0f9cc60fa227ffd090f02cb7cd08caa12c95458a43669e3399d584edc9e7Approve382812602023-01-19 19:04:3712 days 4 hrs ago0xceb2699242dc52f8dcd2cfdf8892dc87c150784d IN  mStable: mStable USD (Polygon PoS) Token0 MATIC0.0040390575
0xd96e4fa0b545652e99b35aee027246cb14739e27e7d74d92eb3875380f1e71eaSwap382809082023-01-19 18:52:0912 days 4 hrs ago0x23ca2918b103c39fcd73f1fd57a83790eaabc179 IN  mStable: mStable USD (Polygon PoS) Token0 MATIC0.0391048647 69.1
0xdd71956b7e82f361a473a270d723a75bffe44d233ec0c573a5a299e62d221c63Redeem382585882023-01-19 5:26:0512 days 18 hrs ago0xb81473f20818225302b8fffb905b53d58a793d84 IN  mStable: mStable USD (Polygon PoS) Token0 MATIC0.01653983577745.811770412
0xcf5a3a1d9231163658797159fd79e242b772963cd3afc6e8e5eeacf34cbb3acbApprove382512692023-01-19 0:59:0512 days 22 hrs ago0x7e6eb2123463ca93bd0ef64bbcdde8db16d77c42 IN  mStable: mStable USD (Polygon PoS) Token0 MATIC0.003174880875 58.953483033
0x1667d42cd1bbe8bb6267381ecb29c32905f77b0e824937429ba494e5176727c6Redeem382017102023-01-17 18:28:2514 days 5 hrs ago0x195c0aaff4bf16b581ba7dee465ccae82215d24f IN  mStable: mStable USD (Polygon PoS) Token0 MATIC0.0208764258 58.6
0x428730235b62e1d475750a40f8b082c77b3c376146de13cc105e4d1bf47f6346Approve382016892023-01-17 18:27:4114 days 5 hrs ago0x195c0aaff4bf16b581ba7dee465ccae82215d24f IN  mStable: mStable USD (Polygon PoS) Token0 MATIC0.008887385129 165.027391277
0x5f379f2dae643cc8dca585666c13985766bf387189278aa31071edbaa1a98835Approve381514512023-01-16 12:49:0115 days 10 hrs ago0xd96a1769fdcb59df2f5a18f91ddf6cccd7002516 IN  mStable: mStable USD (Polygon PoS) Token0 MATIC0.001291838107 40.91980069
0xb472be0fa410777ce1ae37e0d1df2c5f60a3f4d45b7f54bc801145b8607f98fcApprove380611072023-01-14 8:45:3917 days 14 hrs ago0xceb2699242dc52f8dcd2cfdf8892dc87c150784d IN  mStable: mStable USD (Polygon PoS) Token0 MATIC0.0117316733 217.84219
0xd930b3972c1238a7866f9d926b4047ef82e85946c81399ad2f4dc0f74d042e64Redeem380580712023-01-14 6:56:5917 days 16 hrs ago0xceb2699242dc52f8dcd2cfdf8892dc87c150784d IN  mStable: mStable USD (Polygon PoS) Token0 MATIC0.02404119466266.588913283
0xc8e80328e50d577487110d828c19c26204c72e2043d90bda66ce3459e2cea2f2Approve380569472023-01-14 6:17:5517 days 17 hrs ago0xceb2699242dc52f8dcd2cfdf8892dc87c150784d IN  mStable: mStable USD (Polygon PoS) Token0 MATIC0.006696645244124.960724847
0x3280fedbc5e209726f01e839c4db6d496108089ecdc62eacdb02373d80138913Approve380560612023-01-14 5:45:4317 days 17 hrs ago0xceb2699242dc52f8dcd2cfdf8892dc87c150784d IN  mStable: mStable USD (Polygon PoS) Token0 MATIC0.002692750
0x4c3730990dd453855975560bf2e96744c136e608175ac68f244b54c961dbe82cApprove380145332023-01-13 5:50:1718 days 17 hrs ago0xceb2699242dc52f8dcd2cfdf8892dc87c150784d IN  mStable: mStable USD (Polygon PoS) Token0 MATIC0.002692750
0xc916471a0d280928f29310d9c231f18c0f3b631ed47c78957ad4be75f43e562aRedeem380130572023-01-13 4:59:3218 days 18 hrs ago0xceb2699242dc52f8dcd2cfdf8892dc87c150784d IN  mStable: mStable USD (Polygon PoS) Token0 MATIC0.01987908086855.067011087
0xab56ae874217839cf4da0ffc9b100368f66ada55deac6d621333b54bdfbcf924Mint380127632023-01-13 4:49:2418 days 18 hrs ago0xceb2699242dc52f8dcd2cfdf8892dc87c150784d IN  mStable: mStable USD (Polygon PoS) Token0 MATIC0.017637850
0xf545f815647caf389213862a5426fada75a3f44fd2eef86be966f1e1e6669180Approve380110572023-01-13 3:50:4218 days 19 hrs ago0xceb2699242dc52f8dcd2cfdf8892dc87c150784d IN  mStable: mStable USD (Polygon PoS) Token0 MATIC0.0040390575
0xa6ce7010f904cc0bd7943f9900cc05db85851b5f7ebf09b5f6bac529d9abe2a5Swap379217932023-01-11 0:13:2820 days 23 hrs ago0xbcc8cb0a825c61355a460da85159f1b43d5d49ab IN  mStable: mStable USD (Polygon PoS) Token0 MATIC0.024711522 44.6
0x3cb1e67422d30e6e2a2dd55c6512d8eebf3c5345d9bce9866fbd9961d838bc6dRedeem379060812023-01-10 14:58:5721 days 8 hrs ago0x287cdd0a59d69e9f101e90bdbcc892607df08cf9 IN  mStable: mStable USD (Polygon PoS) Token0 MATIC0.0421968855 115.5
0x386b0ece2364052e8b4efa1aa02750a004747fc947baa41c649917c78ba5c5aeApprove379057382023-01-10 14:47:1121 days 8 hrs ago0x287cdd0a59d69e9f101e90bdbcc892607df08cf9 IN  mStable: mStable USD (Polygon PoS) Token0 MATIC0.004705063879 87.367027134
0x277f6cce20f673db74eae6961bb95a30dbdabe70a33663e4b7c982dc3305582dMint379054412023-01-10 14:36:5721 days 8 hrs ago0x287cdd0a59d69e9f101e90bdbcc892607df08cf9 IN  mStable: mStable USD (Polygon PoS) Token0 MATIC0.0403757496 112.9
0xfa043442a4d1881bcabc0abb6cafbb303f8478aa0d39cb168e780d5532c13403Approve378995002023-01-10 11:12:4121 days 12 hrs ago0x33030f4db80d06f4055ce9bb1e0d823a65b33f40 IN  mStable: mStable USD (Polygon PoS) Token0 MATIC0.002506574331 46.762701612
0xad6b5a8887959ff1300d9d55202240d36cf7b76348e73e7e98abebba77c92d53Transfer378993852023-01-10 11:08:4321 days 12 hrs ago0x84f437ae20f77d3e81fa352a5ffe546249517abd IN  mStable: mStable USD (Polygon PoS) Token0 MATIC0.00290823368 49.385845679
0x7b09bf37ddc41d30621eee77a2dee225a4ae5438ea4cbcb936bb0da3d91e1708Redeem378987642023-01-10 10:47:1821 days 12 hrs ago0x87fc1313880d579039ac48db8b25428ed5f33c4a IN  mStable: mStable USD (Polygon PoS) Token0 MATIC0.016031835 45
[ Download CSV Export 

OVERVIEW

mStable is a protocol that unites stablecoins, lending, and swapping into one robust and easy to use standard.

Parent Txn Hash Block From To Value
Loading

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0xB30a907084AC8a0d25dDDAB4E364827406Fd09f0

Contract Name:
AssetProxy

Compiler Version
v0.8.2+commit.661d1103

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU AGPLv3 license
/**
 *Submitted for verification at polygonscan.com on 2021-06-24
*/

pragma solidity 0.8.2;


/**
 * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM
 * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to
 * be specified by overriding the virtual {_implementation} function.
 *
 * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a
 * different contract through the {_delegate} function.
 *
 * The success and return data of the delegated call will be returned back to the caller of the proxy.
 */
abstract contract Proxy {
    /**
     * @dev Delegates the current call to `implementation`.
     *
     * This function does not return to its internall call site, it will return directly to the external caller.
     */
    function _delegate(address implementation) internal virtual {
        // solhint-disable-next-line no-inline-assembly
        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(), implementation, 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 This is a virtual function that should be overriden so it returns the address to which the fallback function
     * and {_fallback} should delegate.
     */
    function _implementation() internal view virtual returns (address);

    /**
     * @dev Delegates the current call to the address returned by `_implementation()`.
     *
     * This function does not return to its internall call site, it will return directly to the external caller.
     */
    function _fallback() internal virtual {
        _beforeFallback();
        _delegate(_implementation());
    }

    /**
     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other
     * function in the contract matches the call data.
     */
    fallback () external payable virtual {
        _fallback();
    }

    /**
     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data
     * is empty.
     */
    receive () external payable virtual {
        _fallback();
    }

    /**
     * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`
     * call, or as part of the Solidity `fallback` or `receive` functions.
     *
     * If overriden should call `super._beforeFallback()`.
     */
    function _beforeFallback() internal virtual {
    }
}

/**
 * @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;
        // solhint-disable-next-line no-inline-assembly
        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");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

/**
 * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an
 * implementation address that can be changed. This address is stored in storage in the location specified by
 * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the
 * implementation behind the proxy.
 *
 * Upgradeability is only provided internally through {_upgradeTo}. For an externally upgradeable proxy see
 * {TransparentUpgradeableProxy}.
 */
contract UpgradeableProxy is Proxy {
    /**
     * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.
     *
     * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded
     * function call, and allows initializating the storage of the proxy like a Solidity constructor.
     */
    constructor(address _logic, bytes memory _data) payable {
        assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1));
        _setImplementation(_logic);
        if(_data.length > 0) {
            Address.functionDelegateCall(_logic, _data);
        }
    }

    /**
     * @dev Emitted when the implementation is upgraded.
     */
    event Upgraded(address indexed 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 private constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;

    /**
     * @dev Returns the current implementation address.
     */
    function _implementation() internal view virtual override returns (address impl) {
        bytes32 slot = _IMPLEMENTATION_SLOT;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            impl := sload(slot)
        }
    }

    /**
     * @dev Upgrades the proxy to a new implementation.
     *
     * Emits an {Upgraded} event.
     */
    function _upgradeTo(address newImplementation) internal virtual {
        _setImplementation(newImplementation);
        emit Upgraded(newImplementation);
    }

    /**
     * @dev Stores a new address in the EIP1967 implementation slot.
     */
    function _setImplementation(address newImplementation) private {
        require(Address.isContract(newImplementation), "UpgradeableProxy: new implementation is not a contract");

        bytes32 slot = _IMPLEMENTATION_SLOT;

        // solhint-disable-next-line no-inline-assembly
        assembly {
            sstore(slot, newImplementation)
        }
    }
}

contract TransparentUpgradeableProxy is UpgradeableProxy {
    /**
     * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and
     * optionally initialized with `_data` as explained in {UpgradeableProxy-constructor}.
     */
    constructor(address _logic, address admin_, bytes memory _data) payable UpgradeableProxy(_logic, _data) {
        assert(_ADMIN_SLOT == bytes32(uint256(keccak256("eip1967.proxy.admin")) - 1));
        _setAdmin(admin_);
    }

    /**
     * @dev Emitted when the admin account has changed.
     */
    event AdminChanged(address previousAdmin, address newAdmin);

    /**
     * @dev Storage slot with the admin of the contract.
     * This is the keccak-256 hash of "eip1967.proxy.admin" subtracted by 1, and is
     * validated in the constructor.
     */
    bytes32 private constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;

    /**
     * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.
     */
    modifier ifAdmin() {
        if (msg.sender == _admin()) {
            _;
        } else {
            _fallback();
        }
    }

    /**
     * @dev Returns the current admin.
     *
     * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.
     *
     * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the
     * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.
     * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`
     */
    function admin() external ifAdmin returns (address admin_) {
        admin_ = _admin();
    }

    /**
     * @dev Returns the current implementation.
     *
     * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.
     *
     * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the
     * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.
     * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`
     */
    function implementation() external ifAdmin returns (address implementation_) {
        implementation_ = _implementation();
    }

    /**
     * @dev Changes the admin of the proxy.
     *
     * Emits an {AdminChanged} event.
     *
     * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.
     */
    function changeAdmin(address newAdmin) external virtual ifAdmin {
        require(newAdmin != address(0), "TransparentUpgradeableProxy: new admin is the zero address");
        emit AdminChanged(_admin(), newAdmin);
        _setAdmin(newAdmin);
    }

    /**
     * @dev Upgrade the implementation of the proxy.
     *
     * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.
     */
    function upgradeTo(address newImplementation) external virtual ifAdmin {
        _upgradeTo(newImplementation);
    }

    /**
     * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified
     * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the
     * proxied contract.
     *
     * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.
     */
    function upgradeToAndCall(address newImplementation, bytes calldata data) external payable virtual ifAdmin {
        _upgradeTo(newImplementation);
        Address.functionDelegateCall(newImplementation, data);
    }

    /**
     * @dev Returns the current admin.
     */
    function _admin() internal view virtual returns (address adm) {
        bytes32 slot = _ADMIN_SLOT;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            adm := sload(slot)
        }
    }

    /**
     * @dev Stores a new address in the EIP1967 admin slot.
     */
    function _setAdmin(address newAdmin) private {
        bytes32 slot = _ADMIN_SLOT;

        // solhint-disable-next-line no-inline-assembly
        assembly {
            sstore(slot, newAdmin)
        }
    }

    /**
     * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.
     */
    function _beforeFallback() internal virtual override {
        require(msg.sender != _admin(), "TransparentUpgradeableProxy: admin cannot fallback to proxy target");
        super._beforeFallback();
    }
}

// SPDX-License-Identifier: AGPL-3.0-or-later
// import { InitializableAdminUpgradeabilityProxy } from "../shared/@openzeppelin-2.5/upgrades/InitializableAdminUpgradeabilityProxy.sol";
/**
 * @notice AssetProxy delegates calls to a Masset implementation
 * @dev    Extending on OpenZeppelin's InitializableAdminUpgradabilityProxy
 * means that the proxy is upgradable through a ProxyAdmin. AssetProxy upgrades
 * are implemented by a DelayedProxyAdmin, which enforces a 1 week opt-out period.
 * All upgrades are governed through the current mStable governance.
 */
contract AssetProxy is TransparentUpgradeableProxy {
    constructor(
        address _logic,
        address admin_,
        bytes memory _data
    ) payable TransparentUpgradeableProxy(_logic, admin_, _data) {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"address","name":"admin_","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","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":"admin_","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"changeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"implementation_","type":"address"}],"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"},{"stateMutability":"payable","type":"receive"}]

608060405260405162000db538038062000db5833981016040819052620000269162000346565b82828282816200005860017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd62000475565b60008051602062000d6e833981519152146200008457634e487b7160e01b600052600160045260246000fd5b6200008f8262000130565b805115620000b057620000ae8282620001d160201b620003c41760201c565b505b50620000e0905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610462000475565b60008051602062000d4e833981519152146200010c57634e487b7160e01b600052600160045260246000fd5b620001248260008051602062000d4e83398151915255565b505050505050620004e2565b62000146816200020060201b620003f01760201c565b620001be5760405162461bcd60e51b815260206004820152603660248201527f5570677261646561626c6550726f78793a206e657720696d706c656d656e746160448201527f74696f6e206973206e6f74206120636f6e74726163740000000000000000000060648201526084015b60405180910390fd5b60008051602062000d6e83398151915255565b6060620001f9838360405180606001604052806027815260200162000d8e602791396200020a565b9392505050565b803b15155b919050565b6060620002178462000200565b620002745760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401620001b5565b600080856001600160a01b03168560405162000291919062000422565b600060405180830381855af49150503d8060008114620002ce576040519150601f19603f3d011682016040523d82523d6000602084013e620002d3565b606091505b509092509050620002e6828286620002f0565b9695505050505050565b6060831562000301575081620001f9565b825115620003125782518084602001fd5b8160405162461bcd60e51b8152600401620001b5919062000440565b80516001600160a01b03811681146200020557600080fd5b6000806000606084860312156200035b578283fd5b62000366846200032e565b925062000376602085016200032e565b60408501519092506001600160401b038082111562000393578283fd5b818601915086601f830112620003a7578283fd5b815181811115620003bc57620003bc620004cc565b604051601f8201601f19908116603f01168101908382118183101715620003e757620003e7620004cc565b8160405282815289602084870101111562000400578586fd5b6200041383602083016020880162000499565b80955050505050509250925092565b600082516200043681846020870162000499565b9190910192915050565b60006020825282518060208401526200046181604085016020870162000499565b601f01601f19169190910160400192915050565b6000828210156200049457634e487b7160e01b81526011600452602481fd5b500390565b60005b83811015620004b65781810151838201526020016200049c565b83811115620004c6576000848401525b50505050565b634e487b7160e01b600052604160045260246000fd5b61085c80620004f26000396000f3fe60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106c8565b610138565b61005b6100933660046106e2565b61017a565b3480156100a457600080fd5b506100ad6101ff565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106c8565b610265565b3480156100f557600080fd5b506100ad61037e565b6101066103fa565b6101366101317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104a1565b565b6000805160206107e0833981519152546001600160a01b0316336001600160a01b0316141561016f5761016a816104c5565b610177565b6101776100fe565b50565b6000805160206107e0833981519152546001600160a01b0316336001600160a01b031614156101f2576101ac836104c5565b6101ec8383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103c492505050565b506101fa565b6101fa6100fe565b505050565b60006102176000805160206107e08339815191525490565b6001600160a01b0316336001600160a01b0316141561025a577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b9050610262565b6102626100fe565b90565b6000805160206107e0833981519152546001600160a01b0316336001600160a01b0316141561016f576001600160a01b03811661030f5760405162461bcd60e51b815260206004820152603a60248201527f5472616e73706172656e745570677261646561626c6550726f78793a206e657760448201527f2061646d696e20697320746865207a65726f206164647265737300000000000060648201526084015b60405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103466000805160206107e08339815191525490565b604080516001600160a01b03928316815291841660208301520160405180910390a161016a816000805160206107e083398151915255565b60006103966000805160206107e08339815191525490565b6001600160a01b0316336001600160a01b0316141561025a576000805160206107e083398151915254610253565b60606103e9838360405180606001604052806027815260200161080060279139610505565b9392505050565b803b15155b919050565b6000805160206107e0833981519152546001600160a01b0316336001600160a01b0316141561049c5760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a401610306565b610136565b3660008037600080366000845af43d6000803e8080156104c0573d6000f35b3d6000fd5b6104ce816105e0565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060610510846103f0565b61056b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610306565b600080856001600160a01b0316856040516105869190610760565b600060405180830381855af49150503d80600081146105c1576040519150601f19603f3d011682016040523d82523d6000602084013e6105c6565b606091505b50915091506105d6828286610678565b9695505050505050565b6105e9816103f0565b6106545760405162461bcd60e51b815260206004820152603660248201527f5570677261646561626c6550726f78793a206e657720696d706c656d656e74616044820152751d1a5bdb881a5cc81b9bdd08184818dbdb9d1c9858dd60521b6064820152608401610306565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b606083156106875750816103e9565b8251156106975782518084602001fd5b8160405162461bcd60e51b8152600401610306919061077c565b80356001600160a01b03811681146103f557600080fd5b6000602082840312156106d9578081fd5b6103e9826106b1565b6000806000604084860312156106f6578182fd5b6106ff846106b1565b9250602084013567ffffffffffffffff8082111561071b578384fd5b818601915086601f83011261072e578384fd5b81358181111561073c578485fd5b87602082850101111561074d578485fd5b6020830194508093505050509250925092565b600082516107728184602087016107af565b9190910192915050565b600060208252825180602084015261079b8160408501602087016107af565b601f01601f19169190910160400192915050565b60005b838110156107ca5781810151838201526020016107b2565b838111156107d9576000848401525b5050505056feb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220256d71a3bbf412c66e92f2feda363c4e126c868e314b821fa08c780ad30dde6664736f6c63430008020033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65640000000000000000000000005184b4aad937c33330b57c09b9f797761ac6d719000000000000000000000000cb6e4b67f2cac15c284ab49b6a4a671cdfe66711000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002c423fb4bd300000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000e840b73e5287865eec17d250bfb1536704b43b21000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104592a158490a9228070e0a8e5343b499e125d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000c7d713b49da000000000000000000000000000000000000000000000000000000000000000000156d5553442f465241582046656564657220506f6f6c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000b66506d5553442f4652415800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000002791bca1f2de4661ed88a30c99a7a9449aa841740000000000000000000000008f3cf7ad23cd3cadbd9735aff958023239c6a063000000000000000000000000c2132d05d31c914a87c6611c10748aeb04b58e8f00000000000000000000000000000000000000000000000000000000

Deployed ByteCode Sourcemap

19253:220:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2872:11;:9;:11::i;:::-;19253:220;;2640:11;:9;:11::i;17019:119::-;;;;;;;;;;-1:-1:-1;17019:119:0;;;;;:::i;:::-;;:::i;17523:219::-;;;;;;:::i;:::-;;:::i;16253:131::-;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;1556:32:1;;;1538:51;;1526:2;1511:18;16253:131:0;;;;;;;16598:254;;;;;;;;;;-1:-1:-1;16598:254:0;;;;;:::i;:::-;;:::i;15687:95::-;;;;;;;;;;;;;:::i;2276:113::-;2325:17;:15;:17::i;:::-;2353:28;2363:17;12813:66;13190:11;;13167:45;2363:17;2353:9;:28::i;:::-;2276:113::o;17019:119::-;-1:-1:-1;;;;;;;;;;;18006:11:0;-1:-1:-1;;;;;15131:22:0;:10;-1:-1:-1;;;;;15131:22:0;;15127:100;;;17101:29:::1;17112:17;17101:10;:29::i;:::-;15127:100:::0;;;15204:11;:9;:11::i;:::-;17019:119;:::o;17523:219::-;-1:-1:-1;;;;;;;;;;;18006:11:0;-1:-1:-1;;;;;15131:22:0;:10;-1:-1:-1;;;;;15131:22:0;;15127:100;;;17641:29:::1;17652:17;17641:10;:29::i;:::-;17681:53;17710:17;17729:4;;17681:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;17681:28:0::1;::::0;-1:-1:-1;;;17681:53:0:i:1;:::-;;15127:100:::0;;;15204:11;:9;:11::i;:::-;17523:219;;;:::o;16253:131::-;16305:23;15145:8;-1:-1:-1;;;;;;;;;;;18006:11:0;;17984:44;15145:8;-1:-1:-1;;;;;15131:22:0;:10;-1:-1:-1;;;;;15131:22:0;;15127:100;;;12813:66;13190:11;16359:17:::1;16341:35;;15127:100:::0;;;15204:11;:9;:11::i;:::-;16253:131;:::o;16598:254::-;-1:-1:-1;;;;;;;;;;;18006:11:0;-1:-1:-1;;;;;15131:22:0;:10;-1:-1:-1;;;;;15131:22:0;;15127:100;;;-1:-1:-1;;;;;16681:22:0;::::1;16673:93;;;::::0;-1:-1:-1;;;16673:93:0;;2499:2:1;16673:93:0::1;::::0;::::1;2481:21:1::0;2538:2;2518:18;;;2511:30;2577:34;2557:18;;;2550:62;2648:28;2628:18;;;2621:56;2694:19;;16673:93:0::1;;;;;;;;;16782:32;16795:8;-1:-1:-1::0;;;;;;;;;;;18006:11:0;;17984:44;16795:8:::1;16782:32;::::0;;-1:-1:-1;;;;;1830:15:1;;;1812:34;;1882:15;;;1877:2;1862:18;;1855:43;1747:18;16782:32:0::1;;;;;;;16825:19;16835:8;-1:-1:-1::0;;;;;;;;;;;18298:22:0;18283:48;15687:95;15730:14;15145:8;-1:-1:-1;;;;;;;;;;;18006:11:0;;17984:44;15145:8;-1:-1:-1;;;;;15131:22:0;:10;-1:-1:-1;;;;;15131:22:0;;15127:100;;;-1:-1:-1;;;;;;;;;;;18006:11:0;15766:8:::1;17984:44:::0;9605:200;9688:12;9720:77;9741:6;9749:4;9720:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;9713:84;9605:200;-1:-1:-1;;;9605:200:0:o;3920:422::-;4287:20;;4326:8;;3920:422;;;;:::o;18464:207::-;-1:-1:-1;;;;;;;;;;;18006:11:0;-1:-1:-1;;;;;18536:22:0;:10;-1:-1:-1;;;;;18536:22:0;;;18528:101;;;;-1:-1:-1;;;18528:101:0;;3756:2:1;18528:101:0;;;3738:21:1;3795:2;3775:18;;;3768:30;3834:34;3814:18;;;3807:62;3905:34;3885:18;;;3878:62;-1:-1:-1;;;3956:19:1;;;3949:33;3999:19;;18528:101:0;3728:296:1;18528:101:0;18640:23;2276:113;869:915;1269:14;1266:1;1263;1250:34;1487:1;1484;1468:14;1465:1;1449:14;1442:5;1429:60;1566:16;1563:1;1560;1545:38;1606:6;1675:38;;;;1747:16;1744:1;1737:27;1675:38;1694:16;1691:1;1684:27;13345:163;13420:37;13439:17;13420:18;:37::i;:::-;13473:27;;-1:-1:-1;;;;;13473:27:0;;;;;;;;13345:163;:::o;9999:423::-;10110:12;10143:18;10154:6;10143:10;:18::i;:::-;10135:69;;;;-1:-1:-1;;;10135:69:0;;3349:2:1;10135:69:0;;;3331:21:1;3388:2;3368:18;;;3361:30;3427:34;3407:18;;;3400:62;-1:-1:-1;;;3478:18:1;;;3471:36;3524:19;;10135:69:0;3321:228:1;10135:69:0;10278:12;10292:23;10319:6;-1:-1:-1;;;;;10319:19:0;10339:4;10319:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10277:67;;;;10362:52;10380:7;10389:10;10401:12;10362:17;:52::i;:::-;10355:59;9999:423;-1:-1:-1;;;;;;9999:423:0:o;13604:369::-;13686:37;13705:17;13686:18;:37::i;:::-;13678:104;;;;-1:-1:-1;;;13678:104:0;;2926:2:1;13678:104:0;;;2908:21:1;2965:2;2945:18;;;2938:30;3004:34;2984:18;;;2977:62;-1:-1:-1;;;3055:18:1;;;3048:52;3117:19;;13678:104:0;2898:244:1;13678:104:0;12813:66;13924:31;13909:57::o;10430:742::-;10545:12;10574:7;10570:595;;;-1:-1:-1;10605:10:0;10598:17;;10570:595;10719:17;;:21;10715:439;;10982:10;10976:17;11043:15;11030:10;11026:2;11022:19;11015:44;10930:148;11125:12;11118:20;;-1:-1:-1;;;11118:20:0;;;;;;;;:::i;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:2;;177:1;174;167:12;192:196;;304:2;292:9;283:7;279:23;275:32;272:2;;;325:6;317;310:22;272:2;353:29;372:9;353:29;:::i;393:715::-;;;;541:2;529:9;520:7;516:23;512:32;509:2;;;562:6;554;547:22;509:2;590:29;609:9;590:29;:::i;:::-;580:39;;670:2;659:9;655:18;642:32;693:18;734:2;726:6;723:14;720:2;;;755:6;747;740:22;720:2;798:6;787:9;783:22;773:32;;843:7;836:4;832:2;828:13;824:27;814:2;;870:6;862;855:22;814:2;915;902:16;941:2;933:6;930:14;927:2;;;962:6;954;947:22;927:2;1012:7;1007:2;998:6;994:2;990:15;986:24;983:37;980:2;;;1038:6;1030;1023:22;980:2;1074;1070;1066:11;1056:21;;1096:6;1086:16;;;;;499:609;;;;;:::o;1113:274::-;;1280:6;1274:13;1296:53;1342:6;1337:3;1330:4;1322:6;1318:17;1296:53;:::i;:::-;1365:16;;;;;1250:137;-1:-1:-1;;1250:137:1:o;1909:383::-;;2058:2;2047:9;2040:21;2090:6;2084:13;2133:6;2128:2;2117:9;2113:18;2106:34;2149:66;2208:6;2203:2;2192:9;2188:18;2183:2;2175:6;2171:15;2149:66;:::i;:::-;2276:2;2255:15;-1:-1:-1;;2251:29:1;2236:45;;;;2283:2;2232:54;;2030:262;-1:-1:-1;;2030:262:1:o;4029:258::-;4101:1;4111:113;4125:6;4122:1;4119:13;4111:113;;;4201:11;;;4195:18;4182:11;;;4175:39;4147:2;4140:10;4111:113;;;4242:6;4239:1;4236:13;4233:2;;;4277:1;4268:6;4263:3;4259:16;4252:27;4233:2;;4082:205;;;:::o

Swarm Source

ipfs://256d71a3bbf412c66e92f2feda363c4e126c868e314b821fa08c780ad30dde66
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.