POL Price: $0.713526 (+2.02%)
 

Overview

POL Balance

Polygon PoS Chain LogoPolygon PoS Chain LogoPolygon PoS Chain Logo90.022386539360417771 POL

POL Value

$64.23 (@ $0.71/POL)

Token Holdings

Multichain Info

Transaction Hash
Method
Block
From
To
Fill Quote Token...651649072024-12-06 19:28:5215 mins ago1733513332IN
0x00000000...34E3010E2
0 POL0.0052820831.77
Fill Quote Token...651642132024-12-06 19:03:3740 mins ago1733511817IN
0x00000000...34E3010E2
0 POL0.0076651737.2
Fill Quote Token...651640422024-12-06 18:57:3346 mins ago1733511453IN
0x00000000...34E3010E2
0 POL0.0052242633.35970395
Fill Quote Token...651628332024-12-06 18:12:201 hr ago1733508740IN
0x00000000...34E3010E2
0 POL0.0074688637.16
Fill Quote Token...651625232024-12-06 18:01:181 hr ago1733508078IN
0x00000000...34E3010E2
0 POL0.0093164937.7
Fill Quote Token...651624972024-12-06 18:00:241 hr ago1733508024IN
0x00000000...34E3010E2
0 POL0.0140249139.65
Fill Quote Token...651623572024-12-06 17:54:541 hr ago1733507694IN
0x00000000...34E3010E2
0 POL0.0130242635.2672463
Fill Quote Token...651607332024-12-06 16:56:222 hrs ago1733504182IN
0x00000000...34E3010E2
0 POL0.0182647266.72874328
Fill Quote Token...651605052024-12-06 16:48:142 hrs ago1733503694IN
0x00000000...34E3010E2
0 POL0.012570165.20439148
Fill Quote Token...651598972024-12-06 16:26:393 hrs ago1733502399IN
0x00000000...34E3010E2
0 POL0.0133003680.02
Fill Quote Token...651598762024-12-06 16:25:553 hrs ago1733502355IN
0x00000000...34E3010E2
0 POL0.0467507280.02
Fill Quote Token...651598342024-12-06 16:24:253 hrs ago1733502265IN
0x00000000...34E3010E2
0 POL0.0106873566.76718397
Fill Quote Eth T...651597832024-12-06 16:22:373 hrs ago1733502157IN
0x00000000...34E3010E2
0.915 POL0.0104365761.82
Fill Quote Token...651594652024-12-06 16:11:183 hrs ago1733501478IN
0x00000000...34E3010E2
0 POL0.0101840762.52
Fill Quote Token...651594632024-12-06 16:11:143 hrs ago1733501474IN
0x00000000...34E3010E2
0 POL0.0166650862.52
Fill Quote Eth T...651591742024-12-06 16:01:003 hrs ago1733500860IN
0x00000000...34E3010E2
97 POL0.0101624472.31
Fill Quote Token...651583522024-12-06 15:31:494 hrs ago1733499109IN
0x00000000...34E3010E2
0 POL0.0255485270.73
Fill Quote Token...651582942024-12-06 15:29:454 hrs ago1733498985IN
0x00000000...34E3010E2
0 POL0.0259582670.73
Fill Quote Eth T...651581132024-12-06 15:23:214 hrs ago1733498601IN
0x00000000...34E3010E2
31 POL0.0339946379.19376019
Fill Quote Token...651577392024-12-06 15:10:054 hrs ago1733497805IN
0x00000000...34E3010E2
0 POL0.04992493119.01
Fill Quote Token...651576312024-12-06 15:06:154 hrs ago1733497575IN
0x00000000...34E3010E2
0 POL0.05062175102.21
Fill Quote Token...651571342024-12-06 14:48:374 hrs ago1733496517IN
0x00000000...34E3010E2
0 POL0.0143806178.38
Fill Quote Token...651562602024-12-06 14:17:085 hrs ago1733494628IN
0x00000000...34E3010E2
0 POL0.04552132100.45
Fill Quote Eth T...651560012024-12-06 14:07:565 hrs ago1733494076IN
0x00000000...34E3010E2
100 POL0.01598651100.45
Fill Quote Token...651557282024-12-06 13:58:145 hrs ago1733493494IN
0x00000000...34E3010E2
0 POL0.0143161281.9
View all transactions

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
651649072024-12-06 19:28:5215 mins ago1733513332
0x00000000...34E3010E2
9.28575293 POL
651649072024-12-06 19:28:5215 mins ago1733513332
0x00000000...34E3010E2
9.36535847 POL
651642132024-12-06 19:03:3740 mins ago1733511817
0x00000000...34E3010E2
4.07809106 POL
651642132024-12-06 19:03:3740 mins ago1733511817
0x00000000...34E3010E2
4.113052 POL
651640422024-12-06 18:57:3346 mins ago1733511453
0x00000000...34E3010E2
20.54409997 POL
651640422024-12-06 18:57:3346 mins ago1733511453
0x00000000...34E3010E2
20.72022186 POL
651624972024-12-06 18:00:241 hr ago1733508024
0x00000000...34E3010E2
8.36521097 POL
651624972024-12-06 18:00:241 hr ago1733508024
0x00000000...34E3010E2
8.43692483 POL
651615592024-12-06 17:25:512 hrs ago1733505951
0x00000000...34E3010E2
71.41820944 POL
651615592024-12-06 17:25:512 hrs ago1733505951
0x00000000...34E3010E2
72.03046842 POL
651598342024-12-06 16:24:253 hrs ago1733502265
0x00000000...34E3010E2
0.43649257 POL
651598342024-12-06 16:24:253 hrs ago1733502265
0x00000000...34E3010E2
0.44023456 POL
651597832024-12-06 16:22:373 hrs ago1733502157
0x00000000...34E3010E2
0.9072225 POL
651594652024-12-06 16:11:183 hrs ago1733501478
0x00000000...34E3010E2
2.91742705 POL
651594652024-12-06 16:11:183 hrs ago1733501478
0x00000000...34E3010E2
2.94243777 POL
651594632024-12-06 16:11:143 hrs ago1733501474
0x00000000...34E3010E2
1,752.67660368 POL
651594632024-12-06 16:11:143 hrs ago1733501474
0x00000000...34E3010E2
1,767.70207128 POL
651591742024-12-06 16:01:003 hrs ago1733500860
0x00000000...34E3010E2
96.1755 POL
651581132024-12-06 15:23:214 hrs ago1733498601
0x00000000...34E3010E2
30.7365 POL
651576312024-12-06 15:06:154 hrs ago1733497575
0x00000000...34E3010E2
6.17095414 POL
651576312024-12-06 15:06:154 hrs ago1733497575
0x00000000...34E3010E2
6.22385692 POL
651571342024-12-06 14:48:374 hrs ago1733496517
0x00000000...34E3010E2
3.46868751 POL
651571342024-12-06 14:48:374 hrs ago1733496517
0x00000000...34E3010E2
3.49842411 POL
651562602024-12-06 14:17:085 hrs ago1733494628
0x00000000...34E3010E2
23.17897134 POL
651562602024-12-06 14:17:085 hrs ago1733494628
0x00000000...34E3010E2
23.37768163 POL
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
RainbowRouter

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion
File 1 of 11 : RainbowRouter.sol
/*

                                                            ▐██▒           ███
                                            ,╓, ▄▄  ,▄▄▄,   .▄▄. ,╓, ▄▄▄   ██▌ ▄▄▄     ,▄▄▄,  ,╓╓   ╓╓   ,╓
                                            ██████ ███▀▀██⌐ ▐██⌐ ███▀▀███⌐ ████▀▀███ ╓██▀▀▀██▄`██▌ ▐██▌ ▐██
                                            ███    ▄▄█████▌ ▐██⌐ ██▌  ▐██▌ ██▌   ║██⌐███   ▓██ ╙██▄█▌██▄██⌐
                                            ██▌   ▐██▄▄███▌,▐██⌐ ██▌  ▐██▌ ███▓▄▄███ ╙██▄▄▄██▀  ║███¬╙███▌
                                            ╙╙└    ╙╙▀╙─╙▀▀└"╙╙` ╙╙└   ╙╙" ╙╙`╙╙▀▀└    ╙╙▀▀╙`    ╙╙└  ╙╙╙
                                            

        
                                            _," _   _"""ⁿ=-,  _
                                            ⌠            _    __"=.__
                                            ▐░......   _  _          "=._
                                            ▐░░░░░░░░░░░░░░░░.           "= _
                                            ╚╩╩╩╩╩╩δφφφφ░░░░░░░░░░░          >__
                                            ▐░░░░░░░░__ _ ╙╙╚╩φφ░░░░░░░        ^=_
                                            ▐░░░░░░░░░░░░░░░,░  `╙╠φ░░░░░░░       ⁿ
                                            ▐░░░░░░░░░░░░░░░░░░░░._ `╚Åφ░░░░░       " _
                                            ╚╠╠╠╠╠╠╠╬╬╬▒▒φ░░░░░░░░░░░░  ╙╠░░░░░       "
                                            ╚╝╝╝╝╝╝╝╬╬╬╠╢╬╠╬╠╬▒░░░░░░░░░░ "╚φ░░░░       ½_
                                            ▐░░░░░░░░░░;░╙╙╝╬╠╬╠╠▒▒░░░░░░░░_ ╚φ░░░░      "_
                                            ╚▒φφφ░░░░░░░░░░░░-╙╚╬╠╠╠╬▒░░░░░░░ `╠▒░░░░      ,
                                            ╞╬╬╬╠╠╠╬╬╬╬▒φ▒░░░░░░░╙╚╬╬╠╬▒▒░░░░░ .╙╠░░░░      ≥
                                            _▒░░░ΓΓ╙╙╙╚╩╬╠╬╠▒▒░░░░░░╙╬╬╠╬▒▒░░░░░' ╠▒░░░░     ≥
                                            `╙ⁿⁿ≈≈σ╓░ '╙╙╚╬╠╬▒░░░░░░╙╬╬╠╬▒░░░░░  ╠▒░░░░     [
                                                        _╙Θ░ ░╙╠╠╬╬▒░░░░░╬╠╠╠▒▒░░░░  ╠▒░░░░    '_
                                                        _╙φ░'╙╠╠╬▒░░░░░╟╠╠╠▒░░░░░ _╠▒░░░     ░_
                                                            _`φ ░╚╬╠╠▒░░░░║╠╠╠▒░░░░░.`╠░░░░     [
                                                            _╚░⌡╚╠╬╬▒░░░░╠╠╠╬▒░░░░░ ╠▒░░░░    ░
                                                                _╙░⌡╚╠╠╬▒░░░"▒╠╠╬▒░░░░ ⌠╠░░░░    ⌡_
                                                                ╠ ░╠╠╠╬▒░░░║╠╬╠╬▒░░░ _╠▒░░░     Γ
                                                                ▐░░░╠╠╠▒░░░╟╠╠╠╬▒░░░░ ╠▒░░░░    [
                                                                _░.░╠╠╠▒░░░▐╬╠╠╬▒░░░░[╠╬░░░░    │
                                                                _╙φ░╠╠╠╬▒░░▐╬╬╠╬╬▒░░░[╠╬░░░░  ░≥_
                                                                    ____ ____  __ _______ ____


    /$$$$$$                                           /$$$$$$                                                                /$$                        
    /$$__  $$                                         /$$__  $$                                                              | $$                        
    | $$  \__/ /$$  /$$  /$$  /$$$$$$   /$$$$$$       | $$  \ $$  /$$$$$$   /$$$$$$   /$$$$$$   /$$$$$$   /$$$$$$   /$$$$$$  /$$$$$$    /$$$$$$   /$$$$$$ 
    |  $$$$$$ | $$ | $$ | $$ |____  $$ /$$__  $$      | $$$$$$$$ /$$__  $$ /$$__  $$ /$$__  $$ /$$__  $$ /$$__  $$ |____  $$|_  $$_/   /$$__  $$ /$$__  $$
    \____  $$| $$ | $$ | $$  /$$$$$$$| $$  \ $$      | $$__  $$| $$  \ $$| $$  \ $$| $$  \__/| $$$$$$$$| $$  \ $$  /$$$$$$$  | $$    | $$  \ $$| $$  \__/
    /$$  \ $$| $$ | $$ | $$ /$$__  $$| $$  | $$      | $$  | $$| $$  | $$| $$  | $$| $$      | $$_____/| $$  | $$ /$$__  $$  | $$ /$$| $$  | $$| $$      
    |  $$$$$$/|  $$$$$/$$$$/|  $$$$$$$| $$$$$$$/      | $$  | $$|  $$$$$$$|  $$$$$$$| $$      |  $$$$$$$|  $$$$$$$|  $$$$$$$  |  $$$$/|  $$$$$$/| $$      
    \______/  \_____/\___/  \_______/| $$____/       |__/  |__/ \____  $$ \____  $$|__/       \_______/ \____  $$ \_______/   \___/   \______/ |__/      
                                    | $$                       /$$  \ $$ /$$  \ $$                     /$$  \ $$                                        
                                    | $$                      |  $$$$$$/|  $$$$$$/                    |  $$$$$$/                                        
                                    |__/                       \______/  \______/                      \______/                                         
                
     
*/

