Contract 0x670076F14fb7Bc9735Af1BC9a1D1ad5266f54FA0 1

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x6a8804e5b1bec14c24c58169aed6623936c94405d00c74ec0ef6294fcb5d2a45Mint111395832021-09-22 15:14:539 hrs 33 mins ago0xf1f61b791b7828b94751c2a63832da75db96e06f IN  0x670076f14fb7bc9735af1bc9a1d1ad5266f54fa00 BNB0.000371685
0x6217cacd8df243e74608fa1417cdabbb663e1d99a37b04b7d1fe59068bb9cc15Mint111098232021-09-21 14:14:391 day 10 hrs ago0xf1f61b791b7828b94751c2a63832da75db96e06f IN  0x670076f14fb7bc9735af1bc9a1d1ad5266f54fa00 BNB0.000371685
0x8500c4b0ed265f8807db1568875b54e6a5988b70b4da5f0eaa03ff055cf320d7Redeem110929792021-09-21 0:10:232 days 37 mins ago0xea5a576c1212f3f04032b6cd268491b76dec42ab IN  0x670076f14fb7bc9735af1bc9a1d1ad5266f54fa00 BNB0.000952325
0x7f1cafaea5f4947e930237adc3b7cd901ad5497df9c2b90d60ff28d903488c22Mint110799402021-09-20 13:17:132 days 11 hrs ago0xf1f61b791b7828b94751c2a63832da75db96e06f IN  0x670076f14fb7bc9735af1bc9a1d1ad5266f54fa00 BNB0.000371685
0xceeab6401d8657aa1091805dfbfed6b351bf6e9d968bf545b9c5a08d9edea26bMint110793162021-09-20 12:45:002 days 12 hrs ago0x4334703b0b74e2045926f82f4158a103fce1df4f IN  0x670076f14fb7bc9735af1bc9a1d1ad5266f54fa00 BNB0.000371745
0x55224d62ee08c2727beba8b5be013dbdbb5d6acaf49a6ffb0304a6468a52f253Mint110779712021-09-20 11:37:012 days 13 hrs ago0xf03e063f62fd228cd25c026cfff7f032d7b75aab IN  0x670076f14fb7bc9735af1bc9a1d1ad5266f54fa00 BNB0.000446625
0xfe8f12c686fcb25bb32fdace32ff2bd2a34e30d858c6b63a2c087264cea54685Redeem109594262021-09-16 8:26:026 days 16 hrs ago0x232bb0aca84ebb9e4e9d218081a01562e67cee70 IN  0x670076f14fb7bc9735af1bc9a1d1ad5266f54fa00 BNB0.003270525
0x80198ccf91762c10afd1d22b7f02279afebf75f60957d749541c84fb671e1579Mint108945742021-09-14 2:13:238 days 22 hrs ago0x4334703b0b74e2045926f82f4158a103fce1df4f IN  0x670076f14fb7bc9735af1bc9a1d1ad5266f54fa00 BNB0.000371625
0x6a4fcc8aa9d76a235bcc771227fedf300db499501d627ef92898084c04cbbbb6Mint108804982021-09-13 14:29:249 days 10 hrs ago0x4334703b0b74e2045926f82f4158a103fce1df4f IN  0x670076f14fb7bc9735af1bc9a1d1ad5266f54fa00 BNB0.000371745
0x206c3a6dbb3ed82c8e59805634afe839ee2a29b26c141ba4cbe76f51c7236a54Redeem108511412021-09-12 13:57:4110 days 10 hrs ago0xd84caafeff40299310d04344a280d246ca7f80aa IN  0x670076f14fb7bc9735af1bc9a1d1ad5266f54fa00 BNB0.00125095
0xd970303c326fdf1faf8616b35e2cc627d6ded09d578ac81aa60b2be2933ee5feRedeem107111552021-09-07 16:05:2715 days 8 hrs ago0x79812b66b8acaae4844637ac89eb71c6685793f8 IN  0x670076f14fb7bc9735af1bc9a1d1ad5266f54fa00 BNB0.000877305
0xf908eb96f03fdc146cc9909abe8a2c95610fbd2c22e73bdb2bca4800d7cecf6fMint106924332021-09-07 0:08:1216 days 39 mins ago0xc38892281260c0d0bcae859d72582f23e8cf9389 IN  0x670076f14fb7bc9735af1bc9a1d1ad5266f54fa00 BNB0.000446685
0x58fe0488646c5a6da7ac48238bd1a2c60d70daa8ded6159d63d067de9778f544Redeem105844912021-09-03 5:38:2819 days 19 hrs ago0xdc58500b27532ef37b1539d97a858322ceeef3d4 IN  0x670076f14fb7bc9735af1bc9a1d1ad5266f54fa00 BNB0.000877265
0xa8161c90013d8bdc9c2be60d0ef2cca7a21e0af87a1cb8d702c49e60b7504924Redeem105791932021-09-03 1:08:0319 days 23 hrs ago0xdc58500b27532ef37b1539d97a858322ceeef3d4 IN  0x670076f14fb7bc9735af1bc9a1d1ad5266f54fa00 BNB0.000952385
0x0d061f78749cc0d367b03b2ca36e0899cd6988c1e89d6b9cdf7b5c9f99cd6f96Redeem105787192021-09-03 0:44:2020 days 3 mins ago0x33a888a62f01ddb2419a160e008aeaef53b379e4 IN  0x670076f14fb7bc9735af1bc9a1d1ad5266f54fa00 BNB0.002026305
0xf92d717be44e9fee650fc5205cb8f5517607d96cd718f1772d56d18e43a8ac50Redeem105720652021-09-02 19:09:4620 days 5 hrs ago0xf85385347f56819c316939434d427d0c9537eddc IN  0x670076f14fb7bc9735af1bc9a1d1ad5266f54fa00 BNB0.00175273
0xd1335d401e2d504e7c2046a739f8c9573c91ec9423efb0485c4939e593c98fb9Mint105429552021-09-01 18:39:0221 days 6 hrs ago0xd84caafeff40299310d04344a280d246ca7f80aa IN  0x670076f14fb7bc9735af1bc9a1d1ad5266f54fa00 BNB0.000446745
0x6d8bfd8a2e4fbdf961a540bcc2b3a203e5b79ce2e0db7107e75b10303b4f42feRedeem105394882021-09-01 15:43:3821 days 9 hrs ago0x232bb0aca84ebb9e4e9d218081a01562e67cee70 IN  0x670076f14fb7bc9735af1bc9a1d1ad5266f54fa00 BNB0.003345485
0xa1ea404ac91acd1ba741bf005288aa91fde8fc3a49e47142bbcb94b446013202Redeem105385422021-09-01 14:55:4821 days 9 hrs ago0x232bb0aca84ebb9e4e9d218081a01562e67cee70 IN  0x670076f14fb7bc9735af1bc9a1d1ad5266f54fa00 BNB0.003270485
0x3e8caa426b66aeb0fa2dc9edb348a84f949426e677206cd650cb30280d1f9e88Mint105384592021-09-01 14:51:3921 days 9 hrs ago0x232bb0aca84ebb9e4e9d218081a01562e67cee70 IN  0x670076f14fb7bc9735af1bc9a1d1ad5266f54fa00 BNB0.000446625
0x445f82ba98536818e22e329a8a8101bebce34de0006782b266f97a2c908032feRedeem105383442021-09-01 14:45:5421 days 10 hrs ago0x232bb0aca84ebb9e4e9d218081a01562e67cee70 IN  0x670076f14fb7bc9735af1bc9a1d1ad5266f54fa00 BNB0.003270485
0xbd3013fa0bcb1065febe7326f8b516be775e7617b3c514b3d4dd080057e6d814Redeem105382852021-09-01 14:42:5721 days 10 hrs ago0x232bb0aca84ebb9e4e9d218081a01562e67cee70 IN  0x670076f14fb7bc9735af1bc9a1d1ad5266f54fa00 BNB0.003345485
0xcaa1199d778544bffab23cd4ae894e224d428ee967600a6946027dd94948564fRedeem105369322021-09-01 13:35:0721 days 11 hrs ago0x232bb0aca84ebb9e4e9d218081a01562e67cee70 IN  0x670076f14fb7bc9735af1bc9a1d1ad5266f54fa00 BNB0.003270485
0x4cccbb721a664b4f54b5638c747cb3fe8ca9d1e41ad7f8863cab990080044a4dRedeem105314272021-09-01 8:52:3721 days 15 hrs ago0xf85385347f56819c316939434d427d0c9537eddc IN  0x670076f14fb7bc9735af1bc9a1d1ad5266f54fa00 BNB0.00182773
0x4d82ad192ecaca7135b2eec4994c7244a3ddeac4e7b9f004cf15c815f9ba212cMint105312362021-09-01 8:43:0421 days 16 hrs ago0x79812b66b8acaae4844637ac89eb71c6685793f8 IN  0x670076f14fb7bc9735af1bc9a1d1ad5266f54fa00 BNB0.000446685
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
KErc20Delegator

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 3 : KErc20Delegator.sol
pragma solidity ^0.5.16;

