ETH Price: $3,400.15 (+1.97%)

Contract

0x31127c12bc0C0d7D779dDfd57A87697b067FB100
 

Overview

ETH Balance

0.011555468961683102 ETH

Eth Value

$39.29 (@ $3,400.15/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Governance129190642021-07-29 6:11:171249 days ago1627539077IN
0x31127c12...b067FB100
0 ETH0.0005904522
Redeem129087542021-07-27 15:05:291250 days ago1627398329IN
0x31127c12...b067FB100
0.01 ETH0.0083612852.00000145
Redeem128895052021-07-24 14:23:301253 days ago1627136610IN
0x31127c12...b067FB100
0.01 ETH0.0027334917.00000145
Redeem128644462021-07-20 16:14:531257 days ago1626797693IN
0x31127c12...b067FB100
0.01 ETH0.0060852737.82
Redeem128551532021-07-19 5:32:011259 days ago1626672721IN
0x31127c12...b067FB100
0.01 ETH0.0025758816.02
Redeem128472602021-07-17 23:43:091260 days ago1626565389IN
0x31127c12...b067FB100
0.01 ETH0.0027516117.1
Redeem128294532021-07-15 4:42:161263 days ago1626324136IN
0x31127c12...b067FB100
0.01 ETH0.0031551526
Redeem128290002021-07-15 3:06:231263 days ago1626318383IN
0x31127c12...b067FB100
0.01 ETH0.0052181343
Redeem128288932021-07-15 2:39:441263 days ago1626316784IN
0x31127c12...b067FB100
0.01 ETH0.0044900237
Redeem128288752021-07-15 2:35:461263 days ago1626316546IN
0x31127c12...b067FB100
0.01 ETH0.0043686736
Redeem128229292021-07-14 4:04:171264 days ago1626235457IN
0x31127c12...b067FB100
0.01 ETH0.0072434745.00000156
Redeem128214562021-07-13 22:27:421264 days ago1626215262IN
0x31127c12...b067FB100
0.01 ETH0.003249227
Redeem128046682021-07-11 7:27:521267 days ago1625988472IN
0x31127c12...b067FB100
0.01 ETH0.0020911413
Redeem128009152021-07-10 17:09:561267 days ago1625936996IN
0x31127c12...b067FB100
0.01 ETH0.0013826611.5
Redeem127875472021-07-08 15:37:501269 days ago1625758670IN
0x31127c12...b067FB100
0.01 ETH0.005983537.2
Resume127841692021-07-08 2:54:371270 days ago1625712877IN
0x31127c12...b067FB100
0 ETH0.0008919630
Transfer127841362021-07-08 2:45:421270 days ago1625712342IN
0x31127c12...b067FB100
1.69248052 ETH0.0007369235
Migrate To127841252021-07-08 2:43:211270 days ago1625712201IN
0x31127c12...b067FB100
0 ETH0.002353640
Pause127841122021-07-08 2:41:041270 days ago1625712064IN
0x31127c12...b067FB100
0 ETH0.0013686346
Redeem127706262021-07-06 0:09:311272 days ago1625530171IN
0x31127c12...b067FB100
0.01 ETH0.0025754516
Redeem127697832021-07-05 21:00:131272 days ago1625518813IN
0x31127c12...b067FB100
0.01 ETH0.0022535214
Redeem127651202021-07-05 3:39:071273 days ago1625456347IN
0x31127c12...b067FB100
0.01 ETH0.0019302812
Redeem127621352021-07-04 16:34:181273 days ago1625416458IN
0x31127c12...b067FB100
0.01 ETH0.0021030617.34
Redeem127621252021-07-04 16:32:101273 days ago1625416330IN
0x31127c12...b067FB100
0.01 ETH0.0024414420.13
Redeem127621242021-07-04 16:31:511273 days ago1625416311IN
0x31127c12...b067FB100
0.01 ETH0.0027327117
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
131962792021-09-10 6:01:111206 days ago1631253671
0x31127c12...b067FB100
0.00006402 ETH
131951722021-09-10 1:55:481206 days ago1631238948
0x31127c12...b067FB100
0.00140057 ETH
131371502021-09-01 2:34:431215 days ago1630463683
0x31127c12...b067FB100
0.00872791 ETH
131371352021-09-01 2:31:051215 days ago1630463465
0x31127c12...b067FB100
0.00871882 ETH
131371172021-09-01 2:26:441215 days ago1630463204
0x31127c12...b067FB100
0.01166502 ETH
131370912021-09-01 2:22:071215 days ago1630462927
0x31127c12...b067FB100
0.01166615 ETH
129422372021-08-01 22:14:301245 days ago1627856070
0x31127c12...b067FB100
0.00282755 ETH
129195482021-07-29 8:08:101249 days ago1627546090
0x31127c12...b067FB100
0.95639182 ETH
129184262021-07-29 3:37:491249 days ago1627529869
0x31127c12...b067FB100
0.00026116 ETH
129177782021-07-29 1:17:411249 days ago1627521461
0x31127c12...b067FB100
0.04801229 ETH
129159192021-07-28 18:15:221249 days ago1627496122
0x31127c12...b067FB100
0.0731194 ETH
129159172021-07-28 18:14:351249 days ago1627496075
0x31127c12...b067FB100
0.0987679 ETH
129157202021-07-28 17:32:441249 days ago1627493564
0x31127c12...b067FB100
0.02095998 ETH
129157192021-07-28 17:32:431249 days ago1627493563
0x31127c12...b067FB100
0.000002 ETH
129157182021-07-28 17:32:361249 days ago1627493556
0x31127c12...b067FB100
0.02101407 ETH
129157162021-07-28 17:31:581249 days ago1627493518
0x31127c12...b067FB100
0.2 ETH
129151522021-07-28 15:15:561249 days ago1627485356
0x31127c12...b067FB100
0.00200823 ETH
129147422021-07-28 13:38:421249 days ago1627479522
0x31127c12...b067FB100
0.09873437 ETH
129147392021-07-28 13:38:131249 days ago1627479493
0x31127c12...b067FB100
0.09881666 ETH
129145142021-07-28 12:43:181249 days ago1627476198
0x31127c12...b067FB100
0.0998 ETH
129145142021-07-28 12:43:181249 days ago1627476198
0x31127c12...b067FB100
0.0998 ETH
129093862021-07-27 17:20:151250 days ago1627406415
0x31127c12...b067FB100
0.00154182 ETH
129088642021-07-27 15:26:551250 days ago1627399615
0x31127c12...b067FB100
0.0996 ETH
129088022021-07-27 15:14:531250 days ago1627398893
0x31127c12...b067FB100
0.00541607 ETH
129087542021-07-27 15:05:291250 days ago1627398329
0x31127c12...b067FB100
3.92429433 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CoFiXV2DAO

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 6666 runs

Other Settings:
istanbul EvmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-06-12
*/

// File: contracts/interface/ICoFiXV2DAO.sol

// SPDX-License-Identifier: GPL-3.0-or-later

pragma solidity 0.6.12;

interface ICoFiXV2DAO {

    function setGovernance(address gov) external;
    function start() external; 

    // function addETHReward() external payable; 

    event FlagSet(address gov, uint256 flag);
    event CoFiBurn(address gov, uint256 amount);
}
// File: contracts/interface/ICoFiXV2Controller.sol

pragma solidity 0.6.12;

interface ICoFiXV2Controller {

    event NewK(address token, uint256 K, uint256 sigma, uint256 T, uint256 ethAmount, uint256 erc20Amount, uint256 blockNum);
    event NewGovernance(address _new);
    event NewOracle(address _priceOracle);
    event NewKTable(address _kTable);
    event NewTimespan(uint256 _timeSpan);
    event NewKRefreshInterval(uint256 _interval);
    event NewKLimit(int128 maxK0);
    event NewGamma(int128 _gamma);
    event NewTheta(address token, uint32 theta);
    event NewK(address token, uint32 k);
    event NewCGamma(address token, uint32 gamma);

    function addCaller(address caller) external;

    function setCGamma(address token, uint32 gamma) external;

    function queryOracle(address token, uint8 op, bytes memory data) external payable returns (uint256 k, uint256 ethAmount, uint256 erc20Amount, uint256 blockNum, uint256 theta);

    function getKInfo(address token) external view returns (uint32 k, uint32 updatedAt, uint32 theta);

    function getLatestPriceAndAvgVola(address token) external payable returns (uint256, uint256, uint256, uint256);
}

// File: contracts/interface/ICoFiXV2Factory.sol

pragma solidity 0.6.12;

interface ICoFiXV2Factory {
    // All pairs: {ETH <-> ERC20 Token}
    event PairCreated(address indexed token, address pair, uint256);
    event NewGovernance(address _new);
    event NewController(address _new);
    event NewFeeReceiver(address _new);
    event NewFeeVaultForLP(address token, address feeVault);
    event NewVaultForLP(address _new);
    event NewVaultForTrader(address _new);
    event NewVaultForCNode(address _new);
    event NewDAO(address _new);

    /// @dev Create a new token pair for trading
    /// @param  token the address of token to trade
    /// @param  initToken0Amount the initial asset ratio (initToken0Amount:initToken1Amount)
    /// @param  initToken1Amount the initial asset ratio (initToken0Amount:initToken1Amount)
    /// @return pair the address of new token pair
    function createPair(
        address token,
	    uint256 initToken0Amount,
        uint256 initToken1Amount
        )
        external
        returns (address pair);

    function getPair(address token) external view returns (address pair);
    function allPairs(uint256) external view returns (address pair);
    function allPairsLength() external view returns (uint256);

    function getTradeMiningStatus(address token) external view returns (bool status);
    function setTradeMiningStatus(address token, bool status) external;
    function getFeeVaultForLP(address token) external view returns (address feeVault); // for LPs
    function setFeeVaultForLP(address token, address feeVault) external;

    function setGovernance(address _new) external;
    function setController(address _new) external;
    function setFeeReceiver(address _new) external;
    function setVaultForLP(address _new) external;
    function setVaultForTrader(address _new) external;
    function setVaultForCNode(address _new) external;
    function setDAO(address _new) external;
    function getController() external view returns (address controller);
    function getFeeReceiver() external view returns (address feeReceiver); // For CoFi Holders
    function getVaultForLP() external view returns (address vaultForLP);
    function getVaultForTrader() external view returns (address vaultForTrader);
    function getVaultForCNode() external view returns (address vaultForCNode);
    function getDAO() external view returns (address dao);
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol

pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
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.
     *
     * IMPORTANT: 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: contracts/interface/ICoFiToken.sol

pragma solidity 0.6.12;

interface ICoFiToken is IERC20 {

    /// @dev An event thats emitted when a new governance account is set
    /// @param  _new The new governance address
    event NewGovernance(address _new);

    /// @dev An event thats emitted when a new minter account is added
    /// @param  _minter The new minter address added
    event MinterAdded(address _minter);

    /// @dev An event thats emitted when a minter account is removed
    /// @param  _minter The minter address removed
    event MinterRemoved(address _minter);

    /// @dev Set governance address of CoFi token. Only governance has the right to execute.
    /// @param  _new The new governance address
    function setGovernance(address _new) external;

    /// @dev Add a new minter account to CoFi token, who can mint tokens. Only governance has the right to execute.
    /// @param  _minter The new minter address
    function addMinter(address _minter) external;

    /// @dev Remove a minter account from CoFi token, who can mint tokens. Only governance has the right to execute.
    /// @param  _minter The minter address removed
    function removeMinter(address _minter) external;

    /// @dev mint is used to distribute CoFi token to users, minters are CoFi mining pools
    /// @param  _to The receiver address
    /// @param  _amount The amount of tokens minted
    function mint(address _to, uint256 _amount) external;
}

// File: @openzeppelin/contracts/utils/ReentrancyGuard.sol

pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor () internal {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

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

// File: @openzeppelin/contracts/math/Math.sol

pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Standard math utilities missing in the Solidity language.
 */
library Math {
    /**
     * @dev Returns the largest of two numbers.
     */
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

    /**
     * @dev Returns the smallest of two numbers.
     */
    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    /**
     * @dev Returns the average of two numbers. The result is rounded towards
     * zero.
     */
    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b) / 2 can overflow, so we distribute
        return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2);
    }
}