//SPDX-License-Identifier: GPL-3.0
pragma solidity =0.8.11;
import "@rari-capital/solmate/src/utils/SafeTransferLib.sol";
import "@rari-capital/solmate/src/tokens/ERC20.sol";
import "./routers/BaseAggregator.sol";

/// @title Rainbow swap aggregator contract
contract RainbowRouter is BaseAggregator {
    /// @dev The address that is the current owner of this contract
    address public owner;

    /// @dev Event emitted when the owner changes
    event OwnerChanged(address indexed newOwner, address indexed oldOwner);

    /// @dev Event emitted when a swap target gets added
    event SwapTargetAdded(address indexed target);

    /// @dev Event emitted when a swap target gets removed
    event SwapTargetRemoved(address indexed target);

    /// @dev Event emitted when token fees are withdrawn
    event TokenWithdrawn(
        address indexed token,
        address indexed target,
        uint256 amount
    );

    /// @dev Event emitted when ETH fees are withdrawn
    event EthWithdrawn(address indexed target, uint256 amount);

    /// @dev modifier that ensures only the owner is allowed to call a specific method
    modifier onlyOwner() {
        require(msg.sender == owner, "ONLY_OWNER");
        _;
    }

    constructor() {
        owner = msg.sender;
        status = 1;
    }

    /// @dev We don't want to accept any ETH, except refunds from aggregators
    /// or the owner (for testing purposes), which can also withdraw
    /// This is done by evaluating the value of status, which is set to 2
    /// only during swaps due to the "nonReentrant" modifier
    receive() external payable {
        require(status == 2 || msg.sender == owner, "NO_RECEIVE");
    }

    /// @dev method to add or remove swap targets from swapTargets
    /// This is required so we only approve "trusted" swap targets
    /// to transfer tokens out of this contract
    /// @param target address of the swap target to add
    /// @param add flag to add or remove the swap target
    function updateSwapTargets(address target, bool add) external onlyOwner {
        swapTargets[target] = add;
        if (add) {
            emit SwapTargetAdded(target);
        } else {
            emit SwapTargetRemoved(target);
        }
    }

    /// @dev method to withdraw ERC20 tokens (from the fees)
    /// @param token address of the token to withdraw
    /// @param to address that's receiving the tokens
    /// @param amount amount of tokens to withdraw
    function withdrawToken(
        address token,
        address to,
        uint256 amount
    ) external onlyOwner {
        require(to != address(0), "ZERO_ADDRESS");
        SafeTransferLib.safeTransfer(ERC20(token), to, amount);
        emit TokenWithdrawn(token, to, amount);
    }

    /// @dev method to withdraw ETH (from the fees)
    /// @param to address that's receiving the ETH
    /// @param amount amount of ETH to withdraw
    function withdrawEth(address to, uint256 amount) external onlyOwner {
        require(to != address(0), "ZERO_ADDRESS");
        SafeTransferLib.safeTransferETH(to, amount);
        emit EthWithdrawn(to, amount);
    }

    /// @dev Transfers ownership of the contract to a new account (`newOwner`).
    /// @param newOwner address of the new owner
    /// Can only be called by the current owner.
    function transferOwnership(address newOwner) external virtual onlyOwner {
        require(newOwner != address(0), "ZERO_ADDRESS");
        require(newOwner != owner, "SAME_OWNER");
        address previousOwner = owner;
        owner = newOwner;
        emit OwnerChanged(newOwner, previousOwner);
    }
}

File 2 of 11 : SafeTransferLib.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

import {ERC20} from "../tokens/ERC20.sol";

/// @notice Safe ETH and ERC20 transfer library that gracefully handles missing return values.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/SafeTransferLib.sol)
/// @author Modified from Gnosis (https://github.com/gnosis/gp-v2-contracts/blob/main/src/contracts/libraries/GPv2SafeERC20.sol)
/// @dev Use with caution! Some functions in this library knowingly create dirty bits at the destination of the free memory pointer.
library SafeTransferLib {
    /*///////////////////////////////////////////////////////////////
                            ETH OPERATIONS
    //////////////////////////////////////////////////////////////*/

    function safeTransferETH(address to, uint256 amount) internal {
        bool callStatus;

        assembly {
            // Transfer the ETH and store if it succeeded or not.
            callStatus := call(gas(), to, amount, 0, 0, 0, 0)
        }

        require(callStatus, "ETH_TRANSFER_FAILED");
    }

    /*///////////////////////////////////////////////////////////////
                           ERC20 OPERATIONS
    //////////////////////////////////////////////////////////////*/

    function safeTransferFrom(
        ERC20 token,
        address from,
        address to,
        uint256 amount
    ) internal {
        bool callStatus;

        assembly {
            // Get a pointer to some free memory.
            let freeMemoryPointer := mload(0x40)

            // Write the abi-encoded calldata to memory piece by piece:
            mstore(freeMemoryPointer, 0x23b872dd00000000000000000000000000000000000000000000000000000000) // Begin with the function selector.
            mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff)) // Mask and append the "from" argument.
            mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Mask and append the "to" argument.
            mstore(add(freeMemoryPointer, 68), amount) // Finally append the "amount" argument. No mask as it's a full 32 byte value.

            // Call the token and store if it succeeded or not.
            // We use 100 because the calldata length is 4 + 32 * 3.
            callStatus := call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)
        }

        require(didLastOptionalReturnCallSucceed(callStatus), "TRANSFER_FROM_FAILED");
    }

    function safeTransfer(
        ERC20 token,
        address to,
        uint256 amount
    ) internal {
        bool callStatus;

        assembly {
            // Get a pointer to some free memory.
            let freeMemoryPointer := mload(0x40)

            // Write the abi-encoded calldata to memory piece by piece:
            mstore(freeMemoryPointer, 0xa9059cbb00000000000000000000000000000000000000000000000000000000) // Begin with the function selector.
            mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Mask and append the "to" argument.
            mstore(add(freeMemoryPointer, 36), amount) // Finally append the "amount" argument. No mask as it's a full 32 byte value.

            // Call the token and store if it succeeded or not.
            // We use 68 because the calldata length is 4 + 32 * 2.
            callStatus := call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)
        }

        require(didLastOptionalReturnCallSucceed(callStatus), "TRANSFER_FAILED");
    }

    function safeApprove(
        ERC20 token,
        address to,
        uint256 amount
    ) internal {
        bool callStatus;

        assembly {
            // Get a pointer to some free memory.
            let freeMemoryPointer := mload(0x40)

            // Write the abi-encoded calldata to memory piece by piece:
            mstore(freeMemoryPointer, 0x095ea7b300000000000000000000000000000000000000000000000000000000) // Begin with the function selector.
            mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Mask and append the "to" argument.
            mstore(add(freeMemoryPointer, 36), amount) // Finally append the "amount" argument. No mask as it's a full 32 byte value.

            // Call the token and store if it succeeded or not.
            // We use 68 because the calldata length is 4 + 32 * 2.
            callStatus := call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)
        }

        require(didLastOptionalReturnCallSucceed(callStatus), "APPROVE_FAILED");
    }

    /*///////////////////////////////////////////////////////////////
                         INTERNAL HELPER LOGIC
    //////////////////////////////////////////////////////////////*/

    function didLastOptionalReturnCallSucceed(bool callStatus) private pure returns (bool success) {
        assembly {
            // Get how many bytes the call returned.
            let returnDataSize := returndatasize()

            // If the call reverted:
            if iszero(callStatus) {
                // Copy the revert message into memory.
                returndatacopy(0, 0, returnDataSize)

                // Revert with the same message.
                revert(0, returnDataSize)
            }

            switch returnDataSize
            case 32 {
                // Copy the return data into memory.
                returndatacopy(0, 0, returnDataSize)

                // Set success to whether it returned true.
                success := iszero(iszero(mload(0)))
            }
            case 0 {
                // There was no return data.
                success := 1
            }
            default {
                // It returned some malformed input.
                success := 0
            }
        }
    }
}

File 3 of 11 : ERC20.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol)
/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)
/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it.
abstract contract ERC20 {
    /*///////////////////////////////////////////////////////////////
                                  EVENTS
    //////////////////////////////////////////////////////////////*/

    event Transfer(address indexed from, address indexed to, uint256 amount);

    event Approval(address indexed owner, address indexed spender, uint256 amount);

    /*///////////////////////////////////////////////////////////////
                             METADATA STORAGE
    //////////////////////////////////////////////////////////////*/

    string public name;

    string public symbol;

    uint8 public immutable decimals;

    /*///////////////////////////////////////////////////////////////
                              ERC20 STORAGE
    //////////////////////////////////////////////////////////////*/

    uint256 public totalSupply;

    mapping(address => uint256) public balanceOf;

    mapping(address => mapping(address => uint256)) public allowance;

    /*///////////////////////////////////////////////////////////////
                             EIP-2612 STORAGE
    //////////////////////////////////////////////////////////////*/

    bytes32 public constant PERMIT_TYPEHASH =
        keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");

    uint256 internal immutable INITIAL_CHAIN_ID;

    bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR;

    mapping(address => uint256) public nonces;

    /*///////////////////////////////////////////////////////////////
                               CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    constructor(
        string memory _name,
        string memory _symbol,
        uint8 _decimals
    ) {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;

        INITIAL_CHAIN_ID = block.chainid;
        INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator();
    }

    /*///////////////////////////////////////////////////////////////
                              ERC20 LOGIC
    //////////////////////////////////////////////////////////////*/

    function approve(address spender, uint256 amount) public virtual returns (bool) {
        allowance[msg.sender][spender] = amount;

        emit Approval(msg.sender, spender, amount);

        return true;
    }

    function transfer(address to, uint256 amount) public virtual returns (bool) {
        balanceOf[msg.sender] -= amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(msg.sender, to, amount);

        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual returns (bool) {
        uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals.

        if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount;

        balanceOf[from] -= amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(from, to, amount);

        return true;
    }

    /*///////////////////////////////////////////////////////////////
                              EIP-2612 LOGIC
    //////////////////////////////////////////////////////////////*/

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) public virtual {
        require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED");

        // Unchecked because the only math done is incrementing
        // the owner's nonce which cannot realistically overflow.
        unchecked {
            bytes32 digest = keccak256(
                abi.encodePacked(
                    "\x19\x01",
                    DOMAIN_SEPARATOR(),
                    keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline))
                )
            );

            address recoveredAddress = ecrecover(digest, v, r, s);

            require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER");

            allowance[recoveredAddress][spender] = value;
        }

        emit Approval(owner, spender, value);
    }

    function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {
        return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator();
    }

    function computeDomainSeparator() internal view virtual returns (bytes32) {
        return
            keccak256(
                abi.encode(
                    keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
                    keccak256(bytes(name)),
                    keccak256("1"),
                    block.chainid,
                    address(this)
                )
            );
    }

    /*///////////////////////////////////////////////////////////////
                       INTERNAL MINT/BURN LOGIC
    //////////////////////////////////////////////////////////////*/

    function _mint(address to, uint256 amount) internal virtual {
        totalSupply += amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(address(0), to, amount);
    }

    function _burn(address from, uint256 amount) internal virtual {
        balanceOf[from] -= amount;

        // Cannot underflow because a user's balance
        // will never be larger than the total supply.
        unchecked {
            totalSupply -= amount;
        }

        emit Transfer(from, address(0), amount);
    }
}

