ETH Price: $1,884.69 (+5.52%)

Contract

0xb98a6BE6d191B0C5976177C9598bf1dB6d46fdE9
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw149546722022-06-13 7:03:441023 days ago1655103824IN
0xb98a6BE6...B6d46fdE9
0 ETH0.0280467637.99772766
Withdraw143131802022-03-03 9:18:061125 days ago1646299086IN
0xb98a6BE6...B6d46fdE9
0 ETH0.0088761531.08225563
Withdraw142869622022-02-27 7:52:511129 days ago1645948371IN
0xb98a6BE6...B6d46fdE9
0 ETH0.0069981330.2206675
Withdraw142831862022-02-26 17:48:491129 days ago1645897729IN
0xb98a6BE6...B6d46fdE9
0 ETH0.007533532.53424748
User_checkpoint142817312022-02-26 12:30:311129 days ago1645878631IN
0xb98a6BE6...B6d46fdE9
0 ETH0.0060334529.69452392
Kill_me142799852022-02-26 6:06:581130 days ago1645855618IN
0xb98a6BE6...B6d46fdE9
0 ETH0.0024390450.10463217
Deposit142766662022-02-25 17:41:511130 days ago1645810911IN
0xb98a6BE6...B6d46fdE9
0 ETH0.0161463654.33723463
Deposit142743862022-02-25 9:14:001131 days ago1645780440IN
0xb98a6BE6...B6d46fdE9
0 ETH0.0095773240.00887539
Deposit142743642022-02-25 9:08:291131 days ago1645780109IN
0xb98a6BE6...B6d46fdE9
0 ETH0.0127507944.29387977
Deposit142731502022-02-25 4:31:061131 days ago1645763466IN
0xb98a6BE6...B6d46fdE9
0 ETH0.011076549.83132583
Deposit142728792022-02-25 3:30:131131 days ago1645759813IN
0xb98a6BE6...B6d46fdE9
0 ETH0.013615547.29772029
Deposit142676982022-02-24 8:20:511132 days ago1645690851IN
0xb98a6BE6...B6d46fdE9
0 ETH0.0189036565.66777336
Deposit142672962022-02-24 6:56:111132 days ago1645685771IN
0xb98a6BE6...B6d46fdE9
0 ETH0.0265964172.08365323

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
LiquidityGauge

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 9 : LiquidityGauge.sol
pragma solidity 0.8.10;

/***
 *@title Liquidity Gauge
 *@author InsureDAO
 * SPDX-License-Identifier: MIT
 *@notice Used for measuring liquidity and insurance
 */

//dao-contracts
import "./interfaces/dao/IGaugeController.sol";
import "./interfaces/dao/IInsureToken.sol";
import "./interfaces/dao/IMinter.sol";
import "./interfaces/dao/IVotingEscrow.sol";

import "./interfaces/pool/IOwnership.sol";

//libraries
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/utils/math/Math.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";

