ETH Price: $2,600.19 (-1.46%)

Contract

0x31FD80bf06453ACE58bea89727e88003f0e691Bb
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

> 10 Token Transfers found.

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FeeConverter

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-09-07
*/

// SPDX-License-Identifier: UNLICENSED

pragma solidity 0.8.6;
pragma abicoder v2;

interface IERC20 {
  function totalSupply() external view returns (uint);
  function balanceOf(address account) external view returns (uint);
  function transfer(address recipient, uint256 amount) external returns (bool);
  function allowance(address owner, address spender) external view returns (uint);
  function symbol() external view returns (string memory);
  function decimals() external view returns (uint);
  function approve(address spender, uint amount) external returns (bool);
  function mint(address account, uint amount) external;
  function burn(address account, uint amount) external;
  function transferFrom(address sender, address recipient, uint amount) external returns (bool);
  event Transfer(address indexed from, address indexed to, uint value);
  event Approval(address indexed owner, address indexed spender, uint value);
}

interface IPairFactory {

  function pairByTokens(address _tokenA, address _tokenB) external view returns(address);

  function createPair(
    address _tokenA,
    address _tokenB
  ) external returns(address);
}

interface ILendingPair {
  function checkAccountHealth(address _account) external view;
  function accrueAccount(address _account) external;
  function accrue() external;
  function accountHealth(address _account) external view returns(uint);
  function totalDebt(address _token) external view returns(uint);
  function tokenA() external view returns(address);
  function tokenB() external view returns(address);
  function lpToken(address _token) external view returns(IERC20);
  function debtOf(address _account, address _token) external view returns(uint);
  function pendingDebtTotal(address _token) external view returns(uint);
  function pendingSupplyTotal(address _token) external view returns(uint);
  function deposit(address _token, uint _amount) external;
  function withdraw(address _token, uint _amount) external;
  function borrow(address _token, uint _amount) external;
  function repay(address _token, uint _amount) external;
  function withdrawBorrow(address _token, uint _amount) external;
  function controller() external view returns(ILendingController);

  function borrowBalance(
    address _account,
    address _borrowedToken,
    address _returnToken
  ) external view returns(uint);

  function convertTokenValues(
    address _fromToken,
    address _toToken,
    uint    _inputAmount
  ) external view returns(uint);
}

interface IInterestRateModel {
  function systemRate(ILendingPair _pair, address _token) external view returns(uint);
  function supplyRatePerBlock(ILendingPair _pair, address _token) external view returns(uint);
  function borrowRatePerBlock(ILendingPair _pair, address _token) external view returns(uint);
}

interface IRewardDistribution {

  function distributeReward(address _account, address _token) external;
  function setTotalRewardPerBlock(uint _value) external;
  function migrateRewards(address _recipient, uint _amount) external;

  function addPool(
    address _pair,
    address _token,
    bool    _isSupply,
    uint    _points
  ) external;

  function setReward(
    address _pair,
    address _token,
    bool    _isSupply,
    uint    _points
  ) external;
}

interface ILendingController {
  function interestRateModel() external view returns(IInterestRateModel);
  function rewardDistribution() external view returns(IRewardDistribution);
  function feeRecipient() external view returns(address);
  function LIQ_MIN_HEALTH() external view returns(uint);
  function minBorrowUSD() external view returns(uint);
  function liqFeeSystem(address _token) external view returns(uint);
  function liqFeeCaller(address _token) external view returns(uint);
  function liqFeesTotal(address _token) external view returns(uint);
  function colFactor(address _token) external view returns(uint);
  function depositLimit(address _lendingPair, address _token) external view returns(uint);
  function borrowLimit(address _lendingPair, address _token) external view returns(uint);
  function originFee(address _token) external view returns(uint);
  function depositsEnabled() external view returns(bool);
  function borrowingEnabled() external view returns(bool);
  function setFeeRecipient(address _feeRecipient) external;
  function tokenPrice(address _token) external view returns(uint);
  function tokenSupported(address _token) external view returns(bool);
  function setRewardDistribution(address _value) external;
  function setInterestRateModel(address _value) external;
  function setDepositLimit(address _pair, address _token, uint _value) external;
}

interface IFeeConverter {

  function convert(
    address          _incentiveRecipient,
    ILendingPair     _pair,
    bytes memory     _path,
    uint             _supplyTokenAmount,
    uint             _minWildOutput
  ) external returns(uint);
}

contract Ownable {

  address public owner;
  address public pendingOwner;

  event OwnershipTransferInitiated(address indexed previousOwner, address indexed newOwner);
  event OwnershipTransferConfirmed(address indexed previousOwner, address indexed newOwner);

  constructor() {
    owner = msg.sender;
    emit OwnershipTransferConfirmed(address(0), owner);
  }

  modifier onlyOwner() {
    require(isOwner(), "Ownable: caller is not the owner");
    _;
  }

  function isOwner() public view returns (bool) {
    return msg.sender == owner;
  }

  function transferOwnership(address _newOwner) external onlyOwner {
    require(_newOwner != address(0), "Ownable: new owner is the zero address");
    emit OwnershipTransferInitiated(owner, _newOwner);
    pendingOwner = _newOwner;
  }

  function acceptOwnership() external {
    require(msg.sender == pendingOwner, "Ownable: caller is not pending owner");
    emit OwnershipTransferConfirmed(owner, pendingOwner);
    owner = pendingOwner;
    pendingOwner = address(0);
  }
}