import "./KTokenInterfaces.sol";



/**
Copyright 2020 Compound Labs, Inc.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

/**
* Original work from Compound: https://github.com/compound-finance/compound-protocol/blob/master/contracts/CErc20Delegator.sol
* Modified to work in the Kine system.
* Main modifications:
*   1. removed Comp token related logics.
*   2. removed interest rate model related logics.
*   3. removed borrow logics, user can only borrow Kine MCD (see KMCD).
*   4. removed error code propagation mechanism, using revert to fail fast and loudly.
*/

/**
 * @title Kine's KErc20Delegator Contract
 * @notice KTokens which wrap an EIP-20 underlying and delegate to an implementation
 * @author Kine
 */
contract KErc20Delegator is KTokenInterface, KErc20Interface, KDelegatorInterface {
    /**
     * @notice Construct a new money market
     * @param underlying_ The address of the underlying asset
     * @param controller_ The address of the Controller
     * @param name_ ERC-20 name of this token
     * @param symbol_ ERC-20 symbol of this token
     * @param decimals_ ERC-20 decimal precision of this token
     * @param admin_ Address of the administrator of this token
     * @param implementation_ The address of the implementation the contract delegates to
     * @param becomeImplementationData The encoded args for becomeImplementation
     */
    constructor(address underlying_,
                KineControllerInterface controller_,
                string memory name_,
                string memory symbol_,
                uint8 decimals_,
                address payable admin_,
                address implementation_,
                bytes memory becomeImplementationData) public {
        // Creator of the contract is admin during initialization
        admin = msg.sender;
        initialized = false;

        // First delegate gets to initialize the delegator (i.e. storage contract)
        delegateTo(implementation_, abi.encodeWithSignature("initialize(address,address,string,string,uint8)",
                                                            underlying_,
                                                            controller_,
                                                            name_,
                                                            symbol_,
                                                            decimals_));

        // New implementations always get set via the settor (post-initialize)
        _setImplementation(implementation_, false, becomeImplementationData);

        // Set the proper admin now that initialization is done
        admin = admin_;
    }

    /**
     * @notice Called by the admin to update the implementation of the delegator
     * @param implementation_ The address of the new implementation for delegation
     * @param allowResign Flag to indicate whether to call _resignImplementation on the old implementation
     * @param becomeImplementationData The encoded bytes data to be passed to _becomeImplementation
     */
    function _setImplementation(address implementation_, bool allowResign, bytes memory becomeImplementationData) public {
        require(msg.sender == admin, "KErc20Delegator::_setImplementation: Caller must be admin");

        if (allowResign) {
            delegateToImplementation(abi.encodeWithSignature("_resignImplementation()"));
        }

        address oldImplementation = implementation;
        implementation = implementation_;

        delegateToImplementation(abi.encodeWithSignature("_becomeImplementation(bytes)", becomeImplementationData));

        emit NewImplementation(oldImplementation, implementation);
    }

    /**
     * @notice Sender supplies assets into the market and receives kTokens in exchange
     * @param mintAmount The amount of the underlying asset to supply
     * @return the actual mint amount.
     */
    function mint(uint mintAmount) external returns (uint) {
        bytes memory data = delegateToImplementation(abi.encodeWithSignature("mint(uint256)", mintAmount));
        return abi.decode(data, (uint));
    }

    /**
     * @notice Sender redeems kTokens in exchange for the underlying asset
     * @param redeemTokens The number of kTokens to redeem into underlying
     */
    function redeem(uint redeemTokens) external {
        delegateToImplementation(abi.encodeWithSignature("redeem(uint256)", redeemTokens));
    }

    /**
     * @notice Transfer `amount` tokens from `msg.sender` to `dst`
     * @param dst The address of the destination account
     * @param amount The number of tokens to transfer
     * @return Whether or not the transfer succeeded
     */
    function transfer(address dst, uint amount) external returns (bool) {
        bytes memory data = delegateToImplementation(abi.encodeWithSignature("transfer(address,uint256)", dst, amount));
        return abi.decode(data, (bool));
    }

    /**
     * @notice Transfer `amount` tokens from `src` to `dst`
     * @param src The address of the source account
     * @param dst The address of the destination account
     * @param amount The number of tokens to transfer
     * @return Whether or not the transfer succeeded
     */
    function transferFrom(address src, address dst, uint256 amount) external returns (bool) {
        bytes memory data = delegateToImplementation(abi.encodeWithSignature("transferFrom(address,address,uint256)", src, dst, amount));
        return abi.decode(data, (bool));
    }

    /**
     * @notice Approve `spender` to transfer up to `amount` from `src`
     * @dev This will overwrite the approval amount for `spender`
     *  and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)
     * @param spender The address of the account which may transfer tokens
     * @param amount The number of tokens that are approved (-1 means infinite)
     * @return Whether or not the approval succeeded
     */
    function approve(address spender, uint256 amount) external returns (bool) {
        bytes memory data = delegateToImplementation(abi.encodeWithSignature("approve(address,uint256)", spender, amount));
        return abi.decode(data, (bool));
    }

    /**
     * @notice Get the current allowance from `owner` for `spender`
     * @param owner The address of the account which owns the tokens to be spent
     * @param spender The address of the account which may transfer tokens
     * @return The number of tokens allowed to be spent (-1 means infinite)
     */
    function allowance(address owner, address spender) external view returns (uint) {
        bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("allowance(address,address)", owner, spender));
        return abi.decode(data, (uint));
    }

    /**
     * @notice Get the token balance of the `owner`
     * @param owner The address of the account to query
     * @return The number of tokens owned by `owner`
     */
    function balanceOf(address owner) external view returns (uint) {
        bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("balanceOf(address)", owner));
        return abi.decode(data, (uint));
    }

    /**
     * @notice Get a snapshot of the account's balances, and the cached exchange rate
     * @dev This is used by controller to more efficiently perform liquidity checks.
     * and for kTokens, there is only token balance, for kMCD, there is only borrow balance
     * @param account Address of the account to snapshot
     * @return (token balance, borrow balance)
     */
    function getAccountSnapshot(address account) external view returns (uint, uint) {
        bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("getAccountSnapshot(address)", account));
        return abi.decode(data, (uint, uint));
    }

    /**
     * @notice Get cash balance of this kToken in the underlying asset
     * @return The quantity of underlying asset owned by this contract
     */
    function getCash() external view returns (uint) {
        bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("getCash()"));
        return abi.decode(data, (uint));
    }

    /**
     * @notice Transfers collateral tokens (this market) to the liquidator.
     * @dev Will fail unless called by another kToken during the process of liquidation.
     *  Its absolutely critical to use msg.sender as the borrowed kToken and not a parameter.
     * @param liquidator The account receiving seized collateral
     * @param borrower The account having collateral seized
     * @param seizeTokens The number of kTokens to seize
     */
    function seize(address liquidator, address borrower, uint seizeTokens) external {
        delegateToImplementation(abi.encodeWithSignature("seize(address,address,uint256)", liquidator, borrower, seizeTokens));
    }

    /*** Admin Functions ***/

    /**
      * @notice Begins transfer of admin rights. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.
      * @dev Admin function to begin change of admin. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.
      * @param newPendingAdmin New pending admin.
      */
    function _setPendingAdmin(address payable newPendingAdmin) external {
        delegateToImplementation(abi.encodeWithSignature("_setPendingAdmin(address)", newPendingAdmin));
    }

    /**
      * @notice Sets a new controller for the market
      * @dev Admin function to set a new controller
      */
    function _setController(KineControllerInterface newController) public {
        delegateToImplementation(abi.encodeWithSignature("_setController(address)", newController));
    }

    /**
      * @notice Accepts transfer of admin rights. msg.sender must be pendingAdmin
      * @dev Admin function for pending admin to accept role and update admin
      */
    function _acceptAdmin() external {
        delegateToImplementation(abi.encodeWithSignature("_acceptAdmin()"));
    }

    /**
     * @notice Internal method to delegate execution to another contract
     * @dev It returns to the external caller whatever the implementation returns or forwards reverts
     * @param callee The contract to delegatecall
     * @param data The raw data to delegatecall
     * @return The returned bytes from the delegatecall
     */
    function delegateTo(address callee, bytes memory data) internal returns (bytes memory) {
        (bool success, bytes memory returnData) = callee.delegatecall(data);
        assembly {
            if eq(success, 0) {
                revert(add(returnData, 0x20), returndatasize)
            }
        }
        return returnData;
    }

    /**
     * @notice Delegates execution to the implementation contract
     * @dev It returns to the external caller whatever the implementation returns or forwards reverts
     * @param data The raw data to delegatecall
     * @return The returned bytes from the delegatecall
     */
    function delegateToImplementation(bytes memory data) public returns (bytes memory) {
        return delegateTo(implementation, data);
    }

    /**
     * @notice Delegates execution to an implementation contract
     * @dev It returns to the external caller whatever the implementation returns or forwards reverts
     *  There are an additional 2 prefix uints from the wrapper returndata, which we ignore since we make an extra hop.
     * @param data The raw data to delegatecall
     * @return The returned bytes from the delegatecall
     */
    function delegateToViewImplementation(bytes memory data) public view returns (bytes memory) {
        (bool success, bytes memory returnData) = address(this).staticcall(abi.encodeWithSignature("delegateToImplementation(bytes)", data));
        assembly {
            if eq(success, 0) {
                revert(add(returnData, 0x20), returndatasize)
            }
        }
        return abi.decode(returnData, (bytes));
    }

    /**
     * @notice Delegates execution to an implementation contract
     * @dev It returns to the external caller whatever the implementation returns or forwards reverts
     */
    function () external payable {
        require(msg.value == 0,"KErc20Delegator:fallback: cannot send value to fallback");

        // delegate all other functions to current implementation
        (bool success, ) = implementation.delegatecall(msg.data);

        assembly {
            let free_mem_ptr := mload(0x40)
            returndatacopy(free_mem_ptr, 0, returndatasize)

            switch success
            case 0 { revert(free_mem_ptr, returndatasize) }
            default { return(free_mem_ptr, returndatasize) }
        }
    }
}

