S Price: $0.441081 (+3.29%)

Contract

0xc707E1FF974E28918b1e4D0cFf5a020450E8aCE7

Overview

S Balance

Sonic LogoSonic LogoSonic Logo0 S

S Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

Parent Transaction Hash Block From To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
V3Manager

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 999999 runs

Other Settings:
london EvmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at SonicScan.org on 2025-01-15
*/

// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity >=0.8.0 ^0.8.0;

// lib/openzeppelin-contracts/contracts/utils/Context.sol

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

// src/interfaces/IUniswapV3Factory.sol

/// @title The interface for the Uniswap V3 Factory
/// @notice The Uniswap V3 Factory facilitates creation of Uniswap V3 pools and control over the protocol fees
interface IUniswapV3Factory {
    /// @notice Emitted when the owner of the factory is changed
    /// @param oldOwner The owner before the owner was changed
    /// @param newOwner The owner after the owner was changed
    event OwnerChanged(address indexed oldOwner, address indexed newOwner);

    /// @notice Emitted when a pool is created
    /// @param token0 The first token of the pool by address sort order
    /// @param token1 The second token of the pool by address sort order
    /// @param fee The fee collected upon every swap in the pool, denominated in hundredths of a bip
    /// @param tickSpacing The minimum number of ticks between initialized ticks
    /// @param pool The address of the created pool
    event PoolCreated(
        address indexed token0,
        address indexed token1,
        uint24 indexed fee,
        int24 tickSpacing,
        address pool
    );

    /// @notice Emitted when a new fee amount is enabled for pool creation via the factory
    /// @param fee The enabled fee, denominated in hundredths of a bip
    /// @param tickSpacing The minimum number of ticks between initialized ticks for pools created with the given fee
    event FeeAmountEnabled(uint24 indexed fee, int24 indexed tickSpacing);

    /// @notice Returns the current owner of the factory
    /// @dev Can be changed by the current owner via setOwner
    /// @return The address of the factory owner
    function owner() external view returns (address);

    /// @notice Returns the tick spacing for a given fee amount, if enabled, or 0 if not enabled
    /// @dev A fee amount can never be removed, so this value should be hard coded or cached in the calling context
    /// @param fee The enabled fee, denominated in hundredths of a bip. Returns 0 in case of unenabled fee
    /// @return The tick spacing
    function feeAmountTickSpacing(uint24 fee) external view returns (int24);

    /// @notice Returns the pool address for a given pair of tokens and a fee, or address 0 if it does not exist
    /// @dev tokenA and tokenB may be passed in either token0/token1 or token1/token0 order
    /// @param tokenA The contract address of either token0 or token1
    /// @param tokenB The contract address of the other token
    /// @param fee The fee collected upon every swap in the pool, denominated in hundredths of a bip
    /// @return pool The pool address
    function getPool(
        address tokenA,
        address tokenB,
        uint24 fee
    ) external view returns (address pool);

    /// @notice Creates a pool for the given two tokens and fee
    /// @param tokenA One of the two tokens in the desired pool
    /// @param tokenB The other of the two tokens in the desired pool
    /// @param fee The desired fee for the pool
    /// @dev tokenA and tokenB may be passed in either order: token0/token1 or token1/token0. tickSpacing is retrieved
    /// from the fee. The call will revert if the pool already exists, the fee is invalid, or the token arguments
    /// are invalid.
    /// @return pool The address of the newly created pool
    function createPool(
        address tokenA,
        address tokenB,
        uint24 fee
    ) external returns (address pool);

    /// @notice Updates the owner of the factory
    /// @dev Must be called by the current owner
    /// @param _owner The new owner of the factory
    function setOwner(address _owner) external;

    /// @notice Enables a fee amount with the given tickSpacing
    /// @dev Fee amounts may never be removed once enabled
    /// @param fee The fee amount to enable, denominated in hundredths of a bip (i.e. 1e-6)
    /// @param tickSpacing The spacing between ticks to be enforced for all pools created with the given fee amount
    function enableFeeAmount(uint24 fee, int24 tickSpacing) external;
}

// src/interfaces/IUniswapV3Pool.sol

interface IUniswapV3Pool {
  // IUniswapV3PoolActions
  function initialize(uint160 sqrtPriceX96) external;

  function mint(
    address recipient,
    int24 tickLower,
    int24 tickUpper,
    uint128 amount,
    bytes calldata data
  ) external returns (uint256 amount0, uint256 amount1);

  function collect(
    address recipient,
    int24 tickLower,
    int24 tickUpper,
    uint128 amount0Requested,
    uint128 amount1Requested
  ) external returns (uint128 amount0, uint128 amount1);

  function burn(
    int24 tickLower,
    int24 tickUpper,
    uint128 amount
  ) external returns (uint256 amount0, uint256 amount1);

  function swap(
    address recipient,
    bool zeroForOne,
    int256 amountSpecified,
    uint160 sqrtPriceLimitX96,
    bytes calldata data
  ) external returns (int256 amount0, int256 amount1);

  function flash(
    address recipient,
    uint256 amount0,
    uint256 amount1,
    bytes calldata data
  ) external;