library BytesLib {

    function concat(
        bytes memory _preBytes,
        bytes memory _postBytes
    )
        internal
        pure
        returns (bytes memory)
    {
        bytes memory tempBytes;

        assembly {
            // Get a location of some free memory and store it in tempBytes as
            // Solidity does for memory variables.
            tempBytes := mload(0x40)

            // Store the length of the first bytes array at the beginning of
            // the memory for tempBytes.
            let length := mload(_preBytes)
            mstore(tempBytes, length)

            // Maintain a memory counter for the current write location in the
            // temp bytes array by adding the 32 bytes for the array length to
            // the starting location.
            let mc := add(tempBytes, 0x20)
            // Stop copying when the memory counter reaches the length of the
            // first bytes array.
            let end := add(mc, length)

            for {
                // Initialize a copy counter to the start of the _preBytes data,
                // 32 bytes into its memory.
                let cc := add(_preBytes, 0x20)
            } lt(mc, end) {
                // Increase both counters by 32 bytes each iteration.
                mc := add(mc, 0x20)
                cc := add(cc, 0x20)
            } {
                // Write the _preBytes data into the tempBytes memory 32 bytes
                // at a time.
                mstore(mc, mload(cc))
            }

            // Add the length of _postBytes to the current length of tempBytes
            // and store it as the new length in the first 32 bytes of the
            // tempBytes memory.
            length := mload(_postBytes)
            mstore(tempBytes, add(length, mload(tempBytes)))

            // Move the memory counter back from a multiple of 0x20 to the
            // actual end of the _preBytes data.
            mc := end
            // Stop copying when the memory counter reaches the new combined
            // length of the arrays.
            end := add(mc, length)

            for {
                let cc := add(_postBytes, 0x20)
            } lt(mc, end) {
                mc := add(mc, 0x20)
                cc := add(cc, 0x20)
            } {
                mstore(mc, mload(cc))
            }

            // Update the free-memory pointer by padding our last write location
            // to 32 bytes: add 31 bytes to the end of tempBytes to move to the
            // next 32 byte block, then round down to the nearest multiple of
            // 32. If the sum of the length of the two arrays is zero then add
            // one before rounding down to leave a blank 32 bytes (the length block with 0).
            mstore(0x40, and(
              add(add(end, iszero(add(length, mload(_preBytes)))), 31),
              not(31) // Round down to the nearest 32 bytes.
            ))
        }

        return tempBytes;
    }

    function concatStorage(bytes storage _preBytes, bytes memory _postBytes) internal {
        assembly {
            // Read the first 32 bytes of _preBytes storage, which is the length
            // of the array. (We don't need to use the offset into the slot
            // because arrays use the entire slot.)
            let fslot := sload(_preBytes.slot)
            // Arrays of 31 bytes or less have an even value in their slot,
            // while longer arrays have an odd value. The actual length is
            // the slot divided by two for odd values, and the lowest order
            // byte divided by two for even values.
            // If the slot is even, bitwise and the slot with 255 and divide by
            // two to get the length. If the slot is odd, bitwise and the slot
            // with -1 and divide by two.
            let slength := div(and(fslot, sub(mul(0x100, iszero(and(fslot, 1))), 1)), 2)
            let mlength := mload(_postBytes)
            let newlength := add(slength, mlength)
            // slength can contain both the length and contents of the array
            // if length < 32 bytes so let's prepare for that
            // v. http://solidity.readthedocs.io/en/latest/miscellaneous.html#layout-of-state-variables-in-storage
            switch add(lt(slength, 32), lt(newlength, 32))
            case 2 {
                // Since the new array still fits in the slot, we just need to
                // update the contents of the slot.
                // uint256(bytes_storage) = uint256(bytes_storage) + uint256(bytes_memory) + new_length
                sstore(
                    _preBytes.slot,
                    // all the modifications to the slot are inside this
                    // next block
                    add(
                        // we can just add to the slot contents because the
                        // bytes we want to change are the LSBs
                        fslot,
                        add(
                            mul(
                                div(
                                    // load the bytes from memory
                                    mload(add(_postBytes, 0x20)),
                                    // zero all bytes to the right
                                    exp(0x100, sub(32, mlength))
                                ),
                                // and now shift left the number of bytes to
                                // leave space for the length in the slot
                                exp(0x100, sub(32, newlength))
                            ),
                            // increase length by the double of the memory
                            // bytes length
                            mul(mlength, 2)
                        )
                    )
                )
            }
            case 1 {
                // The stored value fits in the slot, but the combined value
                // will exceed it.
                // get the keccak hash to get the contents of the array
                mstore(0x0, _preBytes.slot)
                let sc := add(keccak256(0x0, 0x20), div(slength, 32))

                // save new length
                sstore(_preBytes.slot, add(mul(newlength, 2), 1))

                // The contents of the _postBytes array start 32 bytes into
                // the structure. Our first read should obtain the `submod`
                // bytes that can fit into the unused space in the last word
                // of the stored array. To get this, we read 32 bytes starting
                // from `submod`, so the data we read overlaps with the array
                // contents by `submod` bytes. Masking the lowest-order
                // `submod` bytes allows us to add that value directly to the
                // stored value.

                let submod := sub(32, slength)
                let mc := add(_postBytes, submod)
                let end := add(_postBytes, mlength)
                let mask := sub(exp(0x100, submod), 1)

                sstore(
                    sc,
                    add(
                        and(
                            fslot,
                            0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
                        ),
                        and(mload(mc), mask)
                    )
                )

                for {
                    mc := add(mc, 0x20)
                    sc := add(sc, 1)
                } lt(mc, end) {
                    sc := add(sc, 1)
                    mc := add(mc, 0x20)
                } {
                    sstore(sc, mload(mc))
                }

                mask := exp(0x100, sub(mc, end))

                sstore(sc, mul(div(mload(mc), mask), mask))
            }
            default {
                // get the keccak hash to get the contents of the array
                mstore(0x0, _preBytes.slot)
                // Start copying to the last used word of the stored array.
                let sc := add(keccak256(0x0, 0x20), div(slength, 32))

                // save new length
                sstore(_preBytes.slot, add(mul(newlength, 2), 1))

                // Copy over the first `submod` bytes of the new data as in
                // case 1 above.
                let slengthmod := mod(slength, 32)
                let mlengthmod := mod(mlength, 32)
                let submod := sub(32, slengthmod)
                let mc := add(_postBytes, submod)
                let end := add(_postBytes, mlength)
                let mask := sub(exp(0x100, submod), 1)

                sstore(sc, add(sload(sc), and(mload(mc), mask)))

                for {
                    sc := add(sc, 1)
                    mc := add(mc, 0x20)
                } lt(mc, end) {
                    sc := add(sc, 1)
                    mc := add(mc, 0x20)
                } {
                    sstore(sc, mload(mc))
                }

                mask := exp(0x100, sub(mc, end))

                sstore(sc, mul(div(mload(mc), mask), mask))
            }
        }
    }

    function slice(
        bytes memory _bytes,
        uint256 _start,
        uint256 _length
    )
        internal
        pure
        returns (bytes memory)
    {
        require(_length + 31 >= _length, "slice_overflow");
        require(_bytes.length >= _start + _length, "slice_outOfBounds");

        bytes memory tempBytes;

        assembly {
            switch iszero(_length)
            case 0 {
                // Get a location of some free memory and store it in tempBytes as
                // Solidity does for memory variables.
                tempBytes := mload(0x40)

                // The first word of the slice result is potentially a partial
                // word read from the original array. To read it, we calculate
                // the length of that partial word and start copying that many
                // bytes into the array. The first word we copy will start with
                // data we don't care about, but the last `lengthmod` bytes will
                // land at the beginning of the contents of the new array. When
                // we're done copying, we overwrite the full first word with
                // the actual length of the slice.
                let lengthmod := and(_length, 31)

                // The multiplication in the next line is necessary
                // because when slicing multiples of 32 bytes (lengthmod == 0)
                // the following copy loop was copying the origin's length
                // and then ending prematurely not copying everything it should.
                let mc := add(add(tempBytes, lengthmod), mul(0x20, iszero(lengthmod)))
                let end := add(mc, _length)

                for {
                    // The multiplication in the next line has the same exact purpose
                    // as the one above.
                    let cc := add(add(add(_bytes, lengthmod), mul(0x20, iszero(lengthmod))), _start)
                } lt(mc, end) {
                    mc := add(mc, 0x20)
                    cc := add(cc, 0x20)
                } {
                    mstore(mc, mload(cc))
                }

                mstore(tempBytes, _length)

                //update free-memory pointer
                //allocating the array padded to 32 bytes like the compiler does now
                mstore(0x40, and(add(mc, 31), not(31)))
            }
            //if we want a zero-length slice let's just return a zero-length array
            default {
                tempBytes := mload(0x40)
                //zero out the 32 bytes slice we are about to return
                //we need to do it because Solidity does not garbage collect
                mstore(tempBytes, 0)

                mstore(0x40, add(tempBytes, 0x20))
            }
        }

        return tempBytes;
    }

    function toAddress(bytes memory _bytes, uint256 _start) internal pure returns (address) {
        require(_bytes.length >= _start + 20, "toAddress_outOfBounds");
        address tempAddress;

        assembly {
            tempAddress := div(mload(add(add(_bytes, 0x20), _start)), 0x1000000000000000000000000)
        }

        return tempAddress;
    }

    function toUint8(bytes memory _bytes, uint256 _start) internal pure returns (uint8) {
        require(_bytes.length >= _start + 1 , "toUint8_outOfBounds");
        uint8 tempUint;

        assembly {
            tempUint := mload(add(add(_bytes, 0x1), _start))
        }

        return tempUint;
    }

    function toUint16(bytes memory _bytes, uint256 _start) internal pure returns (uint16) {
        require(_bytes.length >= _start + 2, "toUint16_outOfBounds");
        uint16 tempUint;

        assembly {
            tempUint := mload(add(add(_bytes, 0x2), _start))
        }

        return tempUint;
    }

    function toUint32(bytes memory _bytes, uint256 _start) internal pure returns (uint32) {
        require(_bytes.length >= _start + 4, "toUint32_outOfBounds");
        uint32 tempUint;

        assembly {
            tempUint := mload(add(add(_bytes, 0x4), _start))
        }

        return tempUint;
    }

    function toUint64(bytes memory _bytes, uint256 _start) internal pure returns (uint64) {
        require(_bytes.length >= _start + 8, "toUint64_outOfBounds");
        uint64 tempUint;

        assembly {
            tempUint := mload(add(add(_bytes, 0x8), _start))
        }

        return tempUint;
    }

    function toUint96(bytes memory _bytes, uint256 _start) internal pure returns (uint96) {
        require(_bytes.length >= _start + 12, "toUint96_outOfBounds");
        uint96 tempUint;

        assembly {
            tempUint := mload(add(add(_bytes, 0xc), _start))
        }

        return tempUint;
    }

    function toUint128(bytes memory _bytes, uint256 _start) internal pure returns (uint128) {
        require(_bytes.length >= _start + 16, "toUint128_outOfBounds");
        uint128 tempUint;

        assembly {
            tempUint := mload(add(add(_bytes, 0x10), _start))
        }

        return tempUint;
    }

    function toUint256(bytes memory _bytes, uint256 _start) internal pure returns (uint256) {
        require(_bytes.length >= _start + 32, "toUint256_outOfBounds");
        uint256 tempUint;

        assembly {
            tempUint := mload(add(add(_bytes, 0x20), _start))
        }

        return tempUint;
    }

    function toBytes32(bytes memory _bytes, uint256 _start) internal pure returns (bytes32) {
        require(_bytes.length >= _start + 32, "toBytes32_outOfBounds");
        bytes32 tempBytes32;

        assembly {
            tempBytes32 := mload(add(add(_bytes, 0x20), _start))
        }

        return tempBytes32;
    }

    function equal(bytes memory _preBytes, bytes memory _postBytes) internal pure returns (bool) {
        bool success = true;

        assembly {
            let length := mload(_preBytes)

            // if lengths don't match the arrays are not equal
            switch eq(length, mload(_postBytes))
            case 1 {
                // cb is a circuit breaker in the for loop since there's
                //  no said feature for inline assembly loops
                // cb = 1 - don't breaker
                // cb = 0 - break
                let cb := 1

                let mc := add(_preBytes, 0x20)
                let end := add(mc, length)

                for {
                    let cc := add(_postBytes, 0x20)
                // the next line is the loop condition:
                // while(uint256(mc < end) + cb == 2)
                } eq(add(lt(mc, end), cb), 2) {
                    mc := add(mc, 0x20)
                    cc := add(cc, 0x20)
                } {
                    // if any of these checks fails then arrays are not equal
                    if iszero(eq(mload(mc), mload(cc))) {
                        // unsuccess:
                        success := 0
                        cb := 0
                    }
                }
            }
            default {
                // unsuccess:
                success := 0
            }
        }

        return success;
    }

    function equalStorage(
        bytes storage _preBytes,
        bytes memory _postBytes
    )
        internal
        view
        returns (bool)
    {
        bool success = true;

        assembly {
            // we know _preBytes_offset is 0
            let fslot := sload(_preBytes.slot)
            // Decode the length of the stored array like in concatStorage().
            let slength := div(and(fslot, sub(mul(0x100, iszero(and(fslot, 1))), 1)), 2)
            let mlength := mload(_postBytes)

            // if lengths don't match the arrays are not equal
            switch eq(slength, mlength)
            case 1 {
                // slength can contain both the length and contents of the array
                // if length < 32 bytes so let's prepare for that
                // v. http://solidity.readthedocs.io/en/latest/miscellaneous.html#layout-of-state-variables-in-storage
                if iszero(iszero(slength)) {
                    switch lt(slength, 32)
                    case 1 {
                        // blank the last byte which is the length
                        fslot := mul(div(fslot, 0x100), 0x100)

                        if iszero(eq(fslot, mload(add(_postBytes, 0x20)))) {
                            // unsuccess:
                            success := 0
                        }
                    }
                    default {
                        // cb is a circuit breaker in the for loop since there's
                        //  no said feature for inline assembly loops
                        // cb = 1 - don't breaker
                        // cb = 0 - break
                        let cb := 1

                        // get the keccak hash to get the contents of the array
                        mstore(0x0, _preBytes.slot)
                        let sc := keccak256(0x0, 0x20)

                        let mc := add(_postBytes, 0x20)
                        let end := add(mc, mlength)

                        // the next line is the loop condition:
                        // while(uint256(mc < end) + cb == 2)
                        for {} eq(add(lt(mc, end), cb), 2) {
                            sc := add(sc, 1)
                            mc := add(mc, 0x20)
                        } {
                            if iszero(eq(sload(sc), mload(mc))) {
                                // unsuccess:
                                success := 0
                                cb := 0
                            }
                        }
                    }
                }
            }
            default {
                // unsuccess:
                success := 0
            }
        }

        return success;
    }
}

