ETH Price: $3,130.64 (+0.35%)
Gas: 2 Gwei

Contract

0xfEd533e0Ec584D6FF40281a7850c4621D258b43d
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value

There are no matching entries

Please try again later

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block From To Value
157270792022-10-11 19:53:11586 days ago1665517991  Contract Creation0 ETH
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xFED7928b...0705E346e
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
OptiFed

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-11
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)

/**
 * @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 decimal points used by the token.
     */
    function decimals() external view returns (uint8);

    /**
     * @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);
    
    /**
     * @dev Burns `amount` of token, shringking total supply
     */
    function burn(uint amount) external;

    /**
     * @dev Mints `amount` of token to address `to` increasing total supply
     */
    function mint(address to, uint amount) external;

    //For testing
    function addMinter(address minter_) external;
}

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IDola {
    function decimals() external view returns (uint8);
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

    function mint(address recipient, uint256 amount) external;
    function burn(uint256 amount) external;

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

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

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

    function addMinter(address minter) external;

    /**
     * @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);
}

/**
 * @title IL1ERC20Bridge
 */
interface IL1ERC20Bridge {
    /**********
     * Events *
     **********/

    event ERC20DepositInitiated(
        address indexed _l1Token,
        address indexed _l2Token,
        address indexed _from,
        address _to,
        uint256 _amount,
        bytes _data
    );

    event ERC20WithdrawalFinalized(
        address indexed _l1Token,
        address indexed _l2Token,
        address indexed _from,
        address _to,
        uint256 _amount,
        bytes _data
    );

    /********************
     * Public Functions *
     ********************/

    /**
     * @dev get the address of the corresponding L2 bridge contract.
     * @return Address of the corresponding L2 bridge contract.
     */
    function l2TokenBridge() external returns (address);

    /**
     * @dev deposit an amount of the ERC20 to the caller's balance on L2.
     * @param _l1Token Address of the L1 ERC20 we are depositing
     * @param _l2Token Address of the L1 respective L2 ERC20
     * @param _amount Amount of the ERC20 to deposit
     * @param _l2Gas Gas limit required to complete the deposit on L2.
     * @param _data Optional data to forward to L2. This data is provided
     *        solely as a convenience for external contracts. Aside from enforcing a maximum
     *        length, these contracts provide no guarantees about its content.
     */
    function depositERC20(
        address _l1Token,
        address _l2Token,
        uint256 _amount,
        uint32 _l2Gas,
        bytes calldata _data
    ) external;

    /**
     * @dev deposit an amount of ERC20 to a recipient's balance on L2.
     * @param _l1Token Address of the L1 ERC20 we are depositing
     * @param _l2Token Address of the L1 respective L2 ERC20
     * @param _to L2 address to credit the withdrawal to.
     * @param _amount Amount of the ERC20 to deposit.
     * @param _l2Gas Gas limit required to complete the deposit on L2.
     * @param _data Optional data to forward to L2. This data is provided
     *        solely as a convenience for external contracts. Aside from enforcing a maximum
     *        length, these contracts provide no guarantees about its content.
     */
    function depositERC20To(
        address _l1Token,
        address _l2Token,
        address _to,
        uint256 _amount,
        uint32 _l2Gas,
        bytes calldata _data
    ) external;

    /*************************
     * Cross-chain Functions *
     *************************/

    /**
     * @dev Complete a withdrawal from L2 to L1, and credit funds to the recipient's balance of the
     * L1 ERC20 token.
     * This call will fail if the initialized withdrawal from L2 has not been finalized.
     *
     * @param _l1Token Address of L1 token to finalizeWithdrawal for.
     * @param _l2Token Address of L2 token where withdrawal was initiated.
     * @param _from L2 address initiating the transfer.
     * @param _to L1 address to credit the withdrawal to.
     * @param _amount Amount of the ERC20 to deposit.
     * @param _data Data provided by the sender on L2. This data is provided
     *   solely as a convenience for external contracts. Aside from enforcing a maximum
     *   length, these contracts provide no guarantees about its content.
     */
    function finalizeERC20Withdrawal(
        address _l1Token,
        address _l2Token,
        address _from,
        address _to,
        uint256 _amount,
        bytes calldata _data
    ) external;
}

interface ICurvePool {

	// Deployment
	function __init__() external;
	function initialize(string memory _name, string memory _symbol, address _coin, uint _decimals, uint _A, uint _fee, address _admin) external;

	// ERC20 Standard
	function decimals() external view returns (uint);
	function transfer(address _to, uint _value) external returns (uint256);
	function transferFrom(address _from, address _to, uint _value) external returns (bool);
	function approve(address _spender, uint _value) external returns (bool);
	function balanceOf(address _owner) external view returns (uint256);
	function totalSupply() external view returns (uint256);

	// StableSwap Functionality
	function get_previous_balances() external view returns (uint[2] memory);
	function get_twap_balances(uint[2] memory _first_balances, uint[2] memory _last_balances, uint _time_elapsed) external view returns (uint[2] memory);
	function get_price_cumulative_last() external view returns (uint[2] memory);
	function admin_fee() external view returns (uint);
	function A() external view returns (uint);
	function A_precise() external view returns (uint);
	function get_virtual_price() external view returns (uint);
	function calc_token_amount(uint[2] memory _amounts, bool _is_deposit) external view returns (uint);
	function calc_token_amount(uint[2] memory _amounts, bool _is_deposit, bool _previous) external view returns (uint);
	function add_liquidity(uint[2] memory _amounts, uint _min_mint_amount) external returns (uint);
	function add_liquidity(uint[3] memory _amounts, uint _min_mint_amount) external;
	function add_liquidity(uint[2] memory _amounts, uint _min_mint_amount, address _receiver) external returns (uint);
	function get_dy(int128 i, int128 j, uint256 dx) external view returns (uint256);
	function get_dy(int128 i, int128 j, uint256 dx, uint256[2] memory _balances) external view returns (uint256);
	function get_dy_underlying(int128 i, int128 j, uint256 dx) external view returns (uint256);
	function get_dy_underlying(int128 i, int128 j, uint256 dx, uint256[2] memory _balances) external view returns (uint256);
	function exchange(int128 i, int128 j, uint256 dx, uint256 min_dy) external returns (uint256);
	function exchange(int128 i, int128 j, uint256 dx, uint256 min_dy, address _receiver) external returns (uint256);
	function exchange_underlying(int128 i, int128 j, uint256 dx, uint256 min_dy) external returns (uint256);
	function exchange_underlying(int128 i, int128 j, uint256 dx, uint256 min_dy, address _receiver) external returns (uint256);
	function remove_liquidity(uint256 _burn_amount, uint256[2] memory _min_amounts) external returns (uint256[2] memory);
	function remove_liquidity(uint256 _burn_amount, uint256[2] memory _min_amounts, address _receiver) external returns (uint256[2] memory);
	function remove_liquidity_imbalance(uint256[2] memory _amounts, uint256 _max_burn_amount) external returns (uint256);
	function remove_liquidity_imbalance(uint256[2] memory _amounts, uint256 _max_burn_amount, address _receiver) external returns (uint256);
	function calc_withdraw_one_coin(uint256 _burn_amount, int128 i) external view returns (uint256);
	function calc_withdraw_one_coin(uint256 _burn_amount, int128 i, bool _previous) external view returns (uint256);
	function remove_liquidity_one_coin(uint256 _burn_amount, int128 i, uint256 _min_received) external returns (uint256);
	function remove_liquidity_one_coin(uint256 _burn_amount, int128 i, uint256 _min_received, address _receiver) external returns (uint256);
	function ramp_A(uint256 _future_A, uint256 _future_time) external;
	function stop_ramp_A() external;
	function admin_balances(uint256 i) external view returns (uint256);
	function withdraw_admin_fees() external;
}

contract OptiFed {
    address public chair;
    address public gov;
    address public pendingGov;
    uint public dolaSupply;
    uint public maxSlippageBpsDolaToUsdc;
    uint public maxSlippageBpsUsdcToDola;

    uint constant PRECISION = 10_000;
    uint public constant DOLA_USDC_CONVERSION_MULTI= 1e12;

    IDola public constant DOLA = IDola(0x865377367054516e17014CcdED1e7d814EDC9ce4);
    IERC20 public constant USDC = IERC20(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48);
    IL1ERC20Bridge public constant optiBridge = IL1ERC20Bridge(0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1);
    address public constant DOLA_OPTI = 0x8aE125E8653821E851F12A49F7765db9a9ce7384;
    address public constant USDC_OPTI = 0x7F5c764cBc14f9669B88837ca1490cCa17c31607;
    ICurvePool public curvePool = ICurvePool(0xE57180685E3348589E9521aa53Af0BCD497E884d);
    address public veloFarmer;

    event Expansion(uint amount);
    event Contraction(uint amount);

    error OnlyGov();
    error OnlyPendingGov();
    error OnlyChair();
    error CantBurnZeroDOLA();
    error MaxSlippageTooHigh();
    error DeltaAboveMax();
    error SwapMoreDolaThanMinted();

    constructor(
            address gov_,
            address chair_,
            address veloFarmer_,
            uint maxSlippageBpsDolaToUsdc_,
            uint maxSlippageBpsUsdcToDola_)
    {
        gov = gov_;
        chair = chair_;
        veloFarmer = veloFarmer_;
        maxSlippageBpsDolaToUsdc = maxSlippageBpsDolaToUsdc_;
        maxSlippageBpsUsdcToDola = maxSlippageBpsUsdcToDola_;
    }

    /**
    @notice Mints `dolaAmount` of DOLA, swaps `dolaToSwap` of DOLA to USDC, then transfers all to `veloFarmer` through optimism bridge
    @param dolaAmount Amount of DOLA to mint
    @param dolaToSwap Amount of DOLA to swap for USDC
    */
    function expansionAndSwap(uint dolaAmount, uint dolaToSwap) external {
        if (msg.sender != chair) revert OnlyChair();
        if (dolaToSwap > dolaAmount) revert SwapMoreDolaThanMinted();
        
        dolaSupply += dolaAmount;
        DOLA.mint(address(this), dolaAmount);

        DOLA.approve(address(curvePool), dolaToSwap);
        uint usdcAmount = curvePool.exchange_underlying(0, 2, dolaToSwap, dolaToSwap * (PRECISION - maxSlippageBpsDolaToUsdc) / PRECISION / DOLA_USDC_CONVERSION_MULTI);

        uint dolaToBridge = dolaAmount - dolaToSwap;
        DOLA.approve(address(optiBridge), dolaToBridge);
        USDC.approve(address(optiBridge), usdcAmount);
        optiBridge.depositERC20To(address(DOLA), DOLA_OPTI, veloFarmer, dolaToBridge, 200_000, "");
        optiBridge.depositERC20To(address(USDC), USDC_OPTI, veloFarmer, usdcAmount, 200_000, "");

        emit Expansion(dolaAmount);
    }

    /**
    @notice Mints & deposits `amountUnderlying` of `underlying` tokens into Optimism bridge to the `veloFarmer` contract
    @param dolaAmount Amount of underlying token to mint & deposit into Velodrome farmer on Optimism
    */
    function expansion(uint dolaAmount) external {
        if (msg.sender != chair) revert OnlyChair();
        
        dolaSupply += dolaAmount;
        DOLA.mint(address(this), dolaAmount);

        DOLA.approve(address(optiBridge), dolaAmount);
        optiBridge.depositERC20To(address(DOLA), DOLA_OPTI, veloFarmer, dolaAmount, 200_000, "");

        emit Expansion(dolaAmount);
    }

    /**
    @notice Burns `dolaAmount` of DOLA held in this contract
    @param dolaAmount Amount of DOLA to burn
    */
    function contraction(uint dolaAmount) public {
        if (msg.sender != chair) revert OnlyChair();

        _contraction(dolaAmount);
    }

    /**
    @notice Attempts to contract (burn) all DOLA held by this contract
    */
    function contractAll() external {
        if (msg.sender != chair) revert OnlyChair();

        _contraction(DOLA.balanceOf(address(this)));
    }

    /**
    @notice Attempts to contract (burn) `amount` of DOLA. Sends remainder to `gov` if `amount` > DOLA minted by this fed.
    @param amount Amount of DOLA to contract.
    */
    function _contraction(uint amount) internal{
        if (amount == 0) revert CantBurnZeroDOLA();
        if(amount > dolaSupply){
            DOLA.burn(dolaSupply);
            DOLA.transfer(gov, amount - dolaSupply);
            emit Contraction(dolaSupply);
            dolaSupply = 0;
        } else {
            DOLA.burn(amount);
            dolaSupply -= amount;
            emit Contraction(amount);
        }
    }

    /**
    @notice Swap `usdcAmount` of USDC for DOLA through curve.
    @dev Will revert if actual slippage > `maxSlippageBpsUsdcToDola`
    @param usdcAmount Amount of USDC to be swapped to DOLA through curve.
    */
    function swapUSDCtoDOLA(uint usdcAmount) external {
        if (msg.sender != chair) revert OnlyChair();
        
        USDC.approve(address(curvePool), usdcAmount);
        curvePool.exchange_underlying(2, 0, usdcAmount, usdcAmount * (PRECISION - maxSlippageBpsUsdcToDola) / PRECISION * DOLA_USDC_CONVERSION_MULTI);
    }

    /**
    @notice Swap `dolaAmount` of DOLA for USDC through curve.
    @dev Will revert if actual slippage > `maxSlippageBpsDolaToUsdc`
    @param dolaAmount Amount of DOLA to be swapped to USDC through curve.
    */
    function swapDOLAtoUSDC(uint dolaAmount) external {
        if (msg.sender != chair) revert OnlyChair();
        
        DOLA.approve(address(curvePool), dolaAmount);
        curvePool.exchange_underlying(0, 2, dolaAmount, dolaAmount * (PRECISION - maxSlippageBpsDolaToUsdc) / PRECISION / DOLA_USDC_CONVERSION_MULTI);
    }

    /**
    @notice Method for current chair of the Opti FED to resign
    */
    function resign() external {
        if (msg.sender != chair) revert OnlyChair();
        chair = address(0);
    }

    /**
    @notice Governance only function for setting acceptable slippage when swapping DOLA -> USDC
    @param newMaxSlippageBps The new maximum allowed loss for DOLA -> USDC swaps. 1 = 0.01%
    */
    function setMaxSlippageDolaToUsdc(uint newMaxSlippageBps) external {
        if (msg.sender != gov) revert OnlyGov();
        if (newMaxSlippageBps > 10000) revert MaxSlippageTooHigh();
        maxSlippageBpsDolaToUsdc = newMaxSlippageBps;
    }

    /**
    @notice Governance only function for setting acceptable slippage when swapping USDC -> DOLA
    @param newMaxSlippageBps The new maximum allowed loss for USDC -> DOLA swaps. 1 = 0.01%
    */
    function setMaxSlippageUsdcToDola(uint newMaxSlippageBps) external {
        if (msg.sender != gov) revert OnlyGov();
        if (newMaxSlippageBps > 10000) revert MaxSlippageTooHigh();
        maxSlippageBpsUsdcToDola = newMaxSlippageBps;
    }

    /**
    @notice Method for `gov` to change `pendingGov` address
    @dev `pendingGov` will have to call `claimGov` to complete `gov` transfer
    @param newPendingGov_ Address to be set as `pendingGov`
    */
    function setPendingGov(address newPendingGov_) external {
        if (msg.sender != gov) revert OnlyGov();
        pendingGov = newPendingGov_;
    }

    /**
    @notice Method for `pendingGov` to claim `gov` role.
    */
    function claimGov() external {
        if (msg.sender != pendingGov) revert OnlyPendingGov();
        gov = pendingGov;
        pendingGov = address(0);
    }

    /**
    @notice Method for gov to change the chair
    @param newChair_ Address to be set as chair
    */
    function changeChair(address newChair_) external {
        if (msg.sender != gov) revert OnlyGov();
        chair = newChair_;
    }

    /**
    @notice Method for gov to change the L2 veloFarmer address
    @dev veloFarmer is the L2 address that receives all bridged DOLA from expansion
    @param newVeloFarmer_ L2 address to be set as veloFarmer
    */
     function changeVeloFarmer(address newVeloFarmer_) external {
        if (msg.sender != gov) revert OnlyGov();
        veloFarmer = newVeloFarmer_;
    }

    /**
    @notice Method for gov to change the curve pool address
    @param newCurvePool_ Address to be set as curvePool
    */
     function changeCurvePool(address newCurvePool_) external {
        if (msg.sender != gov) revert OnlyGov();
        curvePool = ICurvePool(newCurvePool_);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"gov_","type":"address"},{"internalType":"address","name":"chair_","type":"address"},{"internalType":"address","name":"veloFarmer_","type":"address"},{"internalType":"uint256","name":"maxSlippageBpsDolaToUsdc_","type":"uint256"},{"internalType":"uint256","name":"maxSlippageBpsUsdcToDola_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"CantBurnZeroDOLA","type":"error"},{"inputs":[],"name":"DeltaAboveMax","type":"error"},{"inputs":[],"name":"MaxSlippageTooHigh","type":"error"},{"inputs":[],"name":"OnlyChair","type":"error"},{"inputs":[],"name":"OnlyGov","type":"error"},{"inputs":[],"name":"OnlyPendingGov","type":"error"},{"inputs":[],"name":"SwapMoreDolaThanMinted","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Contraction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Expansion","type":"event"},{"inputs":[],"name":"DOLA","outputs":[{"internalType":"contract IDola","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOLA_OPTI","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOLA_USDC_CONVERSION_MULTI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDC","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDC_OPTI","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"chair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newChair_","type":"address"}],"name":"changeChair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newCurvePool_","type":"address"}],"name":"changeCurvePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newVeloFarmer_","type":"address"}],"name":"changeVeloFarmer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dolaAmount","type":"uint256"}],"name":"contraction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"curvePool","outputs":[{"internalType":"contract ICurvePool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dolaSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"dolaAmount","type":"uint256"}],"name":"expansion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dolaAmount","type":"uint256"},{"internalType":"uint256","name":"dolaToSwap","type":"uint256"}],"name":"expansionAndSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gov","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSlippageBpsDolaToUsdc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSlippageBpsUsdcToDola","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"optiBridge","outputs":[{"internalType":"contract IL1ERC20Bridge","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingGov","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"resign","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxSlippageBps","type":"uint256"}],"name":"setMaxSlippageDolaToUsdc","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxSlippageBps","type":"uint256"}],"name":"setMaxSlippageUsdcToDola","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPendingGov_","type":"address"}],"name":"setPendingGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dolaAmount","type":"uint256"}],"name":"swapDOLAtoUSDC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"usdcAmount","type":"uint256"}],"name":"swapUSDCtoDOLA","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"veloFarmer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101c45760003560e01c806389a30271116100f9578063bcb03ef611610097578063e1a611b711610071578063e1a611b71461039a578063efdf0bb0146103ad578063f426eba0146103c0578063fdf893f5146103d357600080fd5b8063bcb03ef614610361578063c002e56e14610374578063ccbf870c1461038757600080fd5b8063985d29a9116100d3578063985d29a91461031957806398ebed9f14610322578063a87624101461033d578063a97eb55c1461035857600080fd5b806389a30271146102d65780638f83aae7146102f157806392c592d01461030457600080fd5b80632720b22e116101665780633c635ee5116101405780633c635ee5146102a757806354483541146102b357806364371ae2146102c657806369652fcf146102ce57600080fd5b80632720b22e146102795780632a0902ba1461028c57806330256be21461029f57600080fd5b806320d59461116101a257806320d5946114610229578063218751b21461023c578063252408101461024f57806326f4bb511461026257600080fd5b80630fdf6673146101c957806312d43a511461020157806319a19e0f14610214575b600080fd5b6101e4738ae125e8653821e851f12a49f7765db9a9ce738481565b6040516001600160a01b0390911681526020015b60405180910390f35b6001546101e4906001600160a01b031681565b6102276102223660046112a6565b6103e6565b005b6007546101e4906001600160a01b031681565b6006546101e4906001600160a01b031681565b6002546101e4906001600160a01b031681565b61026b60045481565b6040519081526020016101f8565b6102276102873660046112a6565b610439565b61022761029a3660046112a6565b610648565b6102276107c8565b61026b64e8d4a5100081565b6102276102c13660046112a6565b61086b565b610227610973565b6102276109c5565b6101e473a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b6102276102ff3660046112bf565b610a02565b6101e460008051602061141083398151915281565b61026b60035481565b6101e47399c9fc46f92e8a1c0dec1b1747d010903e884be181565b6101e4737f5c764cbc14f9669b88837ca1490cca17c3160781565b61026b60055481565b61022761036f3660046112a6565b610a4f565b6102276103823660046112bf565b610aa2565b6102276103953660046112ef565b610aef565b6102276103a83660046112a6565b610fbc565b6102276103bb3660046112bf565b610ff3565b6102276103ce3660046112bf565b611040565b6000546101e4906001600160a01b031681565b6001546001600160a01b0316331461041157604051639097750360e01b815260040160405180910390fd5b61271081111561043457604051636dabd5db60e01b815260040160405180910390fd5b600555565b6000546001600160a01b031633146104645760405163d0f6c81f60e01b815260040160405180910390fd5b80600360008282546104769190611327565b90915550506040516340c10f1960e01b815230600482015260248101829052600080516020611410833981519152906340c10f1990604401600060405180830381600087803b1580156104c857600080fd5b505af11580156104dc573d6000803e3d6000fd5b505060405163095ea7b360e01b81527399c9fc46f92e8a1c0dec1b1747d010903e884be1600482015260248101849052600080516020611410833981519152925063095ea7b391506044016020604051808303816000875af1158015610546573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061056a9190611340565b5060075460405163041c592960e51b81527399c9fc46f92e8a1c0dec1b1747d010903e884be19163838b2520916105da9160008051602061141083398151915291738ae125e8653821e851f12a49f7765db9a9ce7384916001600160a01b031690879062030d4090600401611362565b600060405180830381600087803b1580156105f457600080fd5b505af1158015610608573d6000803e3d6000fd5b505050507fdcc16fd18a808d877bcd9a09b544844b36ae8f0a4b222e317d7b777b2c18b0328160405161063d91815260200190565b60405180910390a150565b6000546001600160a01b031633146106735760405163d0f6c81f60e01b815260040160405180910390fd5b60065460405163095ea7b360e01b81526001600160a01b039091166004820152602481018290526000805160206114108339815191529063095ea7b3906044016020604051808303816000875af11580156106d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f69190611340565b506006546004546001600160a01b039091169063a6417ed690600090600290859064e8d4a51000906127109061072c90826113aa565b61073690896113bd565b61074091906113d4565b61074a91906113d4565b6040516001600160e01b031960e087901b168152600f94850b60048201529290930b6024830152604482015260648101919091526084016020604051808303816000875af11580156107a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c491906113f6565b5050565b6000546001600160a01b031633146107f35760405163d0f6c81f60e01b815260040160405180910390fd5b6040516370a0823160e01b815230600482015261086990600080516020611410833981519152906370a0823190602401602060405180830381865afa158015610840573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086491906113f6565b61108d565b565b6000546001600160a01b031633146108965760405163d0f6c81f60e01b815260040160405180910390fd5b60065460405163095ea7b360e01b81526001600160a01b0390911660048201526024810182905273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb489063095ea7b3906044016020604051808303816000875af11580156108fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091f9190611340565b506006546005546001600160a01b039091169063a6417ed690600290600090859064e8d4a51000906127109061095590826113aa565b61095f90896113bd565b61096991906113d4565b61074a91906113bd565b6002546001600160a01b0316331461099e576040516307b70d3960e11b815260040160405180910390fd5b60028054600180546001600160a01b03199081166001600160a01b03841617909155169055565b6000546001600160a01b031633146109f05760405163d0f6c81f60e01b815260040160405180910390fd5b600080546001600160a01b0319169055565b6001546001600160a01b03163314610a2d57604051639097750360e01b815260040160405180910390fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b03163314610a7a57604051639097750360e01b815260040160405180910390fd5b612710811115610a9d57604051636dabd5db60e01b815260040160405180910390fd5b600455565b6001546001600160a01b03163314610acd57604051639097750360e01b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610b1a5760405163d0f6c81f60e01b815260040160405180910390fd5b81811115610b3b5760405163859df07b60e01b815260040160405180910390fd5b8160036000828254610b4d9190611327565b90915550506040516340c10f1960e01b815230600482015260248101839052600080516020611410833981519152906340c10f1990604401600060405180830381600087803b158015610b9f57600080fd5b505af1158015610bb3573d6000803e3d6000fd5b505060065460405163095ea7b360e01b81526001600160a01b03909116600482015260248101849052600080516020611410833981519152925063095ea7b391506044016020604051808303816000875af1158015610c16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3a9190611340565b506006546004546000916001600160a01b03169063a6417ed6908390600290869064e8d4a510009061271090610c7090826113aa565b610c7a908a6113bd565b610c8491906113d4565b610c8e91906113d4565b6040516001600160e01b031960e087901b168152600f94850b60048201529290930b6024830152604482015260648101919091526084016020604051808303816000875af1158015610ce4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0891906113f6565b90506000610d1683856113aa565b60405163095ea7b360e01b81527399c9fc46f92e8a1c0dec1b1747d010903e884be16004820152602481018290529091506000805160206114108339815191529063095ea7b3906044016020604051808303816000875af1158015610d7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da39190611340565b5060405163095ea7b360e01b81527399c9fc46f92e8a1c0dec1b1747d010903e884be160048201526024810183905273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb489063095ea7b3906044016020604051808303816000875af1158015610e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e349190611340565b5060075460405163041c592960e51b81527399c9fc46f92e8a1c0dec1b1747d010903e884be19163838b252091610ea49160008051602061141083398151915291738ae125e8653821e851f12a49f7765db9a9ce7384916001600160a01b031690879062030d4090600401611362565b600060405180830381600087803b158015610ebe57600080fd5b505af1158015610ed2573d6000803e3d6000fd5b505060075460405163041c592960e51b81527399c9fc46f92e8a1c0dec1b1747d010903e884be1935063838b25209250610f4b9173a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4891737f5c764cbc14f9669b88837ca1490cca17c31607916001600160a01b031690889062030d4090600401611362565b600060405180830381600087803b158015610f6557600080fd5b505af1158015610f79573d6000803e3d6000fd5b505050507fdcc16fd18a808d877bcd9a09b544844b36ae8f0a4b222e317d7b777b2c18b03284604051610fae91815260200190565b60405180910390a150505050565b6000546001600160a01b03163314610fe75760405163d0f6c81f60e01b815260040160405180910390fd5b610ff08161108d565b50565b6001546001600160a01b0316331461101e57604051639097750360e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b0316331461106b57604051639097750360e01b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b806000036110ae576040516356118fa360e11b815260040160405180910390fd5b60035481111561120057600354604051630852cd8d60e31b81526004810191909152600080516020611410833981519152906342966c6890602401600060405180830381600087803b15801561110357600080fd5b505af1158015611117573d6000803e3d6000fd5b5050600154600354600080516020611410833981519152935063a9059cbb92506001600160a01b039091169061114d90856113aa565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bc9190611340565b507f32d275175c36fa468b3e61c6763f9488ff3c9be127e35e011cf4e04d602224ba6003546040516111f091815260200190565b60405180910390a1600060035550565b604051630852cd8d60e31b815260048101829052600080516020611410833981519152906342966c6890602401600060405180830381600087803b15801561124757600080fd5b505af115801561125b573d6000803e3d6000fd5b50505050806003600082825461127191906113aa565b90915550506040518181527f32d275175c36fa468b3e61c6763f9488ff3c9be127e35e011cf4e04d602224ba9060200161063d565b6000602082840312156112b857600080fd5b5035919050565b6000602082840312156112d157600080fd5b81356001600160a01b03811681146112e857600080fd5b9392505050565b6000806040838503121561130257600080fd5b50508035926020909101359150565b634e487b7160e01b600052601160045260246000fd5b8082018082111561133a5761133a611311565b92915050565b60006020828403121561135257600080fd5b815180151581146112e857600080fd5b6001600160a01b0395861681529385166020850152919093166040830152606082019290925263ffffffff909116608082015260c060a0820181905260009082015260e00190565b8181038181111561133a5761133a611311565b808202811582820484141761133a5761133a611311565b6000826113f157634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561140857600080fd5b505191905056fe000000000000000000000000865377367054516e17014ccded1e7d814edc9ce4a2646970667358221220583beab7ebbe387c734e20c648fbf52a370adac3eebc659dea5b9756bce1efc964736f6c63430008110033