  function increaseObservationCardinalityNext(uint16 observationCardinalityNext) external;

  // IUniswapV3PoolDerivedState
  function observe(uint32[] calldata secondsAgos)
    external
    view
    returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s);

  function snapshotCumulativesInside(int24 tickLower, int24 tickUpper)
    external
    view
    returns (
      int56 tickCumulativeInside,
      uint160 secondsPerLiquidityInsideX128,
      uint32 secondsInside
    );
  
  // IUniswapV3PoolErrors
  error LOK();
  error TLU();
  error TLM();
  error TUM();
  error AI();
  error M0();
  error M1();
  error AS();
  error IIA();
  error L();
  error F0();
  error F1();

  // IUniswapV3PoolEvents
  event Initialize(uint160 sqrtPriceX96, int24 tick);
  event Mint(
    address sender,
    address indexed owner,
    int24 indexed tickLower,
    int24 indexed tickUpper,
    uint128 amount,
    uint256 amount0,
    uint256 amount1
  );

  event Collect(
    address indexed owner,
    address recipient,
    int24 indexed tickLower,
    int24 indexed tickUpper,
    uint128 amount0,
    uint128 amount1
  );

  event Burn(
    address indexed owner,
    int24 indexed tickLower,
    int24 indexed tickUpper,
    uint128 amount,
    uint256 amount0,
    uint256 amount1
  );

  event Swap(
    address indexed sender,
    address indexed recipient,
    int256 amount0,
    int256 amount1,
    uint160 sqrtPriceX96,
    uint128 liquidity,
    int24 tick
  );

  event Flash(
    address indexed sender,
    address indexed recipient,
    uint256 amount0,
    uint256 amount1,
    uint256 paid0,
    uint256 paid1
  );

  event IncreaseObservationCardinalityNext(
    uint16 observationCardinalityNextOld,
    uint16 observationCardinalityNextNew
  );

  event SetFeeProtocol(uint8 feeProtocol0Old, uint8 feeProtocol1Old, uint8 feeProtocol0New, uint8 feeProtocol1New);

  event CollectProtocol(address indexed sender, address indexed recipient, uint128 amount0, uint128 amount1);

  // IUniswapV3PoolImmutables
  function factory() external view returns (address);
  function token0() external view returns (address);
  function token1() external view returns (address);
  function fee() external view returns (uint24);
  function tickSpacing() external view returns (int24);
  function maxLiquidityPerTick() external view returns (uint128);

  // IUniswapV3PoolOwnerActions
  function setFeeProtocol(uint8 feeProtocol0, uint8 feeProtocol1) external;
  function collectProtocol(
    address recipient,
    uint128 amount0Requested,
    uint128 amount1Requested
  ) external returns (uint128 amount0, uint128 amount1);

  // IUniswapV3PoolState
  function slot0()
    external
    view
    returns (
      uint160 sqrtPriceX96,
      int24 tick,
      uint16 observationIndex,
      uint16 observationCardinality,
      uint16 observationCardinalityNext,
      uint8 feeProtocol,
      bool unlocked
    );

  function feeGrowthGlobal0X128() external view returns (uint256);
  function feeGrowthGlobal1X128() external view returns (uint256);
  function protocolFees() external view returns (uint128 token0, uint128 token1);
  function liquidity() external view returns (uint128);

  function ticks(int24 tick)
    external
    view
    returns (
      uint128 liquidityGross,
      int128 liquidityNet,
      uint256 feeGrowthOutside0X128,
      uint256 feeGrowthOutside1X128,
      int56 tickCumulativeOutside,
      uint160 secondsPerLiquidityOutsideX128,
      uint32 secondsOutside,
      bool initialized
    );

  function tickBitmap(int16 wordPosition) external view returns (uint256);

  function positions(bytes32 key)
    external
    view
    returns (
      uint128 liquidity,
      uint256 feeGrowthInside0LastX128,
      uint256 feeGrowthInside1LastX128,
      uint128 tokensOwed0,
      uint128 tokensOwed1
    );

  function observations(uint256 index)
    external
    view
    returns (
      uint32 blockTimestamp,
      int56 tickCumulative,
      uint160 secondsPerLiquidityCumulativeX128,
      bool initialized
    );
}

// lib/openzeppelin-contracts/contracts/access/Ownable.sol

// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol

// OpenZeppelin Contracts (last updated v4.8.0) (access/Ownable2Step.sol)

/**
 * @dev Contract module which provides access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership} and {acceptOwnership}.
 *
 * This module is used through inheritance. It will make available all functions
 * from parent (Ownable).
 */
abstract contract Ownable2Step is Ownable {
    address private _pendingOwner;

    event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Returns the address of the pending owner.
     */
    function pendingOwner() public view virtual returns (address) {
        return _pendingOwner;
    }

    /**
     * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual override onlyOwner {
        _pendingOwner = newOwner;
        emit OwnershipTransferStarted(owner(), newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual override {
        delete _pendingOwner;
        super._transferOwnership(newOwner);
    }

    /**
     * @dev The new owner accepts the ownership transfer.
     */
    function acceptOwnership() external {
        address sender = _msgSender();
        require(pendingOwner() == sender, "Ownable2Step: caller is not the new owner");
        _transferOwnership(sender);
    }
}