File 2 of 3 : KTokenInterfaces.sol
pragma solidity ^0.5.16;

import "./KineControllerInterface.sol";

contract KTokenStorage {
    /**
     * @dev Guard variable for re-entrancy checks
     */
    bool internal _notEntered;

    /**
    * @notice flag that kToken has been initialized;
    */
    bool public initialized;

    /**
     * @notice EIP-20 token name for this token
     */
    string public name;

    /**
     * @notice EIP-20 token symbol for this token
     */
    string public symbol;

    /**
     * @notice EIP-20 token decimals for this token
     */
    uint8 public decimals;

    /**
     * @notice Administrator for this contract
     */
    address payable public admin;

    /**
     * @notice Pending administrator for this contract
     */
    address payable public pendingAdmin;

    /**
     * @notice Contract which oversees inter-kToken operations
     */
    KineControllerInterface public controller;

    /**
     * @notice Total number of tokens in circulation
     */
    uint public totalSupply;

    /**
     * @notice Official record of token balances for each account
     */
    mapping (address => uint) internal accountTokens;

    /**
     * @notice Approved token transfer amounts on behalf of others
     */
    mapping (address => mapping (address => uint)) internal transferAllowances;

}

contract KTokenInterface is KTokenStorage {
    /**
     * @notice Indicator that this is a KToken contract (for inspection)
     */
    bool public constant isKToken = true;


    /*** Market Events ***/

    /**
     * @notice Event emitted when tokens are minted
     */
    event Mint(address minter, uint mintAmount, uint mintTokens);

    /**
     * @notice Event emitted when tokens are redeemed
     */
    event Redeem(address redeemer, uint redeemTokens);


    /*** Admin Events ***/

    /**
     * @notice Event emitted when pendingAdmin is changed
     */
    event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin);

    /**
     * @notice Event emitted when pendingAdmin is accepted, which means admin is updated
     */
    event NewAdmin(address oldAdmin, address newAdmin);

    /**
     * @notice Event emitted when controller is changed
     */
    event NewController(KineControllerInterface oldController, KineControllerInterface newController);

    /**
     * @notice EIP20 Transfer event
     */
    event Transfer(address indexed from, address indexed to, uint amount);

    /**
     * @notice EIP20 Approval event
     */
    event Approval(address indexed owner, address indexed spender, uint amount);


    /*** User Interface ***/

    function transfer(address dst, uint amount) external returns (bool);
    function transferFrom(address src, address dst, uint amount) external returns (bool);
    function approve(address spender, uint amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function getAccountSnapshot(address account) external view returns (uint, uint);
    function getCash() external view returns (uint);
    function seize(address liquidator, address borrower, uint seizeTokens) external;


    /*** Admin Functions ***/

    function _setPendingAdmin(address payable newPendingAdmin) external;
    function _acceptAdmin() external;
    function _setController(KineControllerInterface newController) public;
}

