ETH Price: $3,082.93 (-4.79%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer Ownersh...87647192019-10-18 11:51:521934 days ago1571399512IN
0x594e1558...3036475FA
0 ETH0.000030321

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CompoundAllocationStrategy

Compiler Version
v0.5.11+commit.c082d0b4

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-10-18
*/

// File: contracts/IAllocationStrategy.sol

pragma solidity ^0.5.8;

/**
 * @notice Allocation strategy for assets.
 *         - It invests the underlying assets into some yield generating contracts,
 *           usually lending contracts, in return it gets new assets aka. saving assets.
 *         - Sainv assets can be redeemed back to the underlying assets plus interest any time.
 */
interface IAllocationStrategy {

    /**
     * @notice Underlying asset for the strategy
     * @return address Underlying asset address
     */
    function underlying() external view returns (address);

    /**
     * @notice Calculates the exchange rate from the underlying to the saving assets
     * @return uint256 Calculated exchange rate scaled by 1e18
     */
    function exchangeRateStored() external view returns (uint256);

    /**
      * @notice Applies accrued interest to all savings
      * @dev This should calculates interest accrued from the last checkpointed
      *      block up to the current block and writes new checkpoint to storage.
      * @return bool success(true) or failure(false)
      */
    function accrueInterest() external returns (bool);

    /**
     * @notice Sender supplies underlying assets into the market and receives saving assets in exchange
     * @dev Interst shall be accrued
     * @param investAmount The amount of the underlying asset to supply
     * @return uint256 Amount of saving assets created
     */
    function investUnderlying(uint256 investAmount) external returns (uint256);

    /**
     * @notice Sender redeems saving assets in exchange for a specified amount of underlying asset
     * @dev Interst shall be accrued
     * @param redeemAmount The amount of underlying to redeem
     * @return uint256 Amount of saving assets burned
     */
    function redeemUnderlying(uint256 redeemAmount) external returns (uint256);

}

// File: openzeppelin-solidity/contracts/ownership/Ownable.sol

pragma solidity ^0.5.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be aplied to your functions to restrict their use to
 * the owner.
 */
contract Ownable {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(isOwner(), "Ownable: caller is not the owner");
        _;
    }

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * > Note: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// File: openzeppelin-solidity/contracts/token/ERC20/IERC20.sol

pragma solidity ^0.5.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see `ERC20Detailed`.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a `Transfer` event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through `transferFrom`. This is
     * zero by default.
     *
     * This value changes when `approve` or `transferFrom` are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * > Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an `Approval` event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a `Transfer` event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to `approve`. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// File: compound/contracts/CErc20Interface.sol

pragma solidity >=0.4.21 <0.6.0;

// converted from ethereum/contracts/compound/abi/CErc20.json
interface CErc20Interface {

    function name() external view returns (
        string memory
    );

    function approve(
        address spender,
        uint256 amount
    ) external returns (
        bool
    );

    function repayBorrow(
        uint256 repayAmount
    ) external returns (
        uint256
    );

    function reserveFactorMantissa() external view returns (
        uint256
    );

    function borrowBalanceCurrent(
        address account
    ) external returns (
        uint256
    );

    function totalSupply() external view returns (
        uint256
    );

    function exchangeRateStored() external view returns (
        uint256
    );

    function transferFrom(
        address src,
        address dst,
        uint256 amount
    ) external returns (
        bool
    );

    function repayBorrowBehalf(
        address borrower,
        uint256 repayAmount
    ) external returns (
        uint256
    );

    function pendingAdmin() external view returns (
        address
    );

    function decimals() external view returns (
        uint256
    );

    function balanceOfUnderlying(
        address owner
    ) external returns (
        uint256
    );

    function getCash() external view returns (
        uint256
    );

    function _setComptroller(
        address newComptroller
    ) external returns (
        uint256
    );

    function totalBorrows() external view returns (
        uint256
    );

    function comptroller() external view returns (
        address
    );

    function _reduceReserves(
        uint256 reduceAmount
    ) external returns (
        uint256
    );

    function initialExchangeRateMantissa() external view returns (
        uint256
    );

    function accrualBlockNumber() external view returns (
        uint256
    );

    function underlying() external view returns (
        address
    );

    function balanceOf(
        address owner
    ) external view returns (
        uint256
    );

    function totalBorrowsCurrent() external returns (
        uint256
    );

    function redeemUnderlying(
        uint256 redeemAmount
    ) external returns (
        uint256
    );

    function totalReserves() external view returns (
        uint256
    );

    function symbol() external view returns (
        string memory
    );

    function borrowBalanceStored(
        address account
    ) external view returns (
        uint256
    );

    function mint(
        uint256 mintAmount
    ) external returns (
        uint256
    );

    function accrueInterest() external returns (
        uint256
    );

    function transfer(
        address dst,
        uint256 amount
    ) external returns (
        bool
    );

    function borrowIndex() external view returns (
        uint256
    );

    function supplyRatePerBlock() external view returns (
        uint256
    );

    function seize(
        address liquidator,
        address borrower,
        uint256 seizeTokens
    ) external returns (
        uint256
    );

    function _setPendingAdmin(
        address newPendingAdmin
    ) external returns (
        uint256
    );

    function exchangeRateCurrent() external returns (
        uint256
    );

    function getAccountSnapshot(
        address account
    ) external view returns (
        uint256,
        uint256,
        uint256,
        uint256
    );

    function borrow(
        uint256 borrowAmount
    ) external returns (
        uint256
    );

    function redeem(
        uint256 redeemTokens
    ) external returns (
        uint256
    );

    function allowance(
        address owner,
        address spender
    ) external view returns (
        uint256
    );

    function _acceptAdmin() external returns (
        uint256
    );

    function _setInterestRateModel(
        address newInterestRateModel
    ) external returns (
        uint256
    );

    function interestRateModel() external view returns (
        address
    );

    function liquidateBorrow(
        address borrower,
        uint256 repayAmount,
        address cTokenCollateral
    ) external returns (
        uint256
    );

    function admin() external view returns (
        address
    );

    function borrowRatePerBlock() external view returns (
        uint256
    );

    function _setReserveFactor(
        uint256 newReserveFactorMantissa
    ) external returns (
        uint256
    );

    function isCToken() external view returns (
        bool
    );

    /*
    constructor(
        address underlying_,
        address comptroller_,
        address interestRateModel_,
        uint256 initialExchangeRateMantissa_,
        string  calldata name_,
        string  calldata symbol_,
        uint256 decimals_
    );
    */

    event AccrueInterest(
        uint256 interestAccumulated,
        uint256 borrowIndex,
        uint256 totalBorrows
    );

    event Mint(
        address minter,
        uint256 mintAmount,
        uint256 mintTokens
    );

    event Redeem(
        address redeemer,
        uint256 redeemAmount,
        uint256 redeemTokens
    );

    event Borrow(
        address borrower,
        uint256 borrowAmount,
        uint256 accountBorrows,
        uint256 totalBorrows
    );

    event RepayBorrow(
        address payer,
        address borrower,
        uint256 repayAmount,
        uint256 accountBorrows,
        uint256 totalBorrows
    );

    event LiquidateBorrow(
        address liquidator,
        address borrower,
        uint256 repayAmount,
        address cTokenCollateral,
        uint256 seizeTokens
    );

    event NewPendingAdmin(
        address oldPendingAdmin,
        address newPendingAdmin
    );

    event NewAdmin(
        address oldAdmin,
        address newAdmin
    );

    event NewComptroller(
        address oldComptroller,
        address newComptroller
    );

    event NewMarketInterestRateModel(
        address oldInterestRateModel,
        address newInterestRateModel
    );

    event NewReserveFactor(
        uint256 oldReserveFactorMantissa,
        uint256 newReserveFactorMantissa
    );

    event ReservesReduced(
        address admin,
        uint256 reduceAmount,
        uint256 newTotalReserves
    );

    event Failure(
        uint256 error,
        uint256 info,
        uint256 detail
    );

    event Transfer(
        address from,
        address to,
        uint256 amount
    );

    event Approval(
        address owner,
        address spender,
        uint256 amount
    );

}

// File: contracts/CompoundAllocationStrategy.sol

pragma solidity ^0.5.8;





contract CompoundAllocationStrategy is IAllocationStrategy, Ownable {

    CErc20Interface private cToken;
    IERC20 private token;

    constructor(CErc20Interface cToken_) public {
        cToken = cToken_;
        token = IERC20(cToken.underlying());
    }

    /// @dev ISavingStrategy.underlying implementation
    function underlying() external view returns (address) {
        return cToken.underlying();
    }

    /// @dev ISavingStrategy.exchangeRateStored implementation
    function exchangeRateStored() external view returns (uint256) {
        return cToken.exchangeRateStored();
    }

    /// @dev ISavingStrategy.accrueInterest implementation
    function accrueInterest() external returns (bool) {
        return cToken.accrueInterest() == 0;
    }

    /// @dev ISavingStrategy.investUnderlying implementation
    function investUnderlying(uint256 investAmount) external onlyOwner returns (uint256) {
        token.transferFrom(msg.sender, address(this), investAmount);
        token.approve(address(cToken), investAmount);
        uint256 cTotalBefore = cToken.totalSupply();
        // TODO should we handle mint failure?
        require(cToken.mint(investAmount) == 0, "mint failed");
        uint256 cTotalAfter = cToken.totalSupply();
        uint256 cCreatedAmount;
        if (cTotalAfter > cTotalBefore) {
            cCreatedAmount = cTotalAfter - cTotalBefore;
        } // else can there be case that we mint but we get less cTokens!?\
        return cCreatedAmount;
    }

    /// @dev ISavingStrategy.redeemUnderlying implementation
    function redeemUnderlying(uint256 redeemAmount) external onlyOwner returns (uint256) {
        uint256 cTotalBefore = cToken.totalSupply();
        // TODO should we handle redeem failure?
        require(cToken.redeemUnderlying(redeemAmount) == 0, "redeemUnderlying failed");
        uint256 cTotalAfter = cToken.totalSupply();
        uint256 cBurnedAmount;
        if (cTotalAfter < cTotalBefore) {
            cBurnedAmount = cTotalBefore - cTotalAfter;
        } // else can there be case that we end up with more cTokens ?!
        token.transfer(msg.sender, redeemAmount);
        return cBurnedAmount;
    }

}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"exchangeRateStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"underlying","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"redeemAmount","type":"uint256"}],"name":"redeemUnderlying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"accrueInterest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"investAmount","type":"uint256"}],"name":"investUnderlying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract CErc20Interface","name":"cToken_","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