File 4 of 11 : BaseAggregator.sol
//SPDX-License-Identifier: GPL-3.0
pragma solidity =0.8.11;

import "@rari-capital/solmate/src/utils/SafeTransferLib.sol";
import "@rari-capital/solmate/src/tokens/ERC20.sol";
import "../libraries/PermitHelper.sol";

/// @title Rainbow base aggregator contract
contract BaseAggregator {
    /// @dev Used to prevent re-entrancy
    uint256 internal status;

    /// @dev Set of allowed swapTargets.
    mapping(address => bool) public swapTargets;

    /// @dev modifier that prevents reentrancy attacks on specific methods
    modifier nonReentrant() {
        // On the first call to nonReentrant, status will be 1
        require(status != 2, "NON_REENTRANT");

        // Any calls to nonReentrant after this point will fail
        status = 2;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        status = 1;
    }

    /// @dev modifier that ensures only approved targets can be called
    modifier onlyApprovedTarget(address target) {
        require(swapTargets[target], "TARGET_NOT_AUTH");
        _;
    }

    /** EXTERNAL **/

    /// @param buyTokenAddress the address of token that the user should receive
    /// @param target the address of the aggregator contract that will exec the swap
    /// @param swapCallData the calldata that will be passed to the aggregator contract
    /// @param feeAmount the amount of ETH that we will take as a fee
    function fillQuoteEthToToken(
        address buyTokenAddress,
        address payable target,
        bytes calldata swapCallData,
        uint256 feeAmount
    ) external payable nonReentrant onlyApprovedTarget(target) {
        // 1 - Get the initial balances
        uint256 initialTokenBalance = ERC20(buyTokenAddress).balanceOf(
            address(this)
        );
        uint256 initialEthAmount = address(this).balance - msg.value;
        uint256 sellAmount = msg.value - feeAmount;

        // 2 - Call the encoded swap function call on the contract at `target`,
        // passing along any ETH attached to this function call to cover protocol fees
        // minus our fees, which are kept in this contract
        (bool success, bytes memory res) = target.call{value: sellAmount}(
            swapCallData
        );

        // Get the revert message of the call and revert with it if the call failed
        if (!success) {
            assembly {
                let returndata_size := mload(res)
                revert(add(32, res), returndata_size)
            }
        }

        // 3 - Make sure we received the tokens
        {
            uint256 finalTokenBalance = ERC20(buyTokenAddress).balanceOf(
                address(this)
            );
            require(initialTokenBalance < finalTokenBalance, "NO_TOKENS");
        }

        // 4 - Send the received tokens back to the user
        SafeTransferLib.safeTransfer(
            ERC20(buyTokenAddress),
            msg.sender,
            ERC20(buyTokenAddress).balanceOf(address(this)) -
                initialTokenBalance
        );

        // 5 - Return the remaining ETH to the user (if any)
        {
            uint256 finalEthAmount = address(this).balance - feeAmount;
            if (finalEthAmount > initialEthAmount) {
                SafeTransferLib.safeTransferETH(
                    msg.sender,
                    finalEthAmount - initialEthAmount
                );
            }
        }
    }

    /// @param sellTokenAddress the address of token that the user is selling
    /// @param buyTokenAddress the address of token that the user should receive
    /// @param target the address of the aggregator contract that will exec the swap
    /// @param swapCallData the calldata that will be passed to the aggregator contract
    /// @param sellAmount the amount of tokens that the user is selling
    /// @param feeAmount the amount of the tokens to sell that we will take as a fee
    function fillQuoteTokenToToken(
        address sellTokenAddress,
        address buyTokenAddress,
        address payable target,
        bytes calldata swapCallData,
        uint256 sellAmount,
        uint256 feeAmount
    ) external payable nonReentrant onlyApprovedTarget(target) {
        _fillQuoteTokenToToken(
            sellTokenAddress,
            buyTokenAddress,
            target,
            swapCallData,
            sellAmount,
            feeAmount
        );
    }

    /// @dev method that executes ERC20 to ERC20 token swaps with the ability to take a fee from the input
    // and accepts a signature to use permit, so the user doesn't have to make an previous approval transaction
    /// @param sellTokenAddress the address of token that the user is selling
    /// @param buyTokenAddress the address of token that the user should receive
    /// @param target the address of the aggregator contract that will exec the swap
    /// @param swapCallData the calldata that will be passed to the aggregator contract
    /// @param sellAmount the amount of tokens that the user is selling
    /// @param feeAmount the amount of the tokens to sell that we will take as a fee
    /// @param permitData struct containing the value, nonce, deadline, v, r and s values of the permit data
    function fillQuoteTokenToTokenWithPermit(
        address sellTokenAddress,
        address buyTokenAddress,
        address payable target,
        bytes calldata swapCallData,
        uint256 sellAmount,
        uint256 feeAmount,
        PermitHelper.Permit calldata permitData
    ) external payable nonReentrant onlyApprovedTarget(target) {
        // 1 - Apply permit
        PermitHelper.permit(
            permitData,
            sellTokenAddress,
            msg.sender,
            address(this)
        );

        //2 - Call fillQuoteTokenToToken
        _fillQuoteTokenToToken(
            sellTokenAddress,
            buyTokenAddress,
            target,
            swapCallData,
            sellAmount,
            feeAmount
        );
    }

    /// @dev method that executes ERC20 to ETH token swaps with the ability to take a fee from the output
    /// @param sellTokenAddress the address of token that the user is selling
    /// @param target the address of the aggregator contract that will exec the swap
    /// @param swapCallData the calldata that will be passed to the aggregator contract
    /// @param sellAmount the amount of tokens that the user is selling
    /// @param feePercentageBasisPoints the amount of ETH that we will take as a fee in 1e18 basis points (basis points with 4 decimals plus 14 extra decimals of precision)
    function fillQuoteTokenToEth(
        address sellTokenAddress,
        address payable target,
        bytes calldata swapCallData,
        uint256 sellAmount,
        uint256 feePercentageBasisPoints
    ) external payable nonReentrant onlyApprovedTarget(target) {
        _fillQuoteTokenToEth(
            sellTokenAddress,
            target,
            swapCallData,
            sellAmount,
            feePercentageBasisPoints
        );
    }

    /// @dev method that executes ERC20 to ETH token swaps with the ability to take a fee from the output
    // and accepts a signature to use permit, so the user doesn't have to make an previous approval transaction
    /// @param sellTokenAddress the address of token that the user is selling
    /// @param target the address of the aggregator contract that will exec the swap
    /// @param swapCallData the calldata that will be passed to the aggregator contract
    /// @param sellAmount the amount of tokens that the user is selling
    /// @param feePercentageBasisPoints the amount of ETH that we will take as a fee in 1e18 basis points (basis points with 4 decimals plus 14 extra decimals of precision)
    /// @param permitData struct containing the amount, nonce, deadline, v, r and s values of the permit data
    function fillQuoteTokenToEthWithPermit(
        address sellTokenAddress,
        address payable target,
        bytes calldata swapCallData,
        uint256 sellAmount,
        uint256 feePercentageBasisPoints,
        PermitHelper.Permit calldata permitData
    ) external payable nonReentrant onlyApprovedTarget(target) {
        // 1 - Apply permit
        PermitHelper.permit(
            permitData,
            sellTokenAddress,
            msg.sender,
            address(this)
        );

        // 2 - call fillQuoteTokenToEth
        _fillQuoteTokenToEth(
            sellTokenAddress,
            target,
            swapCallData,
            sellAmount,
            feePercentageBasisPoints
        );
    }

    /** INTERNAL **/

    /// @dev internal method that executes ERC20 to ETH token swaps with the ability to take a fee from the output
    function _fillQuoteTokenToEth(
        address sellTokenAddress,
        address payable target,
        bytes calldata swapCallData,
        uint256 sellAmount,
        uint256 feePercentageBasisPoints
    ) internal {
        // 1 - Get the initial ETH amount
        uint256 initialEthAmount = address(this).balance - msg.value;

        // 2 - Move the tokens to this contract
        // NOTE: This implicitly assumes that the the necessary approvals have been granted
        // from msg.sender to the BaseAggregator
        SafeTransferLib.safeTransferFrom(
            ERC20(sellTokenAddress),
            msg.sender,
            address(this),
            sellAmount
        );

        // 3 - Approve the aggregator's contract to swap the tokens
        SafeTransferLib.safeApprove(
            ERC20(sellTokenAddress),
            target,
            sellAmount
        );

        // 4 - Call the encoded swap function call on the contract at `target`,
        // passing along any ETH attached to this function call to cover protocol fees.
        (bool success, bytes memory res) = target.call{value: msg.value}(
            swapCallData
        );

        // Get the revert message of the call and revert with it if the call failed
        if (!success) {
            assembly {
                let returndata_size := mload(res)
                revert(add(32, res), returndata_size)
            }
        }

        // 5 - Check that the tokens were fully spent during the swap
        uint256 allowance = ERC20(sellTokenAddress).allowance(
            address(this),
            target
        );
        require(allowance == 0, "ALLOWANCE_NOT_ZERO");

        // 6 - Subtract the fees and send the rest to the user
        // Fees will be held in this contract
        uint256 finalEthAmount = address(this).balance;
        uint256 ethDiff = finalEthAmount - initialEthAmount;

        require(ethDiff > 0, "NO_ETH_BACK");

        if (feePercentageBasisPoints > 0) {
            uint256 fees = (ethDiff * feePercentageBasisPoints) / 1e18;
            uint256 amountMinusFees = ethDiff - fees;
            SafeTransferLib.safeTransferETH(msg.sender, amountMinusFees);
            // when there's no fee, 1inch sends the funds directly to the user
            // we check to prevent sending 0 ETH in that case
        } else if (ethDiff > 0) {
            SafeTransferLib.safeTransferETH(msg.sender, ethDiff);
        }
    }

    /// @dev internal method that executes ERC20 to ERC20 token swaps with the ability to take a fee from the input
    function _fillQuoteTokenToToken(
        address sellTokenAddress,
        address buyTokenAddress,
        address payable target,
        bytes calldata swapCallData,
        uint256 sellAmount,
        uint256 feeAmount
    ) internal {
        // 1 - Get the initial output token balance
        uint256 initialOutputTokenAmount = ERC20(buyTokenAddress).balanceOf(
            address(this)
        );

        // 2 - Move the tokens to this contract (which includes our fees)
        // NOTE: This implicitly assumes that the the necessary approvals have been granted
        // from msg.sender to the BaseAggregator
        SafeTransferLib.safeTransferFrom(
            ERC20(sellTokenAddress),
            msg.sender,
            address(this),
            sellAmount
        );

        // 3 - Approve the aggregator's contract to swap the tokens if needed
        SafeTransferLib.safeApprove(
            ERC20(sellTokenAddress),
            target,
            sellAmount - feeAmount
        );

        // 4 - Call the encoded swap function call on the contract at `target`,
        // passing along any ETH attached to this function call to cover protocol fees.
        (bool success, bytes memory res) = target.call{value: msg.value}(
            swapCallData
        );

        // Get the revert message of the call and revert with it if the call failed
        if (!success) {
            assembly {
                let returndata_size := mload(res)
                revert(add(32, res), returndata_size)
            }
        }

        // 5 - Check that the tokens were fully spent during the swap
        uint256 allowance = ERC20(sellTokenAddress).allowance(
            address(this),
            target
        );
        require(allowance == 0, "ALLOWANCE_NOT_ZERO");

        // 6 - Make sure we received the tokens
        uint256 finalOutputTokenAmount = ERC20(buyTokenAddress).balanceOf(
            address(this)
        );
        require(initialOutputTokenAmount < finalOutputTokenAmount, "NO_TOKENS");

        // 7 - Send tokens to the user
        SafeTransferLib.safeTransfer(
            ERC20(buyTokenAddress),
            msg.sender,
            finalOutputTokenAmount - initialOutputTokenAmount
        );
    }
}

