ETH Price: $3,089.17 (-1.29%)
Gas: 3 Gwei

Contract

0x9eb6BF2E582279cfC1988d3F2043Ff4DF18fa6A0
 
Transaction Hash
Method
Block
From
To
Value
Sell Debt194480902024-03-16 14:37:1164 days ago1710599831IN
0x9eb6BF2E...DF18fa6A0
0 ETH0.0071066746.09692157
Sell Debt192883102024-02-23 5:49:1186 days ago1708667351IN
0x9eb6BF2E...DF18fa6A0
0 ETH0.0121101225
Sell Debt184321092023-10-26 4:48:23206 days ago1698295703IN
0x9eb6BF2E...DF18fa6A0
0 ETH0.0115633322.77510836
Sell Debt184249432023-10-25 4:40:59207 days ago1698208859IN
0x9eb6BF2E...DF18fa6A0
0 ETH0.0019113111.95819869
Sell Debt184188342023-10-24 8:09:23208 days ago1698134963IN
0x9eb6BF2E...DF18fa6A0
0 ETH0.0027815716.4186172
Sell Debt184116392023-10-23 7:58:35209 days ago1698047915IN
0x9eb6BF2E...DF18fa6A0
0 ETH0.0074195713.65571832
Sell Debt183620822023-10-16 9:36:35216 days ago1697448995IN
0x9eb6BF2E...DF18fa6A0
0 ETH0.0019825812.85890337
Sell Debt183620802023-10-16 9:36:11216 days ago1697448971IN
0x9eb6BF2E...DF18fa6A0
0 ETH0.0020073713.60784075
Sell Debt180208202023-08-29 14:18:47264 days ago1693318727IN
0x9eb6BF2E...DF18fa6A0
0 ETH0.0096567157
Sell Debt178142052023-07-31 16:32:47293 days ago1690821167IN
0x9eb6BF2E...DF18fa6A0
0 ETH0.0187549640.47811386
Sell Debt178140122023-07-31 15:53:47293 days ago1690818827IN
0x9eb6BF2E...DF18fa6A0
0 ETH0.0218778247.21805978
Sell Debt177806202023-07-26 23:45:47298 days ago1690415147IN
0x9eb6BF2E...DF18fa6A0
0 ETH0.0033870719.77735841
Sell Debt176937402023-07-14 19:20:59310 days ago1689362459IN
0x9eb6BF2E...DF18fa6A0
0 ETH0.0039707426.92176841
Sell Debt175335402023-06-22 6:59:47332 days ago1687417187IN
0x9eb6BF2E...DF18fa6A0
0 ETH0.0070812713.81128183
Sell Debt171621802023-04-30 23:37:59385 days ago1682897879IN
0x9eb6BF2E...DF18fa6A0
0 ETH0.0050149335.04793182
Sell Debt169550512023-04-01 15:01:23414 days ago1680361283IN
0x9eb6BF2E...DF18fa6A0
0 ETH0.0051750335.67120497
Sell Debt169432342023-03-30 23:10:11416 days ago1680217811IN
0x9eb6BF2E...DF18fa6A0
0 ETH0.0040857227.70132848
Sell Debt169432322023-03-30 23:09:47416 days ago1680217787IN
0x9eb6BF2E...DF18fa6A0
0 ETH0.004137328.51582425
Sell Debt162644642022-12-25 21:31:35511 days ago1672003895IN
0x9eb6BF2E...DF18fa6A0
0 ETH0.0017001110.88823116
Sell Debt162555082022-12-24 15:31:59512 days ago1671895919IN
0x9eb6BF2E...DF18fa6A0
0 ETH0.0021852515.06407014
Sell Debt162555072022-12-24 15:31:47512 days ago1671895907IN
0x9eb6BF2E...DF18fa6A0
0 ETH0.0022866515.24680554
Sell Debt162255212022-12-20 11:10:59516 days ago1671534659IN
0x9eb6BF2E...DF18fa6A0
0 ETH0.0020706113.26108196
Sell Debt162255182022-12-20 11:10:23516 days ago1671534623IN
0x9eb6BF2E...DF18fa6A0
0 ETH0.0022027415.18463227
Sell Debt162255172022-12-20 11:10:11516 days ago1671534611IN
0x9eb6BF2E...DF18fa6A0
0 ETH0.0021729614.4887599
Sell Debt161605102022-12-11 9:15:59525 days ago1670750159IN
0x9eb6BF2E...DF18fa6A0
0 ETH0.0070018413.89533478
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DebtRepayer

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 1 of 2: DebtRepayer.sol
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.13;

import "IERC20.sol";

interface ICTOKEN is IERC20 {
    function exchangeRateStored() external view returns(uint);
    function borrowBalanceStored(address account) external view returns(uint);
    function decimals() external view returns(uint8);
}