608060405234801561001057600080fd5b50604051610bac380380610bac8339818101604052602081101561003357600080fd5b5051600080546001600160a01b03191633178082556040516001600160a01b039190911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600180546001600160a01b0319166001600160a01b038381169190911791829055604080517f6f307dc300000000000000000000000000000000000000000000000000000000815290519290911691636f307dc391600480820192602092909190829003018186803b1580156100f357600080fd5b505afa158015610107573d6000803e3d6000fd5b505050506040513d602081101561011d57600080fd5b5051600280546001600160a01b0319166001600160a01b0390921691909117905550610a5e8061014e6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80638da5cb5b116100665780638da5cb5b146100fd5780638f32d59b14610105578063a6afed9514610121578063c17693c014610129578063f2fde38b1461014657610093565b8063182df0f5146100985780636f307dc3146100b2578063715018a6146100d6578063852a12e3146100e0575b600080fd5b6100a061016c565b60408051918252519081900360200190f35b6100ba6101e2565b604080516001600160a01b039092168252519081900360200190f35b6100de610227565b005b6100a0600480360360208110156100f657600080fd5b50356102b8565b6100ba61054c565b61010d61055b565b604080519115158252519081900360200190f35b61010d61056c565b6100a06004803603602081101561013f57600080fd5b50356105e4565b6100de6004803603602081101561015c57600080fd5b50356001600160a01b03166108f0565b6001546040805163182df0f560e01b815290516000926001600160a01b03169163182df0f5916004808301926020929190829003018186803b1580156101b157600080fd5b505afa1580156101c5573d6000803e3d6000fd5b505050506040513d60208110156101db57600080fd5b5051905090565b60015460408051636f307dc360e01b815290516000926001600160a01b031691636f307dc3916004808301926020929190829003018186803b1580156101b157600080fd5b61022f61055b565b61026e576040805162461bcd60e51b81526020600482018190526024820152600080516020610a0a833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60006102c261055b565b610301576040805162461bcd60e51b81526020600482018190526024820152600080516020610a0a833981519152604482015290519081900360640190fd5b600154604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd916004808301926020929190829003018186803b15801561034657600080fd5b505afa15801561035a573d6000803e3d6000fd5b505050506040513d602081101561037057600080fd5b50516001546040805163852a12e360e01b81526004810187905290519293506001600160a01b039091169163852a12e3916024808201926020929091908290030181600087803b1580156103c357600080fd5b505af11580156103d7573d6000803e3d6000fd5b505050506040513d60208110156103ed57600080fd5b505115610441576040805162461bcd60e51b815260206004820152601760248201527f72656465656d556e6465726c79696e67206661696c6564000000000000000000604482015290519081900360640190fd5b600154604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd916004808301926020929190829003018186803b15801561048657600080fd5b505afa15801561049a573d6000803e3d6000fd5b505050506040513d60208110156104b057600080fd5b505190506000828210156104c357508082035b6002546040805163a9059cbb60e01b81523360048201526024810188905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561051757600080fd5b505af115801561052b573d6000803e3d6000fd5b505050506040513d602081101561054157600080fd5b509095945050505050565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b6001546040805163a6afed9560e01b815290516000926001600160a01b03169163a6afed9591600480830192602092919082900301818787803b1580156105b257600080fd5b505af11580156105c6573d6000803e3d6000fd5b505050506040513d60208110156105dc57600080fd5b505115905090565b60006105ee61055b565b61062d576040805162461bcd60e51b81526020600482018190526024820152600080516020610a0a833981519152604482015290519081900360640190fd5b600254604080516323b872dd60e01b81523360048201523060248201526044810185905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b15801561068757600080fd5b505af115801561069b573d6000803e3d6000fd5b505050506040513d60208110156106b157600080fd5b50506002546001546040805163095ea7b360e01b81526001600160a01b039283166004820152602481018690529051919092169163095ea7b39160448083019260209291908290030181600087803b15801561070c57600080fd5b505af1158015610720573d6000803e3d6000fd5b505050506040513d602081101561073657600080fd5b5050600154604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd916004808301926020929190829003018186803b15801561077d57600080fd5b505afa158015610791573d6000803e3d6000fd5b505050506040513d60208110156107a757600080fd5b50516001546040805163140e25ad60e31b81526004810187905290519293506001600160a01b039091169163a0712d68916024808201926020929091908290030181600087803b1580156107fa57600080fd5b505af115801561080e573d6000803e3d6000fd5b505050506040513d602081101561082457600080fd5b505115610866576040805162461bcd60e51b815260206004820152600b60248201526a1b5a5b9d0819985a5b195960aa1b604482015290519081900360640190fd5b600154604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd916004808301926020929190829003018186803b1580156108ab57600080fd5b505afa1580156108bf573d6000803e3d6000fd5b505050506040513d60208110156108d557600080fd5b505190506000828211156108e857508181035b949350505050565b6108f861055b565b610937576040805162461bcd60e51b81526020600482018190526024820152600080516020610a0a833981519152604482015290519081900360640190fd5b61094081610943565b50565b6001600160a01b0381166109885760405162461bcd60e51b81526004018080602001828103825260268152602001806109e46026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a265627a7a723158208af9fff59799b257c930c37571464590a311d48aca475c7feaebc903383a257a64736f6c634300050b0032000000000000000000000000f5dce57282a584d2746faf1593d3121fcac444dc

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100935760003560e01c80638da5cb5b116100665780638da5cb5b146100fd5780638f32d59b14610105578063a6afed9514610121578063c17693c014610129578063f2fde38b1461014657610093565b8063182df0f5146100985780636f307dc3146100b2578063715018a6146100d6578063852a12e3146100e0575b600080fd5b6100a061016c565b60408051918252519081900360200190f35b6100ba6101e2565b604080516001600160a01b039092168252519081900360200190f35b6100de610227565b005b6100a0600480360360208110156100f657600080fd5b50356102b8565b6100ba61054c565b61010d61055b565b604080519115158252519081900360200190f35b61010d61056c565b6100a06004803603602081101561013f57600080fd5b50356105e4565b6100de6004803603602081101561015c57600080fd5b50356001600160a01b03166108f0565b6001546040805163182df0f560e01b815290516000926001600160a01b03169163182df0f5916004808301926020929190829003018186803b1580156101b157600080fd5b505afa1580156101c5573d6000803e3d6000fd5b505050506040513d60208110156101db57600080fd5b5051905090565b60015460408051636f307dc360e01b815290516000926001600160a01b031691636f307dc3916004808301926020929190829003018186803b1580156101b157600080fd5b61022f61055b565b61026e576040805162461bcd60e51b81526020600482018190526024820152600080516020610a0a833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60006102c261055b565b610301576040805162461bcd60e51b81526020600482018190526024820152600080516020610a0a833981519152604482015290519081900360640190fd5b600154604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd916004808301926020929190829003018186803b15801561034657600080fd5b505afa15801561035a573d6000803e3d6000fd5b505050506040513d602081101561037057600080fd5b50516001546040805163852a12e360e01b81526004810187905290519293506001600160a01b039091169163852a12e3916024808201926020929091908290030181600087803b1580156103c357600080fd5b505af11580156103d7573d6000803e3d6000fd5b505050506040513d60208110156103ed57600080fd5b505115610441576040805162461bcd60e51b815260206004820152601760248201527f72656465656d556e6465726c79696e67206661696c6564000000000000000000604482015290519081900360640190fd5b600154604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd916004808301926020929190829003018186803b15801561048657600080fd5b505afa15801561049a573d6000803e3d6000fd5b505050506040513d60208110156104b057600080fd5b505190506000828210156104c357508082035b6002546040805163a9059cbb60e01b81523360048201526024810188905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561051757600080fd5b505af115801561052b573d6000803e3d6000fd5b505050506040513d602081101561054157600080fd5b509095945050505050565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b6001546040805163a6afed9560e01b815290516000926001600160a01b03169163a6afed9591600480830192602092919082900301818787803b1580156105b257600080fd5b505af11580156105c6573d6000803e3d6000fd5b505050506040513d60208110156105dc57600080fd5b505115905090565b60006105ee61055b565b61062d576040805162461bcd60e51b81526020600482018190526024820152600080516020610a0a833981519152604482015290519081900360640190fd5b600254604080516323b872dd60e01b81523360048201523060248201526044810185905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b15801561068757600080fd5b505af115801561069b573d6000803e3d6000fd5b505050506040513d60208110156106b157600080fd5b50506002546001546040805163095ea7b360e01b81526001600160a01b039283166004820152602481018690529051919092169163095ea7b39160448083019260209291908290030181600087803b15801561070c57600080fd5b505af1158015610720573d6000803e3d6000fd5b505050506040513d602081101561073657600080fd5b5050600154604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd916004808301926020929190829003018186803b15801561077d57600080fd5b505afa158015610791573d6000803e3d6000fd5b505050506040513d60208110156107a757600080fd5b50516001546040805163140e25ad60e31b81526004810187905290519293506001600160a01b039091169163a0712d68916024808201926020929091908290030181600087803b1580156107fa57600080fd5b505af115801561080e573d6000803e3d6000fd5b505050506040513d602081101561082457600080fd5b505115610866576040805162461bcd60e51b815260206004820152600b60248201526a1b5a5b9d0819985a5b195960aa1b604482015290519081900360640190fd5b600154604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd916004808301926020929190829003018186803b1580156108ab57600080fd5b505afa1580156108bf573d6000803e3d6000fd5b505050506040513d60208110156108d557600080fd5b505190506000828211156108e857508181035b949350505050565b6108f861055b565b610937576040805162461bcd60e51b81526020600482018190526024820152600080516020610a0a833981519152604482015290519081900360640190fd5b61094081610943565b50565b6001600160a01b0381166109885760405162461bcd60e51b81526004018080602001828103825260268152602001806109e46026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a265627a7a723158208af9fff59799b257c930c37571464590a311d48aca475c7feaebc903383a257a64736f6c634300050b0032

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