// src/Auth.sol

abstract contract Auth is Ownable2Step {

    event SetTrusted(address indexed user, bool isTrusted);

    mapping(address => bool) public trusted;

    error OnlyTrusted();

    modifier onlyTrusted() {
        if (!trusted[msg.sender]) revert OnlyTrusted();
        _;
    }

    constructor(address trustedUser) {
        trusted[trustedUser] = true;
        emit SetTrusted(trustedUser, true);
    }

    function setTrusted(address user, bool isTrusted) external onlyOwner {
        trusted[user] = isTrusted;
        emit SetTrusted(user, isTrusted);
    }

}

// src/V3Manager.sol

/// @title V3Manager for UniswapV3Factory
/// @notice This contract is used to create fee tiers, set protocol fee on pools, and collect fees from pools
/// @dev Uses Auth contract for owner and trusted operators to guard functions
contract V3Manager is Auth {
  IUniswapV3Factory public factory;
  address public maker;
  uint8 public protocolFee;

  constructor(
    address _operator,
    address _factory,
    address _maker,
    uint8 _protocolFee
  ) Auth(_operator) {
    // initial owner is msg.sender
    factory = IUniswapV3Factory(_factory);
    maker = _maker;
    protocolFee = _protocolFee;
  }

  /// @notice Creates a new fee tier with passed tickSpacing
  /// @dev will revert on factory contract if inputs invalid
  /// @param fee The fee amount to enable, denominated in hundreths of a bip
  /// @param tickSpacing The spacing between ticks to be enforced for all pools created with the given fee amount
  function createFeeTier(uint24 fee, int24 tickSpacing) external onlyOwner {
    IUniswapV3Factory(factory).enableFeeAmount(fee, tickSpacing);
  }

  /// @notice transfer ownership of the factory contract
  /// @param newOwner The newOwner address to set on the factory contract
  function setFactoryOwner(address newOwner) external onlyOwner {
    IUniswapV3Factory(factory).setOwner(newOwner);
  }

  /// @notice Sets the protocol fee to be used for all pools
  /// @dev must be between 4 and 10, or 0 to disable - must apply to each pool everytime it's changed
  /// @param _protocolFee The protocol fee to be used for all pools
  function setProtocolFee(uint8 _protocolFee) external onlyOwner {
    require(
      _protocolFee == 0 || (_protocolFee >= 4 && _protocolFee <= 10)
    );
    protocolFee = _protocolFee;
  }

  /// @notice Sets the maker contract to be used for collecting fees
  /// @dev Where all fees will be sent to when collected
  /// @param _maker The address of the maker contract
  function setMaker(address _maker) external onlyOwner {
    maker = _maker;
  }

  /// @notice Applies the protocol fee to all pools passed
  /// @dev must be called for each pool, after protocolFee is updated
  /// @param pools The addresses of the pools to apply the protocol fee to
  function applyProtocolFee(address[] calldata pools) external onlyTrusted {
    for (uint256 i = 0; i < pools.length; i++) {
      IUniswapV3Pool pool = IUniswapV3Pool(pools[i]);
      pool.setFeeProtocol(protocolFee, protocolFee);
    }
  } 

  /// @notice Collects fees from pools passed
  /// @dev Will call collectProtocol on each pool address, sending fees to maker contract that is set
  /// @param pools The addresses of the pools to collect fees from
  function collectFees(address[] calldata pools) external onlyTrusted {
    for (uint256 i = 0; i < pools.length; i++) {
      IUniswapV3Pool pool = IUniswapV3Pool(pools[i]);
      (uint128 amount0, uint128 amount1) = pool.protocolFees();
      pool.collectProtocol(maker, amount0, amount1);
    }
  }

  /// @notice Available function in case we need to do any calls that aren't supported by the contract (unwinding lp positions, etc.)
  /// @dev can only be called by owner
  /// @param to The address to send the call to
  /// @param _value The amount of eth to send with the call
  /// @param data The data to be sent with the call
  function doAction(address to, uint256 _value, bytes memory data) onlyOwner external {
    (bool success, ) = to.call{value: _value}(data);
    require(success);
  }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_maker","type":"address"},{"internalType":"uint8","name":"_protocolFee","type":"uint8"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"OnlyTrusted","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"isTrusted","type":"bool"}],"name":"SetTrusted","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"applyProtocolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"collectFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"}],"name":"createFeeTier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"doAction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"contract IUniswapV3Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"setFactoryOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_maker","type":"address"}],"name":"setMaker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_protocolFee","type":"uint8"}],"name":"setProtocolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"isTrusted","type":"bool"}],"name":"setTrusted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"trusted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b50604051620011653803806200116583398101604081905262000034916200017d565b836200004033620000e6565b6001600160a01b038116600081815260026020908152604091829020805460ff1916600190811790915591519182527f878d105ed19c01e992a54459c2f04ba19432ac45600b42ce340d034272207436910160405180910390a250600380546001600160a01b039485166001600160a01b03199091161790556004805460ff909216600160a01b026001600160a81b0319909216929093169190911717905550620001e1565b600180546001600160a01b03191690556200010d8162000110602090811b62000a8617901c565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200017857600080fd5b919050565b600080600080608085870312156200019457600080fd5b6200019f8562000160565b9350620001af6020860162000160565b9250620001bf6040860162000160565b9150606085015160ff81168114620001d657600080fd5b939692955090935050565b610f7480620001f16000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80638da5cb5b116100b2578063cff8e7f711610081578063f2fde38b11610066578063f2fde38b146102b4578063f32a12ac146102c7578063f3cc660c146102da57600080fd5b8063cff8e7f714610283578063e30c39781461029657600080fd5b80638da5cb5b146101fb578063b0e21e8a14610219578063bc19a9e214610250578063c45a01551461026357600080fd5b80636e9821c2116100ee5780636e9821c2146101a5578063715018a6146101d857806372754262146101e057806379ba5097146101f357600080fd5b80634e91f8111461012057806350655d8c1461013557806354a0af171461017f57806358c0f72914610192575b600080fd5b61013361012e366004610bad565b6102ed565b005b6004546101559073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013361018d366004610c2f565b61036d565b6101336101a0366004610d18565b6103f3565b6101c86101b3366004610d8d565b60026020526000908152604090205460ff1681565b6040519015158152602001610176565b6101336105be565b6101336101ee366004610d18565b6105d2565b61013361070d565b60005473ffffffffffffffffffffffffffffffffffffffff16610155565b60045461023e9074010000000000000000000000000000000000000000900460ff1681565b60405160ff9091168152602001610176565b61013361025e366004610d8d565b6107c7565b6003546101559073ffffffffffffffffffffffffffffffffffffffff1681565b610133610291366004610da8565b610816565b60015473ffffffffffffffffffffffffffffffffffffffff16610155565b6101336102c2366004610d8d565b6108b4565b6101336102d5366004610df0565b610964565b6101336102e8366004610d8d565b6109f6565b6102f5610afb565b60ff81161580610318575060048160ff16101580156103185750600a8160ff1611155b61032157600080fd5b6004805460ff90921674010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b610375610afb565b60008373ffffffffffffffffffffffffffffffffffffffff16838360405161039d9190610e21565b60006040518083038185875af1925050503d80600081146103da576040519150601f19603f3d011682016040523d82523d6000602084013e6103df565b606091505b50509050806103ed57600080fd5b50505050565b3360009081526002602052604090205460ff1661043c576040517fcf1119ab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156105b957600083838381811061045b5761045b610e5c565b90506020020160208101906104709190610d8d565b90506000808273ffffffffffffffffffffffffffffffffffffffff16631ad8b03b6040518163ffffffff1660e01b81526004016040805180830381865afa1580156104bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e39190610eab565b600480546040517f85b6672900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216928101929092526fffffffffffffffffffffffffffffffff808516602484015283166044830152929450909250908416906385b667299060640160408051808303816000875af115801561057d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a19190610eab565b505050505080806105b190610ede565b91505061043f565b505050565b6105c6610afb565b6105d06000610b7c565b565b3360009081526002602052604090205460ff1661061b576040517fcf1119ab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156105b957600083838381811061063a5761063a610e5c565b905060200201602081019061064f9190610d8d565b600480546040517f8206a4d10000000000000000000000000000000000000000000000000000000081527401000000000000000000000000000000000000000090910460ff16918101829052602481019190915290915073ffffffffffffffffffffffffffffffffffffffff821690638206a4d190604401600060405180830381600087803b1580156106e157600080fd5b505af11580156106f5573d6000803e3d6000fd5b5050505050808061070590610ede565b91505061061e565b600154339073ffffffffffffffffffffffffffffffffffffffff1681146107bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e6572000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6107c481610b7c565b50565b6107cf610afb565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61081e610afb565b6003546040517f8a7c195f00000000000000000000000000000000000000000000000000000000815262ffffff84166004820152600283900b602482015273ffffffffffffffffffffffffffffffffffffffff90911690638a7c195f90604401600060405180830381600087803b15801561089857600080fd5b505af11580156108ac573d6000803e3d6000fd5b505050505050565b6108bc610afb565b6001805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915561091f60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b61096c610afb565b73ffffffffffffffffffffffffffffffffffffffff821660008181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527f878d105ed19c01e992a54459c2f04ba19432ac45600b42ce340d034272207436910160405180910390a25050565b6109fe610afb565b6003546040517f13af403500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152909116906313af403590602401600060405180830381600087803b158015610a6b57600080fd5b505af1158015610a7f573d6000803e3d6000fd5b5050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107b2565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556107c481610a86565b600060208284031215610bbf57600080fd5b813560ff81168114610bd057600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610bfb57600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600060608486031215610c4457600080fd5b610c4d84610bd7565b925060208401359150604084013567ffffffffffffffff80821115610c7157600080fd5b818601915086601f830112610c8557600080fd5b813581811115610c9757610c97610c00565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610cdd57610cdd610c00565b81604052828152896020848701011115610cf657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60008060208385031215610d2b57600080fd5b823567ffffffffffffffff80821115610d4357600080fd5b818501915085601f830112610d5757600080fd5b813581811115610d6657600080fd5b8660208260051b8501011115610d7b57600080fd5b60209290920196919550909350505050565b600060208284031215610d9f57600080fd5b610bd082610bd7565b60008060408385031215610dbb57600080fd5b823562ffffff81168114610dce57600080fd5b91506020830135600281900b8114610de557600080fd5b809150509250929050565b60008060408385031215610e0357600080fd5b610e0c83610bd7565b915060208301358015158114610de557600080fd5b6000825160005b81811015610e425760208186018101518583015201610e28565b81811115610e51576000828501525b509190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80516fffffffffffffffffffffffffffffffff81168114610bfb57600080fd5b60008060408385031215610ebe57600080fd5b610ec783610e8b565b9150610ed560208401610e8b565b90509250929050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610f37577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea2646970667358221220114424c9378fd8a69f0c5cf9a4c8bfb01073dab0636fe6b18d65015675db28fc64736f6c634300080a00330000000000000000000000007812bcd0c0de8d15ff4c47391d2d9ae1b4de13f000000000000000000000000046b3fdf7b5cde91ac049936bf0bdb12c5d22202e000000000000000000000000d4777bd428e6eac069806ea581eb4806d22076730000000000000000000000000000000000000000000000000000000000000004

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061011b5760003560e01c80638da5cb5b116100b2578063cff8e7f711610081578063f2fde38b11610066578063f2fde38b146102b4578063f32a12ac146102c7578063f3cc660c146102da57600080fd5b8063cff8e7f714610283578063e30c39781461029657600080fd5b80638da5cb5b146101fb578063b0e21e8a14610219578063bc19a9e214610250578063c45a01551461026357600080fd5b80636e9821c2116100ee5780636e9821c2146101a5578063715018a6146101d857806372754262146101e057806379ba5097146101f357600080fd5b80634e91f8111461012057806350655d8c1461013557806354a0af171461017f57806358c0f72914610192575b600080fd5b61013361012e366004610bad565b6102ed565b005b6004546101559073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013361018d366004610c2f565b61036d565b6101336101a0366004610d18565b6103f3565b6101c86101b3366004610d8d565b60026020526000908152604090205460ff1681565b6040519015158152602001610176565b6101336105be565b6101336101ee366004610d18565b6105d2565b61013361070d565b60005473ffffffffffffffffffffffffffffffffffffffff16610155565b60045461023e9074010000000000000000000000000000000000000000900460ff1681565b60405160ff9091168152602001610176565b61013361025e366004610d8d565b6107c7565b6003546101559073ffffffffffffffffffffffffffffffffffffffff1681565b610133610291366004610da8565b610816565b60015473ffffffffffffffffffffffffffffffffffffffff16610155565b6101336102c2366004610d8d565b6108b4565b6101336102d5366004610df0565b610964565b6101336102e8366004610d8d565b6109f6565b6102f5610afb565b60ff81161580610318575060048160ff16101580156103185750600a8160ff1611155b61032157600080fd5b6004805460ff90921674010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b610375610afb565b60008373ffffffffffffffffffffffffffffffffffffffff16838360405161039d9190610e21565b60006040518083038185875af1925050503d80600081146103da576040519150601f19603f3d011682016040523d82523d6000602084013e6103df565b606091505b50509050806103ed57600080fd5b50505050565b3360009081526002602052604090205460ff1661043c576040517fcf1119ab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156105b957600083838381811061045b5761045b610e5c565b90506020020160208101906104709190610d8d565b90506000808273ffffffffffffffffffffffffffffffffffffffff16631ad8b03b6040518163ffffffff1660e01b81526004016040805180830381865afa1580156104bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e39190610eab565b600480546040517f85b6672900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216928101929092526fffffffffffffffffffffffffffffffff808516602484015283166044830152929450909250908416906385b667299060640160408051808303816000875af115801561057d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a19190610eab565b505050505080806105b190610ede565b91505061043f565b505050565b6105c6610afb565b6105d06000610b7c565b565b3360009081526002602052604090205460ff1661061b576040517fcf1119ab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156105b957600083838381811061063a5761063a610e5c565b905060200201602081019061064f9190610d8d565b600480546040517f8206a4d10000000000000000000000000000000000000000000000000000000081527401000000000000000000000000000000000000000090910460ff16918101829052602481019190915290915073ffffffffffffffffffffffffffffffffffffffff821690638206a4d190604401600060405180830381600087803b1580156106e157600080fd5b505af11580156106f5573d6000803e3d6000fd5b5050505050808061070590610ede565b91505061061e565b600154339073ffffffffffffffffffffffffffffffffffffffff1681146107bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e6572000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6107c481610b7c565b50565b6107cf610afb565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61081e610afb565b6003546040517f8a7c195f00000000000000000000000000000000000000000000000000000000815262ffffff84166004820152600283900b602482015273ffffffffffffffffffffffffffffffffffffffff90911690638a7c195f90604401600060405180830381600087803b15801561089857600080fd5b505af11580156108ac573d6000803e3d6000fd5b505050505050565b6108bc610afb565b6001805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915561091f60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b61096c610afb565b73ffffffffffffffffffffffffffffffffffffffff821660008181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527f878d105ed19c01e992a54459c2f04ba19432ac45600b42ce340d034272207436910160405180910390a25050565b6109fe610afb565b6003546040517f13af403500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152909116906313af403590602401600060405180830381600087803b158015610a6b57600080fd5b505af1158015610a7f573d6000803e3d6000fd5b5050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107b2565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556107c481610a86565b600060208284031215610bbf57600080fd5b813560ff81168114610bd057600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610bfb57600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600060608486031215610c4457600080fd5b610c4d84610bd7565b925060208401359150604084013567ffffffffffffffff80821115610c7157600080fd5b818601915086601f830112610c8557600080fd5b813581811115610c9757610c97610c00565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610cdd57610cdd610c00565b81604052828152896020848701011115610cf657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60008060208385031215610d2b57600080fd5b823567ffffffffffffffff80821115610d4357600080fd5b818501915085601f830112610d5757600080fd5b813581811115610d6657600080fd5b8660208260051b8501011115610d7b57600080fd5b60209290920196919550909350505050565b600060208284031215610d9f57600080fd5b610bd082610bd7565b60008060408385031215610dbb57600080fd5b823562ffffff81168114610dce57600080fd5b91506020830135600281900b8114610de557600080fd5b809150509250929050565b60008060408385031215610e0357600080fd5b610e0c83610bd7565b915060208301358015158114610de557600080fd5b6000825160005b81811015610e425760208186018101518583015201610e28565b81811115610e51576000828501525b509190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80516fffffffffffffffffffffffffffffffff81168114610bfb57600080fd5b60008060408385031215610ebe57600080fd5b610ec783610e8b565b9150610ed560208401610e8b565b90509250929050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610f37577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea2646970667358221220114424c9378fd8a69f0c5cf9a4c8bfb01073dab0636fe6b18d65015675db28fc64736f6c634300080a0033

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