File 5 of 11 : PermitHelper.sol
//SPDX-License-Identifier: GPL-3.0
pragma solidity =0.8.11;
import "../interfaces/IERC2612.sol";
import "../interfaces/IDAI.sol";

/// @title PermitHelper
/// @dev Helper methods for using ERC20 Permit (ERC2612 or DAI/CHAI like)
library PermitHelper {
    struct Permit {
        uint256 value;
        uint256 nonce;
        uint256 deadline;
        bool isDaiStylePermit;
        uint8 v;
        bytes32 r;
        bytes32 s;
    }

    /// @dev permit method helper that will handle both known implementations
    // DAI vs ERC2612 tokens
    /// @param permitData bytes containing the encoded permit signature
    /// @param tokenAddress address of the token that will be permitted
    /// @param holder address that holds the tokens to be permitted
    /// @param spender address that will be permitted to spend the tokens
    function permit(
        Permit memory permitData,
        address tokenAddress,
        address holder,
        address spender
    ) internal {
        if (permitData.isDaiStylePermit) {
            IDAI(tokenAddress).permit(
                holder,
                spender,
                permitData.nonce,
                permitData.deadline,
                true,
                permitData.v,
                permitData.r,
                permitData.s
            );
        } else {
            IERC2612(tokenAddress).permit(
                holder,
                spender,
                permitData.value,
                permitData.deadline,
                permitData.v,
                permitData.r,
                permitData.s
            );
        }
    }
}

File 6 of 11 : IERC2612.sol
//SPDX-License-Identifier: GPL-3.0
pragma solidity =0.8.11;

import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol";

interface IERC2612 is IERC20Metadata, IERC20Permit {
    function _nonces(address owner) external view returns (uint256);

    function version() external view returns (string memory);
}

File 7 of 11 : IDAI.sol
//SPDX-License-Identifier: GPL-3.0
pragma solidity =0.8.11;

import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
import "@uniswap/v3-periphery/contracts/interfaces/external/IERC20PermitAllowed.sol";

interface IDAI is IERC20Metadata, IERC20PermitAllowed {
    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

    function version() external view returns (string memory);
}

File 8 of 11 : IERC20Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

import "../IERC20.sol";

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

File 9 of 11 : draft-IERC20Permit.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
 * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
 *
 * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
 * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't
 * need to send a transaction, and thus is not required to hold Ether at all.
 */
interface IERC20Permit {
    /**
     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,
     * given ``owner``'s signed approval.
     *
     * IMPORTANT: The same issues {IERC20-approve} has related to transaction
     * ordering also apply here.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `deadline` must be a timestamp in the future.
     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
     * over the EIP712-formatted function arguments.
     * - the signature must use ``owner``'s current nonce (see {nonces}).
     *
     * For more information on the signature format, see the
     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
     * section].
     */
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    /**
     * @dev Returns the current nonce for `owner`. This value must be
     * included whenever a signature is generated for {permit}.
     *
     * Every successful call to {permit} increases ``owner``'s nonce by one. This
     * prevents a signature from being used multiple times.
     */
    function nonces(address owner) external view returns (uint256);

    /**
     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.
     */
    // solhint-disable-next-line func-name-mixedcase
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}

File 10 of 11 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 11 of 11 : IERC20PermitAllowed.sol
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity >=0.5.0;

