Contract 0xD61867501b821befd5E4270A91836f8F7424B847 4

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x47dafb35b970c6bfe71e017d00df7848c2987bef9244ec7e8e66b1f0434d6201Redeem107327732021-09-08 10:23:0810 days 6 hrs ago0x46d3e50d47b89a4da9556ee217cefd98dec5234f IN  0xd61867501b821befd5e4270a91836f8f7424b8470 BNB0.00244392
0x23666a04d7bc4fa52d0d59032bdb2881cacc35bc72e0b968f2f905154dcb88d0Redeem106490322021-09-05 11:47:2713 days 4 hrs ago0x46d3e50d47b89a4da9556ee217cefd98dec5234f IN  0xd61867501b821befd5e4270a91836f8f7424b8470 BNB0.00251886
0x6736d9168f81ce535fabb54c5be6299d666e04e9d3d6cf330d2d7fd1f5da1f95Redeem103395472021-08-25 14:38:3624 days 1 hr ago0xe782babaa864a74942fca5f37709392ee5a92fe2 IN  0xd61867501b821befd5e4270a91836f8f7424b8470 BNB0.001489095
0x80ad4dd90f1a25ece8c7583f60fd985733a79b6ad7cdc0b082b08b63abcafc7dMint102969382021-08-24 2:59:1825 days 13 hrs ago0xe782babaa864a74942fca5f37709392ee5a92fe2 IN  0xd61867501b821befd5e4270a91836f8f7424b8470 BNB0.0004608
0x48edf48af613d8758ad6be4325e54612c27a4942c776058b044ebce50951ec12Redeem102140342021-08-21 5:28:3928 days 10 hrs ago0x5bc450c5f8f584ed61675298e4ec8e4094df7dcb IN  0xd61867501b821befd5e4270a91836f8f7424b8470 BNB0.001757495
0xd1fa82bf55e10385849a7d947f0a39483335bc695fd22b14ae211f8819c84911Mint96860522021-08-02 12:24:2347 days 4 hrs ago0x5bc450c5f8f584ed61675298e4ec8e4094df7dcb IN  0xd61867501b821befd5e4270a91836f8f7424b8470 BNB0.00046086
0x1a17e40ba8ebc3254fa761d73ab2c4d10abe4544cd4bb51bebab2618bf8c2690Mint96556662021-08-01 10:08:3348 days 6 hrs ago0x46d3e50d47b89a4da9556ee217cefd98dec5234f IN  0xd61867501b821befd5e4270a91836f8f7424b8470 BNB0.00046086
0x7a54340736e2e43e13e10b45873f19b693edde04c1f8c6dd09db3edda0bd3a43Redeem95680732021-07-29 6:37:4851 days 9 hrs ago0xa97aaf7a996bcfec0fb02e9645a0458b83870d2f IN  0xd61867501b821befd5e4270a91836f8f7424b8470 BNB0.003270485
0x09dff6ef8f626d70434ff335ef66b4db6543e8e33b93bd688f206ef6ebfc2cd7Redeem88498712021-07-04 2:24:1976 days 14 hrs ago0xdc5b49e33ebc60721313b7361c1f4acebeacf353 IN  0xd61867501b821befd5e4270a91836f8f7424b8470 BNB0.00111557
0x842cadb6e0c4fd47b9a3c6e7ac8a29b8c963f53b50294f3dfc9d2532a26b51e8_set Pending Adm...87427992021-06-30 8:17:4080 days 8 hrs ago0x17d04113a3651e79e7d40a40e47aae23046f7761 IN  0xd61867501b821befd5e4270a91836f8f7424b8470 BNB0.00023647
0xc112409be45b4f84e5db57f8fedeb399fbe89f1650aef0240b1407a058337ca3Redeem85758592021-06-24 12:31:4386 days 3 hrs ago0x974c12a025157de2db23b077711abeb831925a52 IN  0xd61867501b821befd5e4270a91836f8f7424b8470 BNB0.00231565
0x8d72b062a5bc4283dabd9343b264179ad2d7dfdc67e5d171dca8135436f00465Mint85647852021-06-24 3:17:2686 days 13 hrs ago0x33a888a62f01ddb2419a160e008aeaef53b379e4 IN  0xd61867501b821befd5e4270a91836f8f7424b8470 BNB0.00046086
0x38007094cdb010ee50f3dcd4a7f8f26a06fbd87b8ecb70598797547a15b8bfc3Redeem84958532021-06-21 17:30:5388 days 22 hrs ago0x232bb0aca84ebb9e4e9d218081a01562e67cee70 IN  0xd61867501b821befd5e4270a91836f8f7424b8470 BNB0.003270465
0xc42d77a1f208fc9e8e1fec4808dea5a0ce555e6e753dc575499c724e722cfbf8Redeem84842802021-06-21 7:50:3989 days 8 hrs ago0x9784620a618463465d03ab97f64dbd35bba30c75 IN  0xd61867501b821befd5e4270a91836f8f7424b8470 BNB0.00111557
0x576cd55e498cb346acf5799cc8083b980817aad0f5f7c8c582aac161aa11d188Mint83328152021-06-16 0:46:1394 days 15 hrs ago0x974c12a025157de2db23b077711abeb831925a52 IN  0xd61867501b821befd5e4270a91836f8f7424b8470 BNB0.0004608
0x679305d2ced9763f0ab72762eb3c922c67ea673998ae12e0ca1d1bfbda1dd921Mint82834292021-06-14 7:05:0896 days 9 hrs ago0x9784620a618463465d03ab97f64dbd35bba30c75 IN  0xd61867501b821befd5e4270a91836f8f7424b8470 BNB0.00046086
0xb6d0c1e4df5b9c8814c3d36fae93a408e0b6cfb121bd8671c39d85d2568bc3c1Mint81798492021-06-10 16:09:09100 days 18 mins ago0xdc5b49e33ebc60721313b7361c1f4acebeacf353 IN  0xd61867501b821befd5e4270a91836f8f7424b8470 BNB0.00046086
0x50d1953490d515de207b54f1431fe0ce7b4cd9c23dbd027a33ad429a295e8fd5Mint81744362021-06-10 11:36:34100 days 4 hrs ago0x232bb0aca84ebb9e4e9d218081a01562e67cee70 IN  0xd61867501b821befd5e4270a91836f8f7424b8470 BNB0.0003858
0x6a17cd5979230419688bffbb9984e4ad31fddcd8aa57fcbef4b5fbadb89e3279Mint81738242021-06-10 11:05:56100 days 5 hrs ago0x232bb0aca84ebb9e4e9d218081a01562e67cee70 IN  0xd61867501b821befd5e4270a91836f8f7424b8470 BNB0.0004608
0x6fad988d5e6d93184a214ca87fcbe7f3ce7fd57500c8b56f6ec8e0be8276720aMint78890502021-05-31 13:07:36110 days 3 hrs ago0xa97aaf7a996bcfec0fb02e9645a0458b83870d2f IN  0xd61867501b821befd5e4270a91836f8f7424b8470 BNB0.0006108
0x6cadd86ecdfff908fa447185d11551af52313a41b707b57d7d4b7efb87763c680x6080604078252052021-05-29 7:44:00112 days 8 hrs ago0x17d04113a3651e79e7d40a40e47aae23046f7761 IN  Contract Creation0 BNB0.006849
[ 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"}]

60806040523480156200001157600080fd5b5060405162001b3238038062001b3283398181016040526101008110156200003857600080fd5b815160208301516040808501805191519395929483019291846401000000008211156200006457600080fd5b9083019060208201858111156200007a57600080fd5b82516401000000008111828201881017156200009557600080fd5b82525081516020918201929091019080838360005b83811015620000c4578181015183820152602001620000aa565b50505050905090810190601f168015620000f25780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011657600080fd5b9083019060208201858111156200012c57600080fd5b82516401000000008111828201881017156200014757600080fd5b82525081516020918201929091019080838360005b83811015620001765781810151838201526020016200015c565b50505050905090810190601f168015620001a45780820380516001836020036101000a031916815260200191505b50604081815260208301519083015160608401516080909401805192969195919284640100000000821115620001d957600080fd5b908301906020820185811115620001ef57600080fd5b82516401000000008111828201881017156200020a57600080fd5b82525081516020918201929091019080838360005b83811015620002395781810151838201526020016200021f565b50505050905090810190601f168015620002675780820380516001836020036101000a031916815260200191505b50604081905260038054610100600160a81b03191633610100021790556000805461ff00191681556001600160a01b038d811660248401908152908d16604484015260ff8a1660a484015260a0606484019081528c5160c48501528c51620003de97508996508f95508e948e948e948e9490939092608481019260e49091019160208901918190849084905b838110156200030d578181015183820152602001620002f3565b50505050905090810190601f1680156200033b5780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b838110156200037057818101518382015260200162000356565b50505050905090810190601f1680156200039e5780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529190526020810180516001600160e01b03908116638420ce9960e01b179091529098506200042a169650505050505050565b50620003f6826000836001600160e01b03620004f116565b5050600380546001600160a01b0390921661010002610100600160a81b031990921691909117905550620006d29350505050565b606060006060846001600160a01b0316846040518082805190602001908083835b602083106200046c5780518252601f1990920191602091820191016200044b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114620004ce576040519150601f19603f3d011682016040523d82523d6000602084013e620004d3565b606091505b50915091506000821415620004e9573d60208201fd5b949350505050565b60035461010090046001600160a01b03163314620005415760405162461bcd60e51b815260040180806020018281038252603981526020018062001af96039913960400191505060405180910390fd5b811562000583576040805160048152602481019091526020810180516001600160e01b0390811663153ab50560e01b17909152620005819190620006a816565b505b600a80546001600160a01b038581166001600160a01b0319831617909255604051602060248201818152855160448401528551949093169362000659938693909283926064909201919085019080838360005b83811015620005f0578181015183820152602001620005d6565b50505050905090810190601f1680156200061e5780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529190526020810180516001600160e01b03908116630adccee560e31b17909152909350620006a816915050565b50600a54604080516001600160a01b038085168252909216602083015280517fd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a9281900390910190a150505050565b600a54606090620006cc906001600160a01b0316836001600160e01b036200042a16565b92915050565b61141780620006e26000396000f3fe60806040526004361061019c5760003560e01c80636f307dc3116100ec578063b71d1a0c1161008a578063dd62ed3e11610064578063dd62ed3e14610858578063e9c714f214610893578063f77c4791146108a8578063f851a440146108bd5761019c565b8063b71d1a0c146107af578063c37f68e2146107e2578063db006a751461082e5761019c565b806395d89b41116100c657806395d89b41146106f4578063a0712d6814610709578063a9059cbb14610733578063b2a02ff11461076c5761019c565b80636f307dc31461067957806370a082311461068e57806383de424e146106c15761019c565b806326782247116101595780633b1d21a2116101335780633b1d21a2146104d45780634487152f146104e9578063555bcc401461059a5780635c60da1b146106645761019c565b8063267822471461046357806329d9109c14610494578063313ce567146104a95761019c565b806306fdde031461025c5780630933c1ed146102e6578063095ea7b314610397578063158ef93e146103e457806318160ddd146103f957806323b872dd14610420575b34156101d95760405162461bcd60e51b81526004018080602001828103825260378152602001806113736037913960400191505060405180910390fd5b600a546040516000916001600160a01b031690829036908083838082843760405192019450600093509091505080830381855af49150503d806000811461023c576040519150601f19603f3d011682016040523d82523d6000602084013e610241565b606091505b505090506040513d6000823e818015610258573d82f35b3d82fd5b34801561026857600080fd5b506102716108d2565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102ab578181015183820152602001610293565b50505050905090810190601f1680156102d85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102f257600080fd5b506102716004803603602081101561030957600080fd5b810190602081018135600160201b81111561032357600080fd5b82018360208201111561033557600080fd5b803590602001918460018302840111600160201b8311171561035657600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061095f945050505050565b3480156103a357600080fd5b506103d0600480360360408110156103ba57600080fd5b506001600160a01b03813516906020013561097e565b604080519115158252519081900360200190f35b3480156103f057600080fd5b506103d06109f5565b34801561040557600080fd5b5061040e610a03565b60408051918252519081900360200190f35b34801561042c57600080fd5b506103d06004803603606081101561044357600080fd5b506001600160a01b03813581169160208101359091169060400135610a09565b34801561046f57600080fd5b50610478610a89565b604080516001600160a01b039092168252519081900360200190f35b3480156104a057600080fd5b506103d0610a98565b3480156104b557600080fd5b506104be610a9d565b6040805160ff9092168252519081900360200190f35b3480156104e057600080fd5b5061040e610aa6565b3480156104f557600080fd5b506102716004803603602081101561050c57600080fd5b810190602081018135600160201b81111561052657600080fd5b82018360208201111561053857600080fd5b803590602001918460018302840111600160201b8311171561055957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610afd945050505050565b3480156105a657600080fd5b50610662600480360360608110156105bd57600080fd5b6001600160a01b03823516916020810135151591810190606081016040820135600160201b8111156105ee57600080fd5b82018360208201111561060057600080fd5b803590602001918460018302840111600160201b8311171561062157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610d1c945050505050565b005b34801561067057600080fd5b50610478610ebf565b34801561068557600080fd5b50610478610ece565b34801561069a57600080fd5b5061040e600480360360208110156106b157600080fd5b50356001600160a01b0316610edd565b3480156106cd57600080fd5b50610662600480360360208110156106e457600080fd5b50356001600160a01b0316610f4f565b34801561070057600080fd5b50610271610f9f565b34801561071557600080fd5b5061040e6004803603602081101561072c57600080fd5b5035610ff7565b34801561073f57600080fd5b506103d06004803603604081101561075657600080fd5b506001600160a01b03813516906020013561103e565b34801561077857600080fd5b506106626004803603606081101561078f57600080fd5b506001600160a01b03813581169160208101359091169060400135611094565b3480156107bb57600080fd5b50610662600480360360208110156107d257600080fd5b50356001600160a01b03166110f2565b3480156107ee57600080fd5b506108156004803603602081101561080557600080fd5b50356001600160a01b031661113e565b6040805192835260208301919091528051918290030190f35b34801561083a57600080fd5b506106626004803603602081101561085157600080fd5b50356111bd565b34801561086457600080fd5b5061040e6004803603604081101561087b57600080fd5b506001600160a01b03813581169160200135166111fe565b34801561089f57600080fd5b50610662611258565b3480156108b457600080fd5b5061047861128d565b3480156108c957600080fd5b5061047861129c565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156109575780601f1061092c57610100808354040283529160200191610957565b820191906000526020600020905b81548152906001019060200180831161093a57829003601f168201915b505050505081565b600a54606090610978906001600160a01b0316836112b0565b92915050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526000906060906109d49061095f565b90508080602001905160208110156109eb57600080fd5b5051949350505050565b600054610100900460ff1681565b60065481565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052600090606090610a679061095f565b9050808060200190516020811015610a7e57600080fd5b505195945050505050565b6004546001600160a01b031681565b600181565b60035460ff1681565b6040805160048152602481019091526020810180516001600160e01b0316631d8e90d160e11b179052600090606090610ade90610afd565b9050808060200190516020811015610af557600080fd5b505191505090565b606060006060306001600160a01b0316846040516024018080602001828103825283818151815260200191508051906020019080838360005b83811015610b4e578181015183820152602001610b36565b50505050905090810190601f168015610b7b5780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529181526020820180516001600160e01b0316630933c1ed60e01b178152905182519295509350839250908083835b60208310610bd65780518252601f199092019160209182019101610bb7565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114610c36576040519150601f19603f3d011682016040523d82523d6000602084013e610c3b565b606091505b50915091506000821415610c50573d60208201fd5b808060200190516020811015610c6557600080fd5b8101908080516040519392919084600160201b821115610c8457600080fd5b908301906020820185811115610c9957600080fd5b8251600160201b811182820188101715610cb257600080fd5b82525081516020918201929091019080838360005b83811015610cdf578181015183820152602001610cc7565b50505050905090810190601f168015610d0c5780820380516001836020036101000a031916815260200191505b5060405250505092505050919050565b60035461010090046001600160a01b03163314610d6a5760405162461bcd60e51b81526004018080602001828103825260398152602001806113aa6039913960400191505060405180910390fd5b8115610da4576040805160048152602481019091526020810180516001600160e01b031663153ab50560e01b179052610da29061095f565b505b600a80546001600160a01b038581166001600160a01b03198316179092556040516020602482018181528551604484015285519490931693610e70938693909283926064909201919085019080838360005b83811015610e0e578181015183820152602001610df6565b50505050905090810190601f168015610e3b5780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529190526020810180516001600160e01b0316630adccee560e31b179052925061095f915050565b50600a54604080516001600160a01b038085168252909216602083015280517fd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a9281900390910190a150505050565b600a546001600160a01b031681565b6009546001600160a01b031681565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03166370a0823160e01b179052600090606090610f2f90610afd565b9050808060200190516020811015610f4657600080fd5b50519392505050565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03166341ef212760e11b179052610f9b9061095f565b5050565b6002805460408051602060018416156101000260001901909316849004601f810184900484028201840190925281815292918301828280156109575780601f1061092c57610100808354040283529160200191610957565b6040805160248082018490528251808303909101815260449091019091526020810180516001600160e01b031663140e25ad60e31b179052600090606090610f2f9061095f565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526000906060906109d49061095f565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b031663b2a02ff160e01b1790526110ec9061095f565b50505050565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b0316632dc7468360e21b179052610f9b9061095f565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03166361bfb47160e11b179052600090819060609061119290610afd565b90508080602001905160408110156111a957600080fd5b508051602090910151909350915050915091565b6040805160248082018490528251808303909101815260449091019091526020810180516001600160e01b031663db006a7560e01b179052610f9b9061095f565b604080516001600160a01b03808516602483015283166044808301919091528251808303909101815260649091019091526020810180516001600160e01b0316636eb1769f60e11b1790526000906060906109d490610afd565b6040805160048152602481019091526020810180516001600160e01b03166374e38a7960e11b17905261128a9061095f565b50565b6005546001600160a01b031681565b60035461010090046001600160a01b031681565b606060006060846001600160a01b0316846040518082805190602001908083835b602083106112f05780518252601f1990920191602091820191016112d1565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114611350576040519150601f19603f3d011682016040523d82523d6000602084013e611355565b606091505b5091509150600082141561136a573d60208201fd5b94935050505056fe4b457263323044656c656761746f723a66616c6c6261636b3a2063616e6e6f742073656e642076616c756520746f2066616c6c6261636b4b457263323044656c656761746f723a3a5f736574496d706c656d656e746174696f6e3a2043616c6c6572206d7573742062652061646d696ea265627a7a72315820406372dec99d4072530a1e9a310d531d3219bd6eeba67bfd6f570e6cb391876164736f6c634300051000324b457263323044656c656761746f723a3a5f736574496d706c656d656e746174696f6e3a2043616c6c6572206d7573742062652061646d696e0000000000000000000000008ff795a6f4d97e7887c79bea79aba5cc76444adf0000000000000000000000003c2ddd486c07343b711a4415cdc9ab90ed32b57100000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000800000000000000000000000017d04113a3651e79e7d40a40e47aae23046f7761000000000000000000000000cea2d0a0413b6bf052eb2eca9c256ee25ad7d128000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000124b6f6c6c61746572616c697a656420424348000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046b4243480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000

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

0000000000000000000000008ff795a6f4d97e7887c79bea79aba5cc76444adf0000000000000000000000003c2ddd486c07343b711a4415cdc9ab90ed32b57100000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000800000000000000000000000017d04113a3651e79e7d40a40e47aae23046f7761000000000000000000000000cea2d0a0413b6bf052eb2eca9c256ee25ad7d128000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000124b6f6c6c61746572616c697a656420424348000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046b4243480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : underlying_ (address): 0x8ff795a6f4d97e7887c79bea79aba5cc76444adf
Arg [1] : controller_ (address): 0x3c2ddd486c07343b711a4415cdc9ab90ed32b571
Arg [2] : name_ (string): Kollateralized BCH
Arg [3] : symbol_ (string): kBCH
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] : 0000000000000000000000008ff795a6f4d97e7887c79bea79aba5cc76444adf
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] : 4b6f6c6c61746572616c697a6564204243480000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [11] : 6b42434800000000000000000000000000000000000000000000000000000000
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.