ETH Price: $1,955.06 (+0.31%)
Gas: 0.22 Gwei
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

ContractCreator

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Pool Profile243039532026-01-24 10:07:2337 days ago1769249243IN
0xeE5413f0...33CdF0572
0 ETH0.0000060.06100454
Set Pool Profile243039352026-01-24 10:03:4737 days ago1769249027IN
0xeE5413f0...33CdF0572
0 ETH0.000004550.0580672
Set Pool Profile243039052026-01-24 9:57:4737 days ago1769248667IN
0xeE5413f0...33CdF0572
0 ETH0.000004550.04629699
Set Pool Profile243038922026-01-24 9:55:1137 days ago1769248511IN
0xeE5413f0...33CdF0572
0 ETH0.000003740.04775339
Set Pool Profile243038862026-01-24 9:53:5937 days ago1769248439IN
0xeE5413f0...33CdF0572
0 ETH0.000004730.04811019
Set Pool Profile243038822026-01-24 9:53:1137 days ago1769248391IN
0xeE5413f0...33CdF0572
0 ETH0.000004790.04876062
Set Pool Profile243038752026-01-24 9:51:4737 days ago1769248307IN
0xeE5413f0...33CdF0572
0 ETH0.000004390.04464068
Set Pool Profile243038482026-01-24 9:46:2337 days ago1769247983IN
0xeE5413f0...33CdF0572
0 ETH0.000004320.04398116
Set Pool Profile243038392026-01-24 9:44:3537 days ago1769247875IN
0xeE5413f0...33CdF0572
0 ETH0.000001580.04090467
Set Pool Profile243038332026-01-24 9:43:2337 days ago1769247803IN
0xeE5413f0...33CdF0572
0 ETH0.000004240.04310875
Set Pool Profile243038292026-01-24 9:42:3537 days ago1769247755IN
0xeE5413f0...33CdF0572
0 ETH0.000002680.04574476
Set Pool Profile243038222026-01-24 9:41:1137 days ago1769247671IN
0xeE5413f0...33CdF0572
0 ETH0.000003370.04298497
Set Pool Profile243037942026-01-24 9:35:3537 days ago1769247335IN
0xeE5413f0...33CdF0572
0 ETH0.000002730.03479634
Set Pool Profile243037352026-01-24 9:23:4737 days ago1769246627IN
0xeE5413f0...33CdF0572
0 ETH0.000002830.03606418
Set Pool Profile243030932026-01-24 7:14:4738 days ago1769238887IN
0xeE5413f0...33CdF0572
0 ETH0.000003240.03301277
Set Pool Profile243030232026-01-24 7:00:4738 days ago1769238047IN
0xeE5413f0...33CdF0572
0 ETH0.000003580.03643438
Set Pool Profile243030112026-01-24 6:58:2338 days ago1769237903IN
0xeE5413f0...33CdF0572
0 ETH0.000003830.038969
Set Pool Profile243030062026-01-24 6:57:2338 days ago1769237843IN
0xeE5413f0...33CdF0572
0 ETH0.000003410.03465023
Set Pool Profile243029942026-01-24 6:54:5938 days ago1769237699IN
0xeE5413f0...33CdF0572
0 ETH0.000002950.03765713
Set Pool Profile243029892026-01-24 6:53:5938 days ago1769237639IN
0xeE5413f0...33CdF0572
0 ETH0.00000280.03570874
Set Pool Profile243029212026-01-24 6:40:2338 days ago1769236823IN
0xeE5413f0...33CdF0572
0 ETH0.000002910.03711111
Set Pool Profile243029162026-01-24 6:39:2338 days ago1769236763IN
0xeE5413f0...33CdF0572
0 ETH0.000002610.03333898
Set Pool Profile243028902026-01-24 6:34:1138 days ago1769236451IN
0xeE5413f0...33CdF0572
0 ETH0.000002490.03171881

Advanced mode:
Parent Transaction Hash Method Block
From
To
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CurvePoolRegistry

Compiler Version
v0.8.33+commit.64118f21

Optimization Enabled:
Yes with 20 runs

Other Settings:
default evmVersion, MIT license
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.33;

import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";

/**
 *⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
 *⠀⠀⠀⠀⠈⢻⣿⠛⠻⢷⣄⠀⠀ ⣴⡟⠛⠛⣷⠀ ⠘⣿⡿⠛⠛⢿⡇⠀⠀⠀⠀
 *⠀⠀⠀⠀⠀⢸⣿⠀⠀ ⠈⣿⡄⠀⠿⣧⣄⡀ ⠉⠀⠀ ⣿⣧⣀⣀⡀⠀⠀⠀⠀⠀
 *⠀⠀⠀⠀⠀⢸⣿⠀⠀ ⢀⣿⠃ ⣀ ⠈⠉⠻⣷⡄⠀ ⣿⡟⠉⠉⠁⠀⠀⠀⠀⠀
 *⠀⠀⠀⠀⢠⣼⣿⣤⣴⠿⠋⠀ ⠀⢿⣦⣤⣴⡿⠁ ⢠⣿⣷⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
 *
 *      - Defining Successful Future -
 *
 * @title CurvePoolRegistry
 * @author Andrei Averin — CTO dsf.finance
 * @notice Centralized, owner-controlled registry for whitelisting safe and verified Curve pools.
 * @dev
 * - Intended to be consumed by aggregator modules (e.g., CurveDexModule).
 * - Stores:
 *    (1) Per-(tokenA, tokenB) allowlist of pools (strict routing allowlist).
 *    (2) Minimal per-pool call profile for `exchange(...)` (non-underlying branch).
 * - Pair allowlist is keyed by `keccak256(sorted(tokenA, tokenB))`.
 * - Admin (owner) can atomically set/clear allowlists and update per-pool profiles.
 * - The profile exposes three booleans:
 *      `exIndexUint`             : true => `exchange(uint256,uint256,...)`, false => `exchange(int128,int128,...)`
 *      `exHasEthFlag`            : true => non-underlying `exchange(..., bool use_eth)` (5-arg/6-arg forms)
 *      `exHasReceiver`           : true => presence of receiver overloads `exchange(..., address)` / `exchange(..., bool, address)`
 *      `exHasReceiverUnderlying` : true => underlying receiver overloads exist
 * - The registry also provides view-only probe helpers to heuristically detect a profile off-chain.
 */
 
/**
 * @title IPoolRegistry
 * @notice Interface for accessing whitelisted pools and their call profiles.
 */