contract FeeConverter is Ownable, IFeeConverter {

  IERC20 private constant WETH = IERC20(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2);

  using BytesLib for bytes;

  IERC20              public wildToken;
  IPairFactory        public factory;
  ILendingController  public lendingController;
  address             public stakingPool;
  address             public treasury;
  uint                public callIncentive;
  uint                public daoShareWETH; // 1e18 = 1%

  constructor(
    IPairFactory       _factory,
    ILendingController _lendingController,
    IERC20             _wildToken,
    address            _stakingPool,
    address            _treasury,
    uint               _callIncentive,
    uint               _daoShareWETH
  ) {
    factory           = _factory;
    lendingController = _lendingController;
    wildToken         = _wildToken;
    stakingPool       = _stakingPool;
    treasury          = _treasury;
    callIncentive     = _callIncentive;
    daoShareWETH      = _daoShareWETH;
  }

  /*
   * Previous version was converting fees via Uniswap in this contract.
   * The new version uses TWAP to pull WILD balance from the caller.
   * This allows the caller to use any pool to source liquidity
   * and get lower slippage which is similar to how liquidations work.
   * Since migrating fee recipient would incur very high gas costs,
   * we're leaving the same function interface here for backward compatibility
   *
   * _notUsedAnymore - not used anymore, set to zero
   * _path - we only need the first token in the path
  */
  function convert(
    address          _originalCaller,
    ILendingPair     _pair,
    bytes memory     _path,
    uint             _supplyTokenAmount,
    uint             _notUsedAnymore
  ) external override returns(uint) {

    address supplyToken = _path.toAddress(0);

    _validatePair(_pair);
    _validateToken(_pair, supplyToken);
    require(_supplyTokenAmount > 0, "FeeConverter: nothing to convert");

    _pair.withdraw(supplyToken, _supplyTokenAmount);
    uint inputAmount = _supplyTokenAmount - _collectDaoShare(supplyToken, _supplyTokenAmount);

    uint wildAmount = wildInput(supplyToken, inputAmount);
    IERC20(supplyToken).transfer(_originalCaller, inputAmount);
    wildToken.transferFrom(_originalCaller, stakingPool, wildAmount);

    return wildAmount;
  }

  function setStakingRewards(address _value) external onlyOwner {
    stakingPool = _value;
  }

  function setTreasury(address _value) external onlyOwner {
    treasury = _value;
  }

  function setDaoShareWETH(uint _value) external onlyOwner {
    daoShareWETH = _value;
  }

  function setCallIncentive(uint _value) external onlyOwner {
    callIncentive = _value;
  }

  function wildInput(address _fromToken, uint _fromAmount) public view returns(uint) {

    uint priceFrom = lendingController.tokenPrice(_fromToken)         * 1e18 / 10 ** IERC20(_fromToken).decimals();
    uint priceTo   = lendingController.tokenPrice(address(wildToken)) * 1e18 / 10 ** IERC20(address(wildToken)).decimals();

    uint input = (_fromAmount * priceFrom / priceTo) * (100e18 - callIncentive) / 100e18;

    return input;
  }

  function _collectDaoShare(address _token, uint _amount) internal returns(uint daoAmount) {
    if (_token == address(WETH)) {
      daoAmount = _amount * daoShareWETH / 100e18;
      WETH.transfer(treasury, daoAmount);
    }
  }

  function _validateToken(ILendingPair _pair, address _token) internal view {
    require(
      _token == _pair.tokenA() ||
      _token == _pair.tokenB(),
      "FeeConverter: invalid input token"
    );
  }

  function _validatePair(ILendingPair _pair) internal view {
    require(
      address(_pair) == factory.pairByTokens(_pair.tokenA(), _pair.tokenB()),
      "FeeConverter: invalid lending pair"
    );
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract IPairFactory","name":"_factory","type":"address"},{"internalType":"contract ILendingController","name":"_lendingController","type":"address"},{"internalType":"contract IERC20","name":"_wildToken","type":"address"},{"internalType":"address","name":"_stakingPool","type":"address"},{"internalType":"address","name":"_treasury","type":"address"},{"internalType":"uint256","name":"_callIncentive","type":"uint256"},{"internalType":"uint256","name":"_daoShareWETH","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferConfirmed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferInitiated","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"callIncentive","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_originalCaller","type":"address"},{"internalType":"contract ILendingPair","name":"_pair","type":"address"},{"internalType":"bytes","name":"_path","type":"bytes"},{"internalType":"uint256","name":"_supplyTokenAmount","type":"uint256"},{"internalType":"uint256","name":"_notUsedAnymore","type":"uint256"}],"name":"convert","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"daoShareWETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"contract IPairFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lendingController","outputs":[{"internalType":"contract ILendingController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setCallIncentive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setDaoShareWETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_value","type":"address"}],"name":"setStakingRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_value","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_fromToken","type":"address"},{"internalType":"uint256","name":"_fromAmount","type":"uint256"}],"name":"wildInput","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wildToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b50604051620013f9380380620013f98339810160408190526200003491620000e1565b600080546001600160a01b0319163390811782556040519091907f646fe5eeb20d96ea45a9caafcb508854a2fb5660885ced7772e12a633c974571908290a3600380546001600160a01b03199081166001600160a01b03998a1617909155600480548216978916979097179096556002805487169588169590951790945560058054861693871693909317909255600680549094169416939093179091556007919091556008556200018d565b600080600080600080600060e0888a031215620000fd57600080fd5b87516200010a8162000174565b60208901519097506200011d8162000174565b6040890151909650620001308162000174565b6060890151909550620001438162000174565b6080890151909450620001568162000174565b8093505060a0880151915060c0880151905092959891949750929550565b6001600160a01b03811681146200018a57600080fd5b50565b61125c806200019d6000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c80639f018ca1116100a2578063cc7554eb11610071578063cc7554eb1461022b578063e30c39781461023e578063f0f4426014610251578063f2acdf6114610264578063f2fde38b1461027757600080fd5b80639f018ca1146101e5578063af32f7dd14610206578063c45a01551461020f578063cb22356b1461022257600080fd5b80636fb83a57116100e95780636fb83a571461018657806379ba5097146101995780638da5cb5b146101a15780638f32d59b146101b45780639aa94564146101d257600080fd5b80630c56ae3b1461011b57806326b18dc71461014b578063486327181461016057806361d027b314610173575b600080fd5b60055461012e906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61015e610159366004611023565b61028a565b005b60045461012e906001600160a01b031681565b60065461012e906001600160a01b031681565b61015e610194366004610eac565b6102c2565b61015e61030e565b60005461012e906001600160a01b031681565b6000546001600160a01b031633146040519015158152602001610142565b60025461012e906001600160a01b031681565b6101f86101f3366004610eed565b6103d8565b604051908152602001610142565b6101f860085481565b60035461012e906001600160a01b031681565b6101f860075481565b61015e610239366004611023565b6105f4565b60015461012e906001600160a01b031681565b61015e61025f366004610eac565b610623565b6101f8610272366004610fd5565b61066f565b61015e610285366004610eac565b610915565b6000546001600160a01b031633146102bd5760405162461bcd60e51b81526004016102b490611055565b60405180910390fd5b600855565b6000546001600160a01b031633146102ec5760405162461bcd60e51b81526004016102b490611055565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146103745760405162461bcd60e51b8152602060048201526024808201527f4f776e61626c653a2063616c6c6572206973206e6f742070656e64696e67206f6044820152633bb732b960e11b60648201526084016102b4565b600154600080546040516001600160a01b0393841693909116917f646fe5eeb20d96ea45a9caafcb508854a2fb5660885ced7772e12a633c97457191a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6000806103e585826109ff565b90506103f086610a64565b6103fa8682610c56565b6000841161044a5760405162461bcd60e51b815260206004820181905260248201527f466565436f6e7665727465723a206e6f7468696e6720746f20636f6e7665727460448201526064016102b4565b60405163f3fef3a360e01b81526001600160a01b0382811660048301526024820186905287169063f3fef3a390604401600060405180830381600087803b15801561049457600080fd5b505af11580156104a8573d6000803e3d6000fd5b5050505060006104b88286610dc1565b6104c290866111ce565b905060006104d0838361066f565b60405163a9059cbb60e01b81526001600160a01b038b81166004830152602482018590529192509084169063a9059cbb90604401602060405180830381600087803b15801561051e57600080fd5b505af1158015610532573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105569190611001565b506002546005546040516323b872dd60e01b81526001600160a01b038c811660048301529182166024820152604481018490529116906323b872dd90606401602060405180830381600087803b1580156105af57600080fd5b505af11580156105c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e79190611001565b5098975050505050505050565b6000546001600160a01b0316331461061e5760405162461bcd60e51b81526004016102b490611055565b600755565b6000546001600160a01b0316331461064d5760405162461bcd60e51b81526004016102b490611055565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b600080836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156106ab57600080fd5b505afa1580156106bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e3919061103c565b6106ee90600a611107565b600480546040516384ba3f6960e01b81526001600160a01b03888116938201939093529116906384ba3f699060240160206040518083038186803b15801561073557600080fd5b505afa158015610749573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076d919061103c565b61077f90670de0b6b3a76400006111af565b61078991906110a2565b90506000600260009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156107db57600080fd5b505afa1580156107ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610813919061103c565b61081e90600a611107565b600480546002546040516384ba3f6960e01b81526001600160a01b039182169381019390935216906384ba3f699060240160206040518083038186803b15801561086757600080fd5b505afa15801561087b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089f919061103c565b6108b190670de0b6b3a76400006111af565b6108bb91906110a2565b9050600068056bc75e2d6310000060075468056bc75e2d631000006108e091906111ce565b836108eb86896111af565b6108f591906110a2565b6108ff91906111af565b61090991906110a2565b93505050505b92915050565b6000546001600160a01b0316331461093f5760405162461bcd60e51b81526004016102b490611055565b6001600160a01b0381166109a45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102b4565b600080546040516001600160a01b03808516939216917fb150023a879fd806e3599b6ca8ee3b60f0e360ab3846d128d67ebce1a391639a91a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000610a0c82601461108a565b83511015610a545760405162461bcd60e51b8152602060048201526015602482015274746f416464726573735f6f75744f66426f756e647360581b60448201526064016102b4565b500160200151600160601b900490565b600360009054906101000a90046001600160a01b03166001600160a01b0316631d5aa6d8826001600160a01b0316630fc63d106040518163ffffffff1660e01b815260040160206040518083038186803b158015610ac157600080fd5b505afa158015610ad5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af99190610ed0565b836001600160a01b0316635f64b55b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b3257600080fd5b505afa158015610b46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6a9190610ed0565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015610bb057600080fd5b505afa158015610bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be89190610ed0565b6001600160a01b0316816001600160a01b031614610c535760405162461bcd60e51b815260206004820152602260248201527f466565436f6e7665727465723a20696e76616c6964206c656e64696e6720706160448201526134b960f11b60648201526084016102b4565b50565b816001600160a01b0316630fc63d106040518163ffffffff1660e01b815260040160206040518083038186803b158015610c8f57600080fd5b505afa158015610ca3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc79190610ed0565b6001600160a01b0316816001600160a01b03161480610d675750816001600160a01b0316635f64b55b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d1a57600080fd5b505afa158015610d2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d529190610ed0565b6001600160a01b0316816001600160a01b0316145b610dbd5760405162461bcd60e51b815260206004820152602160248201527f466565436f6e7665727465723a20696e76616c696420696e70757420746f6b656044820152603760f91b60648201526084016102b4565b5050565b60006001600160a01b03831673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2141561090f5768056bc75e2d6310000060085483610e0091906111af565b610e0a91906110a2565b60065460405163a9059cbb60e01b81526001600160a01b0390911660048201526024810182905290915073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29063a9059cbb90604401602060405180830381600087803b158015610e6d57600080fd5b505af1158015610e81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea59190611001565b5092915050565b600060208284031215610ebe57600080fd5b8135610ec981611211565b9392505050565b600060208284031215610ee257600080fd5b8151610ec981611211565b600080600080600060a08688031215610f0557600080fd5b8535610f1081611211565b94506020860135610f2081611211565b9350604086013567ffffffffffffffff80821115610f3d57600080fd5b818801915088601f830112610f5157600080fd5b813581811115610f6357610f636111fb565b604051601f8201601f19908116603f01168101908382118183101715610f8b57610f8b6111fb565b816040528281528b6020848701011115610fa457600080fd5b8260208601602083013760009281016020019290925250969995985095966060810135965060800135949350505050565b60008060408385031215610fe857600080fd5b8235610ff381611211565b946020939093013593505050565b60006020828403121561101357600080fd5b81518015158114610ec957600080fd5b60006020828403121561103557600080fd5b5035919050565b60006020828403121561104e57600080fd5b5051919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000821982111561109d5761109d6111e5565b500190565b6000826110bf57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156110ff5781600019048211156110e5576110e56111e5565b808516156110f257918102915b93841c93908002906110c9565b509250929050565b6000610ec9838360008261111d5750600161090f565b8161112a5750600061090f565b8160018114611140576002811461114a57611166565b600191505061090f565b60ff84111561115b5761115b6111e5565b50506001821b61090f565b5060208310610133831016604e8410600b8410161715611189575081810a61090f565b61119383836110c4565b80600019048211156111a7576111a76111e5565b029392505050565b60008160001904831182151516156111c9576111c96111e5565b500290565b6000828210156111e0576111e06111e5565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610c5357600080fdfea2646970667358221220b554a4184677062d2597aeb6ae224a3dee325d9ee9f35d1b4483f5e738878dc864736f6c6343000806003300000000000000000000000023b74796b72f995e14a5e3ff2156dad9653256cf00000000000000000000000045ee906e9cfae0aabdb194d6180a3a119d4376c400000000000000000000000008a75dbc7167714ceac1a8e43a8d643a4edd625a000000000000000000000000b0f466cc45dc73d0a6ea889c63390aeea7b6dcc5000000000000000000000000fd66fb512dbc2dfa49377cfe1168eafc4ea6aa5d0000000000000000000000000000000000000000000000008ac7230489e80000000000000000000000000000000000000000000000000002b5e3af16b1880000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101165760003560e01c80639f018ca1116100a2578063cc7554eb11610071578063cc7554eb1461022b578063e30c39781461023e578063f0f4426014610251578063f2acdf6114610264578063f2fde38b1461027757600080fd5b80639f018ca1146101e5578063af32f7dd14610206578063c45a01551461020f578063cb22356b1461022257600080fd5b80636fb83a57116100e95780636fb83a571461018657806379ba5097146101995780638da5cb5b146101a15780638f32d59b146101b45780639aa94564146101d257600080fd5b80630c56ae3b1461011b57806326b18dc71461014b578063486327181461016057806361d027b314610173575b600080fd5b60055461012e906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61015e610159366004611023565b61028a565b005b60045461012e906001600160a01b031681565b60065461012e906001600160a01b031681565b61015e610194366004610eac565b6102c2565b61015e61030e565b60005461012e906001600160a01b031681565b6000546001600160a01b031633146040519015158152602001610142565b60025461012e906001600160a01b031681565b6101f86101f3366004610eed565b6103d8565b604051908152602001610142565b6101f860085481565b60035461012e906001600160a01b031681565b6101f860075481565b61015e610239366004611023565b6105f4565b60015461012e906001600160a01b031681565b61015e61025f366004610eac565b610623565b6101f8610272366004610fd5565b61066f565b61015e610285366004610eac565b610915565b6000546001600160a01b031633146102bd5760405162461bcd60e51b81526004016102b490611055565b60405180910390fd5b600855565b6000546001600160a01b031633146102ec5760405162461bcd60e51b81526004016102b490611055565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146103745760405162461bcd60e51b8152602060048201526024808201527f4f776e61626c653a2063616c6c6572206973206e6f742070656e64696e67206f6044820152633bb732b960e11b60648201526084016102b4565b600154600080546040516001600160a01b0393841693909116917f646fe5eeb20d96ea45a9caafcb508854a2fb5660885ced7772e12a633c97457191a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6000806103e585826109ff565b90506103f086610a64565b6103fa8682610c56565b6000841161044a5760405162461bcd60e51b815260206004820181905260248201527f466565436f6e7665727465723a206e6f7468696e6720746f20636f6e7665727460448201526064016102b4565b60405163f3fef3a360e01b81526001600160a01b0382811660048301526024820186905287169063f3fef3a390604401600060405180830381600087803b15801561049457600080fd5b505af11580156104a8573d6000803e3d6000fd5b5050505060006104b88286610dc1565b6104c290866111ce565b905060006104d0838361066f565b60405163a9059cbb60e01b81526001600160a01b038b81166004830152602482018590529192509084169063a9059cbb90604401602060405180830381600087803b15801561051e57600080fd5b505af1158015610532573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105569190611001565b506002546005546040516323b872dd60e01b81526001600160a01b038c811660048301529182166024820152604481018490529116906323b872dd90606401602060405180830381600087803b1580156105af57600080fd5b505af11580156105c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e79190611001565b5098975050505050505050565b6000546001600160a01b0316331461061e5760405162461bcd60e51b81526004016102b490611055565b600755565b6000546001600160a01b0316331461064d5760405162461bcd60e51b81526004016102b490611055565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b600080836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156106ab57600080fd5b505afa1580156106bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e3919061103c565b6106ee90600a611107565b600480546040516384ba3f6960e01b81526001600160a01b03888116938201939093529116906384ba3f699060240160206040518083038186803b15801561073557600080fd5b505afa158015610749573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076d919061103c565b61077f90670de0b6b3a76400006111af565b61078991906110a2565b90506000600260009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156107db57600080fd5b505afa1580156107ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610813919061103c565b61081e90600a611107565b600480546002546040516384ba3f6960e01b81526001600160a01b039182169381019390935216906384ba3f699060240160206040518083038186803b15801561086757600080fd5b505afa15801561087b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089f919061103c565b6108b190670de0b6b3a76400006111af565b6108bb91906110a2565b9050600068056bc75e2d6310000060075468056bc75e2d631000006108e091906111ce565b836108eb86896111af565b6108f591906110a2565b6108ff91906111af565b61090991906110a2565b93505050505b92915050565b6000546001600160a01b0316331461093f5760405162461bcd60e51b81526004016102b490611055565b6001600160a01b0381166109a45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102b4565b600080546040516001600160a01b03808516939216917fb150023a879fd806e3599b6ca8ee3b60f0e360ab3846d128d67ebce1a391639a91a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000610a0c82601461108a565b83511015610a545760405162461bcd60e51b8152602060048201526015602482015274746f416464726573735f6f75744f66426f756e647360581b60448201526064016102b4565b500160200151600160601b900490565b600360009054906101000a90046001600160a01b03166001600160a01b0316631d5aa6d8826001600160a01b0316630fc63d106040518163ffffffff1660e01b815260040160206040518083038186803b158015610ac157600080fd5b505afa158015610ad5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af99190610ed0565b836001600160a01b0316635f64b55b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b3257600080fd5b505afa158015610b46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6a9190610ed0565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015610bb057600080fd5b505afa158015610bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be89190610ed0565b6001600160a01b0316816001600160a01b031614610c535760405162461bcd60e51b815260206004820152602260248201527f466565436f6e7665727465723a20696e76616c6964206c656e64696e6720706160448201526134b960f11b60648201526084016102b4565b50565b816001600160a01b0316630fc63d106040518163ffffffff1660e01b815260040160206040518083038186803b158015610c8f57600080fd5b505afa158015610ca3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc79190610ed0565b6001600160a01b0316816001600160a01b03161480610d675750816001600160a01b0316635f64b55b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d1a57600080fd5b505afa158015610d2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d529190610ed0565b6001600160a01b0316816001600160a01b0316145b610dbd5760405162461bcd60e51b815260206004820152602160248201527f466565436f6e7665727465723a20696e76616c696420696e70757420746f6b656044820152603760f91b60648201526084016102b4565b5050565b60006001600160a01b03831673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2141561090f5768056bc75e2d6310000060085483610e0091906111af565b610e0a91906110a2565b60065460405163a9059cbb60e01b81526001600160a01b0390911660048201526024810182905290915073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29063a9059cbb90604401602060405180830381600087803b158015610e6d57600080fd5b505af1158015610e81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea59190611001565b5092915050565b600060208284031215610ebe57600080fd5b8135610ec981611211565b9392505050565b600060208284031215610ee257600080fd5b8151610ec981611211565b600080600080600060a08688031215610f0557600080fd5b8535610f1081611211565b94506020860135610f2081611211565b9350604086013567ffffffffffffffff80821115610f3d57600080fd5b818801915088601f830112610f5157600080fd5b813581811115610f6357610f636111fb565b604051601f8201601f19908116603f01168101908382118183101715610f8b57610f8b6111fb565b816040528281528b6020848701011115610fa457600080fd5b8260208601602083013760009281016020019290925250969995985095966060810135965060800135949350505050565b60008060408385031215610fe857600080fd5b8235610ff381611211565b946020939093013593505050565b60006020828403121561101357600080fd5b81518015158114610ec957600080fd5b60006020828403121561103557600080fd5b5035919050565b60006020828403121561104e57600080fd5b5051919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000821982111561109d5761109d6111e5565b500190565b6000826110bf57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156110ff5781600019048211156110e5576110e56111e5565b808516156110f257918102915b93841c93908002906110c9565b509250929050565b6000610ec9838360008261111d5750600161090f565b8161112a5750600061090f565b8160018114611140576002811461114a57611166565b600191505061090f565b60ff84111561115b5761115b6111e5565b50506001821b61090f565b5060208310610133831016604e8410600b8410161715611189575081810a61090f565b61119383836110c4565b80600019048211156111a7576111a76111e5565b029392505050565b60008160001904831182151516156111c9576111c96111e5565b500290565b6000828210156111e0576111e06111e5565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610c5357600080fdfea2646970667358221220b554a4184677062d2597aeb6ae224a3dee325d9ee9f35d1b4483f5e738878dc864736f6c63430008060033

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