/// @title Interface for permit
/// @notice Interface used by DAI/CHAI for permit
interface IERC20PermitAllowed {
    /// @notice Approve the spender to spend some tokens via the holder signature
    /// @dev This is the permit interface used by DAI and CHAI
    /// @param holder The address of the token holder, the token owner
    /// @param spender The address of the token spender
    /// @param nonce The holder's nonce, increases at each call to permit
    /// @param expiry The timestamp at which the permit is no longer valid
    /// @param allowed Boolean that sets approval amount, true for type(uint256).max and false for 0
    /// @param v Must produce valid secp256k1 signature from the holder along with `r` and `s`
    /// @param r Must produce valid secp256k1 signature from the holder along with `v` and `s`
    /// @param s Must produce valid secp256k1 signature from the holder along with `r` and `v`
    function permit(
        address holder,
        address spender,
        uint256 nonce,
        uint256 expiry,
        bool allowed,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 1000
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EthWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newOwner","type":"address"},{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"target","type":"address"}],"name":"SwapTargetAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"target","type":"address"}],"name":"SwapTargetRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenWithdrawn","type":"event"},{"inputs":[{"internalType":"address","name":"buyTokenAddress","type":"address"},{"internalType":"address payable","name":"target","type":"address"},{"internalType":"bytes","name":"swapCallData","type":"bytes"},{"internalType":"uint256","name":"feeAmount","type":"uint256"}],"name":"fillQuoteEthToToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"sellTokenAddress","type":"address"},{"internalType":"address payable","name":"target","type":"address"},{"internalType":"bytes","name":"swapCallData","type":"bytes"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"feePercentageBasisPoints","type":"uint256"}],"name":"fillQuoteTokenToEth","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"sellTokenAddress","type":"address"},{"internalType":"address payable","name":"target","type":"address"},{"internalType":"bytes","name":"swapCallData","type":"bytes"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"feePercentageBasisPoints","type":"uint256"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"isDaiStylePermit","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct PermitHelper.Permit","name":"permitData","type":"tuple"}],"name":"fillQuoteTokenToEthWithPermit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"sellTokenAddress","type":"address"},{"internalType":"address","name":"buyTokenAddress","type":"address"},{"internalType":"address payable","name":"target","type":"address"},{"internalType":"bytes","name":"swapCallData","type":"bytes"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"feeAmount","type":"uint256"}],"name":"fillQuoteTokenToToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"sellTokenAddress","type":"address"},{"internalType":"address","name":"buyTokenAddress","type":"address"},{"internalType":"address payable","name":"target","type":"address"},{"internalType":"bytes","name":"swapCallData","type":"bytes"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"isDaiStylePermit","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct PermitHelper.Permit","name":"permitData","type":"tuple"}],"name":"fillQuoteTokenToTokenWithPermit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"swapTargets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"add","type":"bool"}],"name":"updateSwapTargets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b50600280546001600160a01b031916331790556001600055611afd806100376000396000f3fe6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b0480bbd1161004e578063b0480bbd1461024e578063b309383814610261578063f2fde38b1461027457600080fd5b80638da5cb5b146101e357806397bbda0e1461021b578063999b64641461023b57600080fd5b80633c2b9a7d116100a55780633c2b9a7d1461017857806355e4b7be1461018b57806383c4a19d1461019e57600080fd5b806301e33667146101385780631b9a91a41461015857600080fd5b3661013357600054600214806100e057506002546001600160a01b031633145b6101315760405162461bcd60e51b815260206004820152600a60248201527f4e4f5f524543454956450000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b005b600080fd5b34801561014457600080fd5b506101316101533660046115a6565b610294565b34801561016457600080fd5b506101316101733660046115e7565b61037d565b61013161018636600461165c565b61045a565b6101316101993660046116c9565b61075f565b3480156101aa57600080fd5b506101ce6101b9366004611754565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156101ef57600080fd5b50600254610203906001600160a01b031681565b6040516001600160a01b0390911681526020016101da565b34801561022757600080fd5b5061013161023636600461178d565b610820565b6101316102493660046117c2565b610904565b61013161025c366004611851565b6109c3565b61013161026f3660046118f1565b610a9f565b34801561028057600080fd5b5061013161028f366004611754565b610b6a565b6002546001600160a01b031633146102db5760405162461bcd60e51b815260206004820152600a60248201526927a7262cafa7aba722a960b11b6044820152606401610128565b6001600160a01b0382166103205760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b6044820152606401610128565b61032b838383610cbd565b816001600160a01b0316836001600160a01b03167f8210728e7c071f615b840ee026032693858fbcd5e5359e67e438c890f59e56208360405161037091815260200190565b60405180910390a3505050565b6002546001600160a01b031633146103c45760405162461bcd60e51b815260206004820152600a60248201526927a7262cafa7aba722a960b11b6044820152606401610128565b6001600160a01b0382166104095760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b6044820152606401610128565b6104138282610d63565b816001600160a01b03167f8455ae6be5d92f1df1c3c1484388e247a36c7e60d72055ae216dbc258f257d4b8260405161044e91815260200190565b60405180910390a25050565b6000546002141561049d5760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038516815260016020526040902054849060ff166104fd5760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b6040516370a0823160e01b81523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015610544573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610568919061197f565b9050600061057634476119ae565b9050600061058485346119ae565b9050600080896001600160a01b0316838a8a6040516105a49291906119c5565b60006040518083038185875af1925050503d80600081146105e1576040519150601f19603f3d011682016040523d82523d6000602084013e6105e6565b606091505b5091509150816105f95780518082602001fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038d16906370a0823190602401602060405180830381865afa158015610640573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610664919061197f565b90508086106106a15760405162461bcd60e51b81526020600482015260096024820152684e4f5f544f4b454e5360b81b6044820152606401610128565b506040516370a0823160e01b8152306004820152610723908c90339088906001600160a01b038416906370a0823190602401602060405180830381865afa1580156106f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610714919061197f565b61071e91906119ae565b610cbd565b600061072f88476119ae565b90508481111561074c5761074c3361074787846119ae565b610d63565b5050600160005550505050505050505050565b600054600214156107a25760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038616815260016020526040902054859060ff166108025760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b61081188888888888888610dc3565b50506001600055505050505050565b6002546001600160a01b031633146108675760405162461bcd60e51b815260206004820152600a60248201526927a7262cafa7aba722a960b11b6044820152606401610128565b6001600160a01b0382166000908152600160205260409020805460ff191682158015919091179091556108cc576040516001600160a01b038316907fb907822409611d127ab6a64611591b98e03a6a85ade4f258bae26b7c1efdfeaf90600090a25050565b6040516001600160a01b038316907f393b8be3e26787f19285ecd039dfd80bc6507828750f4d50367e6efe2524695c90600090a25050565b600054600214156109475760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038616815260016020526040902054859060ff166109a75760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b6109b587878787878761104c565b505060016000555050505050565b60005460021415610a065760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038716815260016020526040902054869060ff16610a665760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b610a80610a78368490038401846119e6565b8a333061125d565b610a8f89898989898989610dc3565b5050600160005550505050505050565b60005460021415610ae25760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038716815260016020526040902054869060ff16610b425760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b610b5c610b54368490038401846119e6565b89333061125d565b61081188888888888861104c565b6002546001600160a01b03163314610bb15760405162461bcd60e51b815260206004820152600a60248201526927a7262cafa7aba722a960b11b6044820152606401610128565b6001600160a01b038116610bf65760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b6044820152606401610128565b6002546001600160a01b0382811691161415610c545760405162461bcd60e51b815260206004820152600a60248201527f53414d455f4f574e4552000000000000000000000000000000000000000000006044820152606401610128565b600280546001600160a01b038381167fffffffffffffffffffffffff00000000000000000000000000000000000000008316811790935560405191169182917fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c90600090a35050565b60006040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201528260248201526000806044836000895af1915050610d11816113f1565b610d5d5760405162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c454400000000000000000000000000000000006044820152606401610128565b50505050565b600080600080600085875af1905080610dbe5760405162461bcd60e51b815260206004820152601360248201527f4554485f5452414e534645525f4641494c4544000000000000000000000000006044820152606401610128565b505050565b6040516370a0823160e01b81523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015610e0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2e919061197f565b9050610e3c88333086611438565b610e508887610e4b85876119ae565b6114ee565b600080876001600160a01b0316348888604051610e6e9291906119c5565b60006040518083038185875af1925050503d8060008114610eab576040519150601f19603f3d011682016040523d82523d6000602084013e610eb0565b606091505b509150915081610ec35780518082602001fd5b604051636eb1769f60e11b81523060048201526001600160a01b038981166024830152600091908c169063dd62ed3e90604401602060405180830381865afa158015610f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f37919061197f565b90508015610f875760405162461bcd60e51b815260206004820152601260248201527f414c4c4f57414e43455f4e4f545f5a45524f00000000000000000000000000006044820152606401610128565b6040516370a0823160e01b81523060048201526000906001600160a01b038c16906370a0823190602401602060405180830381865afa158015610fce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff2919061197f565b905080851061102f5760405162461bcd60e51b81526020600482015260096024820152684e4f5f544f4b454e5360b81b6044820152606401610128565b61103e8b3361071e88856119ae565b505050505050505050505050565b600061105834476119ae565b905061106687333086611438565b6110718787856114ee565b600080876001600160a01b031634888860405161108f9291906119c5565b60006040518083038185875af1925050503d80600081146110cc576040519150601f19603f3d011682016040523d82523d6000602084013e6110d1565b606091505b5091509150816110e45780518082602001fd5b604051636eb1769f60e11b81523060048201526001600160a01b038981166024830152600091908b169063dd62ed3e90604401602060405180830381865afa158015611134573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611158919061197f565b905080156111a85760405162461bcd60e51b815260206004820152601260248201527f414c4c4f57414e43455f4e4f545f5a45524f00000000000000000000000000006044820152606401610128565b4760006111b586836119ae565b9050600081116112075760405162461bcd60e51b815260206004820152600b60248201527f4e4f5f4554485f4241434b0000000000000000000000000000000000000000006044820152606401610128565b861561124d576000670de0b6b3a76400006112228984611a86565b61122c9190611aa5565b9050600061123a82846119ae565b90506112463382610d63565b505061103e565b801561103e5761103e3382610d63565b836060015115611331576020840151604080860151608087015160a088015160c089015193517f8fcbaf0c0000000000000000000000000000000000000000000000000000000081526001600160a01b0388811660048301528781166024830152604482019690965260648101939093526001608484015260ff90911660a483015260c482015260e481019190915290841690638fcbaf0c9061010401600060405180830381600087803b15801561131457600080fd5b505af1158015611328573d6000803e3d6000fd5b50505050610d5d565b8351604080860151608087015160a088015160c089015193517fd505accf0000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301526044820196909652606481019390935260ff909116608483015260a482015260c48101919091529084169063d505accf9060e401600060405180830381600087803b1580156113d357600080fd5b505af11580156113e7573d6000803e3d6000fd5b5050505050505050565b60003d8261140357806000803e806000fd5b806020811461141b57801561142c5760009250611431565b816000803e60005115159250611431565b600192505b5050919050565b60006040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526001600160a01b038416602482015282604482015260008060648360008a5af191505061149b816113f1565b6114e75760405162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152606401610128565b5050505050565b60006040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201528260248201526000806044836000895af1915050611542816113f1565b610d5d5760405162461bcd60e51b815260206004820152600e60248201527f415050524f56455f4641494c45440000000000000000000000000000000000006044820152606401610128565b6001600160a01b03811681146115a357600080fd5b50565b6000806000606084860312156115bb57600080fd5b83356115c68161158e565b925060208401356115d68161158e565b929592945050506040919091013590565b600080604083850312156115fa57600080fd5b82356116058161158e565b946020939093013593505050565b60008083601f84011261162557600080fd5b50813567ffffffffffffffff81111561163d57600080fd5b60208301915083602082850101111561165557600080fd5b9250929050565b60008060008060006080868803121561167457600080fd5b853561167f8161158e565b9450602086013561168f8161158e565b9350604086013567ffffffffffffffff8111156116ab57600080fd5b6116b788828901611613565b96999598509660600135949350505050565b600080600080600080600060c0888a0312156116e457600080fd5b87356116ef8161158e565b965060208801356116ff8161158e565b9550604088013561170f8161158e565b9450606088013567ffffffffffffffff81111561172b57600080fd5b6117378a828b01611613565b989b979a50959895979660808701359660a0013595509350505050565b60006020828403121561176657600080fd5b81356117718161158e565b9392505050565b8035801515811461178857600080fd5b919050565b600080604083850312156117a057600080fd5b82356117ab8161158e565b91506117b960208401611778565b90509250929050565b60008060008060008060a087890312156117db57600080fd5b86356117e68161158e565b955060208701356117f68161158e565b9450604087013567ffffffffffffffff81111561181257600080fd5b61181e89828a01611613565b979a9699509760608101359660809091013595509350505050565b600060e0828403121561184b57600080fd5b50919050565b6000806000806000806000806101a0898b03121561186e57600080fd5b88356118798161158e565b975060208901356118898161158e565b965060408901356118998161158e565b9550606089013567ffffffffffffffff8111156118b557600080fd5b6118c18b828c01611613565b9096509450506080890135925060a089013591506118e28a60c08b01611839565b90509295985092959890939650565b6000806000806000806000610180888a03121561190d57600080fd5b87356119188161158e565b965060208801356119288161158e565b9550604088013567ffffffffffffffff81111561194457600080fd5b6119508a828b01611613565b90965094505060608801359250608088013591506119718960a08a01611839565b905092959891949750929550565b60006020828403121561199157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156119c0576119c0611998565b500390565b8183823760009101908152919050565b803560ff8116811461178857600080fd5b600060e082840312156119f857600080fd5b60405160e0810181811067ffffffffffffffff82111715611a2957634e487b7160e01b600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152611a5260608401611778565b6060820152611a63608084016119d5565b608082015260a083013560a082015260c083013560c08201528091505092915050565b6000816000190483118215151615611aa057611aa0611998565b500290565b600082611ac257634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212209870dd0dc3fb83baf72036a002768c9388c9b2cbf93b6d7b09369fddefaaf87764736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b0480bbd1161004e578063b0480bbd1461024e578063b309383814610261578063f2fde38b1461027457600080fd5b80638da5cb5b146101e357806397bbda0e1461021b578063999b64641461023b57600080fd5b80633c2b9a7d116100a55780633c2b9a7d1461017857806355e4b7be1461018b57806383c4a19d1461019e57600080fd5b806301e33667146101385780631b9a91a41461015857600080fd5b3661013357600054600214806100e057506002546001600160a01b031633145b6101315760405162461bcd60e51b815260206004820152600a60248201527f4e4f5f524543454956450000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b005b600080fd5b34801561014457600080fd5b506101316101533660046115a6565b610294565b34801561016457600080fd5b506101316101733660046115e7565b61037d565b61013161018636600461165c565b61045a565b6101316101993660046116c9565b61075f565b3480156101aa57600080fd5b506101ce6101b9366004611754565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156101ef57600080fd5b50600254610203906001600160a01b031681565b6040516001600160a01b0390911681526020016101da565b34801561022757600080fd5b5061013161023636600461178d565b610820565b6101316102493660046117c2565b610904565b61013161025c366004611851565b6109c3565b61013161026f3660046118f1565b610a9f565b34801561028057600080fd5b5061013161028f366004611754565b610b6a565b6002546001600160a01b031633146102db5760405162461bcd60e51b815260206004820152600a60248201526927a7262cafa7aba722a960b11b6044820152606401610128565b6001600160a01b0382166103205760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b6044820152606401610128565b61032b838383610cbd565b816001600160a01b0316836001600160a01b03167f8210728e7c071f615b840ee026032693858fbcd5e5359e67e438c890f59e56208360405161037091815260200190565b60405180910390a3505050565b6002546001600160a01b031633146103c45760405162461bcd60e51b815260206004820152600a60248201526927a7262cafa7aba722a960b11b6044820152606401610128565b6001600160a01b0382166104095760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b6044820152606401610128565b6104138282610d63565b816001600160a01b03167f8455ae6be5d92f1df1c3c1484388e247a36c7e60d72055ae216dbc258f257d4b8260405161044e91815260200190565b60405180910390a25050565b6000546002141561049d5760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038516815260016020526040902054849060ff166104fd5760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b6040516370a0823160e01b81523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015610544573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610568919061197f565b9050600061057634476119ae565b9050600061058485346119ae565b9050600080896001600160a01b0316838a8a6040516105a49291906119c5565b60006040518083038185875af1925050503d80600081146105e1576040519150601f19603f3d011682016040523d82523d6000602084013e6105e6565b606091505b5091509150816105f95780518082602001fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038d16906370a0823190602401602060405180830381865afa158015610640573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610664919061197f565b90508086106106a15760405162461bcd60e51b81526020600482015260096024820152684e4f5f544f4b454e5360b81b6044820152606401610128565b506040516370a0823160e01b8152306004820152610723908c90339088906001600160a01b038416906370a0823190602401602060405180830381865afa1580156106f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610714919061197f565b61071e91906119ae565b610cbd565b600061072f88476119ae565b90508481111561074c5761074c3361074787846119ae565b610d63565b5050600160005550505050505050505050565b600054600214156107a25760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038616815260016020526040902054859060ff166108025760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b61081188888888888888610dc3565b50506001600055505050505050565b6002546001600160a01b031633146108675760405162461bcd60e51b815260206004820152600a60248201526927a7262cafa7aba722a960b11b6044820152606401610128565b6001600160a01b0382166000908152600160205260409020805460ff191682158015919091179091556108cc576040516001600160a01b038316907fb907822409611d127ab6a64611591b98e03a6a85ade4f258bae26b7c1efdfeaf90600090a25050565b6040516001600160a01b038316907f393b8be3e26787f19285ecd039dfd80bc6507828750f4d50367e6efe2524695c90600090a25050565b600054600214156109475760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038616815260016020526040902054859060ff166109a75760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b6109b587878787878761104c565b505060016000555050505050565b60005460021415610a065760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038716815260016020526040902054869060ff16610a665760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b610a80610a78368490038401846119e6565b8a333061125d565b610a8f89898989898989610dc3565b5050600160005550505050505050565b60005460021415610ae25760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038716815260016020526040902054869060ff16610b425760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b610b5c610b54368490038401846119e6565b89333061125d565b61081188888888888861104c565b6002546001600160a01b03163314610bb15760405162461bcd60e51b815260206004820152600a60248201526927a7262cafa7aba722a960b11b6044820152606401610128565b6001600160a01b038116610bf65760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b6044820152606401610128565b6002546001600160a01b0382811691161415610c545760405162461bcd60e51b815260206004820152600a60248201527f53414d455f4f574e4552000000000000000000000000000000000000000000006044820152606401610128565b600280546001600160a01b038381167fffffffffffffffffffffffff00000000000000000000000000000000000000008316811790935560405191169182917fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c90600090a35050565b60006040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201528260248201526000806044836000895af1915050610d11816113f1565b610d5d5760405162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c454400000000000000000000000000000000006044820152606401610128565b50505050565b600080600080600085875af1905080610dbe5760405162461bcd60e51b815260206004820152601360248201527f4554485f5452414e534645525f4641494c4544000000000000000000000000006044820152606401610128565b505050565b6040516370a0823160e01b81523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015610e0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2e919061197f565b9050610e3c88333086611438565b610e508887610e4b85876119ae565b6114ee565b600080876001600160a01b0316348888604051610e6e9291906119c5565b60006040518083038185875af1925050503d8060008114610eab576040519150601f19603f3d011682016040523d82523d6000602084013e610eb0565b606091505b509150915081610ec35780518082602001fd5b604051636eb1769f60e11b81523060048201526001600160a01b038981166024830152600091908c169063dd62ed3e90604401602060405180830381865afa158015610f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f37919061197f565b90508015610f875760405162461bcd60e51b815260206004820152601260248201527f414c4c4f57414e43455f4e4f545f5a45524f00000000000000000000000000006044820152606401610128565b6040516370a0823160e01b81523060048201526000906001600160a01b038c16906370a0823190602401602060405180830381865afa158015610fce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff2919061197f565b905080851061102f5760405162461bcd60e51b81526020600482015260096024820152684e4f5f544f4b454e5360b81b6044820152606401610128565b61103e8b3361071e88856119ae565b505050505050505050505050565b600061105834476119ae565b905061106687333086611438565b6110718787856114ee565b600080876001600160a01b031634888860405161108f9291906119c5565b60006040518083038185875af1925050503d80600081146110cc576040519150601f19603f3d011682016040523d82523d6000602084013e6110d1565b606091505b5091509150816110e45780518082602001fd5b604051636eb1769f60e11b81523060048201526001600160a01b038981166024830152600091908b169063dd62ed3e90604401602060405180830381865afa158015611134573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611158919061197f565b905080156111a85760405162461bcd60e51b815260206004820152601260248201527f414c4c4f57414e43455f4e4f545f5a45524f00000000000000000000000000006044820152606401610128565b4760006111b586836119ae565b9050600081116112075760405162461bcd60e51b815260206004820152600b60248201527f4e4f5f4554485f4241434b0000000000000000000000000000000000000000006044820152606401610128565b861561124d576000670de0b6b3a76400006112228984611a86565b61122c9190611aa5565b9050600061123a82846119ae565b90506112463382610d63565b505061103e565b801561103e5761103e3382610d63565b836060015115611331576020840151604080860151608087015160a088015160c089015193517f8fcbaf0c0000000000000000000000000000000000000000000000000000000081526001600160a01b0388811660048301528781166024830152604482019690965260648101939093526001608484015260ff90911660a483015260c482015260e481019190915290841690638fcbaf0c9061010401600060405180830381600087803b15801561131457600080fd5b505af1158015611328573d6000803e3d6000fd5b50505050610d5d565b8351604080860151608087015160a088015160c089015193517fd505accf0000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301526044820196909652606481019390935260ff909116608483015260a482015260c48101919091529084169063d505accf9060e401600060405180830381600087803b1580156113d357600080fd5b505af11580156113e7573d6000803e3d6000fd5b5050505050505050565b60003d8261140357806000803e806000fd5b806020811461141b57801561142c5760009250611431565b816000803e60005115159250611431565b600192505b5050919050565b60006040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526001600160a01b038416602482015282604482015260008060648360008a5af191505061149b816113f1565b6114e75760405162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152606401610128565b5050505050565b60006040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201528260248201526000806044836000895af1915050611542816113f1565b610d5d5760405162461bcd60e51b815260206004820152600e60248201527f415050524f56455f4641494c45440000000000000000000000000000000000006044820152606401610128565b6001600160a01b03811681146115a357600080fd5b50565b6000806000606084860312156115bb57600080fd5b83356115c68161158e565b925060208401356115d68161158e565b929592945050506040919091013590565b600080604083850312156115fa57600080fd5b82356116058161158e565b946020939093013593505050565b60008083601f84011261162557600080fd5b50813567ffffffffffffffff81111561163d57600080fd5b60208301915083602082850101111561165557600080fd5b9250929050565b60008060008060006080868803121561167457600080fd5b853561167f8161158e565b9450602086013561168f8161158e565b9350604086013567ffffffffffffffff8111156116ab57600080fd5b6116b788828901611613565b96999598509660600135949350505050565b600080600080600080600060c0888a0312156116e457600080fd5b87356116ef8161158e565b965060208801356116ff8161158e565b9550604088013561170f8161158e565b9450606088013567ffffffffffffffff81111561172b57600080fd5b6117378a828b01611613565b989b979a50959895979660808701359660a0013595509350505050565b60006020828403121561176657600080fd5b81356117718161158e565b9392505050565b8035801515811461178857600080fd5b919050565b600080604083850312156117a057600080fd5b82356117ab8161158e565b91506117b960208401611778565b90509250929050565b60008060008060008060a087890312156117db57600080fd5b86356117e68161158e565b955060208701356117f68161158e565b9450604087013567ffffffffffffffff81111561181257600080fd5b61181e89828a01611613565b979a9699509760608101359660809091013595509350505050565b600060e0828403121561184b57600080fd5b50919050565b6000806000806000806000806101a0898b03121561186e57600080fd5b88356118798161158e565b975060208901356118898161158e565b965060408901356118998161158e565b9550606089013567ffffffffffffffff8111156118b557600080fd5b6118c18b828c01611613565b9096509450506080890135925060a089013591506118e28a60c08b01611839565b90509295985092959890939650565b6000806000806000806000610180888a03121561190d57600080fd5b87356119188161158e565b965060208801356119288161158e565b9550604088013567ffffffffffffffff81111561194457600080fd5b6119508a828b01611613565b90965094505060608801359250608088013591506119718960a08a01611839565b905092959891949750929550565b60006020828403121561199157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156119c0576119c0611998565b500390565b8183823760009101908152919050565b803560ff8116811461178857600080fd5b600060e082840312156119f857600080fd5b60405160e0810181811067ffffffffffffffff82111715611a2957634e487b7160e01b600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152611a5260608401611778565b6060820152611a63608084016119d5565b608082015260a083013560a082015260c083013560c08201528091505092915050565b6000816000190483118215151615611aa057611aa0611998565b500290565b600082611ac257634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212209870dd0dc3fb83baf72036a002768c9388c9b2cbf93b6d7b09369fddefaaf87764736f6c634300080b0033

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
Chain Token Portfolio % Price Amount Value
ETH1.30%$4,062.040.2742$1,113.89
ETH1.24%$11,056.9698$1,056.97
ETH1.13%$4,068.280.237$964.23
ETH1.11%$0.009518100,072.5699$952.49
ETH1.10%$17.9852.4944$943.85
ETH1.10%$101,3140.00930109$942.33
ETH1.08%$43.0221.3769$919.64
ETH1.06%$286.273.1626$905.36
ETH1.03%$0.00002240,022,417.5639$881.69
ETH0.99%$0.1395286,089.7835$849.7
ETH0.97%<$0.0000015,677,997,315.7125$828.12
ETH0.87%$1.04714.4414$739.45
ETH0.86%$16.1745.2239$731.27
ETH0.83%$4.99142.8764$712.95
ETH0.82%$1.1640.3371$701.17
ETH0.81%$2.04339.4775$692.53
ETH0.78%$0.5653591,177.8742$665.92
ETH0.73%$4,298.380.1448$622.38
ETH0.68%$7.280.1464$577.05
ETH0.66%$0.061389,238.2333$567.05
ETH0.66%$1.28439.4802$563.13
ETH0.60%$0.3424961,502.2355$514.51
ETH0.58%$1496.4837$497.48
ETH0.58%$3.55140$497
ETH0.55%$24.7419.0917$472.33
ETH0.55%$0.742246629.515$467.25
ETH0.53%$1.9239.1876$454.46
ETH0.53%$4,062.040.1109$450.47
ETH0.52%$0.079115,612.7588$444.02
ETH0.48%$1.05385.6221$406.06
ETH0.47%$0.0556047,266.0904$404.02
ETH0.47%$0.3978021,013.513$403.18
ETH0.46%$0.00507477,624.1366$393.9
ETH0.46%$2,288.790.17$389.04
ETH0.42%$0.1285782,770.2284$356.19
ETH0.42%$0.000595597,549.5903$355.65
ETH0.41%$7.0149.9705$350.29
ETH0.41%$90.23.8546$347.69
ETH0.40%$4.1880.7746$337.64
ETH0.39%$10.7231.0409$332.76
ETH0.38%$0.01732418,924.4901$327.85
ETH0.38%$40.697.8905$321.07
ETH0.37%$0.0321519,759.8421$313.78
ETH0.36%$0.0327959,490.3884$311.24
ETH0.35%$0.0750094,003.915$300.33
ETH0.35%$165.381.7875$295.61
ETH0.34%$0.1132452,539.2362$287.56
ETH0.32%$0.1568311,724.4714$270.45
ETH0.31%$0.001498178,378.58$267.24
ETH0.31%$4.2961.4028$263.42
ETH0.31%$0.439277599.1552$263.2
ETH0.29%$8.1830.6482$250.7
ETH0.28%$0.0001142,088,435.1672$238.81
ETH0.28%$0.0346436,863.6413$237.78
ETH0.28%$0.00001912,278,225.1334$237.68
ETH0.27%$0.0431285,310.8821$229.05
ETH0.27%$0.408438557.8189$227.83
ETH0.27%$8.3127.381$227.54
ETH0.26%$0.997096224.8479$224.19
ETH0.26%$0.01096120,266.329$222.13
ETH0.24%$0.42374486.2397$206.04
ETH0.24%$0.1031121,990.6114$205.26
ETH0.23%$3.1264.2041$200.32
ETH0.23%$0.00517337,817.5345$195.61
ETH0.23%$0.001809106,967.0176$193.51
ETH0.23%$1.7113.3919$192.77
ETH0.22%$0.1778451,040.2208$185
ETH0.21%$7.3524.923$183.06
ETH0.21%$0.362637497.6559$180.47
ETH0.21%$0.21795814.3841$177.5
ETH0.21%$101,5430.00173289$175.96
ETH0.20%$0.000285611,474.0651$174.23
ETH0.20%$0.00315954,964.6146$173.62
ETH0.20%$0.0001671,030,957.3616$172.14
ETH0.20%$0.195354880.3323$171.98
ETH0.20%$0.00684324,717.5802$169.15
ETH0.20%$2.5665.7434$167.98
ETH0.19%$0.512177323.8588$165.87
ETH0.19%$0.0001341,203,486.4991$161.7
ETH0.18%$60.592.5837$156.54
ETH0.18%$0.0491263,085.6486$151.59
ETH0.17%$0.000998149,015.1081$148.75
ETH0.17%$51.472.8353$145.95
ETH0.17%$2.3461.8364$144.7
ETH0.17%$0.294124491.14$144.46
ETH0.17%$0.0550952,616.895$144.18
ETH0.17%$4.0135.1874$141.1
ETH0.16%$4,561.460.0307$140.22
ETH0.16%$0.937208148.7541$139.41
ETH0.16%$4.3931.6873$138.95
ETH0.16%$0.00168982,127.7637$138.74
ETH0.16%$31.544.39$138.46
ETH0.16%$0.381052360.4177$137.34
ETH0.16%$3.8235.5316$135.73
ETH0.16%$2.5851.4272$132.68
ETH0.15%$30.744.2401$130.34
ETH0.15%$9.6813.0509$126.39
ETH0.15%$87.611.439$126.07
ETH0.15%$14.878.4466$125.6
ETH0.15%<$0.0000019,392,523,220.4146$125.23
ETH0.14%$807.640.1507$121.71
ETH0.14%$0.0171467,076.9271$121.34
ETH0.14%$1119.6898$120.05
ETH0.14%$523.5536$117.77
ETH0.14%$0.0597641,944.9824$116.24
ETH0.14%$6.8316.981$115.98
ETH0.13%$0.0360383,175.4235$114.43
ETH0.13%$0.45601238.2716$108.65
ETH0.13%$0.00156169,208.4875$108.07
ETH0.12%$2.3944.3582$106.02
ETH0.12%$1105.63$105.74
ETH0.12%$75.151.4008$105.27
ETH0.12%$0.682445153.1909$104.54
ETH0.12%$0.0248674,190.3572$104.2
ETH0.12%$2.1547.3354$101.77
ETH0.12%$4,121.070.0246$101.5
ETH0.12%$0.808786123.2419$99.68
ETH0.12%<$0.0000014,467,158,276.8727$99.55
ETH0.12%$0.44246223.2782$98.79
ETH0.12%$5,500.540.018$98.76
ETH0.11%$0.0606261,591.493$96.49
ETH0.11%<$0.00000154,661,125,756.009$96.37
ETH0.11%$0.529359179.919$95.24
ETH0.11%<$0.000001265,078,561.703$93.54
ETH0.11%$0.378799246.5833$93.41
ETH0.11%$0.433719215.2976$93.38
ETH0.11%$0.915113100.5474$92.01
ETH0.11%$2.0544.294$90.8
ETH0.11%<$0.0000013,263,345,570.3515$90.03
ETH0.11%$740.750.1215$89.98
ETH0.10%$3.0429.1707$88.68
ETH0.10%$0.0000312,843,599.5691$88.52
ETH0.10%$0.0862121,024.8002$88.35
ETH0.10%$1.8746.92$87.74
ETH0.10%$0.766257111.4068$85.37
ETH0.10%$0.00785710,805.6588$84.89
ETH0.10%$0.142501595.6903$84.89
ETH0.10%$0.00115672,674.8363$84.04
ETH0.10%<$0.000001285,190,437.4095$82.97
ETH0.10%$2.1838.0418$82.93
ETH0.10%$0.89729691.5206$82.12
ETH0.10%$0.540114151.5644$81.86
ETH0.10%$1.7845.8246$81.41
ETH0.10%$4,362.530.0186$81.19
ETH0.09%$0.100392790.0738$79.32
ETH0.09%$0.0623961,251.1028$78.06
ETH0.09%<$0.0000015,776,584,157.1907$77.35
ETH0.09%$0.00000516,204,046.4402$76.48
ETH0.09%$0.552005136.5323$75.37
ETH0.09%$0.000194385,603.7733$74.61
ETH0.09%<$0.00000129,392,052,963.7812$73.85
ETH0.09%$0.403715182.2103$73.56
ETH0.08%$20.673.4745$71.82
ETH0.08%$0.0416041,707.9668$71.06
ETH0.08%$4,411.790.016$70.67
ETH0.08%$2.3329.8754$69.61
ETH0.08%$0.155726440.4965$68.6
ETH0.08%$0.63673107.5811$68.5
ETH0.08%$1.6840.6171$68.24
ETH0.08%$0.0576371,178.7259$67.94
ETH0.08%$1.3550.2758$67.87
ETH0.08%<$0.0000013,145,000,000$66.82
ETH0.08%$0.0000097,066,924.7656$65.09
ETH0.08%$0.0148644,358.5888$64.78
ETH0.08%$0.262937245.7323$64.61
ETH0.08%$4.7813.5139$64.6
ETH0.07%$0.0000125,100,000$63.39
ETH0.07%$0.221089286.236$63.28
ETH0.07%$0.6634494.8795$62.95
ETH0.07%$300.910.2061$62.02
ETH0.07%$0.62448999.1015$61.89
ETH0.07%$0.000166371,760.3657$61.65
ETH0.07%$0.000194316,146.487$61.33
ETH0.07%$0.0000441,383,129.8813$61.07
ETH0.07%$0.0159133,818.7745$60.77
ETH0.07%$0.045111,335.7572$60.26
ETH0.07%$0.0335241,779.1894$59.65
ETH0.07%$0.495701119.2146$59.09
ETH0.07%$21.672.7018$58.55
ETH0.07%$52.751.1062$58.35
ETH0.07%$0.227231256.4515$58.27
ETH0.07%$0.0417391,387.7124$57.92
ETH0.07%$708.010.0815$57.71
ETH0.07%$23.082.4954$57.59
ETH0.07%$0.0081167,072.691$57.4
ETH0.07%$0.170838333.2373$56.93
ETH0.07%$0.00000199,439,104.2921$56.88
ETH0.07%$0.0314121,802.8186$56.63
ETH0.07%$1.2445.5494$56.34
ETH0.07%$0.00157335,772.4454$56.25
ETH0.06%$0.318421173.7432$55.32
ETH0.06%$22.862.4021$54.92
ETH0.06%$0.09168596.7992$54.71
ETH0.06%$0.059823911.4718$54.53
ETH0.06%$0.409746131.2734$53.79
ETH0.06%$71.340.7517$53.62
ETH0.06%$0.102754520.3068$53.46
ETH0.06%$4,193.040.0127$53.31
ETH0.06%$1.6133.0885$53.27
ETH0.06%$0.325232162.948$53
ETH0.06%$0.00018292,906.1057$52.59
ETH0.06%$60.720.85$51.61
ETH0.06%$0.2578196.1699$50.57
ETH0.06%$0.75192167.1918$50.52
ETH0.06%$0.094219535.1523$50.42
ETH0.06%$0.312965157.6266$49.33
ETH0.06%$0.55279888.9039$49.15
ETH0.06%$1.9724.9213$49.09
ETH0.06%$0.050537969.8837$49.01
ETH0.06%<$0.0000014,165,464,155.7912$48.98
ETH0.06%$1.2240.1086$48.93
ETH0.06%$27.441.7748$48.7
ETH0.06%$15.53.1393$48.66
ETH0.06%$0.63892976.0568$48.59
ETH0.06%$97,1300.00049705$48.28
ETH0.06%$0.0182282,627.7562$47.9
ETH0.06%$0.0041411,530.2011$47.73
ETH0.06%$0.57935281.4294$47.18
ETH0.05%$0.198266236.9665$46.98
ETH0.05%$146.9404$46.94
ETH0.05%$0.0052888,855.2051$46.83
ETH0.05%$0.63858972.7191$46.44
ETH0.05%$0.50535290.9373$45.96
ETH0.05%$1.0643.514$45.95
ETH0.05%$1.1838.8922$45.89
ETH0.05%$1.4132.4728$45.88
ETH0.05%$0.00000317,269,888.3361$45.77
ETH0.05%$2.0621.9645$45.25
ETH0.05%$4,802.830.00938585$45.08
ETH0.05%$1.5529.0874$45.07
ETH0.05%$0.18346244.6315$44.88
ETH0.05%$0.000096463,445.8148$44.58
ETH0.05%$0.0396981,114.494$44.24
ETH0.05%$0.0290091,515.3836$43.96
ETH0.05%$0.375299116.4511$43.7
ETH0.05%$3.7911.5217$43.67
ETH0.05%$0.049429882.7456$43.63
ETH0.05%$34.571.2538$43.34
ETH0.05%<$0.000001342,611,860.1877$43.28
ETH0.05%$0.71531260.3479$43.17
ETH0.05%$1.6226.6285$43.14
ETH0.05%$0.18921226.6825$42.89
ETH0.05%$9.54.4969$42.72
ETH0.05%$0.200471211.9871$42.5
ETH0.05%$0.080668523.9912$42.27
ETH0.05%$0.094664441.15$41.76
ETH0.05%$11.623.5354$41.09
ETH0.05%$0.6024168$40.96
ETH0.05%$0.0104773,882.2334$40.67
ETH0.05%$0.0366551,109.1696$40.66
ETH0.05%$0.00084348,181.4751$40.6
ETH0.05%$8.035.0534$40.58
ETH0.05%$0.45375888.8848$40.33
ETH0.05%$0.00000130,117,171.4168$39.75
ETH0.05%$2.4116.4808$39.72
ETH0.05%$1.5725.2179$39.59
ETH0.05%$3.959.9501$39.3
ETH0.05%$0.186572209.8126$39.15
ETH0.05%$0.189779204.9261$38.89
ETH0.05%<$0.0000017,081,470,123.6697$38.88
ETH0.05%$0.126416307.0993$38.82
ETH0.04%$2.2716.9215$38.41
ETH0.04%$0.99989237.515$37.51
ETH0.04%$1.6622.3142$37.04
ETH0.04%<$0.0000014,990,740,794.7702$36.6
ETH0.04%$0.124888292.9458$36.59
ETH0.04%$0.199775182.1424$36.39
ETH0.04%$1,018.710.0354$36.08
ETH0.04%<$0.00000111,101,258,362.6911$35.73
ETH0.04%$0.31162114.5435$35.69
ETH0.04%$1.0633.6239$35.54
ETH0.04%$0.00037295,400.719$35.45
ETH0.04%$0.119911294.6812$35.34
ETH0.04%$69.290.5095$35.31
ETH0.04%<$0.000001144,355,427.6863$34.93
ETH0.04%$0.123053275.7644$33.93
ETH0.04%$0.04635729.6875$33.82
ETH0.04%$0.129905259.0019$33.65
ETH0.04%$0.295034112.6765$33.24
ETH0.04%<$0.000001207,963,637,365.3179$33.17
ETH0.04%$0.01182,796.5$33
ETH0.04%$0.0258821,264.7357$32.73
ETH0.04%$2.4513.2061$32.35
ETH0.04%$0.000044738,965.8859$32.2
ETH0.04%$0.045984694.9693$31.96
ETH0.04%$0.060692518.9466$31.5
ETH0.04%$1.2525.1564$31.45
ETH0.04%$0.208919149.3154$31.19
ETH0.04%$0.0000191,615,000$31.14
ETH0.04%$0.0040047,682.2161$30.76
ETH0.04%<$0.000001162,620,772.6804$30.7
ETH0.04%$0.88891834.3336$30.52
ETH0.04%$1.1725.9621$30.38
ETH0.03%$344.680.0863$29.76
ETH0.03%$0.228068129.6682$29.57
ETH0.03%$0.29622199.4944$29.47
ETH0.03%$3.987.375$29.35
ETH0.03%$1.9115.2304$29.16
ETH0.03%$0.0083383,482.9731$29.04
ETH0.03%$0.0088163,258.8715$28.73
ETH0.03%$0.152052188.6062$28.68
ETH0.03%<$0.000001356,069,519.797$28.58
ETH0.03%$0.073327386.4744$28.34
ETH0.03%$4,094.020.00687596$28.15
ETH0.03%$0.45006362.3784$28.07
ETH0.03%$0.0000074,231,649.1669$28.01
ETH0.03%$9.263.0056$27.83
ETH0.03%$0.0000271,024,412.4254$27.44
ETH0.03%$0.035836764.0285$27.38
ETH0.03%$0.031094878.6853$27.32
ETH0.03%$0.071994378.7128$27.26
ETH0.03%$0.000012,578,319.0915$27.05
ETH0.03%$0.93861128.7077$26.95
ETH0.03%$0.066495403.75$26.85
ETH0.03%$39.770.6718$26.72
ETH0.03%<$0.0000014,506,919,451.0494$26.68
ETH0.03%<$0.0000018,919,063,978.8323$26.57
ETH0.03%$0.005554,742$26.32
ETH0.03%$119.340.2202$26.27
ETH0.03%$0.082386318.7796$26.26
ETH0.03%$0.31941781.3534$25.99
ETH0.03%$1.0125.5$25.84
ETH0.03%$286.270.0902$25.82
ETH0.03%$1.4417.9248$25.81
ETH0.03%$0.80452131.518$25.36
ETH0.03%$0.79583831.828$25.33
ETH0.03%$2.310.9791$25.22
ETH0.03%$0.029193856.0834$24.99
ETH0.03%$4.345.7286$24.86
ETH0.03%$0.054397455.2901$24.77
ETH0.03%$0.164334147.0737$24.17
ETH0.03%$0.158657151.7083$24.07
ETH0.03%$0.000037649,267.3695$23.97
ETH0.03%$14.131.6928$23.92
ETH0.03%$0.0029677,954.6727$23.6
ETH0.03%$1.7913.0639$23.38
ETH0.03%$0.143572157.6224$22.63
ETH0.03%$0.026432840.1892$22.21
ETH0.03%$0.161212137.5795$22.18
ETH0.03%$0.0011718,897.0545$22.1
ETH0.03%<$0.0000011,478,453,390.7652$21.64
ETH0.03%$0.130666165.2376$21.59
ETH0.03%$0.008582,503.1397$21.48
ETH0.02%$0.0000171,246,243.3632$21.34
ETH0.02%$147.440.1441$21.24
ETH0.02%$0.24693185.9125$21.21
ETH0.02%$0.27276677.0389$21.01
ETH0.02%$2.897.2655$21
ETH0.02%$0.0181741,146.9006$20.84
ETH0.02%$0.00116617,757.435$20.71
ETH0.02%$1.0619.4603$20.71
ETH0.02%$0.077661264.8101$20.57
ETH0.02%$1.612.8561$20.54
ETH0.02%$30.130.6802$20.5
ETH0.02%$0.000922,723.3983$20.45
ETH0.02%$0.118682172.1809$20.43
ETH0.02%$0.99771120.4$20.35
ETH0.02%$0.0000121,681,806.9129$20.06
ETH0.02%$0.030297654.791$19.84
ETH0.02%<$0.000001339,530,579.0159$19.7
ETH0.02%$1.3414.6193$19.59
ETH0.02%$0.080218243.4551$19.53
ETH0.02%$0.56781634.3858$19.52
ETH0.02%$0.00039848,922.9096$19.49
ETH0.02%$1.5112.8178$19.35
ETH0.02%$0.0119471,604.7358$19.17
ETH0.02%$21.730.8754$19.02
ETH0.02%$10.151.8662$18.94
ETH0.02%$0.135729139.381$18.92
ETH0.02%$0.010731,757.0218$18.85
ETH0.02%$2,210.070.0085$18.79
ETH0.02%$0.0000141,367,387.0142$18.62
ETH0.02%$0.000045410,842.4947$18.4
ETH0.02%$0.00104117,622.9241$18.35
ETH0.02%$0.0000062,821,772.7631$18.18
ETH0.02%$61.460.2951$18.14
ETH0.02%<$0.00000164,314,650,040.1513$18.13
ETH0.02%$0.127803141.4624$18.08
ETH0.02%$0.00153211,741.1425$17.99
ETH0.02%$0.0171671,040.108$17.86
ETH0.02%$0.00000211,341,031.7736$17.75
ETH0.02%$0.00160711,011.0086$17.7
ETH0.02%$299.870.0588$17.63
ETH0.02%$4,279.380.0041021$17.55
ETH0.02%$1.1315.4118$17.42
ETH0.02%$0.99752817.4445$17.4
ETH0.02%$0.000049350,954.5206$17.34
ETH0.02%$0.6497626.5815$17.27
ETH0.02%$0.127015135.6043$17.22
ETH0.02%$0.133744128.4472$17.18
ETH0.02%$1.2913.3023$17.12
ETH0.02%$7.372.3029$16.97
ETH0.02%$395.960.0427$16.93
ETH0.02%$0.7964121.222$16.9
ETH0.02%$46.020.3668$16.88
ETH0.02%$0.96195517.4419$16.78
ETH0.02%$0.018131916.3084$16.61
ETH0.02%$0.94015417.3834$16.34
ETH0.02%$0.00028557,419.0543$16.34
ETH0.02%$0.1664997.9659$16.31
ETH0.02%$0.030369531.0794$16.13
ETH0.02%$0.0020547,843.2438$16.11
ETH0.02%$0.00136911,767.4767$16.11
ETH0.02%$0.066393241.6061$16.04
ETH0.02%$0.00073221,886.5786$16.02
ETH0.02%<$0.00000134,528,094.327$15.98
ETH0.02%$1.0515.0835$15.9
ETH0.02%$0.0000091,708,911.1146$15.76
ETH0.02%<$0.000001391,718,019.443$15.71
ETH0.02%$0.0000062,849,219.0696$15.67
ETH0.02%$0.0148331,037.0734$15.38
ETH0.02%$6.622.3202$15.36
ETH0.02%$0.07725197.7433$15.28
ETH0.02%$0.88282117.3016$15.27
ETH0.02%$1.798.5262$15.26
ETH0.02%$22.690.6708$15.22
ETH0.02%$0.34026444.4613$15.13
ETH0.02%$0.70504621.3544$15.06
ETH0.02%$0.21849368.3036$14.92
ETH0.02%$0.22022667.6776$14.9
ETH0.02%$0.0101021,472.9484$14.88
ETH0.02%$0.0000035,927,265.0688$14.86
ETH0.02%$0.056006265.1651$14.85
ETH0.02%$0.0000072,012,873.2416$14.46
ETH0.02%$3.653.9502$14.42
ETH0.02%$0.081783175.2049$14.33
ETH0.02%$0.0000072,069,299.4659$14.09
ETH0.02%$0.0083541,679.0344$14.03
ETH0.02%$1.977.0961$13.98
ETH0.02%$0.00000120,919,539.5734$13.86
ETH0.02%<$0.0000012,107,716,428.8369$13.82
ETH0.02%$0.00000110,866,821.9193$13.71
ETH0.02%$100,1610.000136$13.62
ETH0.02%$28.020.4833$13.54
ETH0.02%$0.068176197.2707$13.45
ETH0.02%$0.00031941,660.9815$13.29
ETH0.02%$1.0912.1527$13.23
ETH0.02%$0.65984920.0488$13.23
ETH0.02%$0.14607690.3645$13.2
ETH0.02%$3.573.6826$13.15
ETH0.02%$0.46927.9004$13.09
ETH0.02%<$0.000001698,158,398.8623$12.86
ETH0.02%$2.535.0745$12.84
ETH0.01%$0.0071381,785.7464$12.75
ETH0.01%$0.000088144,202$12.7
ETH0.01%$2.036.2352$12.67
ETH0.01%$0.23758853.1575$12.63
ETH0.01%$0.021896573.359$12.55
ETH0.01%$0.00000113,228,765.685$12.53
ETH0.01%$0.0000043,469,908.2107$12.47
ETH0.01%$1.796.9557$12.44
ETH0.01%$0.32456138.25$12.41
ETH0.01%$0.0068931,790.8883$12.34
ETH0.01%$4.142.9724$12.31
ETH0.01%$0.72632316.9167$12.29
ETH0.01%$1.48.721$12.21
ETH0.01%$0.18988463.7899$12.11
ETH0.01%$0.27825743.4557$12.09
ETH0.01%$1.0311.6746$12.07
ETH0.01%$0.0116191,030.5698$11.97
ETH0.01%$0.013994850.6958$11.9
ETH0.01%$0.14258283.4828$11.9
ETH0.01%$0.00088713,349.7064$11.84
ETH0.01%<$0.00000124,463,879.9844$11.71
ETH0.01%$0.26870543.4467$11.67
ETH0.01%$0.015486752.3071$11.65
ETH0.01%$0.003083,776.8312$11.63
ETH0.01%<$0.0000012,961,021,515.9471$11.39
ETH0.01%$0.0108881,044.6496$11.37
ETH0.01%$0.0000071,717,283.8027$11.28
ETH0.01%$0.030572366.3789$11.2
ETH0.01%$0.020374549.5251$11.2
ETH0.01%$0.092919120.1535$11.16
ETH0.01%$20.120.5464$10.99
ETH0.01%$1.826.0313$10.98
ETH0.01%$0.0024564,462.5$10.96
ETH0.01%$0.99129811.05$10.95
ETH0.01%$0.00074114,737.2924$10.92
ETH0.01%$0.02168498.3646$10.8
ETH0.01%$0.47607422.4546$10.69
ETH0.01%$0.061346172.5298$10.58
ETH0.01%$0.049174215.2231$10.58
ETH0.01%$0.11683190.1801$10.54
ETH0.01%$0.016312644.573$10.51
ETH0.01%$0.00023644,440.4202$10.49
ETH0.01%$0.34387929.892$10.28
ETH0.01%$0.00060217,000$10.23
ETH0.01%$0.15511765.6242$10.18
ETH0.01%$0.067223150.2847$10.1
ETH0.01%<$0.00000168,308,654.7935$10.06
ETH0.01%$0.088442112.764$9.97
ETH0.01%$0.089935110.5595$9.94
ETH0.01%$0.0010419,469.7797$9.86
ETH0.01%$0.0014996,445.7955$9.66
ETH0.01%$0.71413413.4686$9.62
ETH0.01%$1.755.409$9.47
ETH0.01%$0.015587605.0379$9.43
ETH0.01%$0.0043182,181.1569$9.42
ETH0.01%$0.15511760.6372$9.41
ETH0.01%$4.052.2744$9.22
ETH0.01%$0.0023363,913.5125$9.14
ETH0.01%$0.044729204.4054$9.14
ETH0.01%$0.00041122,117.3202$9.1
ETH0.01%$0.011821765$9.04
ETH0.01%$0.5325616.8272$8.96
ETH0.01%$1.715.18$8.86
ETH0.01%$0.0000024,141,027.3347$8.82
ETH0.01%$0.014229613.5748$8.73
ETH0.01%$0.32489826.7391$8.69
ETH0.01%$0.51187316.8839$8.64
ETH0.01%$0.9964668.6445$8.61
ETH0.01%$0.0017724,847.4202$8.59
ETH<0.01%$0.16393851.8083$8.49
ETH<0.01%<$0.000001812,807,335.3001$8.49
ETH<0.01%<$0.00000118,766,116.756$8.42
ETH<0.01%$0.13189863.7025$8.4
ETH<0.01%$0.0009668,666.3326$8.37
ETH<0.01%$18.230.459$8.37
ETH<0.01%$0.49014617$8.33
ETH<0.01%$0.34101124.3644$8.31
ETH<0.01%<$0.000001387,906,250.7352$8.19
ETH<0.01%$2,640.20.0031$8.18
ETH<0.01%$0.047952170.5927$8.18
ETH<0.01%$0.0020513,982.8467$8.17
ETH<0.01%$0.12474265.3668$8.15
ETH<0.01%$0.000012653,076.867$8.13
ETH<0.01%$0.037777213.3868$8.06
ETH<0.01%$0.079107101.62$8.04
ETH<0.01%$0.0068971,156.3202$7.98
ETH<0.01%$0.34148323.3237$7.96
ETH<0.01%$0.0000042,125,000.0085$7.92
ETH<0.01%$0.22606935.005$7.91
ETH<0.01%$346.260.0226$7.81
ETH<0.01%$0.0016084,806.9331$7.73
ETH<0.01%$0.48126516.0073$7.7
ETH<0.01%$0.11757165.5194$7.7
ETH<0.01%$0.010742710.4542$7.63
ETH<0.01%$0.0000017,576,862.9719$7.56
ETH<0.01%$0.38035219.7277$7.5
ETH<0.01%<$0.00000165,995,421.5601$7.45
ETH<0.01%$0.58064812.7434$7.4
ETH<0.01%$3.082.3903$7.37
ETH<0.01%$0.0000071,107,700.41$7.32
ETH<0.01%$0.0038851,882.7364$7.31
ETH<0.01%$0.32682822.2203$7.26
ETH<0.01%$0.9992017.225$7.22
ETH<0.01%$0.16153244.622$7.21
ETH<0.01%$0.00042416,807.8605$7.13
ETH<0.01%$4,063.80.0017502$7.11
ETH<0.01%$0.000048148,556.2803$7.07
ETH<0.01%$0.13277153.2755$7.07
ETH<0.01%$0.65243610.6038$6.92
ETH<0.01%$0.0008128,500.0076$6.9
ETH<0.01%$0.053316127.8821$6.82
ETH<0.01%$0.00058511,625.6176$6.8
ETH<0.01%<$0.0000012,899,880,472.6245$6.78
ETH<0.01%$0.54259512.4025$6.73
ETH<0.01%$0.014362462.5766$6.64
ETH<0.01%$0.048295137.4568$6.64
ETH<0.01%$0.03228205.2317$6.62
ETH<0.01%$0.17248438.3186$6.61
ETH<0.01%$0.402816.362$6.59
ETH<0.01%$0.037541174.0484$6.53
ETH<0.01%$0.014285455.6313$6.51
ETH<0.01%$0.5161512.5729$6.49
ETH<0.01%$0.37346917.3575$6.48
ETH<0.01%<$0.00000145,050,000,000$6.48
ETH<0.01%$0.8121927.9419$6.45
ETH<0.01%$0.0000015,510,495.5947$6.45
ETH<0.01%$0.006638970.9301$6.44
ETH<0.01%$2.332.7558$6.42
ETH<0.01%$16.3998$6.4
ETH<0.01%$0.7161098.8828$6.36
ETH<0.01%$0.02574246.7015$6.35
ETH<0.01%$0.07382985.8784$6.34
ETH<0.01%$14.280.4439$6.34
ETH<0.01%$4,116.110.00152387$6.27
ETH<0.01%$0.0000023,339,918.1582$6.27
ETH<0.01%$26.170.2372$6.21
ETH<0.01%$0.7297068.5$6.2
ETH<0.01%$0.060501101.329$6.13
ETH<0.01%$0.057767105.9919$6.12
ETH<0.01%$49.130.1241$6.1
ETH<0.01%$3.311.802$5.96
ETH<0.01%$2.322.55$5.91
ETH<0.01%$15.8668$5.87
ETH<0.01%$0.8217037.14$5.87
ETH<0.01%$0.18929630.9019$5.85
ETH<0.01%$5.411.0754$5.82
ETH<0.01%$0.00823703.8663$5.79
ETH<0.01%$0.0029151,971.24$5.75
ETH<0.01%$0.16167935.3823$5.72
ETH<0.01%$0.0026822,125$5.7
ETH<0.01%$1.194.7165$5.61
ETH<0.01%$0.00623893.7925$5.57
ETH<0.01%$1.055.2942$5.54
ETH<0.01%$0.029539187.144$5.53
ETH<0.01%$2.72.0351$5.49
ETH<0.01%$0.033034165.7857$5.48
ETH<0.01%$9.450.5792$5.47
ETH<0.01%$0.025942209.8799$5.44
ETH<0.01%<$0.0000013,665,333,705.4162$5.43
ETH<0.01%<$0.000001204,000,000$5.37
ETH<0.01%$0.010326</