// File: contracts/lib/TransferHelper.sol

pragma solidity 0.6.12;

// helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
library TransferHelper {
    function safeApprove(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('approve(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED');
    }

    function safeTransfer(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED');
    }

    function safeTransferFrom(address token, address from, address to, uint value) internal {
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED');
    }

    function safeTransferETH(address to, uint value) internal {
        (bool success,) = to.call{value:value}(new bytes(0));
        require(success, 'TransferHelper: ETH_TRANSFER_FAILED');
    }
}

// File: @openzeppelin/contracts/math/SafeMath.sol

pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b > a) return (false, 0);
        return (true, a - b);
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) return (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a % b);
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "SafeMath: subtraction overflow");
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) return 0;
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: division by zero");
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: modulo by zero");
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        return a - b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryDiv}.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a % b;
    }
}

// File: contracts/CoFiXV2DAO.sol

pragma solidity 0.6.12;

contract CoFiXV2DAO is ICoFiXV2DAO, ReentrancyGuard {

    using SafeMath for uint256;

    /* ========== STATE ============== */

    uint8 public flag; 

    uint32  public startedBlock;
    // uint32  public lastCollectingBlock;
    uint32 public lastBlock;
    uint128 public redeemedAmount;
    uint128 public quotaAmount;

    uint8 constant DAO_FLAG_UNINITIALIZED    = 0;
    uint8 constant DAO_FLAG_INITIALIZED      = 1;
    uint8 constant DAO_FLAG_ACTIVE           = 2;
    uint8 constant DAO_FLAG_NO_STAKING       = 3;
    uint8 constant DAO_FLAG_PAUSED           = 4;
    uint8 constant DAO_FLAG_SHUTDOWN         = 127;

    /* ========== PARAMETERS ============== */

    uint256 constant DAO_REPURCHASE_PRICE_DEVIATION = 10;  // price deviation < 5% 
    uint256 constant _oracleFee = 0.01 ether;


    /* ========== ADDRESSES ============== */

    address public cofiToken;

    address public factory;

    address public governance;

    /* ========== CONSTRUCTOR ========== */

    receive() external payable {
    }

    constructor(address _cofiToken, address _factory) public {
        cofiToken = _cofiToken;
        factory = _factory;
        governance = msg.sender;
        flag = DAO_FLAG_INITIALIZED;
    }

    /* ========== MODIFIERS ========== */

    modifier onlyGovernance() 
    {
        require(msg.sender == governance, "CDAO: not governance");
        _;
    }

    modifier whenActive() 
    {
        require(flag == DAO_FLAG_ACTIVE, "CDAO: not active");
        _;
    }

    /* ========== GOVERNANCE ========== */

    function setGovernance(address _new) external override onlyGovernance {
        governance = _new;
    }

    function start() override external onlyGovernance
    {  
        require(flag == DAO_FLAG_INITIALIZED, "CDAO: not initialized");

        startedBlock = uint32(block.number);
        flag = DAO_FLAG_ACTIVE;
        emit FlagSet(address(msg.sender), uint256(DAO_FLAG_ACTIVE));
    }

    function pause() external onlyGovernance
    {
        flag = DAO_FLAG_PAUSED;
        emit FlagSet(address(msg.sender), uint256(DAO_FLAG_PAUSED));
    }

    function resume() external onlyGovernance
    {
        flag = DAO_FLAG_ACTIVE;
        emit FlagSet(address(msg.sender), uint256(DAO_FLAG_ACTIVE));
    }

    function totalETHRewards()
        external view returns (uint256) 
    {
       return address(this).balance;
    }

    function migrateTo(address _newDAO) external onlyGovernance
    {
        require(flag == DAO_FLAG_PAUSED, "CDAO: not paused");
        
        if(address(this).balance > 0) {
            TransferHelper.safeTransferETH(_newDAO, address(this).balance);
        }
        // ICoFiXV2DAO(_newDAO).addETHReward{value: address(this).balance}();

        uint256 _cofiTokenAmount = ICoFiToken(cofiToken).balanceOf(address(this));
        if (_cofiTokenAmount > 0) {
            ICoFiToken(cofiToken).transfer(_newDAO, _cofiTokenAmount);
        }
    }

    function burnCofi(uint256 amount) external onlyGovernance {
        require(amount > 0, "CDAO: illegal amount");

        uint256 _cofiTokenAmount = ICoFiToken(cofiToken).balanceOf(address(this));

        require(_cofiTokenAmount >= amount, "CDAO: insufficient cofi");

        ICoFiToken(cofiToken).transfer(address(0x1), amount);
        emit CoFiBurn(address(msg.sender), amount);
    }

    /* ========== MAIN ========== */

    // function addETHReward() 
    //     override
    //     external
    //     payable
    // { }

    function redeem(uint256 amount) 
        external payable nonReentrant whenActive
    {
        require(address(this).balance > 0, "CDAO: insufficient balance");
        require (msg.value == _oracleFee, "CDAO: !oracleFee");

        // check the repurchasing quota
        uint256 quota = quotaOf();

        uint256 price;
        {
            // check if the price is steady
            (uint256 ethAmount, uint256 tokenAmount, uint256 avg, ) = ICoFiXV2Controller(ICoFiXV2Factory(factory).getController())
                    .getLatestPriceAndAvgVola{value: msg.value}(cofiToken);
            price = tokenAmount.mul(1e18).div(ethAmount);

            uint256 diff = price > avg ? (price - avg) : (avg - price);
            bool isDeviated = (diff.mul(100) < avg.mul(DAO_REPURCHASE_PRICE_DEVIATION))? false : true;
            require(isDeviated == false, "CDAO: price deviation"); // validate
        }

        // check if there is sufficient quota for repurchase
        require (amount <= quota, "CDAO: insufficient quota");
        require (amount.mul(1e18) <= address(this).balance.mul(price), "CDAO: insufficient balance2");

        redeemedAmount = uint128(amount.add(redeemedAmount));
        quotaAmount = uint128(quota.sub(amount));
        lastBlock = uint32(block.number);

        uint256 amountEthOut = amount.mul(1e18).div(price);

        // transactions
        ICoFiToken(cofiToken).transferFrom(address(msg.sender), address(this), amount);
        TransferHelper.safeTransferETH(msg.sender, amountEthOut);
    }

    function _quota() internal view returns (uint256 quota) 
    {
        uint256 n = 100;
        uint256 intv = (lastBlock == 0) ? 
            (block.number).sub(startedBlock) : (block.number).sub(uint256(lastBlock));
        uint256 _acc = (n * intv > 30_000) ? 30_000 : (n * intv);

        // check if total amounts overflow
        uint256 total = _acc.mul(1e18).add(quotaAmount);
        if (total > uint256(30_000).mul(1e18)){
            quota = uint256(30_000).mul(1e18);
        } else{
            quota = total;
        }
    }

    /* ========== VIEWS ========== */

    function quotaOf() public view returns (uint256 quota) 
    {
        return _quota();
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_cofiToken","type":"address"},{"internalType":"address","name":"_factory","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"gov","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"CoFiBurn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"gov","type":"address"},{"indexed":false,"internalType":"uint256","name":"flag","type":"uint256"}],"name":"FlagSet","type":"event"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnCofi","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cofiToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flag","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastBlock","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newDAO","type":"address"}],"name":"migrateTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"quotaAmount","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"quotaOf","outputs":[{"internalType":"uint256","name":"quota","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"redeem","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"redeemedAmount","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"resume","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_new","type":"address"}],"name":"setGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"start","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startedBlock","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalETHRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b506040516117b53803806117b58339818101604052604081101561003357600080fd5b50805160209091015160016000819055600380546001600160a01b039485166001600160a01b031991821617909155600480549490931693811693909317909155600580549092163317909155805460ff19168117905561171c806100996000396000f3fe6080604052600436106101125760003560e01c8063806b984f116100a5578063ab033ea911610074578063be9a655511610059578063be9a655514610340578063c45a015514610355578063db006a751461036a57610119565b8063ab033ea9146102eb578063bc472e291461032b57610119565b8063806b984f146102815780638456cb5914610296578063890eba68146102ab578063a7731842146102d657610119565b80634ddaf8f2116100e15780634ddaf8f2146101c05780635aa6e675146102005780635d941dd51461023e5780636d6577a41461025357610119565b8063046f7da21461011e5780631a57dffb146101355780631dec47fe1461015f5780633f83e9c81461019957610119565b3661011957005b600080fd5b34801561012a57600080fd5b50610133610387565b005b34801561014157600080fd5b506101336004803603602081101561015857600080fd5b503561045e565b34801561016b57600080fd5b506101746106f9565b604080516fffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156101a557600080fd5b506101ae610711565b60408051918252519081900360200190f35b3480156101cc57600080fd5b50610133600480360360208110156101e357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610720565b34801561020c57600080fd5b50610215610948565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561024a57600080fd5b50610215610964565b34801561025f57600080fd5b50610268610980565b6040805163ffffffff9092168252519081900360200190f35b34801561028d57600080fd5b50610268610991565b3480156102a257600080fd5b506101336109a6565b3480156102b757600080fd5b506102c0610a7d565b6040805160ff9092168252519081900360200190f35b3480156102e257600080fd5b50610174610a86565b3480156102f757600080fd5b506101336004803603602081101561030e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610aab565b34801561033757600080fd5b506101ae610b5e565b34801561034c57600080fd5b50610133610b62565b34801561036157600080fd5b50610215610cc1565b6101336004803603602081101561038057600080fd5b5035610cdd565b60055473ffffffffffffffffffffffffffffffffffffffff1633146103f3576040805162461bcd60e51b815260206004820152601460248201527f4344414f3a206e6f7420676f7665726e616e6365000000000000000000000000604482015290519081900360640190fd5b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600290811790915560408051338152602081019290925280517f5f136d3b405931da808102d65c5c331d1bfcbd4e7127777914d480cd106ca5ae9281900390910190a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146104ca576040805162461bcd60e51b815260206004820152601460248201527f4344414f3a206e6f7420676f7665726e616e6365000000000000000000000000604482015290519081900360640190fd5b6000811161051f576040805162461bcd60e51b815260206004820152601460248201527f4344414f3a20696c6c6567616c20616d6f756e74000000000000000000000000604482015290519081900360640190fd5b600354604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b15801561059057600080fd5b505afa1580156105a4573d6000803e3d6000fd5b505050506040513d60208110156105ba57600080fd5b5051905081811015610613576040805162461bcd60e51b815260206004820152601760248201527f4344414f3a20696e73756666696369656e7420636f6669000000000000000000604482015290519081900360640190fd5b600354604080517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600482015260248101859052905173ffffffffffffffffffffffffffffffffffffffff9092169163a9059cbb916044808201926020929091908290030181600087803b15801561068e57600080fd5b505af11580156106a2573d6000803e3d6000fd5b505050506040513d60208110156106b857600080fd5b5050604080513381526020810184905281517f6726e414a967f4e11d89271b4501038b28c3bf4ff8e3d8c1ccba8bbe517fbc8e929181900390910190a15050565b6002546fffffffffffffffffffffffffffffffff1681565b600061071b611308565b905090565b60055473ffffffffffffffffffffffffffffffffffffffff16331461078c576040805162461bcd60e51b815260206004820152601460248201527f4344414f3a206e6f7420676f7665726e616e6365000000000000000000000000604482015290519081900360640190fd5b60015460ff166004146107e6576040805162461bcd60e51b815260206004820152601060248201527f4344414f3a206e6f742070617573656400000000000000000000000000000000604482015290519081900360640190fd5b47156107f6576107f681476113ff565b600354604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b15801561086757600080fd5b505afa15801561087b573d6000803e3d6000fd5b505050506040513d602081101561089157600080fd5b50519050801561094457600354604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b15801561091757600080fd5b505af115801561092b573d6000803e3d6000fd5b505050506040513d602081101561094157600080fd5b50505b5050565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b600154610100900463ffffffff1681565b60015465010000000000900463ffffffff1681565b60055473ffffffffffffffffffffffffffffffffffffffff163314610a12576040805162461bcd60e51b815260206004820152601460248201527f4344414f3a206e6f7420676f7665726e616e6365000000000000000000000000604482015290519081900360640190fd5b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600490811790915560408051338152602081019290925280517f5f136d3b405931da808102d65c5c331d1bfcbd4e7127777914d480cd106ca5ae9281900390910190a1565b60015460ff1681565b600154690100000000000000000090046fffffffffffffffffffffffffffffffff1681565b60055473ffffffffffffffffffffffffffffffffffffffff163314610b17576040805162461bcd60e51b815260206004820152601460248201527f4344414f3a206e6f7420676f7665726e616e6365000000000000000000000000604482015290519081900360640190fd5b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b4790565b60055473ffffffffffffffffffffffffffffffffffffffff163314610bce576040805162461bcd60e51b815260206004820152601460248201527f4344414f3a206e6f7420676f7665726e616e6365000000000000000000000000604482015290519081900360640190fd5b6001805460ff1614610c27576040805162461bcd60e51b815260206004820152601560248201527f4344414f3a206e6f7420696e697469616c697a65640000000000000000000000604482015290519081900360640190fd5b6001805460027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff9091166101004363ffffffff1602177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790915560408051338152602081019290925280517f5f136d3b405931da808102d65c5c331d1bfcbd4e7127777914d480cd106ca5ae9281900390910190a1565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b60026000541415610d35576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600081905560015460ff1614610d94576040805162461bcd60e51b815260206004820152601060248201527f4344414f3a206e6f742061637469766500000000000000000000000000000000604482015290519081900360640190fd5b60004711610de9576040805162461bcd60e51b815260206004820152601a60248201527f4344414f3a20696e73756666696369656e742062616c616e6365000000000000604482015290519081900360640190fd5b662386f26fc100003414610e44576040805162461bcd60e51b815260206004820152601060248201527f4344414f3a20216f7261636c6546656500000000000000000000000000000000604482015290519081900360640190fd5b6000610e4e610711565b9050600080600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633018205f6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ebe57600080fd5b505afa158015610ed2573d6000803e3d6000fd5b505050506040513d6020811015610ee857600080fd5b5051600354604080517fb859b41500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201529051919092169163b859b41591349160248082019260809290919082900301818588803b158015610f6157600080fd5b505af1158015610f75573d6000803e3d6000fd5b50505050506040513d6080811015610f8c57600080fd5b50805160208201516040909201519094509092509050610fbe83610fb884670de0b6b3a7640000611522565b90611584565b93506000818511610fd157848203610fd5565b8185035b90506000610fe483600a611522565b610fef836064611522565b10610ffb576001610ffe565b60005b90508015611053576040805162461bcd60e51b815260206004820152601560248201527f4344414f3a20707269636520646576696174696f6e0000000000000000000000604482015290519081900360640190fd5b5050505050818311156110ad576040805162461bcd60e51b815260206004820152601860248201527f4344414f3a20696e73756666696369656e742071756f74610000000000000000604482015290519081900360640190fd5b6110b74782611522565b6110c984670de0b6b3a7640000611522565b111561111c576040805162461bcd60e51b815260206004820152601b60248201527f4344414f3a20696e73756666696369656e742062616c616e6365320000000000604482015290519081900360640190fd5b600154611149908490690100000000000000000090046fffffffffffffffffffffffffffffffff166115eb565b600180546fffffffffffffffffffffffffffffffff929092166901000000000000000000027fffffffffffffff00000000000000000000000000000000ffffffffffffffffff9092169190911790556111a28284611645565b600280546fffffffffffffffffffffffffffffffff929092167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911790556001805463ffffffff43811665010000000000027fffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffff90921691909117909155600090611243908390610fb8908790670de0b6b3a76400009061152216565b600354604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101889052905192935073ffffffffffffffffffffffffffffffffffffffff909116916323b872dd916064808201926020929091908290030181600087803b1580156112c657600080fd5b505af11580156112da573d6000803e3d6000fd5b505050506040513d60208110156112f057600080fd5b506112fd905033826113ff565b505060016000555050565b600154600090606490829065010000000000900463ffffffff161561134d5760015461134890439063ffffffff6501000000000090910481169061164516565b61136a565b60015461136a90439063ffffffff61010090910481169061164516565b905060006175308284021161138157818302611385565b6175305b6002549091506000906113bc906fffffffffffffffffffffffffffffffff166113b684670de0b6b3a7640000611522565b906115eb565b90506113d2617530670de0b6b3a7640000611522565b8111156113f4576113ed617530670de0b6b3a7640000611522565b94506113f8565b8094505b5050505090565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b6020831061147657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611439565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146114d8576040519150601f19603f3d011682016040523d82523d6000602084013e6114dd565b606091505b505090508061151d5760405162461bcd60e51b81526004018080602001828103825260238152602001806116c46023913960400191505060405180910390fd5b505050565b6000826115315750600061157e565b8282028284828161153e57fe5b041461157b5760405162461bcd60e51b81526004018080602001828103825260218152602001806116a36021913960400191505060405180910390fd5b90505b92915050565b60008082116115da576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816115e357fe5b049392505050565b60008282018381101561157b576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008282111561169c576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b5090039056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544a26469706673582212203bc09006ee83e3e52f44a6a67ff9da36990c6ec777d2865ad36ff6669b3a765564736f6c634300060c00330000000000000000000000001a23a6bfbadb59fa563008c0fb7cf96dfcf34ea100000000000000000000000039816b841436a57729723d9da127805755d2cb51