00000000000000000000000023b74796b72f995e14a5e3ff2156dad9653256cf00000000000000000000000045ee906e9cfae0aabdb194d6180a3a119d4376c400000000000000000000000008a75dbc7167714ceac1a8e43a8d643a4edd625a000000000000000000000000b0f466cc45dc73d0a6ea889c63390aeea7b6dcc5000000000000000000000000fd66fb512dbc2dfa49377cfe1168eafc4ea6aa5d0000000000000000000000000000000000000000000000008ac7230489e80000000000000000000000000000000000000000000000000002b5e3af16b1880000

-----Decoded View---------------
Arg [0] : _factory (address): 0x23B74796b72f995E14a5e3FF2156Dad9653256Cf
Arg [1] : _lendingController (address): 0x45ee906E9CFAE0aabDB194D6180A3A119D4376C4
Arg [2] : _wildToken (address): 0x08A75dbC7167714CeaC1a8e43a8d643A4EDd625a
Arg [3] : _stakingPool (address): 0xB0f466cc45dc73D0A6Ea889C63390aEea7b6Dcc5
Arg [4] : _treasury (address): 0xfd66Fb512dBC2dFA49377CfE1168eaFc4ea6Aa5D
Arg [5] : _callIncentive (uint256): 10000000000000000000
Arg [6] : _daoShareWETH (uint256): 50000000000000000000

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 00000000000000000000000023b74796b72f995e14a5e3ff2156dad9653256cf
Arg [1] : 00000000000000000000000045ee906e9cfae0aabdb194d6180a3a119d4376c4
Arg [2] : 00000000000000000000000008a75dbc7167714ceac1a8e43a8d643a4edd625a
Arg [3] : 000000000000000000000000b0f466cc45dc73d0a6ea889c63390aeea7b6dcc5
Arg [4] : 000000000000000000000000fd66fb512dbc2dfa49377cfe1168eafc4ea6aa5d
Arg [5] : 0000000000000000000000000000000000000000000000008ac7230489e80000
Arg [6] : 000000000000000000000000000000000000000000000002b5e3af16b1880000