contract LiquidityGauge is ReentrancyGuard {
    event Deposit(address indexed provider, uint256 value);
    event Withdraw(address indexed provider, uint256 value);
    event UpdateLiquidityLimit(
        address user,
        uint256 original_balance,
        uint256 original_supply,
        uint256 working_balance,
        uint256 working_supply,
        uint256 voting_balance,
        uint256 voting_total
    );

    uint256 constant TOKENLESS_PRODUCTION = 40;
    uint256 constant BOOST_WARMUP = 86400 * 14;
    uint256 constant WEEK = 604800;

    //Contracts
    IMinter public minter;
    IInsureToken public insure_token;
    IERC20 public template;
    IGaugeController public controller;
    IVotingEscrow public voting_escrow;

    mapping(address => uint256) public balanceOf;
    uint256 public totalSupply;
    uint256 public future_epoch_time;

    // caller -> recipient -> can deposit?
    mapping(address => mapping(address => bool)) public approved_to_deposit;

    mapping(address => uint256) public working_balances;
    uint256 public working_supply;

    // The goal is to be able to calculate ∫(rate * balance / totalSupply dt) from 0 till checkpoint
    // All values are kept in units of being multiplied by 1e18
    uint256 public period; //modified from "int256 public period" since it never be minus.

    uint256[100000000000000000000000000000] public period_timestamp;

    // 1e18 * ∫(rate(t) / totalSupply(t) dt) from 0 till checkpoint
    uint256[100000000000000000000000000000] public integrate_inv_supply; // bump epoch when rate() changes. Iis(t)=int(r'(t)/S(t))dt (from CurveDAO whitepaper)

    // 1e18 * ∫(rate(t) / totalSupply(t) dt) from (last_action) till checkpoint
    mapping(address => uint256) public integrate_inv_supply_of;
    mapping(address => uint256) public integrate_checkpoint_of;

    // ∫(balance * rate(t) / totalSupply(t) dt) from 0 till checkpoint
    // Units rate * t = already number of coins per address to issue
    mapping(address => uint256) public integrate_fraction; //Mintable Token amount (include minted amount)

    uint256 public inflation_rate;
    bool public is_killed;

    IOwnership public immutable ownership;

    modifier onlyOwner() {
        require(
            ownership.owner() == msg.sender,
            "Caller is not allowed to operate"
        );
        _;
    }

    /***
     *@notice Contract constructor
     *@param _lp_addr Liquidity Pool contract address
     *@param _minter Minter contract address
     *@param _admin Admin who can kill the gauge
     */
    constructor(
        address _lp_addr,
        address _minter,
        address _ownership
    ) {
        require(_lp_addr != address(0));
        require(_minter != address(0));

        template = IERC20(_lp_addr);
        minter = IMinter(_minter);
        address _insure_addr = minter.insure_token();
        insure_token = IInsureToken(_insure_addr);
        controller = IGaugeController(minter.gauge_controller());
        voting_escrow = IVotingEscrow(controller.get_voting_escrow());
        period_timestamp[0] = block.timestamp;
        inflation_rate = insure_token.rate();
        future_epoch_time = insure_token.future_epoch_time_write();
        ownership = IOwnership(_ownership);
    }

    /***
     *@notice Calculate limits which depend on the amount of INSURE Token per-user.
     *        Effectively it calculates working balances to apply amplification
     *        of INSURE production by INSURE
     *@param _addr User address
     *@param _l User's amount of liquidity (LP tokens)
     *@param _L Total amount of liquidity (LP tokens)
     */
    function _update_liquidity_limit(
        address _addr,
        uint256 _l,
        uint256 _L
    ) internal {
        // To be called after totalSupply is updated
        uint256 _voting_balance = voting_escrow.balanceOf(
            _addr,
            block.timestamp
        );
        uint256 _voting_total = voting_escrow.totalSupply(block.timestamp);

        uint256 _lim = (_l * TOKENLESS_PRODUCTION) / 100;
        if (
            (_voting_total > 0) &&
            (block.timestamp > period_timestamp[0] + BOOST_WARMUP)
        ) {
            _lim +=
                (_L * _voting_balance * (100 - TOKENLESS_PRODUCTION)) /
                _voting_total /
                100;
        }

        _lim = min(_l, _lim);
        uint256 _old_bal = working_balances[_addr];
        working_balances[_addr] = _lim;
        uint256 _working_supply = working_supply + _lim - _old_bal;
        working_supply = _working_supply;

        emit UpdateLiquidityLimit(
            _addr,
            _l,
            _L,
            _lim,
            _working_supply,
            _voting_balance,
            _voting_total
        );
    }

    //to avoid "stack too deep"
    struct CheckPointParameters {
        uint256 period;
        uint256 period_time;
        uint256 integrate_inv_supply;
        uint256 rate;
        uint256 new_rate;
        uint256 prev_future_epoch;
        uint256 working_balance;
        uint256 working_supply;
    }

    /***
     *@notice Checkpoint for a user
     *@param _addr User address
     *
     *This function does,
     *1. Calculate Iis for All: Calc and add Iis for every week. Iis only increses over time.
     *2. Calculate Iu for _addr: Calc by (defferece between Iis(last time) and Iis(this time))* LP deposit amount of _addr(include INSURE locking boost)
     *
     * working_supply & working_balance = total_supply & total_balance with INSURE locking boost。
     * Check whitepaper about Iis and Iu.
     */
    function _checkpoint(address _addr) internal {
        CheckPointParameters memory _st;

        _st.period = period;
        _st.period_time = period_timestamp[_st.period];
        _st.integrate_inv_supply = integrate_inv_supply[_st.period];
        _st.rate = inflation_rate;
        _st.new_rate = _st.rate;
        _st.prev_future_epoch = future_epoch_time;
        if (_st.prev_future_epoch >= _st.period_time) {
            //update future_epoch_time & inflation_rate
            future_epoch_time = insure_token.future_epoch_time_write();
            _st.new_rate = insure_token.rate();
            inflation_rate = _st.new_rate;
        }
        controller.checkpoint_gauge(address(this));

        uint256 _working_balance = working_balances[_addr];
        uint256 _working_supply = working_supply;

        if (is_killed) {
            _st.rate = 0; // Stop distributing inflation as soon as killed
        }

        // Update integral of 1/supply
        if (block.timestamp > _st.period_time) {
            uint256 _prev_week_time = _st.period_time;
            uint256 _week_time;
            unchecked {
                _week_time = min(
                    ((_st.period_time + WEEK) / WEEK) * WEEK,
                    block.timestamp
                );
            }

            for (uint256 i; i < 500;) {
                uint256 _dt = _week_time - _prev_week_time;
                uint256 _w = controller.gauge_relative_weight(
                    address(this),
                    (_prev_week_time / WEEK) * WEEK
                );

                if (_working_supply > 0) {
                    if (
                        _st.prev_future_epoch >= _prev_week_time &&
                        _st.prev_future_epoch < _week_time
                    ) {
                        // If we went across one or multiple epochs, apply the rate
                        // of the first epoch until it ends, and then the rate of
                        // the last epoch.
                        // If more than one epoch is crossed - the gauge gets less,
                        // but that'd meen it wasn't called for more than 1 year
                        _st.integrate_inv_supply +=
                            (_st.rate *
                                _w *
                                (_st.prev_future_epoch - _prev_week_time)) /
                            _working_supply;
                        _st.rate = _st.new_rate;
                        _st.integrate_inv_supply +=
                            (_st.rate *
                                _w *
                                (_week_time - _st.prev_future_epoch)) /
                            _working_supply;
                    } else {
                        _st.integrate_inv_supply +=
                            (_st.rate * _w * _dt) /
                            _working_supply;
                    }
                    // On precisions of the calculation
                    // rate ~= 10e18
                    // last_weight > 0.01 * 1e18 = 1e16 (if pool weight is 1%)
                    // _working_supply ~= TVL * 1e18 ~= 1e26 ($100M for example)
                    // The largest loss is at dt = 1
                    // Loss is 1e-9 - acceptable
                }
                if (_week_time == block.timestamp) {
                    break;
                }
                _prev_week_time = _week_time;
                _week_time = min(_week_time + WEEK, block.timestamp);
                unchecked {
                    ++i;
                }
            }
        }

        _st.period += 1;
        period = _st.period;
        period_timestamp[_st.period] = block.timestamp;
        integrate_inv_supply[_st.period] = _st.integrate_inv_supply;

        // Update user-specific integrals
        // Calc the ΔIu of _addr and add it to Iu.
        integrate_fraction[_addr] +=
            (_working_balance *
                (_st.integrate_inv_supply - integrate_inv_supply_of[_addr])) /
            10 ** 18;
        integrate_inv_supply_of[_addr] = _st.integrate_inv_supply;
        integrate_checkpoint_of[_addr] = block.timestamp;
    }

    /***
     *@notice Record a checkpoint for `_addr`
     *@param _addr User address
     *@return bool success
     */
    function user_checkpoint(address _addr) external returns(bool) {
        require(
            (msg.sender == _addr) || (msg.sender == address(minter)),
            "dev: unauthorized"
        );
        _checkpoint(_addr);
        _update_liquidity_limit(_addr, balanceOf[_addr], totalSupply);
        return true;
    }

    /***
     *@notice Get the number of claimable tokens per user
     *@dev This function should be manually changed to "view" in the ABI
     *@return uint256 number of claimable tokens per user
     */
    function claimable_tokens(address _addr) external returns(uint256) {
        _checkpoint(_addr);
        return (integrate_fraction[_addr] -
            minter.minted(_addr, address(this)));
    }

    /***
     *@notice Kick `_addr` for abusing their boost
     *@dev Only if either they had another voting event, or their voting escrow lock expired
     *@param _addr Address to kick
     */
    function kick(address _addr) external {
        uint256 _t_last = integrate_checkpoint_of[_addr];
        uint256 _t_ve = voting_escrow.user_point_history__ts(
            _addr,
            voting_escrow.get_user_point_epoch(_addr)
        );
        uint256 _balance = balanceOf[_addr];

        require(
            voting_escrow.balanceOf(_addr, block.timestamp) == 0 ||
            _t_ve > _t_last,
            "dev: kick not allowed"
        );
        require(
            working_balances[_addr] > (_balance * TOKENLESS_PRODUCTION) / 100,
            "dev: kick not needed"
        );

        _checkpoint(_addr);
        _update_liquidity_limit(_addr, balanceOf[_addr], totalSupply);
    }

    /***
     *@notice Set whether `_addr` can deposit tokens for `msg.sender`
     *@param _addr Address to set approval on
     *@param can_deposit bool - can this account deposit for `msg.sender`?
     */
    function set_approve_deposit(address _addr, bool can_deposit) external {
        approved_to_deposit[_addr][msg.sender] = can_deposit;
    }

    /***
     *@notice Deposit `_value` LP tokens
     *@param _value Number of tokens to deposit
     *@param _addr Address to deposit for
     */
    function deposit(uint256 _value, address _addr) external nonReentrant {
        if (_addr != msg.sender) {
            require(approved_to_deposit[msg.sender][_addr], "Not approved");
        }

        _checkpoint(_addr);

        if (_value != 0) {
            uint256 _balance = balanceOf[_addr] + _value;
            uint256 _supply = totalSupply + _value;
            balanceOf[_addr] = _balance;
            totalSupply = _supply;

            _update_liquidity_limit(_addr, _balance, _supply);

            require(template.transferFrom(msg.sender, address(this), _value));
        }
        emit Deposit(_addr, _value);
    }

    /***
     *@notice Withdraw `_value` LP tokens
     *@param _value Number of tokens to withdraw
     */
    function withdraw(uint256 _value) external nonReentrant {
        _checkpoint(msg.sender);

        uint256 _balance = balanceOf[msg.sender] - _value;
        uint256 _supply = totalSupply - _value;
        balanceOf[msg.sender] = _balance;
        totalSupply = _supply;

        _update_liquidity_limit(msg.sender, _balance, _supply);

        require(template.transfer(msg.sender, _value));

        emit Withdraw(msg.sender, _value);
    }

    function integrate_checkpoint() external view returns(uint256) {
        return period_timestamp[period];
    }

    function kill_me() external onlyOwner {
        is_killed = !is_killed;
    }

    function min(uint256 a, uint256 b) internal pure returns(uint256) {
        return a < b ? a : b;
    }
}