contract KErc20Storage {
    /**
     * @notice Underlying asset for this KToken
     */
    address public underlying;
}

contract KErc20Interface is KErc20Storage {

    /*** User Interface ***/

    function mint(uint mintAmount) external returns (uint);
    function redeem(uint redeemTokens) external;

}

contract KDelegationStorage {
    /**
     * @notice Implementation address for this contract
     */
    address public implementation;
}

contract KDelegatorInterface is KDelegationStorage {
    /**
     * @notice Emitted when implementation is changed
     */
    event NewImplementation(address oldImplementation, address newImplementation);

    /**
     * @notice Called by the admin to update the implementation of the delegator
     * @param implementation_ The address of the new implementation for delegation
     * @param allowResign Flag to indicate whether to call _resignImplementation on the old implementation
     * @param becomeImplementationData The encoded bytes data to be passed to _becomeImplementation
     */
    function _setImplementation(address implementation_, bool allowResign, bytes memory becomeImplementationData) public;
}

contract KDelegateInterface is KDelegationStorage {
    /**
     * @notice Called by the delegator on a delegate to initialize it for duty
     * @dev Should revert if any issues arise which make it unfit for delegation
     * @param data The encoded bytes data for any initialization
     */
    function _becomeImplementation(bytes memory data) public;

    /**
     * @notice Called by the delegator on a delegate to forfeit its responsibility
     */
    function _resignImplementation() public;
}