Deployed Bytecode Sourcemap

25521:3938:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25824:38;;;;;-1:-1:-1;;;;;25824:38:0;;;;;;-1:-1:-1;;;;;3022:32:1;;;3004:51;;2992:2;2977:18;25824:38:0;;;;;;;;28141:91;;;;;;:::i;:::-;;:::i;:::-;;25775:44;;;;;-1:-1:-1;;;;;25775:44:0;;;25867:35;;;;;-1:-1:-1;;;;;25867:35:0;;;27948:95;;;;;;:::i;:::-;;:::i;5864:242::-;;;:::i;5069:20::-;;;;;-1:-1:-1;;;;;5069:20:0;;;5528:85;5568:4;5602:5;-1:-1:-1;;;;;5602:5:0;5588:10;:19;5528:85;;4199:14:1;;4192:22;4174:41;;4162:2;4147:18;5528:85:0;4129:92:1;25695:36:0;;;;;-1:-1:-1;;;;;25695:36:0;;;27135:807;;;;;;:::i;:::-;;:::i;:::-;;;7744:25:1;;;7732:2;7717:18;27135:807:0;7699:76:1;25952:39:0;;;;;;25736:34;;;;;-1:-1:-1;;;;;25736:34:0;;;25907:40;;;;;;28238:93;;;;;;:::i;:::-;;:::i;5094:27::-;;;;;-1:-1:-1;;;;;5094:27:0;;;28049:86;;;;;;:::i;:::-;;:::i;28337:447::-;;;;;;:::i;:::-;;:::i;5619:239::-;;;;;;:::i;:::-;;:::i;28141:91::-;5568:4;5602:5;-1:-1:-1;;;;;5602:5:0;5588:10;:19;5454:54;;;;-1:-1:-1;;;5454:54:0;;;;;;;:::i;:::-;;;;;;;;;28205:12:::1;:21:::0;28141:91::o;27948:95::-;5568:4;5602:5;-1:-1:-1;;;;;5602:5:0;5588:10;:19;5454:54;;;;-1:-1:-1;;;5454:54:0;;;;;;;:::i;:::-;28017:11:::1;:20:::0;;-1:-1:-1;;;;;;28017:20:0::1;-1:-1:-1::0;;;;;28017:20:0;;;::::1;::::0;;;::::1;::::0;;27948:95::o;5864:242::-;5929:12;;-1:-1:-1;;;;;5929:12:0;5915:10;:26;5907:75;;;;-1:-1:-1;;;5907:75:0;;7395:2:1;5907:75:0;;;7377:21:1;7434:2;7414:18;;;7407:30;7473:34;7453:18;;;7446:62;-1:-1:-1;;;7524:18:1;;;7517:34;7568:19;;5907:75:0;7367:226:1;5907:75:0;6028:12;;;6021:5;;5994:47;;-1:-1:-1;;;;;6028:12:0;;;;6021:5;;;;5994:47;;;6056:12;;;;6048:20;;-1:-1:-1;;;;;;6048:20:0;;;-1:-1:-1;;;;;6056:12:0;;6048:20;;;;6075:25;;;5864:242::o;27135:807::-;27361:4;;27398:18;:5;27361:4;27398:15;:18::i;:::-;27376:40;;27425:20;27439:5;27425:13;:20::i;:::-;27452:34;27467:5;27474:11;27452:14;:34::i;:::-;27522:1;27501:18;:22;27493:67;;;;-1:-1:-1;;;27493:67:0;;7034:2:1;27493:67:0;;;7016:21:1;;;7053:18;;;7046:30;7112:34;7092:18;;;7085:62;7164:18;;27493:67:0;7006:182:1;27493:67:0;27569:47;;-1:-1:-1;;;27569:47:0;;-1:-1:-1;;;;;3947:32:1;;;27569:47:0;;;3929:51:1;3996:18;;;3989:34;;;27569:14:0;;;;;3902:18:1;;27569:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27623:16;27663:49;27680:11;27693:18;27663:16;:49::i;:::-;27642:70;;:18;:70;:::i;:::-;27623:89;;27721:15;27739:35;27749:11;27762;27739:9;:35::i;:::-;27781:58;;-1:-1:-1;;;27781:58:0;;-1:-1:-1;;;;;3947:32:1;;;27781:58:0;;;3929:51:1;3996:18;;;3989:34;;;27721:53:0;;-1:-1:-1;27781:28:0;;;;;;3902:18:1;;27781:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;27846:9:0;;27886:11;;27846:64;;-1:-1:-1;;;27846:64:0;;-1:-1:-1;;;;;3633:15:1;;;27846:64:0;;;3615:34:1;27886:11:0;;;3665:18:1;;;3658:43;3717:18;;;3710:34;;;27846:9:0;;;:22;;3550:18:1;;27846:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;27926:10:0;27135:807;-1:-1:-1;;;;;;;;27135:807:0:o;28238:93::-;5568:4;5602:5;-1:-1:-1;;;;;5602:5:0;5588:10;:19;5454:54;;;;-1:-1:-1;;;5454:54:0;;;;;;;:::i;:::-;28303:13:::1;:22:::0;28238:93::o;28049:86::-;5568:4;5602:5;-1:-1:-1;;;;;5602:5:0;5588:10;:19;5454:54;;;;-1:-1:-1;;;5454:54:0;;;;;;;:::i;:::-;28112:8:::1;:17:::0;;-1:-1:-1;;;;;;28112:17:0::1;-1:-1:-1::0;;;;;28112:17:0;;;::::1;::::0;;;::::1;::::0;;28049:86::o;28337:447::-;28414:4;28429:14;28517:10;-1:-1:-1;;;;;28510:27:0;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28504:35;;:2;:35;:::i;:::-;28446:17;;;:40;;-1:-1:-1;;;28446:40:0;;-1:-1:-1;;;;;3022:32:1;;;28446:40:0;;;3004:51:1;;;;28446:17:0;;;:28;;2977:18:1;;28446:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:55;;28497:4;28446:55;:::i;:::-;:93;;;;:::i;:::-;28429:110;;28546:12;28642:9;;;;;;;;;-1:-1:-1;;;;;28642:9:0;-1:-1:-1;;;;;28627:35:0;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28621:43;;:2;:43;:::i;:::-;28563:17;;;28600:9;;28563:48;;-1:-1:-1;;;28563:48:0;;-1:-1:-1;;;;;28600:9:0;;;28563:48;;;3004:51:1;;;;28563:17:0;;:28;;2977:18:1;;28563:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:55;;28614:4;28563:55;:::i;:::-;:101;;;;:::i;:::-;28546:118;;28673:10;28751:6;28734:13;;28725:6;:22;;;;:::i;:::-;28713:7;28687:23;28701:9;28687:11;:23;:::i;:::-;:33;;;;:::i;:::-;28686:62;;;;:::i;:::-;:71;;;;:::i;:::-;28673:84;-1:-1:-1;;;;28337:447:0;;;;;:::o;5619:239::-;5568:4;5602:5;-1:-1:-1;;;;;5602:5:0;5588:10;:19;5454:54;;;;-1:-1:-1;;;5454:54:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5699:23:0;::::1;5691:74;;;::::0;-1:-1:-1;;;5691:74:0;;5111:2:1;5691:74:0::1;::::0;::::1;5093:21:1::0;5150:2;5130:18;;;5123:30;5189:34;5169:18;;;5162:62;-1:-1:-1;;;5240:18:1;;;5233:36;5286:19;;5691:74:0::1;5083:228:1::0;5691:74:0::1;5804:5;::::0;;5777:44:::1;::::0;-1:-1:-1;;;;;5777:44:0;;::::1;::::0;5804:5;::::1;::::0;5777:44:::1;::::0;::::1;5828:12;:24:::0;;-1:-1:-1;;;;;;5828:24:0::1;-1:-1:-1::0;;;;;5828:24:0;;;::::1;::::0;;;::::1;::::0;;5619:239::o;18297:363::-;18376:7;18421:11;:6;18430:2;18421:11;:::i;:::-;18404:6;:13;:28;;18396:62;;;;-1:-1:-1;;;18396:62:0;;6684:2:1;18396:62:0;;;6666:21:1;6723:2;6703:18;;;6696:30;-1:-1:-1;;;6742:18:1;;;6735:51;6803:18;;18396:62:0;6656:171:1;18396:62:0;-1:-1:-1;18550:30:0;18566:4;18550:30;18544:37;-1:-1:-1;;;18540:71:0;;;18297:363::o;29248:208::-;29346:7;;;;;;;;;-1:-1:-1;;;;;29346:7:0;-1:-1:-1;;;;;29346:20:0;;29367:5;-1:-1:-1;;;;;29367:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29383:5;-1:-1:-1;;;;;29383:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29346:52;;-1:-1:-1;;;;;;29346:52:0;;;;;;;-1:-1:-1;;;;;3296:15:1;;;29346:52:0;;;3278:34:1;3348:15;;3328:18;;;3321:43;3213:18;;29346:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29328:70:0;29336:5;-1:-1:-1;;;;;29328:70:0;;29312:138;;;;-1:-1:-1;;;29312:138:0;;5920:2:1;29312:138:0;;;5902:21:1;5959:2;5939:18;;;5932:30;5998:34;5978:18;;;5971:62;-1:-1:-1;;;6049:18:1;;;6042:32;6091:19;;29312:138:0;5892:224:1;29312:138:0;29248:208;:::o;29029:213::-;29136:5;-1:-1:-1;;;;;29136:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29126:24:0;:6;-1:-1:-1;;;;;29126:24:0;;:59;;;;29171:5;-1:-1:-1;;;;;29171:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29161:24:0;:6;-1:-1:-1;;;;;29161:24:0;;29126:59;29110:126;;;;-1:-1:-1;;;29110:126:0;;5518:2:1;29110:126:0;;;5500:21:1;5557:2;5537:18;;;5530:30;5596:34;5576:18;;;5569:62;-1:-1:-1;;;5647:18:1;;;5640:31;5688:19;;29110:126:0;5490:223:1;29110:126:0;29029:213;;:::o;28790:233::-;28863:14;-1:-1:-1;;;;;28890:23:0;;25614:42;28890:23;28886:132;;;28961:6;28946:12;;28936:7;:22;;;;:::i;:::-;:31;;;;:::i;:::-;28990:8;;28976:34;;-1:-1:-1;;;28976:34:0;;-1:-1:-1;;;;;28990:8:0;;;28976:34;;;3929:51:1;3996:18;;;3989:34;;;28924:43:0;;-1:-1:-1;25614:42:0;;28976:13;;3902:18:1;;28976:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28790:233;;;;:::o;14:247:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:2;;;142:1;139;132:12;94:2;181:9;168:23;200:31;225:5;200:31;:::i;:::-;250:5;84:177;-1:-1:-1;;;84:177:1:o;266:251::-;336:6;389:2;377:9;368:7;364:23;360:32;357:2;;;405:1;402;395:12;357:2;437:9;431:16;456:31;481:5;456:31;:::i;522:1355::-;646:6;654;662;670;678;731:3;719:9;710:7;706:23;702:33;699:2;;;748:1;745;738:12;699:2;787:9;774:23;806:31;831:5;806:31;:::i;:::-;856:5;-1:-1:-1;913:2:1;898:18;;885:32;926:33;885:32;926:33;:::i;:::-;978:7;-1:-1:-1;1036:2:1;1021:18;;1008:32;1059:18;1089:14;;;1086:2;;;1116:1;1113;1106:12;1086:2;1154:6;1143:9;1139:22;1129:32;;1199:7;1192:4;1188:2;1184:13;1180:27;1170:2;;1221:1;1218;1211:12;1170:2;1257;1244:16;1279:2;1275;1272:10;1269:2;;;1285:18;;:::i;:::-;1360:2;1354:9;1328:2;1414:13;;-1:-1:-1;;1410:22:1;;;1434:2;1406:31;1402:40;1390:53;;;1458:18;;;1478:22;;;1455:46;1452:2;;;1504:18;;:::i;:::-;1544:10;1540:2;1533:22;1579:2;1571:6;1564:18;1619:7;1614:2;1609;1605;1601:11;1597:20;1594:33;1591:2;;;1640:1;1637;1630:12;1591:2;1696;1691;1687;1683:11;1678:2;1670:6;1666:15;1653:46;1741:1;1719:15;;;1736:2;1715:24;1708:35;;;;-1:-1:-1;689:1188:1;;;;-1:-1:-1;1723:6:1;;1815:2;1800:18;;1787:32;;-1:-1:-1;1866:3:1;1851:19;1838:33;;689:1188;-1:-1:-1;;;;689:1188:1:o;1882:315::-;1950:6;1958;2011:2;1999:9;1990:7;1986:23;1982:32;1979:2;;;2027:1;2024;2017:12;1979:2;2066:9;2053:23;2085:31;2110:5;2085:31;:::i;:::-;2135:5;2187:2;2172:18;;;;2159:32;;-1:-1:-1;;;1969:228:1:o;2202:277::-;2269:6;2322:2;2310:9;2301:7;2297:23;2293:32;2290:2;;;2338:1;2335;2328:12;2290:2;2370:9;2364:16;2423:5;2416:13;2409:21;2402:5;2399:32;2389:2;;2445:1;2442;2435:12;2484:180;2543:6;2596:2;2584:9;2575:7;2571:23;2567:32;2564:2;;;2612:1;2609;2602:12;2564:2;-1:-1:-1;2635:23:1;;2554:110;-1:-1:-1;2554:110:1:o;2669:184::-;2739:6;2792:2;2780:9;2771:7;2767:23;2763:32;2760:2;;;2808:1;2805;2798:12;2760:2;-1:-1:-1;2831:16:1;;2750:103;-1:-1:-1;2750:103:1:o;6121:356::-;6323:2;6305:21;;;6342:18;;;6335:30;6401:34;6396:2;6381:18;;6374:62;6468:2;6453:18;;6295:182::o;7780:128::-;7820:3;7851:1;7847:6;7844:1;7841:13;7838:2;;;7857:18;;:::i;:::-;-1:-1:-1;7893:9:1;;7828:80::o;7913:217::-;7953:1;7979;7969:2;;8023:10;8018:3;8014:20;8011:1;8004:31;8058:4;8055:1;8048:15;8086:4;8083:1;8076:15;7969:2;-1:-1:-1;8115:9:1;;7959:171::o;8135:422::-;8224:1;8267:5;8224:1;8281:270;8302:7;8292:8;8289:21;8281:270;;;8361:4;8357:1;8353:6;8349:17;8343:4;8340:27;8337:2;;;8370:18;;:::i;:::-;8420:7;8410:8;8406:22;8403:2;;;8440:16;;;;8403:2;8519:22;;;;8479:15;;;;8281:270;;;8285:3;8199:358;;;;;:::o;8562:131::-;8622:5;8651:36;8678:8;8672:4;8747:5;8777:8;8767:2;;-1:-1:-1;8818:1:1;8832:5;;8767:2;8866:4;8856:2;;-1:-1:-1;8903:1:1;8917:5;;8856:2;8948:4;8966:1;8961:59;;;;9034:1;9029:130;;;;8941:218;;8961:59;8991:1;8982:10;;9005:5;;;9029:130;9066:3;9056:8;9053:17;9050:2;;;9073:18;;:::i;:::-;-1:-1:-1;;9129:1:1;9115:16;;9144:5;;8941:218;;9243:2;9233:8;9230:16;9224:3;9218:4;9215:13;9211:36;9205:2;9195:8;9192:16;9187:2;9181:4;9178:12;9174:35;9171:77;9168:2;;;-1:-1:-1;9280:19:1;;;9312:5;;9168:2;9359:34;9384:8;9378:4;9359:34;:::i;:::-;9429:6;9425:1;9421:6;9417:19;9408:7;9405:32;9402:2;;;9440:18;;:::i;:::-;9478:20;;8757:747;-1:-1:-1;;;8757:747:1:o;9509:168::-;9549:7;9615:1;9611;9607:6;9603:14;9600:1;9597:21;9592:1;9585:9;9578:17;9574:45;9571:2;;;9622:18;;:::i;:::-;-1:-1:-1;9662:9:1;;9561:116::o;9682:125::-;9722:4;9750:1;9747;9744:8;9741:2;;;9755:18;;:::i;:::-;-1:-1:-1;9792:9:1;;9731:76::o;9812:127::-;9873:10;9868:3;9864:20;9861:1;9854:31;9904:4;9901:1;9894:15;9928:4;9925:1;9918:15;9944:127;10005:10;10000:3;9996:20;9993:1;9986:31;10036:4;10033:1;10026:15;10060:4;10057:1;10050:15;10076:131;-1:-1:-1;;;;;10151:31:1;;10141:42;;10131:2;;10197:1;10194;10187:12

Swarm Source

ipfs://b554a4184677062d2597aeb6ae224a3dee325d9ee9f35d1b4483f5e738878dc8

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

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.