000000000000000000000000f5dce57282a584d2746faf1593d3121fcac444dc

-----Decoded View---------------
Arg [0] : cToken_ (address): 0xF5DCe57282A584D2746FaF1593d3121Fcac444dC

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000f5dce57282a584d2746faf1593d3121fcac444dc


Deployed Bytecode Sourcemap

14384:2242:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14384:2242:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14887:115;;;:::i;:::-;;;;;;;;;;;;;;;;14716:99;;;:::i;:::-;;;;-1:-1:-1;;;;;14716:99:0;;;;;;;;;;;;;;3655:140;;;:::i;:::-;;15995:626;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15995:626:0;;:::i;2844:79::-;;;:::i;3210:92::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;15070:104;;;:::i;15244:681::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15244:681:0;;:::i;3950:109::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3950:109:0;-1:-1:-1;;;;;3950:109:0;;:::i;14887:115::-;14967:6;;:27;;;-1:-1:-1;;;14967:27:0;;;;14940:7;;-1:-1:-1;;;;;14967:6:0;;:25;;:27;;;;;;;;;;;;;;:6;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;14967:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14967:27:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14967:27:0;;-1:-1:-1;14887:115:0;:::o;14716:99::-;14788:6;;:19;;;-1:-1:-1;;;14788:19:0;;;;14761:7;;-1:-1:-1;;;;;14788:6:0;;:17;;:19;;;;;;;;;;;;;;:6;:19;;;5:2:-1;;;;30:1;27;20:12;3655:140:0;3056:9;:7;:9::i;:::-;3048:54;;;;;-1:-1:-1;;;3048:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3048:54:0;;;;;;;;;;;;;;;3754:1;3738:6;;3717:40;;-1:-1:-1;;;;;3738:6:0;;;;3717:40;;3754:1;;3717:40;3785:1;3768:19;;-1:-1:-1;;;;;;3768:19:0;;;3655:140::o;15995:626::-;16071:7;3056:9;:7;:9::i;:::-;3048:54;;;;;-1:-1:-1;;;3048:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3048:54:0;;;;;;;;;;;;;;;16114:6;;:20;;;-1:-1:-1;;;16114:20:0;;;;16091;;-1:-1:-1;;;;;16114:6:0;;:18;;:20;;;;;;;;;;;;;;:6;:20;;;5:2:-1;;;;30:1;27;20:12;5:2;16114:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16114:20:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16114:20:0;16203:6;;:37;;;-1:-1:-1;;;16203:37:0;;;;;;;;;;16114:20;;-1:-1:-1;;;;;;16203:6:0;;;;:23;;:37;;;;;16114:20;;16203:37;;;;;;;;:6;;:37;;;5:2:-1;;;;30:1;27;20:12;5:2;16203:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16203:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16203:37:0;:42;16195:78;;;;;-1:-1:-1;;;16195:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16306:6;;:20;;;-1:-1:-1;;;16306:20:0;;;;16284:19;;-1:-1:-1;;;;;16306:6:0;;:18;;:20;;;;;;;;;;;;;;:6;:20;;;5:2:-1;;;;30:1;27;20:12;5:2;16306:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16306:20:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16306:20:0;;-1:-1:-1;16337:21:0;16373:26;;;16369:101;;;-1:-1:-1;16432:26:0;;;16369:101;16542:5;;:40;;;-1:-1:-1;;;16542:40:0;;16557:10;16542:40;;;;;;;;;;;;-1:-1:-1;;;;;16542:5:0;;;;:14;;:40;;;;;;;;;;;;;;;:5;;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;16542:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16542:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16600:13:0;;15995:626;-1:-1:-1;;;;;15995:626:0:o;2844:79::-;2882:7;2909:6;-1:-1:-1;;;;;2909:6:0;2844:79;:::o;3210:92::-;3250:4;3288:6;-1:-1:-1;;;;;3288:6:0;3274:10;:20;;3210:92::o;15070:104::-;15138:6;;:23;;;-1:-1:-1;;;15138:23:0;;;;15114:4;;-1:-1:-1;;;;;15138:6:0;;:21;;:23;;;;;;;;;;;;;;15114:4;15138:6;:23;;;5:2:-1;;;;30:1;27;20:12;5:2;15138:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15138:23:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15138:23:0;:28;;-1:-1:-1;15070:104:0;:::o;15244:681::-;15320:7;3056:9;:7;:9::i;:::-;3048:54;;;;;-1:-1:-1;;;3048:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3048:54:0;;;;;;;;;;;;;;;15340:5;;:59;;;-1:-1:-1;;;15340:59:0;;15359:10;15340:59;;;;15379:4;15340:59;;;;;;;;;;;;-1:-1:-1;;;;;15340:5:0;;;;:18;;:59;;;;;;;;;;;;;;;:5;;:59;;;5:2:-1;;;;30:1;27;20:12;5:2;15340:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15340:59:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;15410:5:0;;;15432:6;15410:44;;;-1:-1:-1;;;15410:44:0;;-1:-1:-1;;;;;15432:6:0;;;15410:44;;;;;;;;;;;;:5;;;;;:13;;:44;;;;;15340:59;;15410:44;;;;;;;:5;;:44;;;5:2:-1;;;;30:1;27;20:12;5:2;15410:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15410:44:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;15488:6:0;;:20;;;-1:-1:-1;;;15488:20:0;;;;15465;;-1:-1:-1;;;;;15488:6:0;;:18;;:20;;;;;15410:44;;15488:20;;;;;;;:6;:20;;;5:2:-1;;;;30:1;27;20:12;5:2;15488:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15488:20:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15488:20:0;15575:6;;:25;;;-1:-1:-1;;;15575:25:0;;;;;;;;;;15488:20;;-1:-1:-1;;;;;;15575:6:0;;;;:11;;:25;;;;;15488:20;;15575:25;;;;;;;;:6;;:25;;;5:2:-1;;;;30:1;27;20:12;5:2;15575:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15575:25:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15575:25:0;:30;15567:54;;;;;-1:-1:-1;;;15567:54:0;;;;;;;;;;;;-1:-1:-1;;;15567:54:0;;;;;;;;;;;;;;;15654:6;;:20;;;-1:-1:-1;;;15654:20:0;;;;15632:19;;-1:-1:-1;;;;;15654:6:0;;:18;;:20;;;;;;;;;;;;;;:6;:20;;;5:2:-1;;;;30:1;27;20:12;5:2;15654:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15654:20:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15654:20:0;;-1:-1:-1;15685:22:0;15722:26;;;15718:102;;;-1:-1:-1;15782:26:0;;;15718:102;15903:14;15244:681;-1:-1:-1;;;;15244:681:0:o;3950:109::-;3056:9;:7;:9::i;:::-;3048:54;;;;;-1:-1:-1;;;3048:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3048:54:0;;;;;;;;;;;;;;;4023:28;4042:8;4023:18;:28::i;:::-;3950:109;:::o;4165:229::-;-1:-1:-1;;;;;4239:22:0;;4231:73;;;;-1:-1:-1;;;4231:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4341:6;;;4320:38;;-1:-1:-1;;;;;4320:38:0;;;;4341:6;;;4320:38;;;4369:6;:17;;-1:-1:-1;;;;;;4369:17:0;-1:-1:-1;;;;;4369:17:0;;;;;;;;;;4165:229::o

Swarm Source

bzzr://8af9fff59799b257c930c37571464590a311d48aca475c7feaebc903383a257a

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.