Deployed Bytecode

0x6080604052600436106101125760003560e01c8063806b984f116100a5578063ab033ea911610074578063be9a655511610059578063be9a655514610340578063c45a015514610355578063db006a751461036a57610119565b8063ab033ea9146102eb578063bc472e291461032b57610119565b8063806b984f146102815780638456cb5914610296578063890eba68146102ab578063a7731842146102d657610119565b80634ddaf8f2116100e15780634ddaf8f2146101c05780635aa6e675146102005780635d941dd51461023e5780636d6577a41461025357610119565b8063046f7da21461011e5780631a57dffb146101355780631dec47fe1461015f5780633f83e9c81461019957610119565b3661011957005b600080fd5b34801561012a57600080fd5b50610133610387565b005b34801561014157600080fd5b506101336004803603602081101561015857600080fd5b503561045e565b34801561016b57600080fd5b506101746106f9565b604080516fffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156101a557600080fd5b506101ae610711565b60408051918252519081900360200190f35b3480156101cc57600080fd5b50610133600480360360208110156101e357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610720565b34801561020c57600080fd5b50610215610948565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561024a57600080fd5b50610215610964565b34801561025f57600080fd5b50610268610980565b6040805163ffffffff9092168252519081900360200190f35b34801561028d57600080fd5b50610268610991565b3480156102a257600080fd5b506101336109a6565b3480156102b757600080fd5b506102c0610a7d565b6040805160ff9092168252519081900360200190f35b3480156102e257600080fd5b50610174610a86565b3480156102f757600080fd5b506101336004803603602081101561030e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610aab565b34801561033757600080fd5b506101ae610b5e565b34801561034c57600080fd5b50610133610b62565b34801561036157600080fd5b50610215610cc1565b6101336004803603602081101561038057600080fd5b5035610cdd565b60055473ffffffffffffffffffffffffffffffffffffffff1633146103f3576040805162461bcd60e51b815260206004820152601460248201527f4344414f3a206e6f7420676f7665726e616e6365000000000000000000000000604482015290519081900360640190fd5b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600290811790915560408051338152602081019290925280517f5f136d3b405931da808102d65c5c331d1bfcbd4e7127777914d480cd106ca5ae9281900390910190a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146104ca576040805162461bcd60e51b815260206004820152601460248201527f4344414f3a206e6f7420676f7665726e616e6365000000000000000000000000604482015290519081900360640190fd5b6000811161051f576040805162461bcd60e51b815260206004820152601460248201527f4344414f3a20696c6c6567616c20616d6f756e74000000000000000000000000604482015290519081900360640190fd5b600354604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b15801561059057600080fd5b505afa1580156105a4573d6000803e3d6000fd5b505050506040513d60208110156105ba57600080fd5b5051905081811015610613576040805162461bcd60e51b815260206004820152601760248201527f4344414f3a20696e73756666696369656e7420636f6669000000000000000000604482015290519081900360640190fd5b600354604080517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600482015260248101859052905173ffffffffffffffffffffffffffffffffffffffff9092169163a9059cbb916044808201926020929091908290030181600087803b15801561068e57600080fd5b505af11580156106a2573d6000803e3d6000fd5b505050506040513d60208110156106b857600080fd5b5050604080513381526020810184905281517f6726e414a967f4e11d89271b4501038b28c3bf4ff8e3d8c1ccba8bbe517fbc8e929181900390910190a15050565b6002546fffffffffffffffffffffffffffffffff1681565b600061071b611308565b905090565b60055473ffffffffffffffffffffffffffffffffffffffff16331461078c576040805162461bcd60e51b815260206004820152601460248201527f4344414f3a206e6f7420676f7665726e616e6365000000000000000000000000604482015290519081900360640190fd5b60015460ff166004146107e6576040805162461bcd60e51b815260206004820152601060248201527f4344414f3a206e6f742070617573656400000000000000000000000000000000604482015290519081900360640190fd5b47156107f6576107f681476113ff565b600354604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b15801561086757600080fd5b505afa15801561087b573d6000803e3d6000fd5b505050506040513d602081101561089157600080fd5b50519050801561094457600354604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b15801561091757600080fd5b505af115801561092b573d6000803e3d6000fd5b505050506040513d602081101561094157600080fd5b50505b5050565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b600154610100900463ffffffff1681565b60015465010000000000900463ffffffff1681565b60055473ffffffffffffffffffffffffffffffffffffffff163314610a12576040805162461bcd60e51b815260206004820152601460248201527f4344414f3a206e6f7420676f7665726e616e6365000000000000000000000000604482015290519081900360640190fd5b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600490811790915560408051338152602081019290925280517f5f136d3b405931da808102d65c5c331d1bfcbd4e7127777914d480cd106ca5ae9281900390910190a1565b60015460ff1681565b600154690100000000000000000090046fffffffffffffffffffffffffffffffff1681565b60055473ffffffffffffffffffffffffffffffffffffffff163314610b17576040805162461bcd60e51b815260206004820152601460248201527f4344414f3a206e6f7420676f7665726e616e6365000000000000000000000000604482015290519081900360640190fd5b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b4790565b60055473ffffffffffffffffffffffffffffffffffffffff163314610bce576040805162461bcd60e51b815260206004820152601460248201527f4344414f3a206e6f7420676f7665726e616e6365000000000000000000000000604482015290519081900360640190fd5b6001805460ff1614610c27576040805162461bcd60e51b815260206004820152601560248201527f4344414f3a206e6f7420696e697469616c697a65640000000000000000000000604482015290519081900360640190fd5b6001805460027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff9091166101004363ffffffff1602177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790915560408051338152602081019290925280517f5f136d3b405931da808102d65c5c331d1bfcbd4e7127777914d480cd106ca5ae9281900390910190a1565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b60026000541415610d35576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600081905560015460ff1614610d94576040805162461bcd60e51b815260206004820152601060248201527f4344414f3a206e6f742061637469766500000000000000000000000000000000604482015290519081900360640190fd5b60004711610de9576040805162461bcd60e51b815260206004820152601a60248201527f4344414f3a20696e73756666696369656e742062616c616e6365000000000000604482015290519081900360640190fd5b662386f26fc100003414610e44576040805162461bcd60e51b815260206004820152601060248201527f4344414f3a20216f7261636c6546656500000000000000000000000000000000604482015290519081900360640190fd5b6000610e4e610711565b9050600080600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633018205f6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ebe57600080fd5b505afa158015610ed2573d6000803e3d6000fd5b505050506040513d6020811015610ee857600080fd5b5051600354604080517fb859b41500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201529051919092169163b859b41591349160248082019260809290919082900301818588803b158015610f6157600080fd5b505af1158015610f75573d6000803e3d6000fd5b50505050506040513d6080811015610f8c57600080fd5b50805160208201516040909201519094509092509050610fbe83610fb884670de0b6b3a7640000611522565b90611584565b93506000818511610fd157848203610fd5565b8185035b90506000610fe483600a611522565b610fef836064611522565b10610ffb576001610ffe565b60005b90508015611053576040805162461bcd60e51b815260206004820152601560248201527f4344414f3a20707269636520646576696174696f6e0000000000000000000000604482015290519081900360640190fd5b5050505050818311156110ad576040805162461bcd60e51b815260206004820152601860248201527f4344414f3a20696e73756666696369656e742071756f74610000000000000000604482015290519081900360640190fd5b6110b74782611522565b6110c984670de0b6b3a7640000611522565b111561111c576040805162461bcd60e51b815260206004820152601b60248201527f4344414f3a20696e73756666696369656e742062616c616e6365320000000000604482015290519081900360640190fd5b600154611149908490690100000000000000000090046fffffffffffffffffffffffffffffffff166115eb565b600180546fffffffffffffffffffffffffffffffff929092166901000000000000000000027fffffffffffffff00000000000000000000000000000000ffffffffffffffffff9092169190911790556111a28284611645565b600280546fffffffffffffffffffffffffffffffff929092167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911790556001805463ffffffff43811665010000000000027fffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffff90921691909117909155600090611243908390610fb8908790670de0b6b3a76400009061152216565b600354604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101889052905192935073ffffffffffffffffffffffffffffffffffffffff909116916323b872dd916064808201926020929091908290030181600087803b1580156112c657600080fd5b505af11580156112da573d6000803e3d6000fd5b505050506040513d60208110156112f057600080fd5b506112fd905033826113ff565b505060016000555050565b600154600090606490829065010000000000900463ffffffff161561134d5760015461134890439063ffffffff6501000000000090910481169061164516565b61136a565b60015461136a90439063ffffffff61010090910481169061164516565b905060006175308284021161138157818302611385565b6175305b6002549091506000906113bc906fffffffffffffffffffffffffffffffff166113b684670de0b6b3a7640000611522565b906115eb565b90506113d2617530670de0b6b3a7640000611522565b8111156113f4576113ed617530670de0b6b3a7640000611522565b94506113f8565b8094505b5050505090565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b6020831061147657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611439565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146114d8576040519150601f19603f3d011682016040523d82523d6000602084013e6114dd565b606091505b505090508061151d5760405162461bcd60e51b81526004018080602001828103825260238152602001806116c46023913960400191505060405180910390fd5b505050565b6000826115315750600061157e565b8282028284828161153e57fe5b041461157b5760405162461bcd60e51b81526004018080602001828103825260218152602001806116a36021913960400191505060405180910390fd5b90505b92915050565b60008082116115da576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816115e357fe5b049392505050565b60008282018381101561157b576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008282111561169c576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b5090039056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544a26469706673582212203bc09006ee83e3e52f44a6a67ff9da36990c6ec777d2865ad36ff6669b3a765564736f6c634300060c0033

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