interface IPoolRegistry {
    /**
     * @notice Minimal call profile for non-underlying `exchange(...)`.
     * @dev
     * - `exIndexUint`             selects indices type: uint256 vs int128.
     * - `exHasEthFlag`            indicates existence of a trailing `bool use_eth` argument in non-underlying exchange.
     * - `exHasReceiver`           indicates presence of receiver overloads (`..., address)` or `(..., bool, address)`.
     * - `exHasReceiverUnderlying` covers `exchange_underlying(..., address)`/`(..., bool, address)` presence.
     */
    struct PoolProfile {
        // exchange signatures (non-underlying branch)
        bool exIndexUint;             // true: exchange(uint256,uint256,...) ; false: exchange(int128,int128,...)
        bool exHasEthFlag;            // true: non-underlying exchange has trailing `bool use_eth`
        bool exHasReceiver;           // true: non-underlying exchange has overloads with `address receiver`
        bool exHasReceiverUnderlying; // underlying: has receiver overloads
    }

    /**
     * @notice Get allowlisted pools for a (tokenA, tokenB) pair.
     * @param  tokenA First token.
     * @param  tokenB Second token.
     * @return Array of allowlisted pool addresses under the canonical pair key.
     */
    function getVerifiedPools(address tokenA, address tokenB) external view returns (address[] memory);
    
    /**
     * @notice Get a saved profile for a pool.
     * @param  pool    Pool address.
     * @return exists  True if a profile is set in the registry.
     * @return profile The stored PoolProfile ({exIndexUint, exHasEthFlag, exHasReceiver}).
     */
    function getPoolProfile(address pool) external view returns (bool exists, PoolProfile memory profile);

    /**
     * @notice Returns stored profile flags for a pool as separate booleans (gas-cheaper in some cases).
     * @param  pool                    Pool address.
     * @return exists                  True if an explicit profile exists.
     * @return exIndexUint             See `PoolProfile.exIndexUint`.
     * @return exHasEthFlag            See `PoolProfile.exHasEthFlag`.
     * @return exHasReceiver           See `PoolProfile.exHasReceiver`.
     * @return exHasReceiverUnderlying See `PoolProfile.exHasReceiverUnderlying`.
     */
    function getPoolProfileFlags(address pool)
        external
        view
        returns (
            bool exists,
            bool exIndexUint,
            bool exHasEthFlag,
            bool exHasReceiver,
            bool exHasReceiverUnderlying
        );
}

/**
 * @title  CurvePoolRegistry
 * @notice Stores and manages the list of officially verified Curve pools for specific token pairs.
 * @dev    Owner is the only actor allowed to mutate storage (allowlists and profiles).
 */