contract DebtRepayer {
   
    /*
     * Constant used as mantissa for dividing maxDiscount and zeroDiscountReserveThreshold
     */
    uint public immutable baseline;
    
    /*
     * maxDiscount denotes the maximum cut in value,
     * a user can have when selling their debt.
     * The maxDiscount can be seen as the starting point of the discount rate.
     * Must be set between 0 and baseline, with baseline denoting a 100% discount.
     * setable by governance
     */
    uint public maxDiscount;
    
    /*
     * zeroDiscountReserveThreshold, is the threshold at which the discount on selling reaches 0
     * If discount is 0, you can buy all of the reserves at 0 discount, even if pushing the discount rate up with the sell.
     * Must be set between 0 and baseline, with baseline meaning 0 discount at 100% reserve to debt rate.
     * setable by governance
     */
    uint public zeroDiscountReserveThreshold;

    /*
     * The governance of the contract. Can set maxDiscount, zeroDiscountReserveThreshold, Governance, Treasury and sweep tokens from the contract
     */
    address public governance;

    /*
     * The controller of the contract. Can set maxDiscount, zeroDiscountReserveThreshold, Governance, Treasury and sweep tokens from the contract
     */
    address public controller;
    /*
     * The address to which anTokens are paid to.
     */
    address public treasury;

    address public constant anEth = 0x697b4acAa24430F254224eB794d2a85ba1Fa1FB8;
    address public constant anYfi = 0xde2af899040536884e062D3a334F2dD36F34b4a4;
    address public constant anBtc = 0x17786f3813E6bA35343211bd8Fe18EC4de14F28b;

    IERC20 constant yfi = IERC20(0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e);
    IERC20 constant wbtc = IERC20(0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599);
    IERC20 constant weth = IERC20(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2);

    constructor(uint decimals, uint maxDiscount_, uint zeroDiscountReserveThreshold_, address governance_, address controller_, address treasury_){
        require(maxDiscount_ <= 10 ** decimals);
        require(zeroDiscountReserveThreshold_ <= 10 ** decimals);
        zeroDiscountReserveThreshold = zeroDiscountReserveThreshold_;
        maxDiscount = maxDiscount_;
        baseline = 10 ** decimals;
        governance = governance_;
        controller = controller_;
        treasury = treasury_;
    }

    /*
     * @notice Function called by users to sell their anTokens to the contract.
     * anTokens must be approved!
     * @param anToken The address of the anToken the user wishes to sell. Must be either anEth, anYfi or anBtc
     * @param amount The amount of anTokens the user wish to sell
     * @param minOut The amount of underlying tokens the user must get in return.
     * It is recommended to either set this as amountOut(anToken, underlying, amount)
     */
    function sellDebt(address anToken, uint amount, uint minOut) public {
        require(IERC20(anToken).balanceOf(msg.sender) >= amount, "NOT ENOUGH DEBT TOKENS");
        IERC20 underlying;
        if(anToken == anYfi){
            underlying = yfi;
        } else if(anToken == anBtc){
            underlying = wbtc;
        } else if(anToken == anEth){
            underlying = weth;
        } else {
            revert("UNKNOWN COLLATERAL TOKEN");
        }
        require(minOut <= underlying.balanceOf(address(this)), "NOT ENOUGH RESERVES");
        (uint receiveAmount, uint payAmount) = amountOut(anToken, underlying, amount);
        require(receiveAmount >= minOut, "RECEIVED LOWER THAN EXPECTED");
        uint treasuryFunds = IERC20(anToken).balanceOf(treasury);
        uint userFunds = underlying.balanceOf(msg.sender);
        require(IERC20(address(anToken)).transferFrom(msg.sender, treasury, payAmount), "TRANSFER FROM FAILED");
        require(IERC20(anToken).balanceOf(treasury) - treasuryFunds >= payAmount, "TREASURY TRANSFER FAILED");
        underlying.transfer(msg.sender, receiveAmount);
        require(underlying.balanceOf(msg.sender) - userFunds >= receiveAmount, "USER TRANSFER FAILED");

        emit debtRepayment(address(underlying), receiveAmount, payAmount);
    }
    
    /*
     * @notice Function for calculating the expected amount of underlying out, when selling a specific amount
     * @param anToken The anToken to sell
     * @param underlying The underlying token of the anToken
     * @amount The amount of anToken to sell
     */
    function amountOut(address anToken, IERC20 underlying, uint amount) public view returns(uint, uint){
        uint receiveAmount = convertToUnderlying(anToken, amount) * currentDiscount(anToken)/baseline;
        if(receiveAmount > underlying.balanceOf(address(this))){
            amount = amount * underlying.balanceOf(address(this)) / receiveAmount;
            receiveAmount = underlying.balanceOf(address(this));
        }
        return(receiveAmount, amount);
    }
    
    /*
     * @notice View function for getting the current discount baseline = 0% discount, 0 = 100% discount
     */
    function currentDiscount(address anToken) public view returns(uint){
        uint reserves;
        if(anToken == anYfi){
            reserves = yfi.balanceOf(address(this));
        } 
        else if(anToken == anBtc){
            reserves = wbtc.balanceOf(address(this));
        }
        else if(anToken == anEth){
            reserves = weth.balanceOf(address(this));
        } else {
            revert("UNKNOWN COLLATERAL TOKEN");
        }
        return calculateDiscount(reserves, remainingDebt(anToken));
    }

    /*
     * @notice view function for calculating the current debt of a specific anchor market
     * @dev The function subtracts anTokens owned by treasury from attackers debt
     * @param anToken Address of market of which debt you want to see
     */
    function remainingDebt(address anToken) public view returns(uint){
        uint repaid = IERC20(anToken).balanceOf(treasury);
        return ICTOKEN(anToken).borrowBalanceStored(0xeA0c959BBb7476DDD6cD4204bDee82b790AA1562) - convertToUnderlying(anToken, repaid);
    }

    /*
     * @notice Converts an amount of anTokens into the corresponding amount of underlying
     * @param anToken The anToken to convert
     * @param amount The amount to convert
     */
    function convertToUnderlying(address anToken, uint amount) public view returns(uint){
        ICTOKEN cToken = ICTOKEN(anToken);
        return amount * cToken.exchangeRateStored() / 10 ** 18;
    }
    
    function calculateDiscount(uint reserveAmount, uint debtOutstanding) private view returns(uint){
        uint reserveRatio = reserveAmount * baseline / debtOutstanding;
        if( reserveRatio < zeroDiscountReserveThreshold){
            return baseline - (maxDiscount - maxDiscount * reserveRatio / zeroDiscountReserveThreshold);
        }
        return baseline;
    }
   
    //If we receive any eth, we want to revert. Alternatively, turn it into wETH
    receive() external payable {
        revert("Eth not allowed");
    }

    // *******************
    // * OWNER FUNCTIONS *
    // *******************
    
    /*
     * @notice function for sweeping any token owned by this contract to the treasury address
     * Only callable by governance or controller
     * @token Address of the ERC20 token to sweep
     * @amount Amount to sweep
     */
    function sweepTokens(address token, uint amount) public{
        require(msg.sender == governance || msg.sender == controller);
        require(IERC20(token).balanceOf(address(this)) >= amount);
        IERC20(token).transfer(treasury, amount);
    }

    /*
     * @notice function for setting a new maxDiscount. Only callable by governance or controller.
     * If set to 0, the maxDiscount is 0%
     * If set to baseline, the maxDiscount is 100%
     * @param newMaxDiscount The new maxDiscount rate. Must be set between 0 and baseline.
     */ 
    function setMaxDiscount(uint newMaxDiscount) public{
        require(msg.sender == governance || msg.sender == controller);
        require(newMaxDiscount <= baseline);
        maxDiscount = newMaxDiscount;
    }
    
    /*
     * @notice function for setting a new zeroDiscountReserveThreshold. Only callable by governanceor controller.
     * If set to 1, the discount rate will be 0% when 1/baseline of debt has been paid to the contract.
     * If set to baseline, the discount rate will be 0% when 100% of debt has been paid to the contract.
     * @param newZeroDiscountReserveThreshold The new zero discount reserve threshold. Must be set between 1 and baseline.
     */
    function setZeroDiscountReserveThreshold(uint newZeroDiscountReserveThreshold) public{
        require(msg.sender == governance || msg.sender == controller);
        require(newZeroDiscountReserveThreshold <= baseline);
        require(newZeroDiscountReserveThreshold > 0);
        zeroDiscountReserveThreshold = newZeroDiscountReserveThreshold;
    }

    /*
     * @notice Function for setting the new governance. Only callable by governance.
     * @param newGovernance The address of the newGovernance
     */
    function setGovernance(address newGovernance) public{
        require(msg.sender == governance);
        governance = newGovernance;
    }

    /*
     * @notice Function for setting a new treasury. Only callable by governance.
     * @param newTreasury The address of the new treasury.
     */
    function setTreasury(address newTreasury) public{
        require(msg.sender == governance);
        treasury = newTreasury;
    }

    /*
     * @notice Function for setting a new controller. Only callable by governance.
     * @param newController The address of the new controller.
     */
    function setController(address newController) public{
        require(msg.sender == governance);
        controller = newController;
    }

    event debtRepayment(address underlying, uint receiveAmount, uint paidAmount);

}