0000000000000000000000001a23a6bfbadb59fa563008c0fb7cf96dfcf34ea100000000000000000000000039816b841436a57729723d9da127805755d2cb51

-----Decoded View---------------
Arg [0] : _cofiToken (address): 0x1a23a6BfBAdB59fa563008c0fB7cf96dfCF34Ea1
Arg [1] : _factory (address): 0x39816B841436a57729723d9DA127805755d2CB51

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000001a23a6bfbadb59fa563008c0fb7cf96dfcf34ea1
Arg [1] : 00000000000000000000000039816b841436a57729723d9da127805755d2cb51


Deployed Bytecode Sourcemap

21018:5899:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23219:158;;;;;;;;;;;;;:::i;:::-;;24081:399;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24081:399:0;;:::i;21330:26::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26817:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;23513:560;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23513:560:0;;;;:::i;21974:25::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21910:24;;;;;;;;;;;;;:::i;21186:27::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21264:23;;;;;;;;;;;;;:::i;23054:157::-;;;;;;;;;;;;;:::i;21159:17::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21294:29;;;;;;;;;;;;;:::i;22643:106::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22643:106:0;;;;:::i;23385:120::-;;;;;;;;;;;;;:::i;22757:289::-;;;;;;;;;;;;;:::i;21943:22::-;;;;;;;;;;;;;:::i;24637:1571::-;;;;;;;;;;;;;;;;-1:-1:-1;24637:1571:0;;:::i;23219:158::-;22415:10;;;;22401;:24;22393:57;;;;;-1:-1:-1;;;22393:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23277:4:::1;:22:::0;;;::::1;21510:1;23277:22:::0;;::::1;::::0;;;23315:54:::1;::::0;;23331:10:::1;23315:54:::0;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;;;;;;;;::::1;23219:158::o:0;24081:399::-;22415:10;;;;22401;:24;22393:57;;;;;-1:-1:-1;;;22393:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24167:1:::1;24158:6;:10;24150:43;;;::::0;;-1:-1:-1;;;24150:43:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;24244:9;::::0;24233:46:::1;::::0;;;;;24273:4:::1;24233:46;::::0;::::1;::::0;;;24206:24:::1;::::0;24244:9:::1;;::::0;24233:31:::1;::::0;:46;;;;;::::1;::::0;;;;;;;;24244:9;24233:46;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;24233:46:0;;-1:-1:-1;24300:26:0;;::::1;;24292:62;;;::::0;;-1:-1:-1;;;24292:62:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;24378:9;::::0;24367:52:::1;::::0;;;;;24378:9;24367:52:::1;::::0;::::1;::::0;;;;;;;;;24378:9:::1;::::0;;::::1;::::0;24367:30:::1;::::0;:52;;;;;::::1;::::0;;;;;;;;;24378:9:::1;::::0;24367:52;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;24435:37:0::1;::::0;;24452:10:::1;24435:37:::0;;24367:52:::1;24435:37:::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;22461:1;24081:399:::0;:::o;21330:26::-;;;;;;:::o;26817:95::-;26857:13;26896:8;:6;:8::i;:::-;26889:15;;26817:95;:::o;23513:560::-;22415:10;;;;22401;:24;22393:57;;;;;-1:-1:-1;;;22393:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23597:4:::1;::::0;:23:::1;:4;21612:1;23597:23;23589:52;;;::::0;;-1:-1:-1;;;23589:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;23665:21;:25:::0;23662:119:::1;;23707:62;23738:7;23747:21;23707:30;:62::i;:::-;23910:9;::::0;23899:46:::1;::::0;;;;;23939:4:::1;23899:46;::::0;::::1;::::0;;;23872:24:::1;::::0;23910:9:::1;;::::0;23899:31:::1;::::0;:46;;;;;::::1;::::0;;;;;;;;23910:9;23899:46;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;23899:46:0;;-1:-1:-1;23960:20:0;;23956:110:::1;;24008:9;::::0;23997:57:::1;::::0;;;;;24008:9:::1;23997:57:::0;;::::1;;::::0;::::1;::::0;;;;;;;;;24008:9;;;::::1;::::0;23997:30:::1;::::0;:57;;;;;::::1;::::0;;;;;;;;24008:9:::1;::::0;23997:57;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;23956:110:0::1;22461:1;23513:560:::0;:::o;21974:25::-;;;;;;:::o;21910:24::-;;;;;;:::o;21186:27::-;;;;;;;;;:::o;21264:23::-;;;;;;;;;:::o;23054:157::-;22415:10;;;;22401;:24;22393:57;;;;;-1:-1:-1;;;22393:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23111:4:::1;:22:::0;;;::::1;21612:1;23111:22:::0;;::::1;::::0;;;23149:54:::1;::::0;;23165:10:::1;23149:54:::0;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;;;;;;;;::::1;23054:157::o:0;21159:17::-;;;;;;:::o;21294:29::-;;;;;;;;;:::o;22643:106::-;22415:10;;;;22401;:24;22393:57;;;;;-1:-1:-1;;;22393:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;22724:10:::1;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;22643:106::o;23385:120::-;23476:21;23385:120;:::o;22757:289::-;22415:10;;;;22401;:24;22393:57;;;;;-1:-1:-1;;;22393:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21459:1:::1;22833:4:::0;;:28:::1;:4;:28;22825:62;;;::::0;;-1:-1:-1;;;22825:62:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;22900:12;:35:::0;;21510:1:::1;22900:35:::0;;;::::1;;22922:12;22900:35;;;;22946:22:::0;::::1;::::0;::::1;::::0;;;22984:54:::1;::::0;;23000:10:::1;22984:54:::0;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;;;;;;;;::::1;22757:289::o:0;21943:22::-;;;;;;:::o;24637:1571::-;10121:1;10727:7;;:19;;10719:63;;;;;-1:-1:-1;;;10719:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10121:1;10860:7;:18;;;22525:4:::1;::::0;:23:::1;:4;:23;22517:52;;;::::0;;-1:-1:-1;;;22517:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;24768:1:::2;24744:21;:25;24736:64;;;::::0;;-1:-1:-1;;;24736:64:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;21840:10;24820:9;:23;24811:53;;;::::0;;-1:-1:-1;;;24811:53:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;24918:13;24934:9;:7;:9::i;:::-;24918:25;;24956:13;25041:17:::0;25060:19:::2;25081:11:::0;25133:7:::2;;;;;;;;;;;25117:38;;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;25117:40:0;25224:9:::2;::::0;25098:136:::2;::::0;;;;;:107:::2;25224:9:::0;;::::2;25098:136;::::0;::::2;::::0;;;:107;;;::::2;::::0;::::2;::::0;25213:9:::2;::::0;25098:136;;;;;::::2;::::0;;;;;;;;;25213:9;25098:107;:136;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;25098:136:0;;::::2;::::0;::::2;::::0;;;;;;;;-1:-1:-1;25098:136:0;;-1:-1:-1;25098:136:0;-1:-1:-1;25257:36:0::2;25098:136:::0;25257:21:::2;25098:136:::0;25273:4:::2;25257:15;:21::i;:::-;:25:::0;::::2;:36::i;:::-;25249:44;;25310:12;25333:3;25325:5;:11;:43;;25362:5;25356:3;:11;25325:43;;;25348:3;25340:5;:11;25325:43;25310:58:::0;-1:-1:-1;25383:15:0::2;25418:39;:3:::0;21775:2:::2;25418:7;:39::i;:::-;25402:13;:4:::0;25411:3:::2;25402:8;:13::i;:::-;:55;25401:71;;25468:4;25401:71;;;25460:5;25401:71;25383:89:::0;-1:-1:-1;25495:19:0;::::2;25487:53;;;::::0;;-1:-1:-1;;;25487:53:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;22580:1;;;;;25657:5;25647:6;:15;;25638:53;;;::::0;;-1:-1:-1;;;25638:53:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;25731:32;:21;25757:5:::0;25731:25:::2;:32::i;:::-;25711:16;:6:::0;25722:4:::2;25711:10;:16::i;:::-;:52;;25702:93;;;::::0;;-1:-1:-1;;;25702:93:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;25844:14;::::0;25833:26:::2;::::0;:6;;25844:14;;::::2;;;25833:10;:26::i;:::-;25808:14;:52:::0;;::::2;::::0;;;::::2;::::0;::::2;::::0;;;::::2;::::0;;;::::2;::::0;;25893:17:::2;:5:::0;25903:6;25893:9:::2;:17::i;:::-;25871:11;:40:::0;;::::2;::::0;;;::::2;::::0;;;::::2;::::0;;;::::2;::::0;;;25922:32;;::::2;25941:12;25922:32:::0;::::2;::::0;::::2;::::0;;;::::2;::::0;;;::::2;::::0;;;25871:11:::2;::::0;25990:27:::2;::::0;26011:5;;25990:16:::2;::::0;:6;;26001:4:::2;::::0;25990:10:::2;:16;:::i;:27::-;26066:9;::::0;26055:78:::2;::::0;;;;;26098:10:::2;26055:78;::::0;::::2;::::0;26119:4:::2;26055:78:::0;;;;;;;;;;;;25967:50;;-1:-1:-1;26066:9:0::2;::::0;;::::2;::::0;26055:34:::2;::::0;:78;;;;;::::2;::::0;;;;;;;;;26066:9:::2;::::0;26055:78;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;26144:56:0::2;::::0;-1:-1:-1;26175:10:0::2;26187:12:::0;26144:30:::2;:56::i;:::-;-1:-1:-1::0;;10077:1:0;11039:7;:22;-1:-1:-1;;24637:1571:0:o;26216:552::-;26331:9;;26257:13;;26301:3;;26257:13;;26331:9;;;;;:14;26330:106;;26425:9;;26398:38;;26399:12;;26425:9;;;;;;;;26398:18;:38;:::i;:::-;26330:106;;;26382:12;;26363:32;;26364:12;;26382;;;;;;;;26363:18;:32;:::i;:::-;26315:121;;26447:12;26474:6;26467:4;26463:1;:8;:17;26462:41;;26498:4;26494:1;:8;26462:41;;;26484:6;26462:41;26595:11;;26447:56;;-1:-1:-1;26560:13:0;;26576:31;;26595:11;;26576:14;26447:56;26585:4;26576:8;:14::i;:::-;:18;;:31::i;:::-;26560:47;-1:-1:-1;26630:25:0;26638:6;26650:4;26630:19;:25::i;:::-;26622:5;:33;26618:143;;;26679:25;26687:6;26699:4;26679:19;:25::i;:::-;26671:33;;26618:143;;;26744:5;26736:13;;26618:143;26216:552;;;;;:::o;13292:195::-;13400:12;;;13362;13400;;;;;;;;;13379:7;;;;13393:5;;13379:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13361:52;;;13432:7;13424:55;;;;-1:-1:-1;;;13424:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13292:195;;;:::o;17166:220::-;17224:7;17248:6;17244:20;;-1:-1:-1;17263:1:0;17256:8;;17244:20;17287:5;;;17291:1;17287;:5;:1;17311:5;;;;;:10;17303:56;;;;-1:-1:-1;;;17303:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17377:1;-1:-1:-1;17166:220:0;;;;;:::o;17864:153::-;17922:7;17954:1;17950;:5;17942:44;;;;;-1:-1:-1;;;17942:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18008:1;18004;:5;;;;;;;17864:153;-1:-1:-1;;;17864:153:0:o;16287:179::-;16345:7;16377:5;;;16401:6;;;;16393:46;;;;;-1:-1:-1;;;16393:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;16749:158;16807:7;16840:1;16835;:6;;16827:49;;;;;-1:-1:-1;;;16827:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16894:5:0;;;16749:158::o

Swarm Source

ipfs://3bc09006ee83e3e52f44a6a67ff9da36990c6ec777d2865ad36ff6669b3a7655

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  ]
[ 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.