File 2 of 9 : IGaugeController.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.10;

interface IGaugeController {
    function gauge_types(address _addr)external view returns(uint256);
    function get_voting_escrow()external view returns(address);
    function checkpoint_gauge(address addr)external;
    function gauge_relative_weight(address addr, uint256 time)external view returns(uint256);
}

File 3 of 9 : IInsureToken.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.10;

interface IInsureToken {
    function mint(address _to, uint256 _value)external returns(bool);
    function emergency_mint(uint256 _amountOut, address _to)external;
    function approve(address _spender, uint256 _value)external;
    function rate()external view returns(uint256);
    function future_epoch_time_write() external returns(uint256);
}

File 4 of 9 : IMinter.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.10;

import "./IGaugeController.sol";
interface IMinter {
    function insure_token()external view returns(address);
    function controller()external view returns(address);
    function minted(address user, address gauge) external view returns(uint256);
    function gauge_controller()external view returns(address);
}

File 5 of 9 : IVotingEscrow.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.10;

interface IVotingEscrow {
    function get_last_user_slope(address _addr) external view returns (uint256);

    function locked__end(address _addr) external view returns (uint256);

    function balanceOf(address _addr, uint256 _t)
        external
        view
        returns (uint256);

    //function balanceOf(address addr)external view returns (uint256);
    function totalSupply(uint256 _t) external view returns (uint256);