0000000000000000000000007812bcd0c0de8d15ff4c47391d2d9ae1b4de13f000000000000000000000000046b3fdf7b5cde91ac049936bf0bdb12c5d22202e000000000000000000000000d4777bd428e6eac069806ea581eb4806d22076730000000000000000000000000000000000000000000000000000000000000004

-----Decoded View---------------
Arg [0] : _operator (address): 0x7812BCD0c0De8D15Ff4C47391d2d9AE1B4DE13f0
Arg [1] : _factory (address): 0x46B3fDF7b5CDe91Ac049936bF0bDb12c5d22202e
Arg [2] : _maker (address): 0xd4777Bd428e6eAc069806eA581EB4806D2207673
Arg [3] : _protocolFee (uint8): 4

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000007812bcd0c0de8d15ff4c47391d2d9ae1b4de13f0
Arg [1] : 00000000000000000000000046b3fdf7b5cde91ac049936bf0bdb12c5d22202e
Arg [2] : 000000000000000000000000d4777bd428e6eac069806ea581eb4806d2207673
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000004


Deployed Bytecode Sourcemap

15851:3324:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17210:194;;;;;;:::i;:::-;;:::i;:::-;;15920:20;;;;;;;;;;;;464:42:1;452:55;;;434:74;;422:2;407:18;15920:20:0;;;;;;;;19005:167;;;;;;:::i;:::-;;:::i;18356:305::-;;;;;;:::i;:::-;;:::i;15112:39::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3012:14:1;;3005:22;2987:41;;2975:2;2960:18;15112:39:0;2847:187:1;12183:103:0;;;:::i;17886:245::-;;;;;;:::i;:::-;;:::i;14765:210::-;;;:::i;11535:87::-;11581:7;11608:6;;;11535:87;;15945:24;;;;;;;;;;;;;;;3211:4:1;3199:17;;;3181:36;;3169:2;3154:18;15945:24:0;3039:184:1;17593:80:0;;;;;;:::i;:::-;;:::i;15883:32::-;;;;;;;;;16565:146;;;;;;:::i;:::-;;:::i;13853:101::-;13933:13;;;;13853:101;;14153:181;;;;;;:::i;:::-;;:::i;15428:156::-;;;;;;:::i;:::-;;:::i;16850:120::-;;;;;;:::i;:::-;;:::i;17210:194::-;11421:13;:11;:13::i;:::-;17296:17:::1;::::0;::::1;::::0;;:62:::1;;;17334:1;17318:12;:17;;;;:39;;;;;17355:2;17339:12;:18;;;;17318:39;17280:85;;;::::0;::::1;;17372:11;:26:::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;17210:194::o;19005:167::-;11421:13;:11;:13::i;:::-;19097:12:::1;19115:2;:7;;19130:6;19138:4;19115:28;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19096:47;;;19158:7;19150:16;;;::::0;::::1;;19089:83;19005:167:::0;;;:::o;18356:305::-;15235:10;15227:19;;;;:7;:19;;;;;;;;15222:46;;15255:13;;;;;;;;;;;;;;15222:46;18436:9:::1;18431:225;18451:16:::0;;::::1;18431:225;;;18483:19;18520:5;;18526:1;18520:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;18483:46;;18539:15;18556::::0;18575:4:::1;:17;;;:19;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18624:5;::::0;;18603:45:::1;::::0;;;;:20:::1;18624:5:::0;;::::1;18603:45:::0;;::::1;5601:74:1::0;;;;5694:34;5764:15;;;5744:18;;;5737:43;5816:15;;5796:18;;;5789:43;18538:56:0;;-1:-1:-1;18538:56:0;;-1:-1:-1;18603:20:0;;::::1;::::0;::::1;::::0;5574:18:1;;18603:45:0::1;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;18474:182;;;18469:3;;;;;:::i;:::-;;;;18431:225;;;;18356:305:::0;;:::o;12183:103::-;11421:13;:11;:13::i;:::-;12248:30:::1;12275:1;12248:18;:30::i;:::-;12183:103::o:0;17886:245::-;15235:10;15227:19;;;;:7;:19;;;;;;;;15222:46;;15255:13;;;;;;;;;;;;;;15222:46;17971:9:::1;17966:160;17986:16:::0;;::::1;17966:160;;;18018:19;18055:5;;18061:1;18055:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;18093:11;::::0;;18073:45:::1;::::0;;;;18093:11;;;::::1;;;18073:45:::0;;::::1;6363:36:1::0;;;6415:18;;;6408:45;;;;18018:46:0;;-1:-1:-1;18073:19:0::1;::::0;::::1;::::0;::::1;::::0;6336:18:1;;18073:45:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18009:117;18004:3;;;;;:::i;:::-;;;;17966:160;;14765:210:::0;13933:13;;818:10;;14860:24;13933:13;14860:24;;14852:78;;;;;;;6666:2:1;14852:78:0;;;6648:21:1;6705:2;6685:18;;;6678:30;6744:34;6724:18;;;6717:62;6815:11;6795:18;;;6788:39;6844:19;;14852:78:0;;;;;;;;;14941:26;14960:6;14941:18;:26::i;:::-;14801:174;14765:210::o;17593:80::-;11421:13;:11;:13::i;:::-;17653:5:::1;:14:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;17593:80::o;16565:146::-;11421:13;:11;:13::i;:::-;16663:7:::1;::::0;16645:60:::1;::::0;;;;7072:8:1;7060:21;;16645:60:0::1;::::0;::::1;7042:40:1::0;7129:1;7118:21;;;7098:18;;;7091:49;16663:7:0::1;::::0;;::::1;::::0;16645:42:::1;::::0;7015:18:1;;16645:60:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16565:146:::0;;:::o;14153:181::-;11421:13;:11;:13::i;:::-;14243::::1;:24:::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;14308:7:::1;11581::::0;11608:6;;;;11535:87;14308:7:::1;14283:43;;;;;;;;;;;;14153:181:::0;:::o;15428:156::-;11421:13;:11;:13::i;:::-;15508::::1;::::0;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;;;:25;;;::::1;::::0;::::1;;::::0;;::::1;::::0;;;15549:27;;2987:41:1;;;15549:27:0::1;::::0;2960:18:1;15549:27:0::1;;;;;;;15428:156:::0;;:::o;16850:120::-;11421:13;:11;:13::i;:::-;16937:7:::1;::::0;16919:45:::1;::::0;;;;16937:7:::1;452:55:1::0;;;16919:45:0::1;::::0;::::1;434:74:1::0;16937:7:0;;::::1;::::0;16919:35:::1;::::0;407:18:1;;16919:45:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16850:120:::0;:::o;12802:191::-;12876:16;12895:6;;;12912:17;;;;;;;;;;12945:40;;12895:6;;;;;;;12945:40;;12876:16;12945:40;12865:128;12802:191;:::o;11700:132::-;11581:7;11608:6;11764:23;11608:6;818:10;11764:23;11756:68;;;;;;;7353:2:1;11756:68:0;;;7335:21:1;;;7372:18;;;7365:30;7431:34;7411:18;;;7404:62;7483:18;;11756:68:0;7151:356:1;14524:156:0;14614:13;14607:20;;;;;;14638:34;14663:8;14638:24;:34::i;14:269:1:-;71:6;124:2;112:9;103:7;99:23;95:32;92:52;;;140:1;137;130:12;92:52;179:9;166:23;229:4;222:5;218:16;211:5;208:27;198:55;;249:1;246;239:12;198:55;272:5;14:269;-1:-1:-1;;;14:269:1:o;519:196::-;587:20;;647:42;636:54;;626:65;;616:93;;705:1;702;695:12;616:93;519:196;;;:::o;720:184::-;772:77;769:1;762:88;869:4;866:1;859:15;893:4;890:1;883:15;909:1122;995:6;1003;1011;1064:2;1052:9;1043:7;1039:23;1035:32;1032:52;;;1080:1;1077;1070:12;1032:52;1103:29;1122:9;1103:29;:::i;:::-;1093:39;;1179:2;1168:9;1164:18;1151:32;1141:42;;1234:2;1223:9;1219:18;1206:32;1257:18;1298:2;1290:6;1287:14;1284:34;;;1314:1;1311;1304:12;1284:34;1352:6;1341:9;1337:22;1327:32;;1397:7;1390:4;1386:2;1382:13;1378:27;1368:55;;1419:1;1416;1409:12;1368:55;1455:2;1442:16;1477:2;1473;1470:10;1467:36;;;1483:18;;:::i;:::-;1617:2;1611:9;1679:4;1671:13;;1522:66;1667:22;;;1691:2;1663:31;1659:40;1647:53;;;1715:18;;;1735:22;;;1712:46;1709:72;;;1761:18;;:::i;:::-;1801:10;1797:2;1790:22;1836:2;1828:6;1821:18;1876:7;1871:2;1866;1862;1858:11;1854:20;1851:33;1848:53;;;1897:1;1894;1887:12;1848:53;1953:2;1948;1944;1940:11;1935:2;1927:6;1923:15;1910:46;1998:1;1993:2;1988;1980:6;1976:15;1972:24;1965:35;2019:6;2009:16;;;;;;;909:1122;;;;;:::o;2036:615::-;2122:6;2130;2183:2;2171:9;2162:7;2158:23;2154:32;2151:52;;;2199:1;2196;2189:12;2151:52;2239:9;2226:23;2268:18;2309:2;2301:6;2298:14;2295:34;;;2325:1;2322;2315:12;2295:34;2363:6;2352:9;2348:22;2338:32;;2408:7;2401:4;2397:2;2393:13;2389:27;2379:55;;2430:1;2427;2420:12;2379:55;2470:2;2457:16;2496:2;2488:6;2485:14;2482:34;;;2512:1;2509;2502:12;2482:34;2565:7;2560:2;2550:6;2547:1;2543:14;2539:2;2535:23;2531:32;2528:45;2525:65;;;2586:1;2583;2576:12;2525:65;2617:2;2609:11;;;;;2639:6;;-1:-1:-1;2036:615:1;;-1:-1:-1;;;;2036:615:1:o;2656:186::-;2715:6;2768:2;2756:9;2747:7;2743:23;2739:32;2736:52;;;2784:1;2781;2774:12;2736:52;2807:29;2826:9;2807:29;:::i;3484:443::-;3549:6;3557;3610:2;3598:9;3589:7;3585:23;3581:32;3578:52;;;3626:1;3623;3616:12;3578:52;3665:9;3652:23;3715:8;3708:5;3704:20;3697:5;3694:31;3684:59;;3739:1;3736;3729:12;3684:59;3762:5;-1:-1:-1;3819:2:1;3804:18;;3791:32;3865:1;3854:22;;;3842:35;;3832:63;;3891:1;3888;3881:12;3832:63;3914:7;3904:17;;;3484:443;;;;;:::o;3932:347::-;3997:6;4005;4058:2;4046:9;4037:7;4033:23;4029:32;4026:52;;;4074:1;4071;4064:12;4026:52;4097:29;4116:9;4097:29;:::i;:::-;4087:39;;4176:2;4165:9;4161:18;4148:32;4223:5;4216:13;4209:21;4202:5;4199:32;4189:60;;4245:1;4242;4235:12;4284:426;4413:3;4451:6;4445:13;4476:1;4486:129;4500:6;4497:1;4494:13;4486:129;;;4598:4;4582:14;;;4578:25;;4572:32;4559:11;;;4552:53;4515:12;4486:129;;;4633:6;4630:1;4627:13;4624:48;;;4668:1;4659:6;4654:3;4650:16;4643:27;4624:48;-1:-1:-1;4688:16:1;;;;;4284:426;-1:-1:-1;;4284:426:1:o;4715:184::-;4767:77;4764:1;4757:88;4864:4;4861:1;4854:15;4888:4;4885:1;4878:15;4904:192;4983:13;;5036:34;5025:46;;5015:57;;5005:85;;5086:1;5083;5076:12;5101:293;5180:6;5188;5241:2;5229:9;5220:7;5216:23;5212:32;5209:52;;;5257:1;5254;5247:12;5209:52;5280:40;5310:9;5280:40;:::i;:::-;5270:50;;5339:49;5384:2;5373:9;5369:18;5339:49;:::i;:::-;5329:59;;5101:293;;;;;:::o;5843:349::-;5882:3;5913:66;5906:5;5903:77;5900:257;;;6013:77;6010:1;6003:88;6114:4;6111:1;6104:15;6142:4;6139:1;6132:15;5900:257;-1:-1:-1;6184:1:1;6173:13;;5843:349::o

Swarm Source

ipfs://114424c9378fd8a69f0c5cf9a4c8bfb01073dab0636fe6b18d65015675db28fc

Block Transaction 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

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.