File 2 of 2: IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;
/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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);

    /**
     * @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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}


interface ICERC20 is IERC20{
    function underlying() external view returns (address);
}


Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"uint256","name":"maxDiscount_","type":"uint256"},{"internalType":"uint256","name":"zeroDiscountReserveThreshold_","type":"uint256"},{"internalType":"address","name":"governance_","type":"address"},{"internalType":"address","name":"controller_","type":"address"},{"internalType":"address","name":"treasury_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"underlying","type":"address"},{"indexed":false,"internalType":"uint256","name":"receiveAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"paidAmount","type":"uint256"}],"name":"debtRepayment","type":"event"},{"inputs":[{"internalType":"address","name":"anToken","type":"address"},{"internalType":"contract IERC20","name":"underlying","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"amountOut","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"anBtc","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"anEth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"anYfi","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseline","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"controller","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"anToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"convertToUnderlying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"anToken","type":"address"}],"name":"currentDiscount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxDiscount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"anToken","type":"address"}],"name":"remainingDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"anToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"minOut","type":"uint256"}],"name":"sellDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newController","type":"address"}],"name":"setController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newGovernance","type":"address"}],"name":"setGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxDiscount","type":"uint256"}],"name":"setMaxDiscount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTreasury","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newZeroDiscountReserveThreshold","type":"uint256"}],"name":"setZeroDiscountReserveThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sweepTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"zeroDiscountReserveThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040523480156200001157600080fd5b50604051620017aa380380620017aa8339810160408190526200003491620000e6565b6200004186600a62000261565b8511156200004e57600080fd5b6200005b86600a62000261565b8411156200006857600080fd5b600184905560008590556200007f86600a62000261565b608052600280546001600160a01b039485166001600160a01b0319918216179091556003805493851693821693909317909255600480549190931691161790555062000276915050565b80516001600160a01b0381168114620000e157600080fd5b919050565b60008060008060008060c087890312156200010057600080fd5b8651955060208701519450604087015193506200012060608801620000c9565b92506200013060808801620000c9565b91506200014060a08801620000c9565b90509295509295509295565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620001a35781600019048211156200018757620001876200014c565b808516156200019557918102915b93841c939080029062000167565b509250929050565b600082620001bc575060016200025b565b81620001cb575060006200025b565b8160018114620001e45760028114620001ef576200020f565b60019150506200025b565b60ff8411156200020357620002036200014c565b50506001821b6200025b565b5060208310610133831016604e8410600b841016171562000234575081810a6200025b565b62000240838362000162565b80600019048211156200025757620002576200014c565b0290505b92915050565b60006200026f8383620001ab565b9392505050565b6080516114ee620002bc6000396000818161036601528181610b3301528181610b6a01528181610dd601528181611261015281816112ca01526112f901526114ee6000f3fe6080604052600436106101235760003560e01c8063a676e300116100a0578063dec6603611610064578063dec660361461039e578063eec3cbd4146103be578063f0048bcf146103de578063f0f4426014610406578063f77c47911461042657600080fd5b8063a676e300146102ec578063a9a2026d1461030c578063ab033ea914610334578063ab2637af14610354578063b8b89e1b1461038857600080fd5b80635aa6e675116100e75780635aa6e6751461024c5780635d3795b01461026c57806361d027b31461028c5780636c61bfa8146102ac57806392eefe9b146102cc57600080fd5b806301a2a5081461016c57806311fad3121461018e57806321cce12f146101ae57806330dfd73c146101e857806354c219f61461022857600080fd5b366101675760405162461bcd60e51b815260206004820152600f60248201526e115d1a081b9bdd08185b1b1bddd959608a1b60448201526064015b60405180910390fd5b600080fd5b34801561017857600080fd5b5061018c610187366004611337565b610446565b005b34801561019a57600080fd5b5061018c6101a936600461136c565b610b05565b3480156101ba57600080fd5b506101ce6101c9366004611385565b610b63565b604080519283526020830191909152015b60405180910390f35b3480156101f457600080fd5b5061021073de2af899040536884e062d3a334f2dd36f34b4a481565b6040516001600160a01b0390911681526020016101df565b34801561023457600080fd5b5061023e60015481565b6040519081526020016101df565b34801561025857600080fd5b50600254610210906001600160a01b031681565b34801561027857600080fd5b5061023e6102873660046113c6565b610d19565b34801561029857600080fd5b50600454610210906001600160a01b031681565b3480156102b857600080fd5b5061018c6102c736600461136c565b610da8565b3480156102d857600080fd5b5061018c6102e73660046113f2565b610e13565b3480156102f857600080fd5b5061023e6103073660046113f2565b610e4c565b34801561031857600080fd5b506102107317786f3813e6ba35343211bd8fe18ec4de14f28b81565b34801561034057600080fd5b5061018c61034f3660046113f2565b610fc0565b34801561036057600080fd5b5061023e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561039457600080fd5b5061023e60005481565b3480156103aa57600080fd5b5061018c6103b93660046113c6565b610ff9565b3480156103ca57600080fd5b5061023e6103d93660046113f2565b611118565b3480156103ea57600080fd5b5061021073697b4acaa24430f254224eb794d2a85ba1fa1fb881565b34801561041257600080fd5b5061018c6104213660046113f2565b61121f565b34801561043257600080fd5b50600354610210906001600160a01b031681565b6040516370a0823160e01b815233600482015282906001600160a01b038516906370a0823190602401602060405180830381865afa15801561048c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b0919061140f565b10156104f75760405162461bcd60e51b81526020600482015260166024820152754e4f5420454e4f554748204445425420544f4b454e5360501b604482015260640161015e565b600073de2af899040536884e062d3a334f2dd36f34b4a3196001600160a01b038516016105395750730bc529c00c6401aef6d220be8c6ea1667f6ad93e610601565b7317786f3813e6ba35343211bd8fe18ec4de14f28a196001600160a01b038516016105795750732260fac5e5542a773aa44fbcfedf7c193bc2c599610601565b73697b4acaa24430f254224eb794d2a85ba1fa1fb7196001600160a01b038516016105b9575073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2610601565b60405162461bcd60e51b815260206004820152601860248201527f554e4b4e4f574e20434f4c4c41544552414c20544f4b454e0000000000000000604482015260640161015e565b6040516370a0823160e01b81523060048201526001600160a01b038216906370a0823190602401602060405180830381865afa158015610645573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610669919061140f565b8211156106ae5760405162461bcd60e51b81526020600482015260136024820152724e4f5420454e4f55474820524553455256455360681b604482015260640161015e565b6000806106bc868487610b63565b91509150838210156107105760405162461bcd60e51b815260206004820152601c60248201527f5245434549564544204c4f574552205448414e20455850454354454400000000604482015260640161015e565b600480546040516370a0823160e01b81526001600160a01b0391821692810192909252600091908816906370a0823190602401602060405180830381865afa158015610760573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610784919061140f565b6040516370a0823160e01b81523360048201529091506000906001600160a01b038616906370a0823190602401602060405180830381865afa1580156107ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f2919061140f565b600480546040516323b872dd60e01b815233928101929092526001600160a01b03908116602483015260448201869052919250908916906323b872dd906064016020604051808303816000875af1158015610851573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108759190611428565b6108b85760405162461bcd60e51b81526020600482015260146024820152731514905394d1915488119493d34811905253115160621b604482015260640161015e565b600480546040516370a0823160e01b81526001600160a01b0391821692810192909252849184918b16906370a0823190602401602060405180830381865afa158015610908573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092c919061140f565b6109369190611460565b10156109845760405162461bcd60e51b815260206004820152601860248201527f5452454153555259205452414e53464552204641494c45440000000000000000604482015260640161015e565b60405163a9059cbb60e01b8152336004820152602481018590526001600160a01b0386169063a9059cbb906044016020604051808303816000875af11580156109d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f59190611428565b506040516370a0823160e01b8152336004820152849082906001600160a01b038816906370a0823190602401602060405180830381865afa158015610a3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a62919061140f565b610a6c9190611460565b1015610ab15760405162461bcd60e51b81526020600482015260146024820152731554d154881514905394d191548811905253115160621b604482015260640161015e565b604080516001600160a01b0387168152602081018690529081018490527fa54c6fc8da67769c1e842d1c99f4921cf8f638186f2bd2a14176fe9a5f507a679060600160405180910390a15050505050505050565b6002546001600160a01b0316331480610b2857506003546001600160a01b031633145b610b3157600080fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115610b5e57600080fd5b600055565b60008060007f0000000000000000000000000000000000000000000000000000000000000000610b9287610e4c565b610b9c8887610d19565b610ba69190611477565b610bb09190611496565b6040516370a0823160e01b81523060048201529091506001600160a01b038616906370a0823190602401602060405180830381865afa158015610bf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1b919061140f565b811115610d0e576040516370a0823160e01b815230600482015281906001600160a01b038716906370a0823190602401602060405180830381865afa158015610c68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8c919061140f565b610c969086611477565b610ca09190611496565b6040516370a0823160e01b81523060048201529094506001600160a01b038616906370a0823190602401602060405180830381865afa158015610ce7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0b919061140f565b90505b959294509192505050565b600080839050670de0b6b3a7640000816001600160a01b031663182df0f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8a919061140f565b610d949085611477565b610d9e9190611496565b9150505b92915050565b6002546001600160a01b0316331480610dcb57506003546001600160a01b031633145b610dd457600080fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115610e0157600080fd5b60008111610e0e57600080fd5b600155565b6002546001600160a01b03163314610e2a57600080fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b60008073de2af899040536884e062d3a334f2dd36f34b4a3196001600160a01b03841601610eef576040516370a0823160e01b8152306004820152730bc529c00c6401aef6d220be8c6ea1667f6ad93e906370a08231906024015b602060405180830381865afa158015610ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee8919061140f565b9050610fa7565b7317786f3813e6ba35343211bd8fe18ec4de14f28a196001600160a01b03841601610f4b576040516370a0823160e01b8152306004820152732260fac5e5542a773aa44fbcfedf7c193bc2c599906370a0823190602401610ea7565b73697b4acaa24430f254224eb794d2a85ba1fa1fb7196001600160a01b038416016105b9576040516370a0823160e01b815230600482015273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a0823190602401610ea7565b610fb981610fb485611118565b611258565b9392505050565b6002546001600160a01b03163314610fd757600080fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b031633148061101c57506003546001600160a01b031633145b61102557600080fd5b6040516370a0823160e01b815230600482015281906001600160a01b038416906370a0823190602401602060405180830381865afa15801561106b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108f919061140f565b101561109a57600080fd5b6004805460405163a9059cbb60e01b81526001600160a01b03918216928101929092526024820183905283169063a9059cbb906044016020604051808303816000875af11580156110ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111139190611428565b505050565b600480546040516370a0823160e01b81526001600160a01b039182169281019290925260009182918416906370a0823190602401602060405180830381865afa158015611169573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118d919061140f565b90506111998382610d19565b6040516395dd919360e01b815273ea0c959bbb7476ddd6cd4204bdee82b790aa156260048201526001600160a01b038516906395dd919390602401602060405180830381865afa1580156111f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611215919061140f565b610fb99190611460565b6002546001600160a01b0316331461123657600080fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b600080826112867f000000000000000000000000000000000000000000000000000000000000000086611477565b6112909190611496565b90506001548110156112f657600154816000546112ad9190611477565b6112b79190611496565b6000546112c49190611460565b6112ee907f0000000000000000000000000000000000000000000000000000000000000000611460565b915050610da2565b507f00000000000000000000000000000000000000000000000000000000000000009392505050565b6001600160a01b038116811461133457600080fd5b50565b60008060006060848603121561134c57600080fd5b83356113578161131f565b95602085013595506040909401359392505050565b60006020828403121561137e57600080fd5b5035919050565b60008060006060848603121561139a57600080fd5b83356113a58161131f565b925060208401356113b58161131f565b929592945050506040919091013590565b600080604083850312156113d957600080fd5b82356113e48161131f565b946020939093013593505050565b60006020828403121561140457600080fd5b8135610fb98161131f565b60006020828403121561142157600080fd5b5051919050565b60006020828403121561143a57600080fd5b81518015158114610fb957600080fd5b634e487b7160e01b600052601160045260246000fd5b6000828210156114725761147261144a565b500390565b60008160001904831182151516156114915761149161144a565b500290565b6000826114b357634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122007bc1e56d6342f362771f74184f9269cfa59f1b34f8878577aebb1489be8805f64736f6c634300080d00330000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000157c00000000000000000000000000000000000000000000000000000000000005dc000000000000000000000000926df14a23be491164dcf93f4c468a50ef659d5b000000000000000000000000926df14a23be491164dcf93f4c468a50ef659d5b0000000000000000000000009d5df30f475cea915b1ed4c0cca59255c897b61b

Deployed Bytecode

0x6080604052600436106101235760003560e01c8063a676e300116100a0578063dec6603611610064578063dec660361461039e578063eec3cbd4146103be578063f0048bcf146103de578063f0f4426014610406578063f77c47911461042657600080fd5b8063a676e300146102ec578063a9a2026d1461030c578063ab033ea914610334578063ab2637af14610354578063b8b89e1b1461038857600080fd5b80635aa6e675116100e75780635aa6e6751461024c5780635d3795b01461026c57806361d027b31461028c5780636c61bfa8146102ac57806392eefe9b146102cc57600080fd5b806301a2a5081461016c57806311fad3121461018e57806321cce12f146101ae57806330dfd73c146101e857806354c219f61461022857600080fd5b366101675760405162461bcd60e51b815260206004820152600f60248201526e115d1a081b9bdd08185b1b1bddd959608a1b60448201526064015b60405180910390fd5b600080fd5b34801561017857600080fd5b5061018c610187366004611337565b610446565b005b34801561019a57600080fd5b5061018c6101a936600461136c565b610b05565b3480156101ba57600080fd5b506101ce6101c9366004611385565b610b63565b604080519283526020830191909152015b60405180910390f35b3480156101f457600080fd5b5061021073de2af899040536884e062d3a334f2dd36f34b4a481565b6040516001600160a01b0390911681526020016101df565b34801561023457600080fd5b5061023e60015481565b6040519081526020016101df565b34801561025857600080fd5b50600254610210906001600160a01b031681565b34801561027857600080fd5b5061023e6102873660046113c6565b610d19565b34801561029857600080fd5b50600454610210906001600160a01b031681565b3480156102b857600080fd5b5061018c6102c736600461136c565b610da8565b3480156102d857600080fd5b5061018c6102e73660046113f2565b610e13565b3480156102f857600080fd5b5061023e6103073660046113f2565b610e4c565b34801561031857600080fd5b506102107317786f3813e6ba35343211bd8fe18ec4de14f28b81565b34801561034057600080fd5b5061018c61034f3660046113f2565b610fc0565b34801561036057600080fd5b5061023e7f000000000000000000000000000000000000000000000000000000000000271081565b34801561039457600080fd5b5061023e60005481565b3480156103aa57600080fd5b5061018c6103b93660046113c6565b610ff9565b3480156103ca57600080fd5b5061023e6103d93660046113f2565b611118565b3480156103ea57600080fd5b5061021073697b4acaa24430f254224eb794d2a85ba1fa1fb881565b34801561041257600080fd5b5061018c6104213660046113f2565b61121f565b34801561043257600080fd5b50600354610210906001600160a01b031681565b6040516370a0823160e01b815233600482015282906001600160a01b038516906370a0823190602401602060405180830381865afa15801561048c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b0919061140f565b10156104f75760405162461bcd60e51b81526020600482015260166024820152754e4f5420454e4f554748204445425420544f4b454e5360501b604482015260640161015e565b600073de2af899040536884e062d3a334f2dd36f34b4a3196001600160a01b038516016105395750730bc529c00c6401aef6d220be8c6ea1667f6ad93e610601565b7317786f3813e6ba35343211bd8fe18ec4de14f28a196001600160a01b038516016105795750732260fac5e5542a773aa44fbcfedf7c193bc2c599610601565b73697b4acaa24430f254224eb794d2a85ba1fa1fb7196001600160a01b038516016105b9575073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2610601565b60405162461bcd60e51b815260206004820152601860248201527f554e4b4e4f574e20434f4c4c41544552414c20544f4b454e0000000000000000604482015260640161015e565b6040516370a0823160e01b81523060048201526001600160a01b038216906370a0823190602401602060405180830381865afa158015610645573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610669919061140f565b8211156106ae5760405162461bcd60e51b81526020600482015260136024820152724e4f5420454e4f55474820524553455256455360681b604482015260640161015e565b6000806106bc868487610b63565b91509150838210156107105760405162461bcd60e51b815260206004820152601c60248201527f5245434549564544204c4f574552205448414e20455850454354454400000000604482015260640161015e565b600480546040516370a0823160e01b81526001600160a01b0391821692810192909252600091908816906370a0823190602401602060405180830381865afa158015610760573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610784919061140f565b6040516370a0823160e01b81523360048201529091506000906001600160a01b038616906370a0823190602401602060405180830381865afa1580156107ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f2919061140f565b600480546040516323b872dd60e01b815233928101929092526001600160a01b03908116602483015260448201869052919250908916906323b872dd906064016020604051808303816000875af1158015610851573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108759190611428565b6108b85760405162461bcd60e51b81526020600482015260146024820152731514905394d1915488119493d34811905253115160621b604482015260640161015e565b600480546040516370a0823160e01b81526001600160a01b0391821692810192909252849184918b16906370a0823190602401602060405180830381865afa158015610908573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092c919061140f565b6109369190611460565b10156109845760405162461bcd60e51b815260206004820152601860248201527f5452454153555259205452414e53464552204641494c45440000000000000000604482015260640161015e565b60405163a9059cbb60e01b8152336004820152602481018590526001600160a01b0386169063a9059cbb906044016020604051808303816000875af11580156109d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f59190611428565b506040516370a0823160e01b8152336004820152849082906001600160a01b038816906370a0823190602401602060405180830381865afa158015610a3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a62919061140f565b610a6c9190611460565b1015610ab15760405162461bcd60e51b81526020600482015260146024820152731554d154881514905394d191548811905253115160621b604482015260640161015e565b604080516001600160a01b0387168152602081018690529081018490527fa54c6fc8da67769c1e842d1c99f4921cf8f638186f2bd2a14176fe9a5f507a679060600160405180910390a15050505050505050565b6002546001600160a01b0316331480610b2857506003546001600160a01b031633145b610b3157600080fd5b7f0000000000000000000000000000000000000000000000000000000000002710811115610b5e57600080fd5b600055565b60008060007f0000000000000000000000000000000000000000000000000000000000002710610b9287610e4c565b610b9c8887610d19565b610ba69190611477565b610bb09190611496565b6040516370a0823160e01b81523060048201529091506001600160a01b038616906370a0823190602401602060405180830381865afa158015610bf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1b919061140f565b811115610d0e576040516370a0823160e01b815230600482015281906001600160a01b038716906370a0823190602401602060405180830381865afa158015610c68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8c919061140f565b610c969086611477565b610ca09190611496565b6040516370a0823160e01b81523060048201529094506001600160a01b038616906370a0823190602401602060405180830381865afa158015610ce7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0b919061140f565b90505b959294509192505050565b600080839050670de0b6b3a7640000816001600160a01b031663182df0f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8a919061140f565b610d949085611477565b610d9e9190611496565b9150505b92915050565b6002546001600160a01b0316331480610dcb57506003546001600160a01b031633145b610dd457600080fd5b7f0000000000000000000000000000000000000000000000000000000000002710811115610e0157600080fd5b60008111610e0e57600080fd5b600155565b6002546001600160a01b03163314610e2a57600080fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b60008073de2af899040536884e062d3a334f2dd36f34b4a3196001600160a01b03841601610eef576040516370a0823160e01b8152306004820152730bc529c00c6401aef6d220be8c6ea1667f6ad93e906370a08231906024015b602060405180830381865afa158015610ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee8919061140f565b9050610fa7565b7317786f3813e6ba35343211bd8fe18ec4de14f28a196001600160a01b03841601610f4b576040516370a0823160e01b8152306004820152732260fac5e5542a773aa44fbcfedf7c193bc2c599906370a0823190602401610ea7565b73697b4acaa24430f254224eb794d2a85ba1fa1fb7196001600160a01b038416016105b9576040516370a0823160e01b815230600482015273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a0823190602401610ea7565b610fb981610fb485611118565b611258565b9392505050565b6002546001600160a01b03163314610fd757600080fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b031633148061101c57506003546001600160a01b031633145b61102557600080fd5b6040516370a0823160e01b815230600482015281906001600160a01b038416906370a0823190602401602060405180830381865afa15801561106b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108f919061140f565b101561109a57600080fd5b6004805460405163a9059cbb60e01b81526001600160a01b03918216928101929092526024820183905283169063a9059cbb906044016020604051808303816000875af11580156110ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111139190611428565b505050565b600480546040516370a0823160e01b81526001600160a01b039182169281019290925260009182918416906370a0823190602401602060405180830381865afa158015611169573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118d919061140f565b90506111998382610d19565b6040516395dd919360e01b815273ea0c959bbb7476ddd6cd4204bdee82b790aa156260048201526001600160a01b038516906395dd919390602401602060405180830381865afa1580156111f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611215919061140f565b610fb99190611460565b6002546001600160a01b0316331461123657600080fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b600080826112867f000000000000000000000000000000000000000000000000000000000000271086611477565b6112909190611496565b90506001548110156112f657600154816000546112ad9190611477565b6112b79190611496565b6000546112c49190611460565b6112ee907f0000000000000000000000000000000000000000000000000000000000002710611460565b915050610da2565b507f00000000000000000000000000000000000000000000000000000000000027109392505050565b6001600160a01b038116811461133457600080fd5b50565b60008060006060848603121561134c57600080fd5b83356113578161131f565b95602085013595506040909401359392505050565b60006020828403121561137e57600080fd5b5035919050565b60008060006060848603121561139a57600080fd5b83356113a58161131f565b925060208401356113b58161131f565b929592945050506040919091013590565b600080604083850312156113d957600080fd5b82356113e48161131f565b946020939093013593505050565b60006020828403121561140457600080fd5b8135610fb98161131f565b60006020828403121561142157600080fd5b5051919050565b60006020828403121561143a57600080fd5b81518015158114610fb957600080fd5b634e487b7160e01b600052601160045260246000fd5b6000828210156114725761147261144a565b500390565b60008160001904831182151516156114915761149161144a565b500290565b6000826114b357634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122007bc1e56d6342f362771f74184f9269cfa59f1b34f8878577aebb1489be8805f64736f6c634300080d0033

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

0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000157c00000000000000000000000000000000000000000000000000000000000005dc000000000000000000000000926df14a23be491164dcf93f4c468a50ef659d5b000000000000000000000000926df14a23be491164dcf93f4c468a50ef659d5b0000000000000000000000009d5df30f475cea915b1ed4c0cca59255c897b61b

-----Decoded View---------------
Arg [0] : decimals (uint256): 4
Arg [1] : maxDiscount_ (uint256): 5500
Arg [2] : zeroDiscountReserveThreshold_ (uint256): 1500
Arg [3] : governance_ (address): 0x926dF14a23BE491164dCF93f4c468A50ef659D5B
Arg [4] : controller_ (address): 0x926dF14a23BE491164dCF93f4c468A50ef659D5B
Arg [5] : treasury_ (address): 0x9D5Df30F475CEA915b1ed4C0CCa59255C897b61B

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [1] : 000000000000000000000000000000000000000000000000000000000000157c
Arg [2] : 00000000000000000000000000000000000000000000000000000000000005dc
Arg [3] : 000000000000000000000000926df14a23be491164dcf93f4c468a50ef659d5b
Arg [4] : 000000000000000000000000926df14a23be491164dcf93f4c468a50ef659d5b
Arg [5] : 0000000000000000000000009d5df30f475cea915b1ed4c0cca59255c897b61b


Deployed Bytecode Sourcemap

316:9955:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7333:25;;-1:-1:-1;;;7333:25:0;;216:2:2;7333:25:0;;;198:21:2;255:2;235:18;;;228:30;-1:-1:-1;;;274:18:2;;;267:45;329:18;;7333:25:0;;;;;;;;316:9955;;;;3194:1298;;;;;;;;;;-1:-1:-1;3194:1298:0;;;;;:::i;:::-;;:::i;:::-;;8250:212;;;;;;;;;;-1:-1:-1;8250:212:0;;;;;:::i;:::-;;:::i;4775:471::-;;;;;;;;;;-1:-1:-1;4775:471:0;;;;;:::i;:::-;;:::i;:::-;;;;1716:25:2;;;1772:2;1757:18;;1750:34;;;;1689:18;4775:471:0;;;;;;;;1813:74;;;;;;;;;;;;1845:42;1813:74;;;;;-1:-1:-1;;;;;1959:32:2;;;1941:51;;1929:2;1914:18;1813:74:0;1795:203:2;1206:40:0;;;;;;;;;;;;;;;;;;;2149:25:2;;;2137:2;2122:18;1206:40:0;2003:177:2;1414:25:0;;;;;;;;;;-1:-1:-1;1414:25:0;;;;-1:-1:-1;;;;;1414:25:0;;;6626:198;;;;;;;;;;-1:-1:-1;6626:198:0;;;;;:::i;:::-;;:::i;1703:23::-;;;;;;;;;;-1:-1:-1;1703:23:0;;;;-1:-1:-1;;;;;1703:23:0;;;8933:351;;;;;;;;;;-1:-1:-1;8933:351:0;;;;;:::i;:::-;;:::i;10047:138::-;;;;;;;;;;-1:-1:-1;10047:138:0;;;;;:::i;:::-;;:::i;5375:522::-;;;;;;;;;;-1:-1:-1;5375:522:0;;;;;:::i;:::-;;:::i;1893:74::-;;;;;;;;;;;;1925:42;1893:74;;9451:138;;;;;;;;;;-1:-1:-1;9451:138:0;;;;;:::i;:::-;;:::i;453:30::-;;;;;;;;;;;;;;;801:23;;;;;;;;;;;;;;;;7696:250;;;;;;;;;;-1:-1:-1;7696:250:0;;;;;:::i;:::-;;:::i;6160:267::-;;;;;;;;;;-1:-1:-1;6160:267:0;;;;;:::i;:::-;;:::i;1733:74::-;;;;;;;;;;;;1765:42;1733:74;;9750:130;;;;;;;;;;-1:-1:-1;9750:130:0;;;;;:::i;:::-;;:::i;1607:25::-;;;;;;;;;;-1:-1:-1;1607:25:0;;;;-1:-1:-1;;;;;1607:25:0;;;3194:1298;3280:37;;-1:-1:-1;;;3280:37:0;;3306:10;3280:37;;;1941:51:2;3321:6:0;;-1:-1:-1;;;;;3280:25:0;;;;;1914:18:2;;3280:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;3272:82;;;;-1:-1:-1;;;3272:82:0;;3148:2:2;3272:82:0;;;3130:21:2;3187:2;3167:18;;;3160:30;-1:-1:-1;;;3206:18:2;;;3199:52;3268:18;;3272:82:0;2946:346:2;3272:82:0;3364:17;-1:-1:-1;;;;;;;3394:16:0;;;3391:262;;-1:-1:-1;2003:42:0;3391:262;;;-1:-1:-1;;;;;;;3461:16:0;;;3458:195;;-1:-1:-1;2082:42:0;3458:195;;;-1:-1:-1;;;;;;;3529:16:0;;;3526:127;;-1:-1:-1;2161:42:0;3526:127;;;3608:34;;-1:-1:-1;;;3608:34:0;;3499:2:2;3608:34:0;;;3481:21:2;3538:2;3518:18;;;3511:30;3577:26;3557:18;;;3550:54;3621:18;;3608:34:0;3297:348:2;3526:127:0;3680:35;;-1:-1:-1;;;3680:35:0;;3709:4;3680:35;;;1941:51:2;-1:-1:-1;;;;;3680:20:0;;;;;1914:18:2;;3680:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3670:6;:45;;3662:77;;;;-1:-1:-1;;;3662:77:0;;3852:2:2;3662:77:0;;;3834:21:2;3891:2;3871:18;;;3864:30;-1:-1:-1;;;3910:18:2;;;3903:49;3969:18;;3662:77:0;3650:343:2;3662:77:0;3750:18;3770:14;3788:38;3798:7;3807:10;3819:6;3788:9;:38::i;:::-;3749:77;;;;3861:6;3844:13;:23;;3836:64;;;;-1:-1:-1;;;3836:64:0;;4200:2:2;3836:64:0;;;4182:21:2;4239:2;4219:18;;;4212:30;4278;4258:18;;;4251:58;4326:18;;3836:64:0;3998:352:2;3836:64:0;3957:8;;;3931:35;;-1:-1:-1;;;3931:35:0;;-1:-1:-1;;;;;3957:8:0;;;3931:35;;;1941:51:2;;;;3910:18:0;;3931:25;;;;;;1914:18:2;;3931:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3993:32;;-1:-1:-1;;;3993:32:0;;4014:10;3993:32;;;1941:51:2;3910:56:0;;-1:-1:-1;3976:14:0;;-1:-1:-1;;;;;3993:20:0;;;;;1914:18:2;;3993:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4093:8;;;4043:70;;-1:-1:-1;;;4043:70:0;;4081:10;4043:70;;;4595:34:2;;;;-1:-1:-1;;;;;4093:8:0;;;4645:18:2;;;4638:43;4697:18;;;4690:34;;;3976:49:0;;-1:-1:-1;4043:37:0;;;;;;4530:18:2;;4043:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4035:103;;;;-1:-1:-1;;;4035:103:0;;5219:2:2;4035:103:0;;;5201:21:2;5258:2;5238:18;;;5231:30;-1:-1:-1;;;5277:18:2;;;5270:50;5337:18;;4035:103:0;5017:344:2;4035:103:0;4182:8;;;4156:35;;-1:-1:-1;;;4156:35:0;;-1:-1:-1;;;;;4182:8:0;;;4156:35;;;1941:51:2;;;;4211:9:0;;4194:13;;4156:25;;;;;1914:18:2;;4156:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;;;:::i;:::-;:64;;4148:101;;;;-1:-1:-1;;;4148:101:0;;5830:2:2;4148:101:0;;;5812:21:2;5869:2;5849:18;;;5842:30;5908:26;5888:18;;;5881:54;5952:18;;4148:101:0;5628:348:2;4148:101:0;4259:46;;-1:-1:-1;;;4259:46:0;;4279:10;4259:46;;;6155:51:2;6222:18;;;6215:34;;;-1:-1:-1;;;;;4259:19:0;;;;;6128:18:2;;4259:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;4323:32:0;;-1:-1:-1;;;4323:32:0;;4344:10;4323:32;;;1941:51:2;4371:13:0;;4358:9;;-1:-1:-1;;;;;4323:20:0;;;;;1914:18:2;;4323:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;;;;:::i;:::-;:61;;4315:94;;;;-1:-1:-1;;;4315:94:0;;6462:2:2;4315:94:0;;;6444:21:2;6501:2;6481:18;;;6474:30;-1:-1:-1;;;6520:18:2;;;6513:50;6580:18;;4315:94:0;6260:344:2;4315:94:0;4425:60;;;-1:-1:-1;;;;;6829:32:2;;6811:51;;6893:2;6878:18;;6871:34;;;6921:18;;;6914:34;;;4425:60:0;;6799:2:2;6784:18;4425:60:0;;;;;;;3262:1230;;;;;3194:1298;;;:::o;8250:212::-;8333:10;;-1:-1:-1;;;;;8333:10:0;8319;:24;;:52;;-1:-1:-1;8361:10:0;;-1:-1:-1;;;;;8361:10:0;8347;:24;8319:52;8311:61;;;;;;8408:8;8390:14;:26;;8382:35;;;;;;8427:11;:28;8250:212::o;4775:471::-;4863:4;4869;4884:18;4969:8;4944:24;4960:7;4944:15;:24::i;:::-;4905:36;4925:7;4934:6;4905:19;:36::i;:::-;:63;;;;:::i;:::-;:72;;;;:::i;:::-;5006:35;;-1:-1:-1;;;5006:35:0;;5035:4;5006:35;;;1941:51:2;4884:93:0;;-1:-1:-1;;;;;;5006:20:0;;;;;1914:18:2;;5006:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4990:13;:51;4987:214;;;5074:35;;-1:-1:-1;;;5074:35:0;;5103:4;5074:35;;;1941:51:2;5112:13:0;;-1:-1:-1;;;;;5074:20:0;;;;;1914:18:2;;5074:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5065:44;;:6;:44;:::i;:::-;:60;;;;:::i;:::-;5155:35;;-1:-1:-1;;;5155:35:0;;5184:4;5155:35;;;1941:51:2;5056:69:0;;-1:-1:-1;;;;;;5155:20:0;;;;;1914:18:2;;5155:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5139:51;;4987:214;5217:13;5232:6;;-1:-1:-1;4775:471:0;;-1:-1:-1;;;4775:471:0:o;6626:198::-;6705:4;6720:14;6745:7;6720:33;;6809:8;6779:6;-1:-1:-1;;;;;6779:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6770:36;;:6;:36;:::i;:::-;:47;;;;:::i;:::-;6763:54;;;6626:198;;;;;:::o;8933:351::-;9050:10;;-1:-1:-1;;;;;9050:10:0;9036;:24;;:52;;-1:-1:-1;9078:10:0;;-1:-1:-1;;;;;9078:10:0;9064;:24;9036:52;9028:61;;;;;;9142:8;9107:31;:43;;9099:52;;;;;;9203:1;9169:31;:35;9161:44;;;;;;9215:28;:62;8933:351::o;10047:138::-;10131:10;;-1:-1:-1;;;;;10131:10:0;10117;:24;10109:33;;;;;;10152:10;:26;;-1:-1:-1;;;;;;10152:26:0;-1:-1:-1;;;;;10152:26:0;;;;;;;;;;10047:138::o;5375:522::-;5437:4;;-1:-1:-1;;;;;;;5478:16:0;;;5475:348;;5520:28;;-1:-1:-1;;;5520:28:0;;5542:4;5520:28;;;1941:51:2;2003:42:0;;5520:13;;1914:18:2;;5520:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5509:39;;5475:348;;;-1:-1:-1;;;;;;;5577:16:0;;;5574:249;;5619:29;;-1:-1:-1;;;5619:29:0;;5642:4;5619:29;;;1941:51:2;2082:42:0;;5619:14;;1914:18:2;;5619:29:0;1795:203:2;5574:249:0;-1:-1:-1;;;;;;;5676:16:0;;;5673:150;;5718:29;;-1:-1:-1;;;5718:29:0;;5741:4;5718:29;;;1941:51:2;2161:42:0;;5718:14;;1914:18:2;;5718:29:0;1795:203:2;5673:150:0;5839:51;5857:8;5867:22;5881:7;5867:13;:22::i;:::-;5839:17;:51::i;:::-;5832:58;5375:522;-1:-1:-1;;;5375:522:0:o;9451:138::-;9535:10;;-1:-1:-1;;;;;9535:10:0;9521;:24;9513:33;;;;;;9556:10;:26;;-1:-1:-1;;;;;;9556:26:0;-1:-1:-1;;;;;9556:26:0;;;;;;;;;;9451:138::o;7696:250::-;7783:10;;-1:-1:-1;;;;;7783:10:0;7769;:24;;:52;;-1:-1:-1;7811:10:0;;-1:-1:-1;;;;;7811:10:0;7797;:24;7769:52;7761:61;;;;;;7840:38;;-1:-1:-1;;;7840:38:0;;7872:4;7840:38;;;1941:51:2;7882:6:0;;-1:-1:-1;;;;;7840:23:0;;;;;1914:18:2;;7840:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;;7832:57;;;;;;7922:8;;;7899:40;;-1:-1:-1;;;7899:40:0;;-1:-1:-1;;;;;7922:8:0;;;7899:40;;;6155:51:2;;;;6222:18;;;6215:34;;;7899:22:0;;;;;6128:18:2;;7899:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7696:250;;:::o;6160:267::-;6275:8;;;6249:35;;-1:-1:-1;;;6249:35:0;;-1:-1:-1;;;;;6275:8:0;;;6249:35;;;1941:51:2;;;;6220:4:0;;;;6249:25;;;;;1914:18:2;;6249:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6235:49;;6384:36;6404:7;6413:6;6384:19;:36::i;:::-;6301:80;;-1:-1:-1;;;6301:80:0;;6338:42;6301:80;;;1941:51:2;-1:-1:-1;;;;;6301:36:0;;;;;1914:18:2;;6301:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:119;;;;:::i;9750:130::-;9830:10;;-1:-1:-1;;;;;9830:10:0;9816;:24;9808:33;;;;;;9851:8;:22;;-1:-1:-1;;;;;;9851:22:0;-1:-1:-1;;;;;9851:22:0;;;;;;;;;;9750:130::o;6834:372::-;6924:4;;6986:15;6959:24;6975:8;6959:13;:24;:::i;:::-;:42;;;;:::i;:::-;6939:62;;7030:28;;7015:12;:43;7011:164;;;7135:28;;7120:12;7106:11;;:26;;;;:::i;:::-;:57;;;;:::i;:::-;7092:11;;:71;;;;:::i;:::-;7080:84;;:8;:84;:::i;:::-;7073:91;;;;;7011:164;-1:-1:-1;7191:8:0;;6834:372;-1:-1:-1;;;6834:372:0:o;358:131:2:-;-1:-1:-1;;;;;433:31:2;;423:42;;413:70;;479:1;476;469:12;413:70;358:131;:::o;494:383::-;571:6;579;587;640:2;628:9;619:7;615:23;611:32;608:52;;;656:1;653;646:12;608:52;695:9;682:23;714:31;739:5;714:31;:::i;:::-;764:5;816:2;801:18;;788:32;;-1:-1:-1;867:2:2;852:18;;;839:32;;494:383;-1:-1:-1;;;494:383:2:o;882:180::-;941:6;994:2;982:9;973:7;969:23;965:32;962:52;;;1010:1;1007;1000:12;962:52;-1:-1:-1;1033:23:2;;882:180;-1:-1:-1;882:180:2:o;1067:470::-;1158:6;1166;1174;1227:2;1215:9;1206:7;1202:23;1198:32;1195:52;;;1243:1;1240;1233:12;1195:52;1282:9;1269:23;1301:31;1326:5;1301:31;:::i;:::-;1351:5;-1:-1:-1;1408:2:2;1393:18;;1380:32;1421:33;1380:32;1421:33;:::i;:::-;1067:470;;1473:7;;-1:-1:-1;;;1527:2:2;1512:18;;;;1499:32;;1067:470::o;2185:315::-;2253:6;2261;2314:2;2302:9;2293:7;2289:23;2285:32;2282:52;;;2330:1;2327;2320:12;2282:52;2369:9;2356:23;2388:31;2413:5;2388:31;:::i;:::-;2438:5;2490:2;2475:18;;;;2462:32;;-1:-1:-1;;;2185:315:2:o;2505:247::-;2564:6;2617:2;2605:9;2596:7;2592:23;2588:32;2585:52;;;2633:1;2630;2623:12;2585:52;2672:9;2659:23;2691:31;2716:5;2691:31;:::i;2757:184::-;2827:6;2880:2;2868:9;2859:7;2855:23;2851:32;2848:52;;;2896:1;2893;2886:12;2848:52;-1:-1:-1;2919:16:2;;2757:184;-1:-1:-1;2757:184:2:o;4735:277::-;4802:6;4855:2;4843:9;4834:7;4830:23;4826:32;4823:52;;;4871:1;4868;4861:12;4823:52;4903:9;4897:16;4956:5;4949:13;4942:21;4935:5;4932:32;4922:60;;4978:1;4975;4968:12;5366:127;5427:10;5422:3;5418:20;5415:1;5408:31;5458:4;5455:1;5448:15;5482:4;5479:1;5472:15;5498:125;5538:4;5566:1;5563;5560:8;5557:34;;;5571:18;;:::i;:::-;-1:-1:-1;5608:9:2;;5498:125::o;6959:168::-;6999:7;7065:1;7061;7057:6;7053:14;7050:1;7047:21;7042:1;7035:9;7028:17;7024:45;7021:71;;;7072:18;;:::i;:::-;-1:-1:-1;7112:9:2;;6959:168::o;7132:217::-;7172:1;7198;7188:132;;7242:10;7237:3;7233:20;7230:1;7223:31;7277:4;7274:1;7267:15;7305:4;7302:1;7295:15;7188:132;-1:-1:-1;7334:9:2;;7132:217::o

Swarm Source

ipfs://07bc1e56d6342f362771f74184f9269cfa59f1b34f8878577aebb1489be8805f

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.