    function get_user_point_epoch(address _user)
        external
        view
        returns (uint256);

    function user_point_history__ts(address _addr, uint256 _idx)
        external
        view
        returns (uint256);
}

File 6 of 9 : IOwnership.sol
pragma solidity 0.8.10;

//SPDX-License-Identifier: MIT

interface IOwnership {
    function owner() external view returns (address);

    function futureOwner() external view returns (address);

    function commitTransferOwnership(address newOwner) external;

    function acceptTransferOwnership() external;
}

File 7 of 9 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)

pragma solidity ^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 8 of 9 : Math.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/math/Math.sol)

pragma solidity ^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.
        return (a & b) + (a ^ b) / 2;
    }

    /**
     * @dev Returns the ceiling of the division of two numbers.
     *
     * This differs from standard division with `/` in that it rounds up instead
     * of rounding down.
     */
    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b - 1) / b can overflow on addition, so we distribute.
        return a / b + (a % b == 0 ? 0 : 1);
    }
}

File 9 of 9 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^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() {
        _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 making 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;
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_lp_addr","type":"address"},{"internalType":"address","name":"_minter","type":"address"},{"internalType":"address","name":"_ownership","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"original_balance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"original_supply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"working_balance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"working_supply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"voting_balance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"voting_total","type":"uint256"}],"name":"UpdateLiquidityLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"approved_to_deposit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"claimable_tokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"controller","outputs":[{"internalType":"contract IGaugeController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"address","name":"_addr","type":"address"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"future_epoch_time","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inflation_rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"insure_token","outputs":[{"internalType":"contract IInsureToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"integrate_checkpoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"integrate_checkpoint_of","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"integrate_fraction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"integrate_inv_supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"integrate_inv_supply_of","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"is_killed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"kick","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"kill_me","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minter","outputs":[{"internalType":"contract IMinter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ownership","outputs":[{"internalType":"contract IOwnership","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"period","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"period_timestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"can_deposit","type":"bool"}],"name":"set_approve_deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"template","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"user_checkpoint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"voting_escrow","outputs":[{"internalType":"contract IVotingEscrow","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"working_balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"working_supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60a06040523480156200001157600080fd5b5060405162001b7d38038062001b7d83398101604081905262000034916200033e565b60016000556001600160a01b0383166200004d57600080fd5b6001600160a01b0382166200006157600080fd5b600380546001600160a01b038086166001600160a01b03199283161790925560018054928516929091168217905560408051634f31545960e11b8152905160009291639e62a8b29160048083019260209291908290030181865afa158015620000ce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000f4919062000388565b600280546001600160a01b0319166001600160a01b038381169190911790915560015460408051631b17340360e31b8152905193945091169163d8b9a018916004808201926020929091908290030181865afa15801562000159573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017f919062000388565b600480546001600160a01b0319166001600160a01b0392909216918217815560408051637a01432560e11b8152905163f402864a928281019260209291908290030181865afa158015620001d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001fd919062000388565b600580546001600160a01b0319166001600160a01b0392831617905542600d5560025460408051631627391760e11b815290519190921691632c4e722e9160048083019260209291908290030181865afa15801562000260573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002869190620003ad565b6c02863c1f5cdae42f9540000010556002546040805163593591c760e11b815290516001600160a01b039092169163b26b238e9160048082019260209290919082900301816000875af1158015620002e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003089190620003ad565b600855506001600160a01b031660805250620003c79050565b80516001600160a01b03811681146200033957600080fd5b919050565b6000806000606084860312156200035457600080fd5b6200035f8462000321565b92506200036f6020850162000321565b91506200037f6040850162000321565b90509250925092565b6000602082840312156200039b57600080fd5b620003a68262000321565b9392505050565b600060208284031215620003c057600080fd5b5051919050565b608051611793620003ea6000396000818161030e0152610c5901526117936000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80637598108c116100f9578063de263bfa11610097578063e369885311610071578063e369885314610472578063ef78d4fd1461047a578063f77c479114610483578063fec8ee0c1461049657600080fd5b8063de263bfa14610405578063dfe0503114610431578063e15225361461044457600080fd5b80639c868ac0116100d35780639c868ac0146103c85780639e62a8b2146103e1578063be5d1be9146103f4578063d31f3f6d146103fd57600080fd5b80637598108c1461037657806396c55175146103895780639bd324f21461039c57600080fd5b80632e1a7d4d116101665780635d03147a116101405780635d03147a146103095780636e553f65146103305780636f2ddd931461034357806370a082311461035657600080fd5b80632e1a7d4d146102c057806333134583146102d35780634b820093146102e657600080fd5b806317e28089116101a257806317e2808914610253578063180692d01461025c57806318160ddd146102715780631d2747d41461027a57600080fd5b806307546172146101c957806309400707146101f957806313ecb1ca14610233575b600080fd5b6001546101dc906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61022561020736600461159e565b6c02863c1f5cdae42f954000000f6020526000908152604090205481565b6040519081526020016101f0565b61022561024136600461159e565b600a6020526000908152604090205481565b610225600b5481565b6102256c02863c1f5cdae42f95400000105481565b61022560075481565b6102be6102883660046115c9565b6001600160a01b039190911660009081526009602090815260408083203384529091529020805460ff1916911515919091179055565b005b6102be6102ce366004611602565b6104a9565b6102256102e136600461159e565b61061e565b6102f96102f436600461159e565b6106d2565b60405190151581526020016101f0565b6101dc7f000000000000000000000000000000000000000000000000000000000000000081565b6102be61033e36600461161b565b61076d565b6003546101dc906001600160a01b031681565b61022561036436600461159e565b60066020526000908152604090205481565b610225610384366004611602565b61097c565b6102be61039736600461159e565b61099e565b6102256103aa36600461159e565b6c02863c1f5cdae42f954000000e6020526000908152604090205481565b6c02863c1f5cdae42f9540000011546102f99060ff1681565b6002546101dc906001600160a01b031681565b61022560085481565b610225610c24565b61022561041336600461159e565b6c02863c1f5cdae42f954000000d6020526000908152604090205481565b6005546101dc906001600160a01b031681565b6102f9610452366004611640565b600960209081526000928352604080842090915290825290205460ff1681565b6102be610c4d565b610225600c5481565b6004546101dc906001600160a01b031681565b6102256104a4366004611602565b610d4f565b600260005414156105015760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260005561050f33610d76565b3360009081526006602052604081205461052a908390611684565b905060008260075461053c9190611684565b3360008181526006602052604090208490556007829055909150610561908383611347565b60035460405163a9059cbb60e01b8152336004820152602481018590526001600160a01b039091169063a9059cbb906044016020604051808303816000875af11580156105b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d6919061169b565b6105df57600080fd5b60405183815233907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243649060200160405180910390a25050600160005550565b600061062982610d76565b6001546040516308b752bb60e41b81526001600160a01b03848116600483015230602483015290911690638b752bb090604401602060405180830381865afa158015610679573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069d91906116b8565b6001600160a01b03831660009081526c02863c1f5cdae42f954000000f60205260409020546106cc9190611684565b92915050565b6000336001600160a01b03831614806106f557506001546001600160a01b031633145b6107355760405162461bcd60e51b815260206004820152601160248201527019195d8e881d5b985d5d1a1bdc9a5e9959607a1b60448201526064016104f8565b61073e82610d76565b6001600160a01b038216600090815260066020526040902054600754610765918491611347565b506001919050565b600260005414156107c05760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104f8565b60026000556001600160a01b0381163314610837573360009081526009602090815260408083206001600160a01b038516845290915290205460ff166108375760405162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b60448201526064016104f8565b61084081610d76565b8115610930576001600160a01b03811660009081526006602052604081205461086a9084906116d1565b905060008360075461087c91906116d1565b6001600160a01b0384166000908152600660205260409020839055600781905590506108a9838383611347565b6003546040516323b872dd60e01b8152336004820152306024820152604481018690526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015610900573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610924919061169b565b61092d57600080fd5b50505b806001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c8360405161096b91815260200190565b60405180910390a250506001600055565b600d81680a18f07d736b90be55601d1b811061099757600080fd5b0154905081565b6001600160a01b0381811660008181526c02863c1f5cdae42f954000000e602052604080822054600554915163d5443e9d60e01b8152600481019490945293919291169063da020a18908590839063d5443e9d90602401602060405180830381865afa158015610a12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3691906116b8565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa158015610a7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa391906116b8565b6001600160a01b0384811660008181526006602052604090819020546005549151627eeac760e11b815260048101939093524260248401529394509091169062fdd58e90604401602060405180830381865afa158015610b07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2b91906116b8565b1580610b3657508282115b610b7a5760405162461bcd60e51b815260206004820152601560248201527419195d8e881ada58dac81b9bdd08185b1b1bddd959605a1b60448201526064016104f8565b6064610b876028836116e9565b610b919190611708565b6001600160a01b0385166000908152600a602052604090205411610bee5760405162461bcd60e51b815260206004820152601460248201527319195d8e881ada58dac81b9bdd081b995959195960621b60448201526064016104f8565b610bf784610d76565b6001600160a01b038416600090815260066020526040902054600754610c1e918691611347565b50505050565b6000600d600c54680a18f07d736b90be55601d1b8110610c4657610c4661172a565b0154905090565b336001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd99190611740565b6001600160a01b031614610d2f5760405162461bcd60e51b815260206004820181905260248201527f43616c6c6572206973206e6f7420616c6c6f77656420746f206f70657261746560448201526064016104f8565b6c02863c1f5cdae42f9540000011805460ff19811660ff90911615179055565b6c01431e0fae6d7217caa000000d81680a18f07d736b90be55601d1b811061099757600080fd5b610dbe60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600c54808252600d90680a18f07d736b90be55601d1b8110610de257610de261172a565b0154602082015280516c01431e0fae6d7217caa000000d90680a18f07d736b90be55601d1b8110610e1557610e1561172a565b015460408201526c02863c1f5cdae42f95400000105460608201819052608082015260085460a08201819052602082015111610f4c57600260009054906101000a90046001600160a01b03166001600160a01b031663b26b238e6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610ea0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec491906116b8565b60085560025460408051631627391760e11b815290516001600160a01b0390921691632c4e722e916004808201926020929091908290030181865afa158015610f11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3591906116b8565b608082018190526c02863c1f5cdae42f9540000010555b6004805460405163615e523760e01b815230928101929092526001600160a01b03169063615e523790602401600060405180830381600087803b158015610f9257600080fd5b505af1158015610fa6573d6000803e3d6000fd5b505050506001600160a01b0382166000908152600a6020526040902054600b546c02863c1f5cdae42f95400000115460ff1615610fe557600060608401525b8260200151421115611200576020830151600061100b62093a808080850104024261156e565b905060005b6101f48110156111fc5760006110268484611684565b6004549091506000906001600160a01b031663d3078c943062093a8061104c818a611708565b61105691906116e9565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa15801561109f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c391906116b8565b905085156111c357848860a00151101580156110e25750838860a00151105b156111885785858960a001516110f89190611684565b828a6060015161110891906116e9565b61111291906116e9565b61111c9190611708565b8860400181815161112d91906116d1565b9052506080880151606089015260a0880151869061114b9086611684565b828a6060015161115b91906116e9565b61116591906116e9565b61116f9190611708565b8860400181815161118091906116d1565b9052506111c3565b8582828a6060015161119a91906116e9565b6111a491906116e9565b6111ae9190611708565b886040018181516111bf91906116d1565b9052505b428414156111d25750506111fc565b8394506111ed62093a80856111e791906116d1565b4261156e565b93508260010192505050611010565b5050505b60018360000181815161121391906116d1565b9052508251600c8190554290600d90680a18f07d736b90be55601d1b811061123d5761123d61172a565b0155604083015183516c01431e0fae6d7217caa000000d90680a18f07d736b90be55601d1b81106112705761127061172a565b01556001600160a01b03841660009081526c02863c1f5cdae42f954000000d6020526040908190205490840151670de0b6b3a7640000916112b091611684565b6112ba90846116e9565b6112c49190611708565b6001600160a01b03851660009081526c02863c1f5cdae42f954000000f6020526040812080549091906112f89084906116d1565b9091555050506040918201516001600160a01b0390931660009081526c02863c1f5cdae42f954000000d6020908152838220949094556c02863c1f5cdae42f954000000e909352509020429055565b600554604051627eeac760e11b81526001600160a01b038581166004830152426024830152600092169062fdd58e90604401602060405180830381865afa158015611396573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ba91906116b8565b60055460405163bd85b03960e01b81524260048201529192506000916001600160a01b039091169063bd85b03990602401602060405180830381865afa158015611408573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142c91906116b8565b90506000606461143d6028876116e9565b6114479190611708565b90506000821180156114685750600d546114659062127500906116d1565b42115b156114b05760648261147b602883611684565b61148586886116e9565b61148f91906116e9565b6114999190611708565b6114a39190611708565b6114ad90826116d1565b90505b6114ba858261156e565b6001600160a01b0387166000908152600a60205260408120805490839055600b549293509182906114ec9085906116d1565b6114f69190611684565b600b819055604080516001600160a01b038b168152602081018a9052908101889052606081018590526080810182905260a0810187905260c081018690529091507f47211fe8b1eecabef1c013b28eb9caa892fd6bf2d3f1f5111d08cc115de841659060e00160405180910390a15050505050505050565b600081831061157d578161157f565b825b9392505050565b6001600160a01b038116811461159b57600080fd5b50565b6000602082840312156115b057600080fd5b813561157f81611586565b801515811461159b57600080fd5b600080604083850312156115dc57600080fd5b82356115e781611586565b915060208301356115f7816115bb565b809150509250929050565b60006020828403121561161457600080fd5b5035919050565b6000806040838503121561162e57600080fd5b8235915060208301356115f781611586565b6000806040838503121561165357600080fd5b823561165e81611586565b915060208301356115f781611586565b634e487b7160e01b600052601160045260246000fd5b6000828210156116965761169661166e565b500390565b6000602082840312156116ad57600080fd5b815161157f816115bb565b6000602082840312156116ca57600080fd5b5051919050565b600082198211156116e4576116e461166e565b500190565b60008160001904831182151516156117035761170361166e565b500290565b60008261172557634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561175257600080fd5b815161157f8161158656fea2646970667358221220090200f329d4c27cd55c1bdbc9b378d8a9cf1093a726966d706e7511b1d167bb64736f6c634300080a00330000000000000000000000001cf1195afb01dd115647e4989e63afe6ddd6503000000000000000000000000076e8b82ea3450fa598e5e164c7e28af172debdc000000000000000000000000056246e83f3148b05ce2d90b44fbb4e9fa9eaf5bb

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101c45760003560e01c80637598108c116100f9578063de263bfa11610097578063e369885311610071578063e369885314610472578063ef78d4fd1461047a578063f77c479114610483578063fec8ee0c1461049657600080fd5b8063de263bfa14610405578063dfe0503114610431578063e15225361461044457600080fd5b80639c868ac0116100d35780639c868ac0146103c85780639e62a8b2146103e1578063be5d1be9146103f4578063d31f3f6d146103fd57600080fd5b80637598108c1461037657806396c55175146103895780639bd324f21461039c57600080fd5b80632e1a7d4d116101665780635d03147a116101405780635d03147a146103095780636e553f65146103305780636f2ddd931461034357806370a082311461035657600080fd5b80632e1a7d4d146102c057806333134583146102d35780634b820093146102e657600080fd5b806317e28089116101a257806317e2808914610253578063180692d01461025c57806318160ddd146102715780631d2747d41461027a57600080fd5b806307546172146101c957806309400707146101f957806313ecb1ca14610233575b600080fd5b6001546101dc906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61022561020736600461159e565b6c02863c1f5cdae42f954000000f6020526000908152604090205481565b6040519081526020016101f0565b61022561024136600461159e565b600a6020526000908152604090205481565b610225600b5481565b6102256c02863c1f5cdae42f95400000105481565b61022560075481565b6102be6102883660046115c9565b6001600160a01b039190911660009081526009602090815260408083203384529091529020805460ff1916911515919091179055565b005b6102be6102ce366004611602565b6104a9565b6102256102e136600461159e565b61061e565b6102f96102f436600461159e565b6106d2565b60405190151581526020016101f0565b6101dc7f00000000000000000000000056246e83f3148b05ce2d90b44fbb4e9fa9eaf5bb81565b6102be61033e36600461161b565b61076d565b6003546101dc906001600160a01b031681565b61022561036436600461159e565b60066020526000908152604090205481565b610225610384366004611602565b61097c565b6102be61039736600461159e565b61099e565b6102256103aa36600461159e565b6c02863c1f5cdae42f954000000e6020526000908152604090205481565b6c02863c1f5cdae42f9540000011546102f99060ff1681565b6002546101dc906001600160a01b031681565b61022560085481565b610225610c24565b61022561041336600461159e565b6c02863c1f5cdae42f954000000d6020526000908152604090205481565b6005546101dc906001600160a01b031681565b6102f9610452366004611640565b600960209081526000928352604080842090915290825290205460ff1681565b6102be610c4d565b610225600c5481565b6004546101dc906001600160a01b031681565b6102256104a4366004611602565b610d4f565b600260005414156105015760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260005561050f33610d76565b3360009081526006602052604081205461052a908390611684565b905060008260075461053c9190611684565b3360008181526006602052604090208490556007829055909150610561908383611347565b60035460405163a9059cbb60e01b8152336004820152602481018590526001600160a01b039091169063a9059cbb906044016020604051808303816000875af11580156105b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d6919061169b565b6105df57600080fd5b60405183815233907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243649060200160405180910390a25050600160005550565b600061062982610d76565b6001546040516308b752bb60e41b81526001600160a01b03848116600483015230602483015290911690638b752bb090604401602060405180830381865afa158015610679573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069d91906116b8565b6001600160a01b03831660009081526c02863c1f5cdae42f954000000f60205260409020546106cc9190611684565b92915050565b6000336001600160a01b03831614806106f557506001546001600160a01b031633145b6107355760405162461bcd60e51b815260206004820152601160248201527019195d8e881d5b985d5d1a1bdc9a5e9959607a1b60448201526064016104f8565b61073e82610d76565b6001600160a01b038216600090815260066020526040902054600754610765918491611347565b506001919050565b600260005414156107c05760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104f8565b60026000556001600160a01b0381163314610837573360009081526009602090815260408083206001600160a01b038516845290915290205460ff166108375760405162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b60448201526064016104f8565b61084081610d76565b8115610930576001600160a01b03811660009081526006602052604081205461086a9084906116d1565b905060008360075461087c91906116d1565b6001600160a01b0384166000908152600660205260409020839055600781905590506108a9838383611347565b6003546040516323b872dd60e01b8152336004820152306024820152604481018690526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015610900573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610924919061169b565b61092d57600080fd5b50505b806001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c8360405161096b91815260200190565b60405180910390a250506001600055565b600d81680a18f07d736b90be55601d1b811061099757600080fd5b0154905081565b6001600160a01b0381811660008181526c02863c1f5cdae42f954000000e602052604080822054600554915163d5443e9d60e01b8152600481019490945293919291169063da020a18908590839063d5443e9d90602401602060405180830381865afa158015610a12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3691906116b8565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa158015610a7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa391906116b8565b6001600160a01b0384811660008181526006602052604090819020546005549151627eeac760e11b815260048101939093524260248401529394509091169062fdd58e90604401602060405180830381865afa158015610b07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2b91906116b8565b1580610b3657508282115b610b7a5760405162461bcd60e51b815260206004820152601560248201527419195d8e881ada58dac81b9bdd08185b1b1bddd959605a1b60448201526064016104f8565b6064610b876028836116e9565b610b919190611708565b6001600160a01b0385166000908152600a602052604090205411610bee5760405162461bcd60e51b815260206004820152601460248201527319195d8e881ada58dac81b9bdd081b995959195960621b60448201526064016104f8565b610bf784610d76565b6001600160a01b038416600090815260066020526040902054600754610c1e918691611347565b50505050565b6000600d600c54680a18f07d736b90be55601d1b8110610c4657610c4661172a565b0154905090565b336001600160a01b03167f00000000000000000000000056246e83f3148b05ce2d90b44fbb4e9fa9eaf5bb6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd99190611740565b6001600160a01b031614610d2f5760405162461bcd60e51b815260206004820181905260248201527f43616c6c6572206973206e6f7420616c6c6f77656420746f206f70657261746560448201526064016104f8565b6c02863c1f5cdae42f9540000011805460ff19811660ff90911615179055565b6c01431e0fae6d7217caa000000d81680a18f07d736b90be55601d1b811061099757600080fd5b610dbe60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600c54808252600d90680a18f07d736b90be55601d1b8110610de257610de261172a565b0154602082015280516c01431e0fae6d7217caa000000d90680a18f07d736b90be55601d1b8110610e1557610e1561172a565b015460408201526c02863c1f5cdae42f95400000105460608201819052608082015260085460a08201819052602082015111610f4c57600260009054906101000a90046001600160a01b03166001600160a01b031663b26b238e6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610ea0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec491906116b8565b60085560025460408051631627391760e11b815290516001600160a01b0390921691632c4e722e916004808201926020929091908290030181865afa158015610f11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3591906116b8565b608082018190526c02863c1f5cdae42f9540000010555b6004805460405163615e523760e01b815230928101929092526001600160a01b03169063615e523790602401600060405180830381600087803b158015610f9257600080fd5b505af1158015610fa6573d6000803e3d6000fd5b505050506001600160a01b0382166000908152600a6020526040902054600b546c02863c1f5cdae42f95400000115460ff1615610fe557600060608401525b8260200151421115611200576020830151600061100b62093a808080850104024261156e565b905060005b6101f48110156111fc5760006110268484611684565b6004549091506000906001600160a01b031663d3078c943062093a8061104c818a611708565b61105691906116e9565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa15801561109f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c391906116b8565b905085156111c357848860a00151101580156110e25750838860a00151105b156111885785858960a001516110f89190611684565b828a6060015161110891906116e9565b61111291906116e9565b61111c9190611708565b8860400181815161112d91906116d1565b9052506080880151606089015260a0880151869061114b9086611684565b828a6060015161115b91906116e9565b61116591906116e9565b61116f9190611708565b8860400181815161118091906116d1565b9052506111c3565b8582828a6060015161119a91906116e9565b6111a491906116e9565b6111ae9190611708565b886040018181516111bf91906116d1565b9052505b428414156111d25750506111fc565b8394506111ed62093a80856111e791906116d1565b4261156e565b93508260010192505050611010565b5050505b60018360000181815161121391906116d1565b9052508251600c8190554290600d90680a18f07d736b90be55601d1b811061123d5761123d61172a565b0155604083015183516c01431e0fae6d7217caa000000d90680a18f07d736b90be55601d1b81106112705761127061172a565b01556001600160a01b03841660009081526c02863c1f5cdae42f954000000d6020526040908190205490840151670de0b6b3a7640000916112b091611684565b6112ba90846116e9565b6112c49190611708565b6001600160a01b03851660009081526c02863c1f5cdae42f954000000f6020526040812080549091906112f89084906116d1565b9091555050506040918201516001600160a01b0390931660009081526c02863c1f5cdae42f954000000d6020908152838220949094556c02863c1f5cdae42f954000000e909352509020429055565b600554604051627eeac760e11b81526001600160a01b038581166004830152426024830152600092169062fdd58e90604401602060405180830381865afa158015611396573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ba91906116b8565b60055460405163bd85b03960e01b81524260048201529192506000916001600160a01b039091169063bd85b03990602401602060405180830381865afa158015611408573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142c91906116b8565b90506000606461143d6028876116e9565b6114479190611708565b90506000821180156114685750600d546114659062127500906116d1565b42115b156114b05760648261147b602883611684565b61148586886116e9565b61148f91906116e9565b6114999190611708565b6114a39190611708565b6114ad90826116d1565b90505b6114ba858261156e565b6001600160a01b0387166000908152600a60205260408120805490839055600b549293509182906114ec9085906116d1565b6114f69190611684565b600b819055604080516001600160a01b038b168152602081018a9052908101889052606081018590526080810182905260a0810187905260c081018690529091507f47211fe8b1eecabef1c013b28eb9caa892fd6bf2d3f1f5111d08cc115de841659060e00160405180910390a15050505050505050565b600081831061157d578161157f565b825b9392505050565b6001600160a01b038116811461159b57600080fd5b50565b6000602082840312156115b057600080fd5b813561157f81611586565b801515811461159b57600080fd5b600080604083850312156115dc57600080fd5b82356115e781611586565b915060208301356115f7816115bb565b809150509250929050565b60006020828403121561161457600080fd5b5035919050565b6000806040838503121561162e57600080fd5b8235915060208301356115f781611586565b6000806040838503121561165357600080fd5b823561165e81611586565b915060208301356115f781611586565b634e487b7160e01b600052601160045260246000fd5b6000828210156116965761169661166e565b500390565b6000602082840312156116ad57600080fd5b815161157f816115bb565b6000602082840312156116ca57600080fd5b5051919050565b600082198211156116e4576116e461166e565b500190565b60008160001904831182151516156117035761170361166e565b500290565b60008261172557634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561175257600080fd5b815161157f8161158656fea2646970667358221220090200f329d4c27cd55c1bdbc9b378d8a9cf1093a726966d706e7511b1d167bb64736f6c634300080a0033

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

0000000000000000000000001cf1195afb01dd115647e4989e63afe6ddd6503000000000000000000000000076e8b82ea3450fa598e5e164c7e28af172debdc000000000000000000000000056246e83f3148b05ce2d90b44fbb4e9fa9eaf5bb

-----Decoded View---------------
Arg [0] : _lp_addr (address): 0x1CF1195aFB01DD115647E4989e63AfE6DdD65030
Arg [1] : _minter (address): 0x76E8B82EA3450fA598E5e164c7E28af172deBDC0
Arg [2] : _ownership (address): 0x56246e83F3148B05Ce2D90B44fbb4e9fa9EAF5bb

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000001cf1195afb01dd115647e4989e63afe6ddd65030
Arg [1] : 00000000000000000000000076e8b82ea3450fa598e5e164c7e28af172debdc0
Arg [2] : 00000000000000000000000056246e83f3148b05ce2d90b44fbb4e9fa9eaf5bb


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.