File 3 of 3 : KineControllerInterface.sol
pragma solidity ^0.5.16;

/**
Copyright 2020 Compound Labs, Inc.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

/**
* Original work from Compound: https://github.com/compound-finance/compound-protocol/blob/master/contracts/ComptrollerInterface.sol
* Modified to work in the Kine system.
* Main modifications:
*   1. removed Comp token related logics.
*   2. removed interest rate model related logics.
*   3. removed error code propagation mechanism to fail fast and loudly
*/

contract KineControllerInterface {
    /// @notice Indicator that this is a Controller contract (for inspection)
    bool public constant isController = true;

    /// @notice oracle getter function
    function getOracle() external view returns (address);

    /*** Assets You Are In ***/

    function enterMarkets(address[] calldata kTokens) external;

    function exitMarket(address kToken) external;

    /*** Policy Hooks ***/

    function mintAllowed(address kToken, address minter, uint mintAmount) external returns (bool, string memory);

    function mintVerify(address kToken, address minter, uint mintAmount, uint mintTokens) external;

    function redeemAllowed(address kToken, address redeemer, uint redeemTokens) external returns (bool, string memory);

    function redeemVerify(address kToken, address redeemer, uint redeemTokens) external;

    function borrowAllowed(address kToken, address borrower, uint borrowAmount) external returns (bool, string memory);

    function borrowVerify(address kToken, address borrower, uint borrowAmount) external;

    function repayBorrowAllowed(
        address kToken,
        address payer,
        address borrower,
        uint repayAmount) external returns (bool, string memory);

    function repayBorrowVerify(
        address kToken,
        address payer,
        address borrower,
        uint repayAmount) external;

    function liquidateBorrowAllowed(
        address kTokenBorrowed,
        address kTokenCollateral,
        address liquidator,
        address borrower,
        uint repayAmount) external returns (bool, string memory);

    function liquidateBorrowVerify(
        address kTokenBorrowed,
        address kTokenCollateral,
        address liquidator,
        address borrower,
        uint repayAmount,
        uint seizeTokens) external;

    function seizeAllowed(
        address kTokenCollateral,
        address kTokenBorrowed,
        address liquidator,
        address borrower,
        uint seizeTokens) external returns (bool, string memory);

    function seizeVerify(
        address kTokenCollateral,
        address kTokenBorrowed,
        address liquidator,
        address borrower,
        uint seizeTokens) external;

    function transferAllowed(address kToken, address src, address dst, uint transferTokens) external returns (bool, string memory);

    function transferVerify(address kToken, address src, address dst, uint transferTokens) external;

    /*** Liquidity/Liquidation Calculations ***/

    function liquidateCalculateSeizeTokens(
        address target,
        address kTokenBorrowed,
        address kTokenCollateral,
        uint repayAmount) external view returns (uint);
}