contract CurvePoolRegistry is Ownable, IPoolRegistry {
    // events 
    event VerifiedPoolsSet(bytes32 indexed pairKey, address tokenA, address tokenB, address[] pools);
    event VerifiedPoolsCleared(bytes32 indexed pairKey, address tokenA, address tokenB);
    event PoolProfileSet(
        address indexed pool,
        bool exIndexUint,
        bool exHasEthFlag,
        bool exHasReceiver,
        bool exHasReceiverUnderlying
    );
    event PoolProfileCleared(address indexed pool);
    event DefaultProfileSet(PoolProfile profile);

    // probe constants
    uint256 private constant DX  = 1;
    uint256 private constant MIN = 0;

    // selectors
    // coins(...)
    bytes4 private constant COINS_U256        = bytes4(keccak256("coins(uint256)"));
    bytes4 private constant COINS_I128        = bytes4(keccak256("coins(int128)"));
    // non-underlying exchange base
    bytes4 private constant EX_U256_ETH       = bytes4(keccak256("exchange(uint256,uint256,uint256,uint256,bool)"));
    bytes4 private constant EX_U256           = bytes4(keccak256("exchange(uint256,uint256,uint256,uint256)"));
    bytes4 private constant EX_I128_ETH       = bytes4(keccak256("exchange(int128,int128,uint256,uint256,bool)"));
    bytes4 private constant EX_I128           = bytes4(keccak256("exchange(int128,int128,uint256,uint256)"));
    // non-underlying exchange with receiver
    bytes4 private constant EX_U256_RCV       = bytes4(keccak256("exchange(uint256,uint256,uint256,uint256,address)"));
    bytes4 private constant EX_U256_ETH_RCV   = bytes4(keccak256("exchange(uint256,uint256,uint256,uint256,bool,address)"));
    bytes4 private constant EX_I128_RCV       = bytes4(keccak256("exchange(int128,int128,uint256,uint256,address)"));


    // key: keccak256(sorted(tokenA, tokenB)) => allowlisted pools
    mapping(bytes32 => address[]) public verifiedPools;

    // per-pool profile
    mapping(address => bool) internal exIndexUintOf;     // true => exchange(uint256,...)
    mapping(address => bool) internal exHasEthFlagOf;    // true => has trailing `bool use_eth`
    mapping(address => bool) internal exHasReceiverOf;   // true => has overloads with `address receiver`
    mapping(address => bool) internal exHasReceiverUnderlyingOf;
    mapping(address => bool) internal hasProfile;

    PoolProfile private _defaultProfile = PoolProfile({
        exIndexUint: true,
        exHasEthFlag: true,
        exHasReceiver: false,
        exHasReceiverUnderlying: false
    });

    constructor() Ownable(msg.sender) {}

    /**
     * @inheritdoc IPoolRegistry
     */
    function getVerifiedPools(address tokenA, address tokenB) 
        external 
        view 
        override 
        returns (address[] memory) 
    {
        return verifiedPools[_pairKey(tokenA, tokenB)];
    }

    /**
     * @inheritdoc IPoolRegistry
     */
    function getPoolProfile(address pool)
        external
        view
        override
        returns (bool exists, PoolProfile memory profile)
    {
        if (hasProfile[pool]) {
            profile = PoolProfile({
                exIndexUint:   exIndexUintOf[pool],
                exHasEthFlag:  exHasEthFlagOf[pool],
                exHasReceiver: exHasReceiverOf[pool],
                exHasReceiverUnderlying:   exHasReceiverUnderlyingOf[pool]
            });
            return (true, profile);
        }
        return (false, _defaultProfile);
    }
    
    /**
     * @inheritdoc IPoolRegistry
     */
    function getPoolProfileFlags(address pool)
        external
        view
        override
        returns (
            bool exists,
            bool exIndexUint,
            bool exHasEthFlag,
            bool exHasReceiver,
            bool exHasReceiverUnderlying
        )
    {
        if (hasProfile[pool]) {
            return (
                true,
                exIndexUintOf[pool],
                exHasEthFlagOf[pool],
                exHasReceiverOf[pool],
                exHasReceiverUnderlyingOf[pool]
            );
        }
        IPoolRegistry.PoolProfile memory p = _defaultProfile;
        return (false, p.exIndexUint, p.exHasEthFlag, p.exHasReceiver, p.exHasReceiverUnderlying);
    }

    
    /**
     * @notice Returns the current default profile that is used when a pool has no explicit profile.
     * @return profile The default `PoolProfile`.
     */
    function getDefaultProfile() external view returns (PoolProfile memory) {
        return _defaultProfile;
    }

    /**
     * @notice Add/replace the allowlist of pools for a (tokenA, tokenB) pair.
     * @dev    Replaces the full list atomically.
     * @param  tokenA First token
     * @param  tokenB Second token
     * @param  pools  New full list of allowlisted pools (non-empty)
     */
    function setVerifiedPools(address tokenA, address tokenB, address[] calldata pools)
        external
        onlyOwner
    {
        require(pools.length > 0, "Registry: empty list");
        bytes32 key = _pairKey(tokenA, tokenB);
        verifiedPools[key] = pools;
        emit VerifiedPoolsSet(key, tokenA, tokenB, pools);
    }
    
    /**
     * @notice Clear the allowlist for a (tokenA, tokenB) pair.
     * @param  tokenA First token
     * @param  tokenB Second token
     */
    function clearVerifiedPools(address tokenA, address tokenB)
        external
        onlyOwner
    {
        bytes32 key = _pairKey(tokenA, tokenB);
        delete verifiedPools[key];
        emit VerifiedPoolsCleared(key, tokenA, tokenB);
    }

    /**
     * @notice Set/update a pool profile (three flags).
     * @param  pool                     Pool address (non-zero)
     * @param  exIndexUint              true => `exchange(uint256,...)`; false => `exchange(int128,...)`
     * @param  exHasEthFlag             true => non-underlying has trailing `bool use_eth`
     * @param  exHasReceiver            true => receiver overloads exist (`..., address)` / `(..., bool, address)`
     * @param  exHasReceiverUnderlying  true => underlying receiver overloads exist
     */
    function setPoolProfile(
        address pool,
        bool exIndexUint,
        bool exHasEthFlag,
        bool exHasReceiver,
        bool exHasReceiverUnderlying
    )
        external
        onlyOwner
    {
        require(pool != address(0), "Registry: zero pool");
        exIndexUintOf[pool]               = exIndexUint;
        exHasEthFlagOf[pool]              = exHasEthFlag;
        exHasReceiverOf[pool]             = exHasReceiver;
        exHasReceiverUnderlyingOf[pool]   = exHasReceiverUnderlying;
        hasProfile[pool]                  = true;
        emit PoolProfileSet(pool, exIndexUint, exHasEthFlag, exHasReceiver, exHasReceiverUnderlying);
    }

    /**
     * @notice Batch set/update pool profiles (arrays must be aligned).
     * @param  pools                    Pool addresses
     * @param  exIndexUint              Flags for indices type per pool
     * @param  exHasEthFlag             Flags for `use_eth` presence per pool
     * @param  exHasReceiver            Flags for receiver overloads per pool
     * @param exHasReceiverUnderlying   Flags for presence of receiver overloads per pool (underlying).
     */
    function setPoolProfiles(
        address[] calldata pools,
        bool[]    calldata exIndexUint,
        bool[]    calldata exHasEthFlag,
        bool[]    calldata exHasReceiver,
        bool[]    calldata exHasReceiverUnderlying
    )
        external
        onlyOwner
    {
        uint256 n = pools.length;
        require(n > 0, "Registry: empty arrays");
        require(
            exIndexUint.length == n &&
            exHasEthFlag.length == n &&
            exHasReceiver.length == n &&
            exHasReceiverUnderlying.length == n,
            "Registry: bad arrays"
        );

        for (uint256 i; i < n; ++i) {
            address pool = pools[i];
            require(pool != address(0), "Registry: zero pool");
            exIndexUintOf[pool]             = exIndexUint[i];
            exHasEthFlagOf[pool]            = exHasEthFlag[i];
            exHasReceiverOf[pool]           = exHasReceiver[i];
            exHasReceiverUnderlyingOf[pool] = exHasReceiverUnderlying[i];
            hasProfile[pool]                = true;
            emit PoolProfileSet(pool, exIndexUint[i], exHasEthFlag[i], exHasReceiver[i], exHasReceiverUnderlying[i]);
        }
    }

    /**
     * @notice Delete a saved profile for a pool.
     * @dev    After deletion, calling modules may fall back to defaults or skip routing.
     * @param  pool Pool address
     */
    function clearPoolProfile(address pool) external onlyOwner {
        delete exIndexUintOf[pool];
        delete exHasEthFlagOf[pool];
        delete exHasReceiverOf[pool];
        delete exHasReceiverUnderlyingOf[pool]; // NEW
        delete hasProfile[pool];
        emit PoolProfileCleared(pool);
    }

    /**
     * @notice Sets the global default profile returned when a pool lacks an explicit profile.
     * @dev    Emits {DefaultProfileSet}. Parameter order matches {setPoolProfile} to reduce misconfiguration risk.
     * @param  exIndexUint                true => `exchange(uint256,...)`; false => `exchange(int128,...)`
     * @param  exHasEthFlag               true => non-underlying has trailing `bool use_eth`
     * @param  exHasReceiver              true => non-underlying receiver overloads exist
     * @param  exHasReceiverUnderlying    true => underlying receiver overloads exist
     */
    function setDefaultProfile(
        bool exIndexUint,
        bool exHasEthFlag,
        bool exHasReceiver,
        bool exHasReceiverUnderlying
    ) external onlyOwner {
        _defaultProfile = PoolProfile({
            exIndexUint: exIndexUint,
            exHasEthFlag: exHasEthFlag,
            exHasReceiver: exHasReceiver,
            exHasReceiverUnderlying: exHasReceiverUnderlying
        });
        emit DefaultProfileSet(_defaultProfile);
    }

    /**
     * @notice Directional pair key (order-dependent).
     * @dev    tokenIn -> tokenOut matters:
     *         key(a,b) != key(b,a)
     * @param  a    Token address
     * @param  b    Token address
     * @return Pair key `keccak256(a, b)`
     */
    function _pairKey(address a, address b) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked(a, b));
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;