Deployed Bytecode Sourcemap

13666:8426:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14273:78;;14309:42;14273:78;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;14273:78:0;;;;;;;;13717:18;;;;;-1:-1:-1;;;;;13717:18:0;;;20261:249;;;;;;:::i;:::-;;:::i;:::-;;14534:25;;;;;-1:-1:-1;;;;;14534:25:0;;;14443:84;;;;;-1:-1:-1;;;;;14443:84:0;;;13742:25;;;;;-1:-1:-1;;;;;13742:25:0;;;13803:36;;;;;;;;;779:25:1;;;767:2;752:18;13803:36:0;633:177:1;16702:395:0;;;;;;:::i;:::-;;:::i;19046:329::-;;;;;;:::i;:::-;;:::i;17471:150::-;;;:::i;13930:53::-;;13979:4;13930:53;;18484:329;;;;;;:::i;:::-;;:::i;20971:162::-;;;:::i;19464:118::-;;;:::i;14077:80::-;;14114:42;14077:80;;21926:163;;;;;;:::i;:::-;;:::i;13992:78::-;;-1:-1:-1;;;;;;;;;;;13992:78:0;;13774:22;;;;;;14164:102;;14223:42;14164:102;;14358:78;;14394:42;14358:78;;13846:36;;;;;;19797:249;;;;;;:::i;:::-;;:::i;21255:135::-;;;;;;:::i;:::-;;:::i;15523:930::-;;;;;;:::i;:::-;;:::i;17230:144::-;;;;;;:::i;:::-;;:::i;20736:152::-;;;;;;:::i;:::-;;:::i;21627:155::-;;;;;;:::i;:::-;;:::i;13690:20::-;;;;;-1:-1:-1;;;;;13690:20:0;;;20261:249;20357:3;;-1:-1:-1;;;;;20357:3:0;20343:10;:17;20339:39;;20369:9;;-1:-1:-1;;;20369:9:0;;;;;;;;;;;20339:39;20413:5;20393:17;:25;20389:58;;;20427:20;;-1:-1:-1;;;20427:20:0;;;;;;;;;;;20389:58;20458:24;:44;20261:249::o;16702:395::-;16776:5;;-1:-1:-1;;;;;16776:5:0;16762:10;:19;16758:43;;16790:11;;-1:-1:-1;;;16790:11:0;;;;;;;;;;;16758:43;16836:10;16822;;:24;;;;;;;:::i;:::-;;;;-1:-1:-1;;16857:36:0;;-1:-1:-1;;;16857:36:0;;16875:4;16857:36;;;2468:51:1;2535:18;;;2528:34;;;-1:-1:-1;;;;;;;;;;;14027:42:0;16857:9;;2441:18:1;;16857:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16906:45:0;;-1:-1:-1;;;16906:45:0;;14223:42;16906:45;;;2468:51:1;2535:18;;;2528:34;;;-1:-1:-1;;;;;;;;;;;14027:42:0;-1:-1:-1;16906:12:0;;-1:-1:-1;2441:18:1;;16906:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;17014:10:0;;16962:88;;-1:-1:-1;;;16962:88:0;;14223:42;;16962:25;;:88;;-1:-1:-1;;;;;;;;;;;14027:42:0;14309;;-1:-1:-1;;;;;17014:10:0;;17026;;17038:7;;16962:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17068:21;17078:10;17068:21;;;;779:25:1;;767:2;752:18;;633:177;17068:21:0;;;;;;;;16702:395;:::o;19046:329::-;19125:5;;-1:-1:-1;;;;;19125:5:0;19111:10;:19;19107:43;;19139:11;;-1:-1:-1;;;19139:11:0;;;;;;;;;;;19107:43;19192:9;;19171:44;;-1:-1:-1;;;19171:44:0;;-1:-1:-1;;;;;19192:9:0;;;19171:44;;;2468:51:1;2535:18;;;2528:34;;;-1:-1:-1;;;;;;;;;;;14027:42:0;19171:12;;2441:18:1;;19171:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;19226:9:0;;19300:24;;-1:-1:-1;;;;;19226:9:0;;;;:29;;:9;;19259:1;;19262:10;;13979:4;;13917:6;;19288:36;;13917:6;19288:36;:::i;:::-;19274:51;;:10;:51;:::i;:::-;:63;;;;:::i;:::-;:92;;;;:::i;:::-;19226:141;;-1:-1:-1;;;;;;19226:141:0;;;;;;;4399:2:1;4388:22;;;19226:141:0;;;4370:41:1;4447:22;;;;4427:18;;;4420:50;4486:18;;;4479:34;4529:18;;;4522:34;;;;4342:19;;19226:141:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19046:329;:::o;17471:150::-;17532:5;;-1:-1:-1;;;;;17532:5:0;17518:10;:19;17514:43;;17546:11;;-1:-1:-1;;;17546:11:0;;;;;;;;;;;17514:43;17583:29;;-1:-1:-1;;;17583:29:0;;17606:4;17583:29;;;160:51:1;17570:43:0;;-1:-1:-1;;;;;;;;;;;14027:42:0;17583:14;;133:18:1;;17583:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17570:12;:43::i;:::-;17471:150::o;18484:329::-;18563:5;;-1:-1:-1;;;;;18563:5:0;18549:10;:19;18545:43;;18577:11;;-1:-1:-1;;;18577:11:0;;;;;;;;;;;18545:43;18630:9;;18609:44;;-1:-1:-1;;;18609:44:0;;-1:-1:-1;;;;;18630:9:0;;;18609:44;;;2468:51:1;2535:18;;;2528:34;;;14114:42:0;;18609:12;;2441:18:1;;18609:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;18664:9:0;;18738:24;;-1:-1:-1;;;;;18664:9:0;;;;:29;;18694:1;;18664:9;;18700:10;;13979:4;;13917:6;;18726:36;;13917:6;18726:36;:::i;:::-;18712:51;;:10;:51;:::i;:::-;:63;;;;:::i;:::-;:92;;;;:::i;20971:162::-;21029:10;;-1:-1:-1;;;;;21029:10:0;21015;:24;21011:53;;21048:16;;-1:-1:-1;;;21048:16:0;;;;;;;;;;;21011:53;21081:10;;;;21075:16;;-1:-1:-1;;;;;;21075:16:0;;;-1:-1:-1;;;;;21081:10:0;;21075:16;;;;21102:23;;;20971:162::o;19464:118::-;19520:5;;-1:-1:-1;;;;;19520:5:0;19506:10;:19;19502:43;;19534:11;;-1:-1:-1;;;19534:11:0;;;;;;;;;;;19502:43;19572:1;19556:18;;-1:-1:-1;;;;;;19556:18:0;;;19464:118::o;21926:163::-;22012:3;;-1:-1:-1;;;;;22012:3:0;21998:10;:17;21994:39;;22024:9;;-1:-1:-1;;;22024:9:0;;;;;;;;;;;21994:39;22044:9;:37;;-1:-1:-1;;;;;;22044:37:0;-1:-1:-1;;;;;22044:37:0;;;;;;;;;;21926:163::o;19797:249::-;19893:3;;-1:-1:-1;;;;;19893:3:0;19879:10;:17;19875:39;;19905:9;;-1:-1:-1;;;19905:9:0;;;;;;;;;;;19875:39;19949:5;19929:17;:25;19925:58;;;19963:20;;-1:-1:-1;;;19963:20:0;;;;;;;;;;;19925:58;19994:24;:44;19797:249::o;21255:135::-;21333:3;;-1:-1:-1;;;;;21333:3:0;21319:10;:17;21315:39;;21345:9;;-1:-1:-1;;;21345:9:0;;;;;;;;;;;21315:39;21365:5;:17;;-1:-1:-1;;;;;;21365:17:0;-1:-1:-1;;;;;21365:17:0;;;;;;;;;;21255:135::o;15523:930::-;15621:5;;-1:-1:-1;;;;;15621:5:0;15607:10;:19;15603:43;;15635:11;;-1:-1:-1;;;15635:11:0;;;;;;;;;;;15603:43;15674:10;15661;:23;15657:60;;;15693:24;;-1:-1:-1;;;15693:24:0;;;;;;;;;;;15657:60;15752:10;15738;;:24;;;;;;;:::i;:::-;;;;-1:-1:-1;;15773:36:0;;-1:-1:-1;;;15773:36:0;;15791:4;15773:36;;;2468:51:1;2535:18;;;2528:34;;;-1:-1:-1;;;;;;;;;;;14027:42:0;15773:9;;2441:18:1;;15773:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15843:9:0;;15822:44;;-1:-1:-1;;;15822:44:0;;-1:-1:-1;;;;;15843:9:0;;;15822:44;;;2468:51:1;2535:18;;;2528:34;;;-1:-1:-1;;;;;;;;;;;14027:42:0;-1:-1:-1;15822:12:0;;-1:-1:-1;2441:18:1;;15822:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;15895:9:0;;15969:24;;15877:15;;-1:-1:-1;;;;;15895:9:0;;:29;;15877:15;;15928:1;;15931:10;;13979:4;;13917:6;;15957:36;;13917:6;15957:36;:::i;:::-;15943:51;;:10;:51;:::i;:::-;:63;;;;:::i;:::-;:92;;;;:::i;:::-;15895:141;;-1:-1:-1;;;;;;15895:141:0;;;;;;;4399:2:1;4388:22;;;15895:141:0;;;4370:41:1;4447:22;;;;4427:18;;;4420:50;4486:18;;;4479:34;4529:18;;;4522:34;;;;4342:19;;15895:141:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15877:159;-1:-1:-1;16049:17:0;16069:23;16082:10;16069;:23;:::i;:::-;16103:47;;-1:-1:-1;;;16103:47:0;;14223:42;16103:47;;;2468:51:1;2535:18;;;2528:34;;;16049:43:0;;-1:-1:-1;;;;;;;;;;;;14027:42:0;16103:12;;2441:18:1;;16103:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;16161:45:0;;-1:-1:-1;;;16161:45:0;;14223:42;16161:45;;;2468:51:1;2535:18;;;2528:34;;;14114:42:0;;16161:12;;2441:18:1;;16161:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;16269:10:0;;16217:90;;-1:-1:-1;;;16217:90:0;;14223:42;;16217:25;;:90;;-1:-1:-1;;;;;;;;;;;14027:42:0;14309;;-1:-1:-1;;;;;16269:10:0;;16281:12;;16295:7;;16217:90;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16370:10:0;;16318:88;;-1:-1:-1;;;16318:88:0;;14223:42;;-1:-1:-1;16318:25:0;;-1:-1:-1;16318:88:0;;14114:42;;14394;;-1:-1:-1;;;;;16370:10:0;;16382;;16394:7;;16318:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16424:21;16434:10;16424:21;;;;779:25:1;;767:2;752:18;;633:177;16424:21:0;;;;;;;;15592:861;;15523:930;;:::o;17230:144::-;17304:5;;-1:-1:-1;;;;;17304:5:0;17290:10;:19;17286:43;;17318:11;;-1:-1:-1;;;17318:11:0;;;;;;;;;;;17286:43;17342:24;17355:10;17342:12;:24::i;:::-;17230:144;:::o;20736:152::-;20821:3;;-1:-1:-1;;;;;20821:3:0;20807:10;:17;20803:39;;20833:9;;-1:-1:-1;;;20833:9:0;;;;;;;;;;;20803:39;20853:10;:27;;-1:-1:-1;;;;;;20853:27:0;-1:-1:-1;;;;;20853:27:0;;;;;;;;;;20736:152::o;21627:155::-;21715:3;;-1:-1:-1;;;;;21715:3:0;21701:10;:17;21697:39;;21727:9;;-1:-1:-1;;;21727:9:0;;;;;;;;;;;21697:39;21747:10;:27;;-1:-1:-1;;;;;;21747:27:0;-1:-1:-1;;;;;21747:27:0;;;;;;;;;;21627:155::o;17816:435::-;17874:6;17884:1;17874:11;17870:42;;17894:18;;-1:-1:-1;;;17894:18:0;;;;;;;;;;;17870:42;17935:10;;17926:6;:19;17923:321;;;17971:10;;17961:21;;-1:-1:-1;;;17961:21:0;;;;;779:25:1;;;;-1:-1:-1;;;;;;;;;;;14027:42:0;17961:9;;752:18:1;;17961:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18011:3:0;;18025:10;;-1:-1:-1;;;;;;;;;;;14027:42:0;-1:-1:-1;17997:13:0;;-1:-1:-1;;;;;;18011:3:0;;;;18016:19;;:6;:19;:::i;:::-;17997:39;;-1:-1:-1;;;;;;17997:39:0;;;;;;;-1:-1:-1;;;;;2486:32:1;;;17997:39:0;;;2468:51:1;2535:18;;;2528:34;2441:18;;17997:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18056:23;18068:10;;18056:23;;;;779:25:1;;767:2;752:18;;633:177;18056:23:0;;;;;;;;18107:1;18094:10;:14;17230:144;:::o;17923:321::-;18141:17;;-1:-1:-1;;;18141:17:0;;;;;779:25:1;;;-1:-1:-1;;;;;;;;;;;14027:42:0;18141:9;;752:18:1;;18141:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18187:6;18173:10;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;;18213:19:0;;779:25:1;;;18213:19:0;;767:2:1;752:18;18213:19:0;633:177:1;222:180;281:6;334:2;322:9;313:7;309:23;305:32;302:52;;;350:1;347;340:12;302:52;-1:-1:-1;373:23:1;;222:180;-1:-1:-1;222:180:1:o;1037:286::-;1096:6;1149:2;1137:9;1128:7;1124:23;1120:32;1117:52;;;1165:1;1162;1155:12;1117:52;1191:23;;-1:-1:-1;;;;;1243:31:1;;1233:42;;1223:70;;1289:1;1286;1279:12;1223:70;1312:5;1037:286;-1:-1:-1;;;1037:286:1:o;1779:248::-;1847:6;1855;1908:2;1896:9;1887:7;1883:23;1879:32;1876:52;;;1924:1;1921;1914:12;1876:52;-1:-1:-1;;1947:23:1;;;2017:2;2002:18;;;1989:32;;-1:-1:-1;1779:248:1:o;2032:127::-;2093:10;2088:3;2084:20;2081:1;2074:31;2124:4;2121:1;2114:15;2148:4;2145:1;2138:15;2164:125;2229:9;;;2250:10;;;2247:36;;;2263:18;;:::i;:::-;2164:125;;;;:::o;2573:277::-;2640:6;2693:2;2681:9;2672:7;2668:23;2664:32;2661:52;;;2709:1;2706;2699:12;2661:52;2741:9;2735:16;2794:5;2787:13;2780:21;2773:5;2770:32;2760:60;;2816:1;2813;2806:12;2855:737;-1:-1:-1;;;;;3246:15:1;;;3228:34;;3298:15;;;3293:2;3278:18;;3271:43;3350:15;;;;3345:2;3330:18;;3323:43;3397:2;3382:18;;3375:34;;;;3458:10;3446:23;;;3440:3;3425:19;;3418:52;3507:3;3208;3486:19;;3479:32;;;-1:-1:-1;3527:19:1;;;3520:30;3582:3;3567:19;;2855:737::o;3597:128::-;3664:9;;;3685:11;;;3682:37;;;3699:18;;:::i;3730:168::-;3803:9;;;3834;;3851:15;;;3845:22;;3831:37;3821:71;;3872:18;;:::i;3903:217::-;3943:1;3969;3959:132;;4013:10;4008:3;4004:20;4001:1;3994:31;4048:4;4045:1;4038:15;4076:4;4073:1;4066:15;3959:132;-1:-1:-1;4105:9:1;;3903:217::o;4567:184::-;4637:6;4690:2;4678:9;4669:7;4665:23;4661:32;4658:52;;;4706:1;4703;4696:12;4658:52;-1:-1:-1;4729:16:1;;4567:184;-1:-1:-1;4567:184:1:o

Swarm Source

ipfs://583beab7ebbe387c734e20c648fbf52a370adac3eebc659dea5b9756bce1efc9

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.