Settings
{
  "remappings": [],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "evmVersion": "istanbul",
  "libraries": {},
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"underlying_","type":"address"},{"internalType":"contract KineControllerInterface","name":"controller_","type":"address"},{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"},{"internalType":"address payable","name":"admin_","type":"address"},{"internalType":"address","name":"implementation_","type":"address"},{"internalType":"bytes","name":"becomeImplementationData","type":"bytes"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"mintAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintTokens","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"NewAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract KineControllerInterface","name":"oldController","type":"address"},{"indexed":false,"internalType":"contract KineControllerInterface","name":"newController","type":"address"}],"name":"NewController","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldImplementation","type":"address"},{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"NewImplementation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldPendingAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newPendingAdmin","type":"address"}],"name":"NewPendingAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"redeemer","type":"address"},{"indexed":false,"internalType":"uint256","name":"redeemTokens","type":"uint256"}],"name":"Redeem","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":false,"inputs":[],"name":"_acceptAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract KineControllerInterface","name":"newController","type":"address"}],"name":"_setController","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"implementation_","type":"address"},{"internalType":"bool","name":"allowResign","type":"bool"},{"internalType":"bytes","name":"becomeImplementationData","type":"bytes"}],"name":"_setImplementation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"newPendingAdmin","type":"address"}],"name":"_setPendingAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"controller","outputs":[{"internalType":"contract KineControllerInterface","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"delegateToImplementation","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"delegateToViewImplementation","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountSnapshot","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCash","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isKToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"mintAmount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingAdmin","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"redeemTokens","type":"uint256"}],"name":"redeem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"liquidator","type":"address"},{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"seizeTokens","type":"uint256"}],"name":"seize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"underlying","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b5060405162001b3238038062001b3283398181016040526101008110156200003857600080fd5b815160208301516040808501805191519395929483019291846401000000008211156200006457600080fd5b9083019060208201858111156200007a57600080fd5b82516401000000008111828201881017156200009557600080fd5b82525081516020918201929091019080838360005b83811015620000c4578181015183820152602001620000aa565b50505050905090810190601f168015620000f25780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011657600080fd5b9083019060208201858111156200012c57600080fd5b82516401000000008111828201881017156200014757600080fd5b82525081516020918201929091019080838360005b83811015620001765781810151838201526020016200015c565b50505050905090810190601f168015620001a45780820380516001836020036101000a031916815260200191505b50604081815260208301519083015160608401516080909401805192969195919284640100000000821115620001d957600080fd5b908301906020820185811115620001ef57600080fd5b82516401000000008111828201881017156200020a57600080fd5b82525081516020918201929091019080838360005b83811015620002395781810151838201526020016200021f565b50505050905090810190601f168015620002675780820380516001836020036101000a031916815260200191505b50604081905260038054610100600160a81b03191633610100021790556000805461ff00191681556001600160a01b038d811660248401908152908d16604484015260ff8a1660a484015260a0606484019081528c5160c48501528c51620003de97508996508f95508e948e948e948e9490939092608481019260e49091019160208901918190849084905b838110156200030d578181015183820152602001620002f3565b50505050905090810190601f1680156200033b5780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b838110156200037057818101518382015260200162000356565b50505050905090810190601f1680156200039e5780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529190526020810180516001600160e01b03908116638420ce9960e01b179091529098506200042a169650505050505050565b50620003f6826000836001600160e01b03620004f116565b5050600380546001600160a01b0390921661010002610100600160a81b031990921691909117905550620006d29350505050565b606060006060846001600160a01b0316846040518082805190602001908083835b602083106200046c5780518252601f1990920191602091820191016200044b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114620004ce576040519150601f19603f3d011682016040523d82523d6000602084013e620004d3565b606091505b50915091506000821415620004e9573d60208201fd5b949350505050565b60035461010090046001600160a01b03163314620005415760405162461bcd60e51b815260040180806020018281038252603981526020018062001af96039913960400191505060405180910390fd5b811562000583576040805160048152602481019091526020810180516001600160e01b0390811663153ab50560e01b17909152620005819190620006a816565b505b600a80546001600160a01b038581166001600160a01b0319831617909255604051602060248201818152855160448401528551949093169362000659938693909283926064909201919085019080838360005b83811015620005f0578181015183820152602001620005d6565b50505050905090810190601f1680156200061e5780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529190526020810180516001600160e01b03908116630adccee560e31b17909152909350620006a816915050565b50600a54604080516001600160a01b038085168252909216602083015280517fd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a9281900390910190a150505050565b600a54606090620006cc906001600160a01b0316836001600160e01b036200042a16565b92915050565b61141780620006e26000396000f3fe60806040526004361061019c5760003560e01c80636f307dc3116100ec578063b71d1a0c1161008a578063dd62ed3e11610064578063dd62ed3e14610858578063e9c714f214610893578063f77c4791146108a8578063f851a440146108bd5761019c565b8063b71d1a0c146107af578063c37f68e2146107e2578063db006a751461082e5761019c565b806395d89b41116100c657806395d89b41146106f4578063a0712d6814610709578063a9059cbb14610733578063b2a02ff11461076c5761019c565b80636f307dc31461067957806370a082311461068e57806383de424e146106c15761019c565b806326782247116101595780633b1d21a2116101335780633b1d21a2146104d45780634487152f146104e9578063555bcc401461059a5780635c60da1b146106645761019c565b8063267822471461046357806329d9109c14610494578063313ce567146104a95761019c565b806306fdde031461025c5780630933c1ed146102e6578063095ea7b314610397578063158ef93e146103e457806318160ddd146103f957806323b872dd14610420575b34156101d95760405162461bcd60e51b81526004018080602001828103825260378152602001806113736037913960400191505060405180910390fd5b600a546040516000916001600160a01b031690829036908083838082843760405192019450600093509091505080830381855af49150503d806000811461023c576040519150601f19603f3d011682016040523d82523d6000602084013e610241565b606091505b505090506040513d6000823e818015610258573d82f35b3d82fd5b34801561026857600080fd5b506102716108d2565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102ab578181015183820152602001610293565b50505050905090810190601f1680156102d85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102f257600080fd5b506102716004803603602081101561030957600080fd5b810190602081018135600160201b81111561032357600080fd5b82018360208201111561033557600080fd5b803590602001918460018302840111600160201b8311171561035657600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061095f945050505050565b3480156103a357600080fd5b506103d0600480360360408110156103ba57600080fd5b506001600160a01b03813516906020013561097e565b604080519115158252519081900360200190f35b3480156103f057600080fd5b506103d06109f5565b34801561040557600080fd5b5061040e610a03565b60408051918252519081900360200190f35b34801561042c57600080fd5b506103d06004803603606081101561044357600080fd5b506001600160a01b03813581169160208101359091169060400135610a09565b34801561046f57600080fd5b50610478610a89565b604080516001600160a01b039092168252519081900360200190f35b3480156104a057600080fd5b506103d0610a98565b3480156104b557600080fd5b506104be610a9d565b6040805160ff9092168252519081900360200190f35b3480156104e057600080fd5b5061040e610aa6565b3480156104f557600080fd5b506102716004803603602081101561050c57600080fd5b810190602081018135600160201b81111561052657600080fd5b82018360208201111561053857600080fd5b803590602001918460018302840111600160201b8311171561055957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610afd945050505050565b3480156105a657600080fd5b50610662600480360360608110156105bd57600080fd5b6001600160a01b03823516916020810135151591810190606081016040820135600160201b8111156105ee57600080fd5b82018360208201111561060057600080fd5b803590602001918460018302840111600160201b8311171561062157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610d1c945050505050565b005b34801561067057600080fd5b50610478610ebf565b34801561068557600080fd5b50610478610ece565b34801561069a57600080fd5b5061040e600480360360208110156106b157600080fd5b50356001600160a01b0316610edd565b3480156106cd57600080fd5b50610662600480360360208110156106e457600080fd5b50356001600160a01b0316610f4f565b34801561070057600080fd5b50610271610f9f565b34801561071557600080fd5b5061040e6004803603602081101561072c57600080fd5b5035610ff7565b34801561073f57600080fd5b506103d06004803603604081101561075657600080fd5b506001600160a01b03813516906020013561103e565b34801561077857600080fd5b506106626004803603606081101561078f57600080fd5b506001600160a01b03813581169160208101359091169060400135611094565b3480156107bb57600080fd5b50610662600480360360208110156107d257600080fd5b50356001600160a01b03166110f2565b3480156107ee57600080fd5b506108156004803603602081101561080557600080fd5b50356001600160a01b031661113e565b6040805192835260208301919091528051918290030190f35b34801561083a57600080fd5b506106626004803603602081101561085157600080fd5b50356111bd565b34801561086457600080fd5b5061040e6004803603604081101561087b57600080fd5b506001600160a01b03813581169160200135166111fe565b34801561089f57600080fd5b50610662611258565b3480156108b457600080fd5b5061047861128d565b3480156108c957600080fd5b5061047861129c565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156109575780601f1061092c57610100808354040283529160200191610957565b820191906000526020600020905b81548152906001019060200180831161093a57829003601f168201915b505050505081565b600a54606090610978906001600160a01b0316836112b0565b92915050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526000906060906109d49061095f565b90508080602001905160208110156109eb57600080fd5b5051949350505050565b600054610100900460ff1681565b60065481565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052600090606090610a679061095f565b9050808060200190516020811015610a7e57600080fd5b505195945050505050565b6004546001600160a01b031681565b600181565b60035460ff1681565b6040805160048152602481019091526020810180516001600160e01b0316631d8e90d160e11b179052600090606090610ade90610afd565b9050808060200190516020811015610af557600080fd5b505191505090565b606060006060306001600160a01b0316846040516024018080602001828103825283818151815260200191508051906020019080838360005b83811015610b4e578181015183820152602001610b36565b50505050905090810190601f168015610b7b5780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529181526020820180516001600160e01b0316630933c1ed60e01b178152905182519295509350839250908083835b60208310610bd65780518252601f199092019160209182019101610bb7565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114610c36576040519150601f19603f3d011682016040523d82523d6000602084013e610c3b565b606091505b50915091506000821415610c50573d60208201fd5b808060200190516020811015610c6557600080fd5b8101908080516040519392919084600160201b821115610c8457600080fd5b908301906020820185811115610c9957600080fd5b8251600160201b811182820188101715610cb257600080fd5b82525081516020918201929091019080838360005b83811015610cdf578181015183820152602001610cc7565b50505050905090810190601f168015610d0c5780820380516001836020036101000a031916815260200191505b5060405250505092505050919050565b60035461010090046001600160a01b03163314610d6a5760405162461bcd60e51b81526004018080602001828103825260398152602001806113aa6039913960400191505060405180910390fd5b8115610da4576040805160048152602481019091526020810180516001600160e01b031663153ab50560e01b179052610da29061095f565b505b600a80546001600160a01b038581166001600160a01b03198316179092556040516020602482018181528551604484015285519490931693610e70938693909283926064909201919085019080838360005b83811015610e0e578181015183820152602001610df6565b50505050905090810190601f168015610e3b5780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529190526020810180516001600160e01b0316630adccee560e31b179052925061095f915050565b50600a54604080516001600160a01b038085168252909216602083015280517fd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a9281900390910190a150505050565b600a546001600160a01b031681565b6009546001600160a01b031681565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03166370a0823160e01b179052600090606090610f2f90610afd565b9050808060200190516020811015610f4657600080fd5b50519392505050565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03166341ef212760e11b179052610f9b9061095f565b5050565b6002805460408051602060018416156101000260001901909316849004601f810184900484028201840190925281815292918301828280156109575780601f1061092c57610100808354040283529160200191610957565b6040805160248082018490528251808303909101815260449091019091526020810180516001600160e01b031663140e25ad60e31b179052600090606090610f2f9061095f565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526000906060906109d49061095f565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b031663b2a02ff160e01b1790526110ec9061095f565b50505050565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b0316632dc7468360e21b179052610f9b9061095f565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03166361bfb47160e11b179052600090819060609061119290610afd565b90508080602001905160408110156111a957600080fd5b508051602090910151909350915050915091565b6040805160248082018490528251808303909101815260449091019091526020810180516001600160e01b031663db006a7560e01b179052610f9b9061095f565b604080516001600160a01b03808516602483015283166044808301919091528251808303909101815260649091019091526020810180516001600160e01b0316636eb1769f60e11b1790526000906060906109d490610afd565b6040805160048152602481019091526020810180516001600160e01b03166374e38a7960e11b17905261128a9061095f565b50565b6005546001600160a01b031681565b60035461010090046001600160a01b031681565b606060006060846001600160a01b0316846040518082805190602001908083835b602083106112f05780518252601f1990920191602091820191016112d1565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114611350576040519150601f19603f3d011682016040523d82523d6000602084013e611355565b606091505b5091509150600082141561136a573d60208201fd5b94935050505056fe4b457263323044656c656761746f723a66616c6c6261636b3a2063616e6e6f742073656e642076616c756520746f2066616c6c6261636b4b457263323044656c656761746f723a3a5f736574496d706c656d656e746174696f6e3a2043616c6c6572206d7573742062652061646d696ea265627a7a72315820406372dec99d4072530a1e9a310d531d3219bd6eeba67bfd6f570e6cb391876164736f6c634300051000324b457263323044656c656761746f723a3a5f736574496d706c656d656e746174696f6e3a2043616c6c6572206d7573742062652061646d696e0000000000000000000000002170ed0880ac9a755fd29b2688956bd959f933f80000000000000000000000003c2ddd486c07343b711a4415cdc9ab90ed32b57100000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000800000000000000000000000017d04113a3651e79e7d40a40e47aae23046f7761000000000000000000000000cea2d0a0413b6bf052eb2eca9c256ee25ad7d128000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000124b6f6c6c61746572616c697a656420455448000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046b4554480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000002170ed0880ac9a755fd29b2688956bd959f933f80000000000000000000000003c2ddd486c07343b711a4415cdc9ab90ed32b57100000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000800000000000000000000000017d04113a3651e79e7d40a40e47aae23046f7761000000000000000000000000cea2d0a0413b6bf052eb2eca9c256ee25ad7d128000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000124b6f6c6c61746572616c697a656420455448000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046b4554480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : underlying_ (address): 0x2170ed0880ac9a755fd29b2688956bd959f933f8
Arg [1] : controller_ (address): 0x3c2ddd486c07343b711a4415cdc9ab90ed32b571
Arg [2] : name_ (string): Kollateralized ETH
Arg [3] : symbol_ (string): kETH
Arg [4] : decimals_ (uint8): 8
Arg [5] : admin_ (address): 0x17d04113a3651e79e7d40a40e47aae23046f7761
Arg [6] : implementation_ (address): 0xcea2d0a0413b6bf052eb2eca9c256ee25ad7d128
Arg [7] : becomeImplementationData (bytes): 0x00

-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 0000000000000000000000002170ed0880ac9a755fd29b2688956bd959f933f8
Arg [1] : 0000000000000000000000003c2ddd486c07343b711a4415cdc9ab90ed32b571
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [5] : 00000000000000000000000017d04113a3651e79e7d40a40e47aae23046f7761
Arg [6] : 000000000000000000000000cea2d0a0413b6bf052eb2eca9c256ee25ad7d128
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [9] : 4b6f6c6c61746572616c697a6564204554480000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [11] : 6b45544800000000000000000000000000000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000000


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.