import {Context} from "../utils/Context.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.
 *
 * The initial owner is set to the address provided by the deployer. 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;

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

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

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    /**
     * @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 {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling 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 {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _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);
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

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

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 20
  },
  "viaIR": true,
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "remappings": []
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"components":[{"internalType":"bool","name":"exIndexUint","type":"bool"},{"internalType":"bool","name":"exHasEthFlag","type":"bool"},{"internalType":"bool","name":"exHasReceiver","type":"bool"},{"internalType":"bool","name":"exHasReceiverUnderlying","type":"bool"}],"indexed":false,"internalType":"struct IPoolRegistry.PoolProfile","name":"profile","type":"tuple"}],"name":"DefaultProfileSet","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":"pool","type":"address"}],"name":"PoolProfileCleared","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"exIndexUint","type":"bool"},{"indexed":false,"internalType":"bool","name":"exHasEthFlag","type":"bool"},{"indexed":false,"internalType":"bool","name":"exHasReceiver","type":"bool"},{"indexed":false,"internalType":"bool","name":"exHasReceiverUnderlying","type":"bool"}],"name":"PoolProfileSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"pairKey","type":"bytes32"},{"indexed":false,"internalType":"address","name":"tokenA","type":"address"},{"indexed":false,"internalType":"address","name":"tokenB","type":"address"}],"name":"VerifiedPoolsCleared","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"pairKey","type":"bytes32"},{"indexed":false,"internalType":"address","name":"tokenA","type":"address"},{"indexed":false,"internalType":"address","name":"tokenB","type":"address"},{"indexed":false,"internalType":"address[]","name":"pools","type":"address[]"}],"name":"VerifiedPoolsSet","type":"event"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"clearPoolProfile","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"}],"name":"clearVerifiedPools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getDefaultProfile","outputs":[{"components":[{"internalType":"bool","name":"exIndexUint","type":"bool"},{"internalType":"bool","name":"exHasEthFlag","type":"bool"},{"internalType":"bool","name":"exHasReceiver","type":"bool"},{"internalType":"bool","name":"exHasReceiverUnderlying","type":"bool"}],"internalType":"struct IPoolRegistry.PoolProfile","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProfile","outputs":[{"internalType":"bool","name":"exists","type":"bool"},{"components":[{"internalType":"bool","name":"exIndexUint","type":"bool"},{"internalType":"bool","name":"exHasEthFlag","type":"bool"},{"internalType":"bool","name":"exHasReceiver","type":"bool"},{"internalType":"bool","name":"exHasReceiverUnderlying","type":"bool"}],"internalType":"struct IPoolRegistry.PoolProfile","name":"profile","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProfileFlags","outputs":[{"internalType":"bool","name":"exists","type":"bool"},{"internalType":"bool","name":"exIndexUint","type":"bool"},{"internalType":"bool","name":"exHasEthFlag","type":"bool"},{"internalType":"bool","name":"exHasReceiver","type":"bool"},{"internalType":"bool","name":"exHasReceiverUnderlying","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"}],"name":"getVerifiedPools","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"exIndexUint","type":"bool"},{"internalType":"bool","name":"exHasEthFlag","type":"bool"},{"internalType":"bool","name":"exHasReceiver","type":"bool"},{"internalType":"bool","name":"exHasReceiverUnderlying","type":"bool"}],"name":"setDefaultProfile","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"bool","name":"exIndexUint","type":"bool"},{"internalType":"bool","name":"exHasEthFlag","type":"bool"},{"internalType":"bool","name":"exHasReceiver","type":"bool"},{"internalType":"bool","name":"exHasReceiverUnderlying","type":"bool"}],"name":"setPoolProfile","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"pools","type":"address[]"},{"internalType":"bool[]","name":"exIndexUint","type":"bool[]"},{"internalType":"bool[]","name":"exHasEthFlag","type":"bool[]"},{"internalType":"bool[]","name":"exHasReceiver","type":"bool[]"},{"internalType":"bool[]","name":"exHasReceiverUnderlying","type":"bool[]"}],"name":"setPoolProfiles","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"setVerifiedPools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"verifiedPools","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60803460cb57331560b8575f8054336001600160a01b0319821681178355916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3608081016001600160401b0381118282101760a4575f916060916040526001815260016020820152826040820152015263ff0000001961010162ffffff19600754161716600755604051610f6c90816100d08239f35b634e487b7160e01b5f52604160045260245ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fdfe60a06040526004361015610011575f80fd5b5f3560e01c806319e803c0146109965780631b920507146109665780631ea946b4146108985780632f673c4d146105a4578063434c91e3146104a2578063715018a61461045e5780638da5cb5b146104375780639630f1dd146103ea578063bb62a944146102fe578063d0cd2f93146102b4578063e2bffd2b14610214578063ef136bfc146101d7578063f2fde38b146101655763f3be488e146100b3575f80fd5b34610161576040366003190112610161576100cc610b5e565b6100d4610b74565b906100dd610e95565b6100e78282610ebb565b91825f52600160205260405f208054905f81558161013f575b604080516001600160a01b0380871682528516602082015286917f731c0ee5887b58bc0e2319a2e2ef976da93bd72a73067208a6bdc3f29f9ab47291a2005b5f5260205f205f5b8281106101545750610100565b5f82820155600101610147565b5f80fd5b346101615760203660031901126101615761017e610b5e565b610186610e95565b6001600160a01b031680156101c4575f80546001600160a01b03198116831782556001600160a01b0316905f516020610f175f395f51905f529080a3005b631e4fbdf760e01b5f525f60045260245ffd5b346101615760203660031901126101615760a06102126101fd6101f8610b5e565b610dfb565b60409291925192151583526020830190610bba565bf35b346101615760203660031901126101615761022d610b5e565b610235610e95565b6001600160a01b03165f818152600260209081526040808320805460ff1990811690915560038352818420805482169055600483528184208054821690556005835281842080548216905560069092528220805490911690557fea746679c6ad45960c4c036f97446756abcd86f8985d6e83cfa3085f253507a59080a2005b34610161576040366003190112610161576024356004355f52600160205260405f20908154811015610161575f91825260209182902001546040516001600160a01b039091168152f35b346101615760a036600319011261016157610317610b5e565b61031f610be5565b90610328610bf4565b610330610c03565b92608435928315158403610161575f516020610ef75f395f51905f52936103e591610359610e95565b6001600160a01b03169561036e871515610ceb565b865f5260026020526103838460405f20610d3a565b865f5260036020526103988560405f20610d3a565b865f5260046020526103ad8160405f20610d3a565b865f5260056020526103c28260405f20610d3a565b865f52600660205260405f20600160ff1982541617905560405194859485610d4b565b0390a2005b346101615760203660031901126101615760a061040d610408610b5e565b610d6e565b92604092919251941515855215156020850152151560408401521515606083015215156080820152f35b34610161575f366003190112610161575f546040516001600160a01b039091168152602090f35b34610161575f36600319011261016157610476610e95565b5f80546001600160a01b0319811682556001600160a01b03165f516020610f175f395f51905f528280a3005b346101615760803660031901126101615760043580151580910361016157608063ff00000060ff7f48409c1a16bd76b982cabba3909885fc5614732ee14d68eda9086a1dd66cd87e93606062ff00006104f9610be5565b92610502610bf4565b9061050b610c03565b94610514610e95565b6040519061052182610c26565b828252151592836020830152151595866040830152151594859101528580196007541691161760075561ff006007549160081b169063ffffff0019161794859260181b169260101b161717806007558160405193165f1715158352818160081c1615156020840152818160101c161515604084015260181c1615156060820152a1005b346101615760a0366003190112610161576004356001600160401b038111610161576105d4903690600401610b8a565b6024356001600160401b038111610161576105f3903690600401610b8a565b9190926044356001600160401b03811161016157610615903690600401610b8a565b9290916064356001600160401b03811161016157610637903690600401610b8a565b956084356001600160401b03811161016157610657903690600401610b8a565b959094610662610e95565b801561085a5780831480610851575b80610848575b8061083f575b15610803575f5b81811061068d57005b6001600160a01b036106a0828489610cc7565b6106a990610c12565b1660805260805115156106bb90610ceb565b6106c681858d610cc7565b6106cf90610d2d565b6080515f52600260205260405f20906106e791610d3a565b6106f2818a85610cc7565b6106fb90610d2d565b6080515f52600360205260405f209061071391610d3a565b61071e818b87610cc7565b61072790610d2d565b6080515f52600460205260405f209061073f91610d3a565b61074a818989610cc7565b61075390610d2d565b6080515f52600560205260405f209061076b91610d3a565b6080515f52600660205260405f2060ff19815416600117905561078f81858d610cc7565b61079890610d2d565b6107a3828b86610cc7565b6107ac90610d2d565b906107b8838d89610cc7565b6107c190610d2d565b6107cc848c8c610cc7565b6107d590610d2d565b91604051928392608051956107ea9385610d4b565b035f516020610ef75f395f51905f5291a2600101610684565b60405162461bcd60e51b815260206004820152601460248201527352656769737472793a206261642061727261797360601b6044820152606490fd5b5080871461067d565b50808914610677565b50808814610671565b60405162461bcd60e51b815260206004820152601660248201527552656769737472793a20656d7074792061727261797360501b6044820152606490fd5b34610161576040366003190112610161576108c26108b4610b5e565b6108bc610b74565b90610ebb565b5f52600160205260405f20604051806020835491828152019081935f5260205f20905f5b81811061094757505050816108fc910382610c41565b604051918291602083019060208452518091526040830191905f5b818110610925575050500390f35b82516001600160a01b0316845285945060209384019390920191600101610917565b82546001600160a01b03168452602090930192600192830192016108e6565b34610161575f3660031901126101615761097e610c62565b506080610989610c86565b6102126040518092610bba565b34610161576060366003190112610161576109af610b5e565b6109b7610b74565b6044356001600160401b038111610161576109d6903690600401610b8a565b6109de610e95565b8015610b22576109ee8385610ebb565b93845f52600160205260405f206001600160401b038311610b0e57600160401b8311610b0e578054838255808410610ae4575b5090829184905f5260205f20905f5b848110610ac2575050604080516001600160a01b0393841681529690921660208701525060609085018190528401526080830191905f905b808210610a9857857f2816aeba324eef1136173fb42311b8f5841214856c197ceb10737afe6fe7fa6386860387a2005b90919283359060018060a01b03821680920361016157602081600193829352019401920190610a68565b81929394506020610ad4600193610c12565b8583015586959493019101610a30565b815f52838060205f20019103905f5b828110610b01575050610a21565b5f82820155600101610af3565b634e487b7160e01b5f52604160045260245ffd5b60405162461bcd60e51b8152602060048201526014602482015273149959da5cdd1c9e4e88195b5c1d1e481b1a5cdd60621b6044820152606490fd5b600435906001600160a01b038216820361016157565b602435906001600160a01b038216820361016157565b9181601f84011215610161578235916001600160401b038311610161576020808501948460051b01011161016157565b6060809180511515845260208101511515602085015260408101511515604085015201511515910152565b60243590811515820361016157565b60443590811515820361016157565b60643590811515820361016157565b356001600160a01b03811681036101615790565b608081019081106001600160401b03821117610b0e57604052565b90601f801991011681019081106001600160401b03821117610b0e57604052565b60405190610c6f82610c26565b5f6060838281528260208201528260408201520152565b60405190610c9382610c26565b81606060ff60075481811615158452818160081c1615156020850152818160101c161515604085015260181c161515910152565b9190811015610cd75760051b0190565b634e487b7160e01b5f52603260045260245ffd5b15610cf257565b60405162461bcd60e51b8152602060048201526013602482015272149959da5cdd1c9e4e881e995c9bc81c1bdbdb606a1b6044820152606490fd5b3580151581036101615790565b9060ff801983541691151516179055565b901515815290151560208201529015156040820152901515606082015260800190565b6001600160a01b03165f8181526006602052604090205460ff16610dba5750610d95610c86565b90815115159160208101511515916060604083015115159201511515905f9493929190565b5f90815260026020908152604080832054600383528184205460048452828520546005909452919093205460019460ff948516949283169383169290911690565b610e03610c62565b506001600160a01b03165f8181526006602052604090205460ff16610e3057505f90610e2d610c86565b90565b5f9081526002602090815260408083205460038352818420546004845282852054600590945293829020549151949360ff928316938316929081169116610e7686610c26565b1515855215156020850152151560408401521515606083015260019190565b5f546001600160a01b03163303610ea857565b63118cdaa760e01b5f523360045260245ffd5b6040516001600160601b0319606092831b8116602083019081529390921b909116603482015260288152610ef0604882610c41565b5190209056fe8209612c049af1b2a61980da61d80bab51ada3898004cac6a8c8d3eebccad3c48be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a264697066735822122091c93a21ce99ca60d50850f3ed1704d78f0fa9f8e86803c0f5a66c0f6100d93b64736f6c63430008210033

Deployed Bytecode

0x60a06040526004361015610011575f80fd5b5f3560e01c806319e803c0146109965780631b920507146109665780631ea946b4146108985780632f673c4d146105a4578063434c91e3146104a2578063715018a61461045e5780638da5cb5b146104375780639630f1dd146103ea578063bb62a944146102fe578063d0cd2f93146102b4578063e2bffd2b14610214578063ef136bfc146101d7578063f2fde38b146101655763f3be488e146100b3575f80fd5b34610161576040366003190112610161576100cc610b5e565b6100d4610b74565b906100dd610e95565b6100e78282610ebb565b91825f52600160205260405f208054905f81558161013f575b604080516001600160a01b0380871682528516602082015286917f731c0ee5887b58bc0e2319a2e2ef976da93bd72a73067208a6bdc3f29f9ab47291a2005b5f5260205f205f5b8281106101545750610100565b5f82820155600101610147565b5f80fd5b346101615760203660031901126101615761017e610b5e565b610186610e95565b6001600160a01b031680156101c4575f80546001600160a01b03198116831782556001600160a01b0316905f516020610f175f395f51905f529080a3005b631e4fbdf760e01b5f525f60045260245ffd5b346101615760203660031901126101615760a06102126101fd6101f8610b5e565b610dfb565b60409291925192151583526020830190610bba565bf35b346101615760203660031901126101615761022d610b5e565b610235610e95565b6001600160a01b03165f818152600260209081526040808320805460ff1990811690915560038352818420805482169055600483528184208054821690556005835281842080548216905560069092528220805490911690557fea746679c6ad45960c4c036f97446756abcd86f8985d6e83cfa3085f253507a59080a2005b34610161576040366003190112610161576024356004355f52600160205260405f20908154811015610161575f91825260209182902001546040516001600160a01b039091168152f35b346101615760a036600319011261016157610317610b5e565b61031f610be5565b90610328610bf4565b610330610c03565b92608435928315158403610161575f516020610ef75f395f51905f52936103e591610359610e95565b6001600160a01b03169561036e871515610ceb565b865f5260026020526103838460405f20610d3a565b865f5260036020526103988560405f20610d3a565b865f5260046020526103ad8160405f20610d3a565b865f5260056020526103c28260405f20610d3a565b865f52600660205260405f20600160ff1982541617905560405194859485610d4b565b0390a2005b346101615760203660031901126101615760a061040d610408610b5e565b610d6e565b92604092919251941515855215156020850152151560408401521515606083015215156080820152f35b34610161575f366003190112610161575f546040516001600160a01b039091168152602090f35b34610161575f36600319011261016157610476610e95565b5f80546001600160a01b0319811682556001600160a01b03165f516020610f175f395f51905f528280a3005b346101615760803660031901126101615760043580151580910361016157608063ff00000060ff7f48409c1a16bd76b982cabba3909885fc5614732ee14d68eda9086a1dd66cd87e93606062ff00006104f9610be5565b92610502610bf4565b9061050b610c03565b94610514610e95565b6040519061052182610c26565b828252151592836020830152151595866040830152151594859101528580196007541691161760075561ff006007549160081b169063ffffff0019161794859260181b169260101b161717806007558160405193165f1715158352818160081c1615156020840152818160101c161515604084015260181c1615156060820152a1005b346101615760a0366003190112610161576004356001600160401b038111610161576105d4903690600401610b8a565b6024356001600160401b038111610161576105f3903690600401610b8a565b9190926044356001600160401b03811161016157610615903690600401610b8a565b9290916064356001600160401b03811161016157610637903690600401610b8a565b956084356001600160401b03811161016157610657903690600401610b8a565b959094610662610e95565b801561085a5780831480610851575b80610848575b8061083f575b15610803575f5b81811061068d57005b6001600160a01b036106a0828489610cc7565b6106a990610c12565b1660805260805115156106bb90610ceb565b6106c681858d610cc7565b6106cf90610d2d565b6080515f52600260205260405f20906106e791610d3a565b6106f2818a85610cc7565b6106fb90610d2d565b6080515f52600360205260405f209061071391610d3a565b61071e818b87610cc7565b61072790610d2d565b6080515f52600460205260405f209061073f91610d3a565b61074a818989610cc7565b61075390610d2d565b6080515f52600560205260405f209061076b91610d3a565b6080515f52600660205260405f2060ff19815416600117905561078f81858d610cc7565b61079890610d2d565b6107a3828b86610cc7565b6107ac90610d2d565b906107b8838d89610cc7565b6107c190610d2d565b6107cc848c8c610cc7565b6107d590610d2d565b91604051928392608051956107ea9385610d4b565b035f516020610ef75f395f51905f5291a2600101610684565b60405162461bcd60e51b815260206004820152601460248201527352656769737472793a206261642061727261797360601b6044820152606490fd5b5080871461067d565b50808914610677565b50808814610671565b60405162461bcd60e51b815260206004820152601660248201527552656769737472793a20656d7074792061727261797360501b6044820152606490fd5b34610161576040366003190112610161576108c26108b4610b5e565b6108bc610b74565b90610ebb565b5f52600160205260405f20604051806020835491828152019081935f5260205f20905f5b81811061094757505050816108fc910382610c41565b604051918291602083019060208452518091526040830191905f5b818110610925575050500390f35b82516001600160a01b0316845285945060209384019390920191600101610917565b82546001600160a01b03168452602090930192600192830192016108e6565b34610161575f3660031901126101615761097e610c62565b506080610989610c86565b6102126040518092610bba565b34610161576060366003190112610161576109af610b5e565b6109b7610b74565b6044356001600160401b038111610161576109d6903690600401610b8a565b6109de610e95565b8015610b22576109ee8385610ebb565b93845f52600160205260405f206001600160401b038311610b0e57600160401b8311610b0e578054838255808410610ae4575b5090829184905f5260205f20905f5b848110610ac2575050604080516001600160a01b0393841681529690921660208701525060609085018190528401526080830191905f905b808210610a9857857f2816aeba324eef1136173fb42311b8f5841214856c197ceb10737afe6fe7fa6386860387a2005b90919283359060018060a01b03821680920361016157602081600193829352019401920190610a68565b81929394506020610ad4600193610c12565b8583015586959493019101610a30565b815f52838060205f20019103905f5b828110610b01575050610a21565b5f82820155600101610af3565b634e487b7160e01b5f52604160045260245ffd5b60405162461bcd60e51b8152602060048201526014602482015273149959da5cdd1c9e4e88195b5c1d1e481b1a5cdd60621b6044820152606490fd5b600435906001600160a01b038216820361016157565b602435906001600160a01b038216820361016157565b9181601f84011215610161578235916001600160401b038311610161576020808501948460051b01011161016157565b6060809180511515845260208101511515602085015260408101511515604085015201511515910152565b60243590811515820361016157565b60443590811515820361016157565b60643590811515820361016157565b356001600160a01b03811681036101615790565b608081019081106001600160401b03821117610b0e57604052565b90601f801991011681019081106001600160401b03821117610b0e57604052565b60405190610c6f82610c26565b5f6060838281528260208201528260408201520152565b60405190610c9382610c26565b81606060ff60075481811615158452818160081c1615156020850152818160101c161515604085015260181c161515910152565b9190811015610cd75760051b0190565b634e487b7160e01b5f52603260045260245ffd5b15610cf257565b60405162461bcd60e51b8152602060048201526013602482015272149959da5cdd1c9e4e881e995c9bc81c1bdbdb606a1b6044820152606490fd5b3580151581036101615790565b9060ff801983541691151516179055565b901515815290151560208201529015156040820152901515606082015260800190565b6001600160a01b03165f8181526006602052604090205460ff16610dba5750610d95610c86565b90815115159160208101511515916060604083015115159201511515905f9493929190565b5f90815260026020908152604080832054600383528184205460048452828520546005909452919093205460019460ff948516949283169383169290911690565b610e03610c62565b506001600160a01b03165f8181526006602052604090205460ff16610e3057505f90610e2d610c86565b90565b5f9081526002602090815260408083205460038352818420546004845282852054600590945293829020549151949360ff928316938316929081169116610e7686610c26565b1515855215156020850152151560408401521515606083015260019190565b5f546001600160a01b03163303610ea857565b63118cdaa760e01b5f523360045260245ffd5b6040516001600160601b0319606092831b8116602083019081529390921b909116603482015260288152610ef0604882610c41565b5190209056fe8209612c049af1b2a61980da61d80bab51ada3898004cac6a8c8d3eebccad3c48be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a264697066735822122091c93a21ce99ca60d50850f3ed1704d78f0fa9f8e86803c0f5a66c0f6100d93b64736f6c63430008210033

Deployed Bytecode Sourcemap

5051:10608:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5051:10608:2;;;;;;:::i;:::-;;;:::i;:::-;1500:62:0;;;:::i;:::-;10576:24:2;;;;:::i;:::-;5051:10608;;;;10618:13;5051:10608;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5051:10608:2;;;;;;;;;;;;;10652:41;;;5051:10608;;;;;;;;;;;;;;;;;;;;;;;10618:13;5051:10608;;;;;;;;;;;;;-1:-1:-1;;5051:10608:2;;;;;;:::i;:::-;1500:62:0;;:::i;:::-;-1:-1:-1;;;;;5051:10608:2;2627:22:0;;2623:91;;5051:10608:2;;;-1:-1:-1;;;;;;5051:10608:2;;;;;;-1:-1:-1;;;;;5051:10608:2;;-1:-1:-1;;;;;;;;;;;3052:40:0;5051:10608:2;3052:40:0;5051:10608:2;2623:91:0;2672:31;;;5051:10608:2;2672:31:0;5051:10608:2;;;;;2672:31:0;5051:10608:2;;;;;;-1:-1:-1;;5051:10608:2;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;5051:10608:2;;;;;;:::i;:::-;1500:62:0;;:::i;:::-;-1:-1:-1;;;;;5051:10608:2;;;;;13922:13;5051:10608;;;;;;;;;;-1:-1:-1;;5051:10608:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14036:25;5051:10608;;;;;;;;;;;14092:10;5051:10608;;;;;;;;;;;;14124:24;;5051:10608;14124:24;5051:10608;;;;;;;-1:-1:-1;;5051:10608:2;;;;;;;;;;;;;;;;;;;6905:50;;;;;5051:10608;;;;;;;;;;;;;-1:-1:-1;;;;;5051:10608:2;;;;;;;;;;;;-1:-1:-1;;5051:10608:2;;;;;;:::i;:::-;;;:::i;:::-;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1500:62:0;11842:87:2;1500:62:0;;;:::i;:::-;-1:-1:-1;;;;;5051:10608:2;;11478:50;11486:18;;;11478:50;:::i;:::-;5051:10608;;;11539:13;5051:10608;;11539:47;5051:10608;;;;11539:47;:::i;:::-;5051:10608;;;11597:14;5051:10608;;11597:48;5051:10608;;;;11597:48;:::i;:::-;5051:10608;;;;;;11656:49;5051:10608;;;;11656:49;:::i;:::-;5051:10608;;;11716:25;5051:10608;;11716:59;5051:10608;;;;11716:59;:::i;:::-;5051:10608;;;11786:10;5051:10608;;;;;11822:4;5051:10608;;;;;;;;;;11842:87;;;;;:::i;:::-;;;;5051:10608;;;;;;;-1:-1:-1;;5051:10608:2;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5051:10608:2;;;;;;;;-1:-1:-1;;;;;5051:10608:2;;;;;;;;;;;;;;-1:-1:-1;;5051:10608:2;;;;1500:62:0;;:::i;:::-;5051:10608:2;;;-1:-1:-1;;;;;;5051:10608:2;;;;-1:-1:-1;;;;;5051:10608:2;-1:-1:-1;;;;;;;;;;;5051:10608:2;;3052:40:0;5051:10608:2;;;;;;;-1:-1:-1;;5051:10608:2;;;;;;;;;;;;;;;;;15206:34;5051:10608;;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;1500:62:0;;;:::i;:::-;5051:10608:2;;;;;;:::i;:::-;;;;;;14980:210;;5051:10608;14980:210;;5051:10608;;;14980:210;;5051:10608;14980:210;;5051:10608;;;14980:210;;;;5051:10608;;;;14962:228;5051:10608;;;;;14962:228;5051:10608;;14962:228;5051:10608;;;;;;;;;;;;;;;;;;;;;;;14962:228;5051:10608;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15206:34;5051:10608;;;;;;;-1:-1:-1;;5051:10608:2;;;;;;-1:-1:-1;;;;;5051:10608:2;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;5051:10608:2;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;5051:10608:2;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;5051:10608:2;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;5051:10608:2;;;;;;;;;;;:::i;:::-;1500:62:0;;;;;:::i;:::-;12770:5:2;;5051:10608;;12835:23;;;:64;;;5051:10608;12835:106;;;5051:10608;12835:158;;;5051:10608;;;;;13070:5;;;;;;5051:10608;13077:3;-1:-1:-1;;;;;13112:8:2;;;;;:::i;:::-;;;;:::i;:::-;5051:10608;;;;;13143:18;;13135:50;;;:::i;:::-;13234:14;;;;;:::i;:::-;;;;:::i;:::-;5051:10608;;;;13200:13;5051:10608;;;;;13200:48;;;;:::i;:::-;13297:15;;;;;:::i;:::-;;;;:::i;:::-;5051:10608;;;;13263:14;5051:10608;;;;;13263:49;;;;:::i;:::-;13361:16;;;;;:::i;:::-;;;;:::i;:::-;5051:10608;;;;;;;;;;13327:50;;;;:::i;:::-;13426:26;;;;;:::i;:::-;;;;:::i;:::-;5051:10608;;;;13392:25;5051:10608;;;;;13392:60;;;;:::i;:::-;5051:10608;;;;13467:10;5051:10608;;;;;;;;;;;;;;13546:14;;;;;:::i;:::-;;;;:::i;:::-;13562:15;;;;;:::i;:::-;;;;:::i;:::-;13579:16;;;;;;:::i;:::-;;;;:::i;:::-;13597:26;;;;;:::i;:::-;;;;:::i;:::-;5051:10608;;;13525:99;;;;;;;;;;:::i;:::-;;-1:-1:-1;;;;;;;;;;;13525:99:2;;5051:10608;;13059:9;;5051:10608;;;-1:-1:-1;;;5051:10608:2;;;;;;;;;;;;-1:-1:-1;;;5051:10608:2;;;;;;;12835:158;12958:35;;;;12835:158;;:106;12916:25;;;;12835:106;;:64;12875:24;;;;12835:64;;5051:10608;;;-1:-1:-1;;;5051:10608:2;;;;;;;;;;;;-1:-1:-1;;;5051:10608:2;;;;;;;;;;;;;-1:-1:-1;;5051:10608:2;;;;7881:24;5051:10608;;:::i;:::-;;;:::i;:::-;7881:24;;:::i;:::-;5051:10608;;7867:13;5051:10608;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5051:10608:2;;;;;-1:-1:-1;5051:10608:2;;;;;;;;;7867:13;5051:10608;;;;;;-1:-1:-1;;;;;5051:10608:2;;;;;;;;7867:13;5051:10608;;;;;;;;;;;;;-1:-1:-1;;5051:10608:2;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;5051:10608:2;;;;;;:::i;:::-;;;:::i;:::-;;;-1:-1:-1;;;;;5051:10608:2;;;;;;;;;;;:::i;:::-;1500:62:0;;:::i;:::-;10088:16:2;;5051:10608;;10154:24;;;;:::i;:::-;5051:10608;;;;10189:13;5051:10608;;;;;-1:-1:-1;;;;;5051:10608:2;;;;-1:-1:-1;;;5051:10608:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5051:10608:2;;;-1:-1:-1;;;;;5051:10608:2;;;;;;;;;;;;;-1:-1:-1;5051:10608:2;;;;;;;;;;;;;;;-1:-1:-1;;5051:10608:2;;;;;;10231:44;;;;;;;5051:10608;;;;;;;;;;;;;;;;;;;;;;10189:13;5051:10608;;;;;;;;;;;;;;;;;;;;10189:13;5051:10608;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10189:13;5051:10608;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5051:10608:2;;;;;;;;;;;;-1:-1:-1;;;5051:10608:2;;;;;;;;;;;-1:-1:-1;;;;;5051:10608:2;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;5051:10608:2;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;5051:10608:2;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;-1:-1:-1;;;;;5051:10608:2;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;5051:10608:2;;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;5051:10608:2;;;;;;;:::o;:::-;;;;;;;:::i;:::-;-1:-1:-1;5051:10608:2;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;9622:15;5051:10608;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;5051:10608:2;;;;;;;;;;;;-1:-1:-1;;;5051:10608:2;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8613:734::-;-1:-1:-1;;;;;5051:10608:2;-1:-1:-1;5051:10608:2;;;8920:10;5051:10608;;;;;;;;8916:261;;5051:10608;;;:::i;:::-;;;;;;9280:14;5051:10608;9280:14;;5051:10608;;;9296:15;9313:25;5051:10608;9296:15;;5051:10608;;;9313:25;;5051:10608;;;9250:89;-1:-1:-1;9250:89:2;;;;8613:734;:::o;8916:261::-;-1:-1:-1;5051:10608:2;;;9002:13;5051:10608;;;;;;;;;9040:14;5051:10608;;;;;;9079:15;5051:10608;;;;;;9119:25;5051:10608;;;;;;;;8979:4;;5051:10608;;;;;;;;;;;;;;;;8953:212::o;7974:575::-;5051:10608;;:::i;:::-;-1:-1:-1;;;;;;5051:10608:2;;;;;8141:10;5051:10608;;;;;;;;8137:363;;8510:31;5051:10608;;;;:::i;:::-;7974:575;:::o;8137:363::-;5051:10608;;;;8230:13;5051:10608;;;;;;;;;8283:14;5051:10608;;;;;;8337:15;5051:10608;;;;;;8404:25;5051:10608;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;8184:267;;5051:10608;;;;8184:267;;5051:10608;;;8184:267;;;5051:10608;8474:4;8466:22;;:::o;1796:162:0:-;1710:6;5051:10608:2;-1:-1:-1;;;;;5051:10608:2;735:10:1;1855:23:0;1851:101;;1796:162::o;1851:101::-;1901:40;;;1710:6;1901:40;735:10:1;1901:40:0;5051:10608:2;;1710:6:0;1901:40;15525:131:2;5051:10608;;-1:-1:-1;;;;;;5051:10608:2;;;;;;15625:22;;;5051:10608;;;;;;;;;;;;;;15625:22;;;;;5051:10608;15625:22;:::i;:::-;5051:10608;15615:33;;15525:131;:::o

Swarm Source

ipfs://91c93a21ce99ca60d50850f3ed1704d78f0fa9f8e86803c0f5a66c0f6100d93b

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
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.