ETH Price: $1,798.58 (+10.44%)

Contract

0x2527Dd6374a2345b99B15CE3835cB9bC1B28208C

Overview

ETH Balance

0.002899070522994375 ETH

ETH Value

$5.21 (@ $1,798.58/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

> 10 Internal Transactions and > 10 Token Transfers found.

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
130349072025-04-23 10:50:532 mins ago1745405453
0x2527Dd63...C1B28208C
0.00000005 ETH
130331482025-04-23 9:52:151 hr ago1745401935
0x2527Dd63...C1B28208C
0.00000026 ETH
130312362025-04-23 8:48:312 hrs ago1745398111
0x2527Dd63...C1B28208C
0.00000013 ETH
130264282025-04-23 6:08:154 hrs ago1745388495
0x2527Dd63...C1B28208C
0.00000748 ETH
130248792025-04-23 5:16:375 hrs ago1745385397
0x2527Dd63...C1B28208C
0.00006876 ETH
130246752025-04-23 5:09:495 hrs ago1745384989
0x2527Dd63...C1B28208C
0.00006737 ETH
130219632025-04-23 3:39:257 hrs ago1745379565
0x2527Dd63...C1B28208C
0.0000005 ETH
130204652025-04-23 2:49:298 hrs ago1745376569
0x2527Dd63...C1B28208C
0.00006357 ETH
130183982025-04-23 1:40:359 hrs ago1745372435
0x2527Dd63...C1B28208C
0.00006268 ETH
130124542025-04-22 22:22:2712 hrs ago1745360547
0x2527Dd63...C1B28208C
0.00005424 ETH
130123162025-04-22 22:17:5112 hrs ago1745360271
0x2527Dd63...C1B28208C
0.00005297 ETH
130121702025-04-22 22:12:5912 hrs ago1745359979
0x2527Dd63...C1B28208C
0.0000513 ETH
130115632025-04-22 21:52:4513 hrs ago1745358765
0x2527Dd63...C1B28208C
0.00004892 ETH
130113702025-04-22 21:46:1913 hrs ago1745358379
0x2527Dd63...C1B28208C
0.00004795 ETH
130110792025-04-22 21:36:3713 hrs ago1745357797
0x2527Dd63...C1B28208C
0.0000469 ETH
130106732025-04-22 21:23:0513 hrs ago1745356985
0x2527Dd63...C1B28208C
0.00000117 ETH
130104432025-04-22 21:15:2513 hrs ago1745356525
0x2527Dd63...C1B28208C
0.00000117 ETH
130100952025-04-22 21:03:4913 hrs ago1745355829
0x2527Dd63...C1B28208C
0 ETH
130097812025-04-22 20:53:2113 hrs ago1745355201
0x2527Dd63...C1B28208C
0.00000234 ETH
130070772025-04-22 19:23:1315 hrs ago1745349793
0x2527Dd63...C1B28208C
0.00000298 ETH
130063872025-04-22 19:00:1315 hrs ago1745348413
0x2527Dd63...C1B28208C
0.00004593 ETH
130061462025-04-22 18:52:1116 hrs ago1745347931
0x2527Dd63...C1B28208C
0.00004468 ETH
130048552025-04-22 18:09:0916 hrs ago1745345349
0x2527Dd63...C1B28208C
0.00000695 ETH
130039972025-04-22 17:40:3317 hrs ago1745343633
0x2527Dd63...C1B28208C
0.00008557 ETH
130007212025-04-22 15:51:2119 hrs ago1745337081
0x2527Dd63...C1B28208C
0.00002281 ETH
View All Internal Transactions

Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FeeCollector

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion, GNU GPLv2 license
File 1 of 8 : FeeCollector.sol
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity ^0.8.0;

import {Owned} from "solmate/auth/Owned.sol";
import {ERC20} from "solmate/tokens/ERC20.sol";
import {SafeTransferLib} from "solmate/utils/SafeTransferLib.sol";
import {IFeeCollector} from "./interfaces/IFeeCollector.sol";
import {IPermit2} from "./external/IPermit2.sol";

/// @notice The collector of protocol fees that will be used to swap and send to a fee recipient address.
contract FeeCollector is Owned, IFeeCollector {
    using SafeTransferLib for ERC20;

    address public universalRouter;

    ERC20 public immutable feeToken;
    IPermit2 public immutable permit2;

    uint256 public constant MAX_APPROVAL_AMOUNT = type(uint256).max;
    uint160 public constant MAX_PERMIT2_APPROVAL_AMOUNT = type(uint160).max;
    uint48 public constant MAX_PERMIT2_DEADLINE = type(uint48).max;

    constructor(address _owner, address _universalRouter, address _permit2, address _feeToken) Owned(_owner) {
        universalRouter = _universalRouter;
        feeToken = ERC20(_feeToken);
        permit2 = IPermit2(_permit2);
    }

    /// @inheritdoc IFeeCollector
    function swapBalance(bytes calldata swapData, uint256 nativeValue) external onlyOwner {
        _execute(swapData, nativeValue);
    }

    /// @inheritdoc IFeeCollector
    function swapBalance(bytes calldata swapData, uint256 nativeValue, ERC20[] calldata tokensToApprove)
        external
        onlyOwner
    {
        unchecked {
            for (uint256 i = 0; i < tokensToApprove.length; i++) {
                tokensToApprove[i].safeApprove(address(permit2), MAX_APPROVAL_AMOUNT);
                permit2.approve(
                    address(tokensToApprove[i]), universalRouter, MAX_PERMIT2_APPROVAL_AMOUNT, MAX_PERMIT2_DEADLINE
                );
            }
        }

        _execute(swapData, nativeValue);
    }

    /// @notice Helper function to call UniversalRouter.
    /// @param swapData The bytes call data to be forwarded to UniversalRouter.
    /// @param nativeValue The amount of native currency to send to UniversalRouter.
    function _execute(bytes calldata swapData, uint256 nativeValue) internal {
        (bool success,) = universalRouter.call{value: nativeValue}(swapData);
        if (!success) revert UniversalRouterCallFailed();
    }

    /// @inheritdoc IFeeCollector
    function revokeTokenApprovals(ERC20[] calldata tokensToRevoke) external onlyOwner {
        unchecked {
            for (uint256 i = 0; i < tokensToRevoke.length; i++) {
                tokensToRevoke[i].safeApprove(address(permit2), 0);
            }
        }
    }

    /// @inheritdoc IFeeCollector
    function revokePermit2Approvals(IPermit2.TokenSpenderPair[] calldata approvals) external onlyOwner {
        permit2.lockdown(approvals);
    }

    /// @inheritdoc IFeeCollector
    function withdrawFeeToken(address feeRecipient, uint256 amount) external onlyOwner {
        feeToken.safeTransfer(feeRecipient, amount);
    }

    /// @inheritdoc IFeeCollector
    function setUniversalRouter(address _universalRouter) external onlyOwner {
        emit UniversalRouterChanged(universalRouter, _universalRouter);
        universalRouter = _universalRouter;
    }

    receive() external payable {}
}

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

/// @notice Simple single owner authorization mixin.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/auth/Owned.sol)
abstract contract Owned {
    /*//////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

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

    /*//////////////////////////////////////////////////////////////
                            OWNERSHIP STORAGE
    //////////////////////////////////////////////////////////////*/

    address public owner;

    modifier onlyOwner() virtual {
        require(msg.sender == owner, "UNAUTHORIZED");

        _;
    }

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

    constructor(address _owner) {
        owner = _owner;

        emit OwnershipTransferred(address(0), _owner);
    }

    /*//////////////////////////////////////////////////////////////
                             OWNERSHIP LOGIC
    //////////////////////////////////////////////////////////////*/

    function transferOwnership(address newOwner) public virtual onlyOwner {
        owner = newOwner;

        emit OwnershipTransferred(msg.sender, newOwner);
    }
}

File 3 of 8 : 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/transmissions11/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
    //////////////////////////////////////////////////////////////*/

    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 {
            address recoveredAddress = ecrecover(
                keccak256(
                    abi.encodePacked(
                        "\x19\x01",
                        DOMAIN_SEPARATOR(),
                        keccak256(
                            abi.encode(
                                keccak256(
                                    "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"
                                ),
                                owner,
                                spender,
                                value,
                                nonces[owner]++,
                                deadline
                            )
                        )
                    )
                ),
                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 8 : 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/transmissions11/solmate/blob/main/src/utils/SafeTransferLib.sol)
/// @dev Use with caution! Some functions in this library knowingly create dirty bits at the destination of the free memory pointer.
/// @dev Note that none of the functions in this library check that a token has code at all! That responsibility is delegated to the caller.
library SafeTransferLib {
    /*//////////////////////////////////////////////////////////////
                             ETH OPERATIONS
    //////////////////////////////////////////////////////////////*/

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

        /// @solidity memory-safe-assembly
        assembly {
            // Transfer the ETH and store if it succeeded or not.
            success := call(gas(), to, amount, 0, 0, 0, 0)
        }

        require(success, "ETH_TRANSFER_FAILED");
    }

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

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

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

            // Write the abi-encoded calldata into memory, beginning with the function selector.
            mstore(freeMemoryPointer, 0x23b872dd00000000000000000000000000000000000000000000000000000000)
            mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff)) // Append and mask the "from" argument.
            mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Append and mask the "to" argument.
            mstore(add(freeMemoryPointer, 68), amount) // Append the "amount" argument. Masking not required as it's a full 32 byte type.

            success := and(
                // Set success to whether the call reverted, if not we check it either
                // returned exactly 1 (can't just be non-zero data), or had no return data.
                or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())),
                // We use 100 because the length of our calldata totals up like so: 4 + 32 * 3.
                // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space.
                // Counterintuitively, this call must be positioned second to the or() call in the
                // surrounding and() call or else returndatasize() will be zero during the computation.
                call(gas(), token, 0, freeMemoryPointer, 100, 0, 32)
            )
        }

        require(success, "TRANSFER_FROM_FAILED");
    }

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

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

            // Write the abi-encoded calldata into memory, beginning with the function selector.
            mstore(freeMemoryPointer, 0xa9059cbb00000000000000000000000000000000000000000000000000000000)
            mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Append and mask the "to" argument.
            mstore(add(freeMemoryPointer, 36), amount) // Append the "amount" argument. Masking not required as it's a full 32 byte type.

            success := and(
                // Set success to whether the call reverted, if not we check it either
                // returned exactly 1 (can't just be non-zero data), or had no return data.
                or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())),
                // We use 68 because the length of our calldata totals up like so: 4 + 32 * 2.
                // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space.
                // Counterintuitively, this call must be positioned second to the or() call in the
                // surrounding and() call or else returndatasize() will be zero during the computation.
                call(gas(), token, 0, freeMemoryPointer, 68, 0, 32)
            )
        }

        require(success, "TRANSFER_FAILED");
    }

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

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

            // Write the abi-encoded calldata into memory, beginning with the function selector.
            mstore(freeMemoryPointer, 0x095ea7b300000000000000000000000000000000000000000000000000000000)
            mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Append and mask the "to" argument.
            mstore(add(freeMemoryPointer, 36), amount) // Append the "amount" argument. Masking not required as it's a full 32 byte type.

            success := and(
                // Set success to whether the call reverted, if not we check it either
                // returned exactly 1 (can't just be non-zero data), or had no return data.
                or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())),
                // We use 68 because the length of our calldata totals up like so: 4 + 32 * 2.
                // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space.
                // Counterintuitively, this call must be positioned second to the or() call in the
                // surrounding and() call or else returndatasize() will be zero during the computation.
                call(gas(), token, 0, freeMemoryPointer, 68, 0, 32)
            )
        }

        require(success, "APPROVE_FAILED");
    }
}

File 5 of 8 : IFeeCollector.sol
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity ^0.8.13;

import {ERC20} from "solmate/tokens/ERC20.sol";
import {IPermit2} from "../external/IPermit2.sol";

/// @notice The collector of protocol fees that will be used to swap and send to a fee recipient address.
interface IFeeCollector {
    /// @notice Error thrown when the call to UniversalRouter fails.
    error UniversalRouterCallFailed();

    /// @notice Emitted when the UniversalRouter address is changed.
    /// @param oldUniversalRouter The old router address.
    /// @param newUniversalRouter The new router address.
    event UniversalRouterChanged(address oldUniversalRouter, address newUniversalRouter);

    /// @notice Swaps the contract balance.
    /// @param swapData The bytes call data to be forwarded to UniversalRouter.
    /// @param nativeValue The amount of native currency to send to UniversalRouter.
    function swapBalance(bytes calldata swapData, uint256 nativeValue) external;

    /// @notice Approves tokens for swapping and then swaps the contract balance.
    /// @param swapData The bytes call data to be forwarded to UniversalRouter.
    /// @param nativeValue The amount of native currency to send to UniversalRouter.
    /// @param tokensToApprove An array of ERC20 tokens to approve for spending.
    function swapBalance(bytes calldata swapData, uint256 nativeValue, ERC20[] calldata tokensToApprove) external;

    /// @notice Revokes approvals on tokens by setting their allowance to 0.
    /// @param tokensToRevoke The token to revoke the approval for.
    function revokeTokenApprovals(ERC20[] calldata tokensToRevoke) external;

    /// @notice Revokes the permit2 allowance of a spender by setting token allowances to 0.
    /// @param approvals The approvals to revoke.
    function revokePermit2Approvals(IPermit2.TokenSpenderPair[] calldata approvals) external;

    /// @notice Transfers the fee token balance from this contract to the fee recipient.
    /// @param feeRecipient The address to send the fee token balance to.
    /// @param amount The amount to withdraw.
    function withdrawFeeToken(address feeRecipient, uint256 amount) external;

    /// @notice Sets the address of the UniversalRouter contract.
    /// @param _universalRouter The address of the UniversalRouter contract.
    function setUniversalRouter(address _universalRouter) external;
}

File 6 of 8 : IPermit2.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import {IAllowanceTransfer} from "./IAllowanceTransfer.sol";

/// @notice Permit2 handles signature-based transfers in SignatureTransfer and allowance-based transfers in AllowanceTransfer.
/// @dev Users must approve Permit2 before calling any of the transfer functions.
interface IPermit2 is IAllowanceTransfer {
// IPermit2 unifies the two interfaces so users have maximal flexibility with their approval.
}

File 7 of 8 : IAllowanceTransfer.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import {IEIP712} from "./IEIP712.sol";

/// @title AllowanceTransfer
/// @notice Handles ERC20 token permissions through signature based allowance setting and ERC20 token transfers by checking allowed amounts
/// @dev Requires user's token approval on the Permit2 contract
interface IAllowanceTransfer is IEIP712 {
    /// @notice A token spender pair.
    struct TokenSpenderPair {
        // the token the spender is approved
        address token;
        // the spender address
        address spender;
    }

    /// @notice A mapping from owner address to token address to spender address to PackedAllowance struct, which contains details and conditions of the approval.
    /// @notice The mapping is indexed in the above order see: allowance[ownerAddress][tokenAddress][spenderAddress]
    /// @dev The packed slot holds the allowed amount, expiration at which the allowed amount is no longer valid, and current nonce thats updated on any signature based approvals.
    function allowance(address user, address token, address spender)
        external
        view
        returns (uint160 amount, uint48 expiration, uint48 nonce);

    /// @notice Approves the spender to use up to amount of the specified token up until the expiration
    /// @param token The token to approve
    /// @param spender The spender address to approve
    /// @param amount The approved amount of the token
    /// @param expiration The timestamp at which the approval is no longer valid
    /// @dev The packed allowance also holds a nonce, which will stay unchanged in approve
    /// @dev Setting amount to type(uint160).max sets an unlimited approval
    function approve(address token, address spender, uint160 amount, uint48 expiration) external;

    /// @notice Enables performing a "lockdown" of the sender's Permit2 identity
    /// by batch revoking approvals
    /// @param approvals Array of approvals to revoke.
    function lockdown(TokenSpenderPair[] calldata approvals) external;
}

File 8 of 8 : IEIP712.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface IEIP712 {
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}

Settings
{
  "remappings": [
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "forge-std/=lib/forge-std/src/",
    "solmate/=lib/solmate/src/",
    "v2-core/=lib/v2-core/contracts/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "evmVersion": "paris",
  "viaIR": false,
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_universalRouter","type":"address"},{"internalType":"address","name":"_permit2","type":"address"},{"internalType":"address","name":"_feeToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"UniversalRouterCallFailed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldUniversalRouter","type":"address"},{"indexed":false,"internalType":"address","name":"newUniversalRouter","type":"address"}],"name":"UniversalRouterChanged","type":"event"},{"inputs":[],"name":"MAX_APPROVAL_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PERMIT2_APPROVAL_AMOUNT","outputs":[{"internalType":"uint160","name":"","type":"uint160"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PERMIT2_DEADLINE","outputs":[{"internalType":"uint48","name":"","type":"uint48"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeToken","outputs":[{"internalType":"contract ERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"permit2","outputs":[{"internalType":"contract IPermit2","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"internalType":"struct IAllowanceTransfer.TokenSpenderPair[]","name":"approvals","type":"tuple[]"}],"name":"revokePermit2Approvals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ERC20[]","name":"tokensToRevoke","type":"address[]"}],"name":"revokeTokenApprovals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_universalRouter","type":"address"}],"name":"setUniversalRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"swapData","type":"bytes"},{"internalType":"uint256","name":"nativeValue","type":"uint256"}],"name":"swapBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"swapData","type":"bytes"},{"internalType":"uint256","name":"nativeValue","type":"uint256"},{"internalType":"contract ERC20[]","name":"tokensToApprove","type":"address[]"}],"name":"swapBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"universalRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"feeRecipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawFeeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405234801561001057600080fd5b50604051610d96380380610d9683398101604081905261002f916100bf565b600080546001600160a01b0319166001600160a01b03861690811782556040518692907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180546001600160a01b0319166001600160a01b0394851617905582166080521660a05250610113565b80516001600160a01b03811681146100ba57600080fd5b919050565b600080600080608085870312156100d557600080fd5b6100de856100a3565b93506100ec602086016100a3565b92506100fa604086016100a3565b9150610108606086016100a3565b905092959194509250565b60805160a051610c3c61015a6000396000818160ff01528181610414015281816105100152818161054601526106720152600081816101cd01526104ab0152610c3c6000f3fe6080604052600436106100e15760003560e01c80638da5cb5b1161007f578063b4a25ce711610059578063b4a25ce714610273578063bbf20c15146102a4578063d88d35de146102c4578063f2fde38b146102e457600080fd5b80638da5cb5b1461020f57806394a228b51461022f578063b2ef14e31461025357600080fd5b8063481fb142116100bb578063481fb14214610180578063628a4b2f1461019b578063647846a5146101bb57806365d82753146101ef57600080fd5b806312261ee7146100ed5780631ac169861461013e57806335a9e4df1461016057600080fd5b366100e857005b600080fd5b3480156100f957600080fd5b506101217f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561014a57600080fd5b5061015e61015936600461092a565b610304565b005b34801561016c57600080fd5b50600154610121906001600160a01b031681565b34801561018c57600080fd5b506101216001600160a01b0381565b3480156101a757600080fd5b5061015e6101b636600461098e565b610347565b3480156101c757600080fd5b506101217f000000000000000000000000000000000000000000000000000000000000000081565b3480156101fb57600080fd5b5061015e61020a3660046109f7565b6103da565b34801561021b57600080fd5b50600054610121906001600160a01b031681565b34801561023b57600080fd5b5061024560001981565b604051908152602001610135565b34801561025f57600080fd5b5061015e61026e366004610a39565b610474565b34801561027f57600080fd5b5061028d65ffffffffffff81565b60405165ffffffffffff9091168152602001610135565b3480156102b057600080fd5b5061015e6102bf366004610a65565b6104d6565b3480156102d057600080fd5b5061015e6102df366004610adf565b610631565b3480156102f057600080fd5b5061015e6102ff36600461098e565b6106df565b6000546001600160a01b031633146103375760405162461bcd60e51b815260040161032e90610b54565b60405180910390fd5b610342838383610754565b505050565b6000546001600160a01b031633146103715760405162461bcd60e51b815260040161032e90610b54565b600154604080516001600160a01b03928316815291831660208301527f736ee8e49f5bc52c4483e2bf96ce5c99a25af7c12037267ccde543b28ab63071910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146104045760405162461bcd60e51b815260040161032e90610b54565b60005b818110156103425761046c7f0000000000000000000000000000000000000000000000000000000000000000600085858581811061044757610447610b7a565b905060200201602081019061045c919061098e565b6001600160a01b031691906107e0565b600101610407565b6000546001600160a01b0316331461049e5760405162461bcd60e51b815260040161032e90610b54565b6104d26001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168383610860565b5050565b6000546001600160a01b031633146105005760405162461bcd60e51b815260040161032e90610b54565b60005b8181101561061e576105447f000000000000000000000000000000000000000000000000000000000000000060001985858581811061044757610447610b7a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166387517c4584848481811061058557610585610b7a565b905060200201602081019061059a919061098e565b60015460405160e084901b6001600160e01b03191681526001600160a01b0392831660048201529082166024820152604481019190915265ffffffffffff6064820152608401600060405180830381600087803b1580156105fa57600080fd5b505af115801561060e573d6000803e3d6000fd5b5050600190920191506105039050565b5061062a858585610754565b5050505050565b6000546001600160a01b0316331461065b5760405162461bcd60e51b815260040161032e90610b54565b60405163cc53287f60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063cc53287f906106a99085908590600401610b90565b600060405180830381600087803b1580156106c357600080fd5b505af11580156106d7573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146107095760405162461bcd60e51b815260040161032e90610b54565b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6001546040516000916001600160a01b03169083906107769087908790610bf6565b60006040518083038185875af1925050503d80600081146107b3576040519150601f19603f3d011682016040523d82523d6000602084013e6107b8565b606091505b50509050806107da5760405163cee8b77760e01b815260040160405180910390fd5b50505050565b600060405163095ea7b360e01b81526001600160a01b0384166004820152826024820152602060006044836000895af13d15601f3d11600160005114161716915050806107da5760405162461bcd60e51b815260206004820152600e60248201526d1054141493d59157d1905253115160921b604482015260640161032e565b600060405163a9059cbb60e01b81526001600160a01b0384166004820152826024820152602060006044836000895af13d15601f3d11600160005114161716915050806107da5760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b604482015260640161032e565b60008083601f8401126108f357600080fd5b50813567ffffffffffffffff81111561090b57600080fd5b60208301915083602082850101111561092357600080fd5b9250929050565b60008060006040848603121561093f57600080fd5b833567ffffffffffffffff81111561095657600080fd5b610962868287016108e1565b909790965060209590950135949350505050565b6001600160a01b038116811461098b57600080fd5b50565b6000602082840312156109a057600080fd5b81356109ab81610976565b9392505050565b60008083601f8401126109c457600080fd5b50813567ffffffffffffffff8111156109dc57600080fd5b6020830191508360208260051b850101111561092357600080fd5b60008060208385031215610a0a57600080fd5b823567ffffffffffffffff811115610a2157600080fd5b610a2d858286016109b2565b90969095509350505050565b60008060408385031215610a4c57600080fd5b8235610a5781610976565b946020939093013593505050565b600080600080600060608688031215610a7d57600080fd5b853567ffffffffffffffff80821115610a9557600080fd5b610aa189838a016108e1565b9097509550602088013594506040880135915080821115610ac157600080fd5b50610ace888289016109b2565b969995985093965092949392505050565b60008060208385031215610af257600080fd5b823567ffffffffffffffff80821115610b0a57600080fd5b818501915085601f830112610b1e57600080fd5b813581811115610b2d57600080fd5b8660208260061b8501011115610b4257600080fd5b60209290920196919550909350505050565b6020808252600c908201526b15539055551213d49256915160a21b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6020808252818101839052600090604080840186845b87811015610be9578135610bb981610976565b6001600160a01b0390811684528286013590610bd482610976565b16838601529183019190830190600101610ba6565b5090979650505050505050565b818382376000910190815291905056fea26469706673582212209ca59ca3b1a45c0142169edc7d5c3e7051782a57f49a40db6fa82c782f3349f864736f6c63430008130033000000000000000000000000be84d31b2ee049dcb1d8e7c798511632b44d1b5500000000000000000000000016d4f26c15f3658ec65b1126ff27dd3df2a2996b000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba300000000000000000000000079a02482a880bce3f13e09da970dc34db4cd24d1

Deployed Bytecode

0x6080604052600436106100e15760003560e01c80638da5cb5b1161007f578063b4a25ce711610059578063b4a25ce714610273578063bbf20c15146102a4578063d88d35de146102c4578063f2fde38b146102e457600080fd5b80638da5cb5b1461020f57806394a228b51461022f578063b2ef14e31461025357600080fd5b8063481fb142116100bb578063481fb14214610180578063628a4b2f1461019b578063647846a5146101bb57806365d82753146101ef57600080fd5b806312261ee7146100ed5780631ac169861461013e57806335a9e4df1461016057600080fd5b366100e857005b600080fd5b3480156100f957600080fd5b506101217f000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba381565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561014a57600080fd5b5061015e61015936600461092a565b610304565b005b34801561016c57600080fd5b50600154610121906001600160a01b031681565b34801561018c57600080fd5b506101216001600160a01b0381565b3480156101a757600080fd5b5061015e6101b636600461098e565b610347565b3480156101c757600080fd5b506101217f00000000000000000000000079a02482a880bce3f13e09da970dc34db4cd24d181565b3480156101fb57600080fd5b5061015e61020a3660046109f7565b6103da565b34801561021b57600080fd5b50600054610121906001600160a01b031681565b34801561023b57600080fd5b5061024560001981565b604051908152602001610135565b34801561025f57600080fd5b5061015e61026e366004610a39565b610474565b34801561027f57600080fd5b5061028d65ffffffffffff81565b60405165ffffffffffff9091168152602001610135565b3480156102b057600080fd5b5061015e6102bf366004610a65565b6104d6565b3480156102d057600080fd5b5061015e6102df366004610adf565b610631565b3480156102f057600080fd5b5061015e6102ff36600461098e565b6106df565b6000546001600160a01b031633146103375760405162461bcd60e51b815260040161032e90610b54565b60405180910390fd5b610342838383610754565b505050565b6000546001600160a01b031633146103715760405162461bcd60e51b815260040161032e90610b54565b600154604080516001600160a01b03928316815291831660208301527f736ee8e49f5bc52c4483e2bf96ce5c99a25af7c12037267ccde543b28ab63071910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146104045760405162461bcd60e51b815260040161032e90610b54565b60005b818110156103425761046c7f000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba3600085858581811061044757610447610b7a565b905060200201602081019061045c919061098e565b6001600160a01b031691906107e0565b600101610407565b6000546001600160a01b0316331461049e5760405162461bcd60e51b815260040161032e90610b54565b6104d26001600160a01b037f00000000000000000000000079a02482a880bce3f13e09da970dc34db4cd24d1168383610860565b5050565b6000546001600160a01b031633146105005760405162461bcd60e51b815260040161032e90610b54565b60005b8181101561061e576105447f000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba360001985858581811061044757610447610b7a565b7f000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba36001600160a01b03166387517c4584848481811061058557610585610b7a565b905060200201602081019061059a919061098e565b60015460405160e084901b6001600160e01b03191681526001600160a01b0392831660048201529082166024820152604481019190915265ffffffffffff6064820152608401600060405180830381600087803b1580156105fa57600080fd5b505af115801561060e573d6000803e3d6000fd5b5050600190920191506105039050565b5061062a858585610754565b5050505050565b6000546001600160a01b0316331461065b5760405162461bcd60e51b815260040161032e90610b54565b60405163cc53287f60e01b81526001600160a01b037f000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba3169063cc53287f906106a99085908590600401610b90565b600060405180830381600087803b1580156106c357600080fd5b505af11580156106d7573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146107095760405162461bcd60e51b815260040161032e90610b54565b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6001546040516000916001600160a01b03169083906107769087908790610bf6565b60006040518083038185875af1925050503d80600081146107b3576040519150601f19603f3d011682016040523d82523d6000602084013e6107b8565b606091505b50509050806107da5760405163cee8b77760e01b815260040160405180910390fd5b50505050565b600060405163095ea7b360e01b81526001600160a01b0384166004820152826024820152602060006044836000895af13d15601f3d11600160005114161716915050806107da5760405162461bcd60e51b815260206004820152600e60248201526d1054141493d59157d1905253115160921b604482015260640161032e565b600060405163a9059cbb60e01b81526001600160a01b0384166004820152826024820152602060006044836000895af13d15601f3d11600160005114161716915050806107da5760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b604482015260640161032e565b60008083601f8401126108f357600080fd5b50813567ffffffffffffffff81111561090b57600080fd5b60208301915083602082850101111561092357600080fd5b9250929050565b60008060006040848603121561093f57600080fd5b833567ffffffffffffffff81111561095657600080fd5b610962868287016108e1565b909790965060209590950135949350505050565b6001600160a01b038116811461098b57600080fd5b50565b6000602082840312156109a057600080fd5b81356109ab81610976565b9392505050565b60008083601f8401126109c457600080fd5b50813567ffffffffffffffff8111156109dc57600080fd5b6020830191508360208260051b850101111561092357600080fd5b60008060208385031215610a0a57600080fd5b823567ffffffffffffffff811115610a2157600080fd5b610a2d858286016109b2565b90969095509350505050565b60008060408385031215610a4c57600080fd5b8235610a5781610976565b946020939093013593505050565b600080600080600060608688031215610a7d57600080fd5b853567ffffffffffffffff80821115610a9557600080fd5b610aa189838a016108e1565b9097509550602088013594506040880135915080821115610ac157600080fd5b50610ace888289016109b2565b969995985093965092949392505050565b60008060208385031215610af257600080fd5b823567ffffffffffffffff80821115610b0a57600080fd5b818501915085601f830112610b1e57600080fd5b813581811115610b2d57600080fd5b8660208260061b8501011115610b4257600080fd5b60209290920196919550909350505050565b6020808252600c908201526b15539055551213d49256915160a21b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6020808252818101839052600090604080840186845b87811015610be9578135610bb981610976565b6001600160a01b0390811684528286013590610bd482610976565b16838601529183019190830190600101610ba6565b5090979650505050505050565b818382376000910190815291905056fea26469706673582212209ca59ca3b1a45c0142169edc7d5c3e7051782a57f49a40db6fa82c782f3349f864736f6c63430008130033

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

000000000000000000000000be84d31b2ee049dcb1d8e7c798511632b44d1b5500000000000000000000000016d4f26c15f3658ec65b1126ff27dd3df2a2996b000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba300000000000000000000000079a02482a880bce3f13e09da970dc34db4cd24d1

-----Decoded View---------------
Arg [0] : _owner (address): 0xbE84D31B2eE049DCb1d8E7c798511632b44d1b55
Arg [1] : _universalRouter (address): 0x16D4F26C15f3658ec65B1126ff27DD3dF2a2996b
Arg [2] : _permit2 (address): 0x000000000022D473030F116dDEE9F6B43aC78BA3
Arg [3] : _feeToken (address): 0x79A02482A880bCE3F13e09Da970dC34db4CD24d1

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000be84d31b2ee049dcb1d8e7c798511632b44d1b55
Arg [1] : 00000000000000000000000016d4f26c15f3658ec65b1126ff27dd3df2a2996b
Arg [2] : 000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba3
Arg [3] : 00000000000000000000000079a02482a880bce3f13e09da970dc34db4cd24d1


Deployed Bytecode Sourcemap

450:2809:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;614:33;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;194:32:8;;;176:51;;164:2;149:18;614:33:3;;;;;;;;1140:134;;;;;;;;;;-1:-1:-1;1140:134:3;;;;;:::i;:::-;;:::i;:::-;;540:30;;;;;;;;;;-1:-1:-1;540:30:3;;;;-1:-1:-1;;;;;540:30:3;;;723:71;;;;;;;;;;;;-1:-1:-1;;;;;723:71:3;;3026:196;;;;;;;;;;-1:-1:-1;3026:196:3;;;;;:::i;:::-;;:::i;577:31::-;;;;;;;;;;;;;;;2353:267;;;;;;;;;;-1:-1:-1;2353:267:3;;;;;:::i;:::-;;:::i;690:20:0:-;;;;;;;;;;-1:-1:-1;690:20:0;;;;-1:-1:-1;;;;;690:20:0;;;654:63:3;;;;;;;;;;;;-1:-1:-1;;654:63:3;;;;;3084:25:8;;;3072:2;3057:18;654:63:3;2938:177:8;2843:143:3;;;;;;;;;;-1:-1:-1;2843:143:3;;;;;:::i;:::-;;:::i;800:62::-;;;;;;;;;;;;846:16;800:62;;;;;3614:14:8;3602:27;;;3584:46;;3572:2;3557:18;800:62:3;3440:196:8;1314:555:3;;;;;;;;;;-1:-1:-1;1314:555:3;;;;;:::i;:::-;;:::i;2660:143::-;;;;;;;;;;-1:-1:-1;2660:143:3;;;;;:::i;:::-;;:::i;1312:161:0:-;;;;;;;;;;-1:-1:-1;1312:161:0;;;;;:::i;:::-;;:::i;1140:134:3:-;778:5:0;;-1:-1:-1;;;;;778:5:0;764:10;:19;756:44;;;;-1:-1:-1;;;756:44:0;;;;;;;:::i;:::-;;;;;;;;;1236:31:3::1;1245:8;;1255:11;1236:8;:31::i;:::-;1140:134:::0;;;:::o;3026:196::-;778:5:0;;-1:-1:-1;;;;;778:5:0;764:10;:19;756:44;;;;-1:-1:-1;;;756:44:0;;;;;;;:::i;:::-;3137:15:3::1;::::0;3114:57:::1;::::0;;-1:-1:-1;;;;;3137:15:3;;::::1;5687:34:8::0;;5757:15;;;5752:2;5737:18;;5730:43;3114:57:3::1;::::0;5622:18:8;3114:57:3::1;;;;;;;3181:15;:34:::0;;-1:-1:-1;;;;;;3181:34:3::1;-1:-1:-1::0;;;;;3181:34:3;;;::::1;::::0;;;::::1;::::0;;3026:196::o;2353:267::-;778:5:0;;-1:-1:-1;;;;;778:5:0;764:10;:19;756:44;;;;-1:-1:-1;;;756:44:0;;;;;;;:::i;:::-;2474:9:3::1;2469:135;2489:25:::0;;::::1;2469:135;;;2539:50;2577:7;2587:1;2539:14;;2554:1;2539:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2539:29:3::1;::::0;:50;:29:::1;:50::i;:::-;2516:3;;2469:135;;2843:143:::0;778:5:0;;-1:-1:-1;;;;;778:5:0;764:10;:19;756:44;;;;-1:-1:-1;;;756:44:0;;;;;;;:::i;:::-;2936:43:3::1;-1:-1:-1::0;;;;;2936:8:3::1;:21;2958:12:::0;2972:6;2936:21:::1;:43::i;:::-;2843:143:::0;;:::o;1314:555::-;778:5:0;;-1:-1:-1;;;;;778:5:0;764:10;:19;756:44;;;;-1:-1:-1;;;756:44:0;;;;;;;:::i;:::-;1493:9:3::1;1488:323;1508:26:::0;;::::1;1488:323;;;1559:69;1598:7;-1:-1:-1::0;;1559:15:3::1;;1575:1;1559:18;;;;;;;:::i;:69::-;1646:7;-1:-1:-1::0;;;;;1646:15:3::1;;1691;;1707:1;1691:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;1712:15;::::0;1646:150:::1;::::0;::::1;::::0;;;-1:-1:-1;;;;;;1646:150:3;;;-1:-1:-1;;;;;6466:15:8;;;1646:150:3::1;::::0;::::1;6448:34:8::0;1712:15:3;;::::1;6498:18:8::0;;;6491:43;6550:18;;;6543:43;;;;846:16:3::1;6602:18:8::0;;;6595:55;6382:19;;1646:150:3::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;1536:3:3::1;::::0;;::::1;::::0;-1:-1:-1;1488:323:3::1;::::0;-1:-1:-1;1488:323:3::1;;;1831:31;1840:8;;1850:11;1831:8;:31::i;:::-;1314:555:::0;;;;;:::o;2660:143::-;778:5:0;;-1:-1:-1;;;;;778:5:0;764:10;:19;756:44;;;;-1:-1:-1;;;756:44:0;;;;;;;:::i;:::-;2769:27:3::1;::::0;-1:-1:-1;;;2769:27:3;;-1:-1:-1;;;;;2769:7:3::1;:16;::::0;::::1;::::0;:27:::1;::::0;2786:9;;;;2769:27:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;2660:143:::0;;:::o;1312:161:0:-;778:5;;-1:-1:-1;;;;;778:5:0;764:10;:19;756:44;;;;-1:-1:-1;;;756:44:0;;;;;;;:::i;:::-;1392:5:::1;:16:::0;;-1:-1:-1;;;;;;1392:16:0::1;-1:-1:-1::0;;;;;1392:16:0;::::1;::::0;;::::1;::::0;;1424:42:::1;::::0;1392:16;;1445:10:::1;::::0;1424:42:::1;::::0;1392:5;1424:42:::1;1312:161:::0;:::o;2097:216:3:-;2198:15;;:50;;2181:12;;-1:-1:-1;;;;;2198:15:3;;2226:11;;2198:50;;2239:8;;;;2198:50;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2180:68;;;2263:7;2258:48;;2279:27;;-1:-1:-1;;;2279:27:3;;;;;;;;;;;2258:48;2170:143;2097:216;;;:::o;4729:1605:2:-;4840:12;5010:4;5004:11;-1:-1:-1;;;5133:17:2;5126:93;-1:-1:-1;;;;;5270:2:2;5266:51;5262:1;5243:17;5239:25;5232:86;5404:6;5399:2;5380:17;5376:26;5369:42;6256:2;6253:1;6249:2;6230:17;6227:1;6220:5;6213;6208:51;5777:16;5770:24;5764:2;5746:16;5743:24;5739:1;5735;5729:8;5726:15;5722:46;5719:76;5519:754;5508:765;;;6301:7;6293:34;;;;-1:-1:-1;;;6293:34:2;;8117:2:8;6293:34:2;;;8099:21:8;8156:2;8136:18;;;8129:30;-1:-1:-1;;;8175:18:8;;;8168:44;8229:18;;6293:34:2;7915:338:8;3116:1607:2;3228:12;3398:4;3392:11;-1:-1:-1;;;3521:17:2;3514:93;-1:-1:-1;;;;;3658:2:2;3654:51;3650:1;3631:17;3627:25;3620:86;3792:6;3787:2;3768:17;3764:26;3757:42;4644:2;4641:1;4637:2;4618:17;4615:1;4608:5;4601;4596:51;4165:16;4158:24;4152:2;4134:16;4131:24;4127:1;4123;4117:8;4114:15;4110:46;4107:76;3907:754;3896:765;;;4689:7;4681:35;;;;-1:-1:-1;;;4681:35:2;;8460:2:8;4681:35:2;;;8442:21:8;8499:2;8479:18;;;8472:30;-1:-1:-1;;;8518:18:8;;;8511:45;8573:18;;4681:35:2;8258:339:8;238:347;289:8;299:6;353:3;346:4;338:6;334:17;330:27;320:55;;371:1;368;361:12;320:55;-1:-1:-1;394:20:8;;437:18;426:30;;423:50;;;469:1;466;459:12;423:50;506:4;498:6;494:17;482:29;;558:3;551:4;542:6;534;530:19;526:30;523:39;520:59;;;575:1;572;565:12;520:59;238:347;;;;;:::o;590:477::-;669:6;677;685;738:2;726:9;717:7;713:23;709:32;706:52;;;754:1;751;744:12;706:52;794:9;781:23;827:18;819:6;816:30;813:50;;;859:1;856;849:12;813:50;898:58;948:7;939:6;928:9;924:22;898:58;:::i;:::-;975:8;;872:84;;-1:-1:-1;1057:2:8;1042:18;;;;1029:32;;590:477;-1:-1:-1;;;;590:477:8:o;1488:131::-;-1:-1:-1;;;;;1563:31:8;;1553:42;;1543:70;;1609:1;1606;1599:12;1543:70;1488:131;:::o;1624:247::-;1683:6;1736:2;1724:9;1715:7;1711:23;1707:32;1704:52;;;1752:1;1749;1742:12;1704:52;1791:9;1778:23;1810:31;1835:5;1810:31;:::i;:::-;1860:5;1624:247;-1:-1:-1;;;1624:247:8:o;2097:374::-;2167:8;2177:6;2231:3;2224:4;2216:6;2212:17;2208:27;2198:55;;2249:1;2246;2239:12;2198:55;-1:-1:-1;2272:20:8;;2315:18;2304:30;;2301:50;;;2347:1;2344;2337:12;2301:50;2384:4;2376:6;2372:17;2360:29;;2444:3;2437:4;2427:6;2424:1;2420:14;2412:6;2408:27;2404:38;2401:47;2398:67;;;2461:1;2458;2451:12;2476:457;2575:6;2583;2636:2;2624:9;2615:7;2611:23;2607:32;2604:52;;;2652:1;2649;2642:12;2604:52;2692:9;2679:23;2725:18;2717:6;2714:30;2711:50;;;2757:1;2754;2747:12;2711:50;2796:77;2865:7;2856:6;2845:9;2841:22;2796:77;:::i;:::-;2892:8;;2770:103;;-1:-1:-1;2476:457:8;-1:-1:-1;;;;2476:457:8:o;3120:315::-;3188:6;3196;3249:2;3237:9;3228:7;3224:23;3220:32;3217:52;;;3265:1;3262;3255:12;3217:52;3304:9;3291:23;3323:31;3348:5;3323:31;:::i;:::-;3373:5;3425:2;3410:18;;;;3397:32;;-1:-1:-1;;;3120:315:8:o;3641:833::-;3769:6;3777;3785;3793;3801;3854:2;3842:9;3833:7;3829:23;3825:32;3822:52;;;3870:1;3867;3860:12;3822:52;3910:9;3897:23;3939:18;3980:2;3972:6;3969:14;3966:34;;;3996:1;3993;3986:12;3966:34;4035:58;4085:7;4076:6;4065:9;4061:22;4035:58;:::i;:::-;4112:8;;-1:-1:-1;4009:84:8;-1:-1:-1;4194:2:8;4179:18;;4166:32;;-1:-1:-1;4251:2:8;4236:18;;4223:32;;-1:-1:-1;4267:16:8;;;4264:36;;;4296:1;4293;4286:12;4264:36;;4335:79;4406:7;4395:8;4384:9;4380:24;4335:79;:::i;:::-;3641:833;;;;-1:-1:-1;3641:833:8;;-1:-1:-1;4433:8:8;;4309:105;3641:833;-1:-1:-1;;;3641:833:8:o;4479:650::-;4600:6;4608;4661:2;4649:9;4640:7;4636:23;4632:32;4629:52;;;4677:1;4674;4667:12;4629:52;4717:9;4704:23;4746:18;4787:2;4779:6;4776:14;4773:34;;;4803:1;4800;4793:12;4773:34;4841:6;4830:9;4826:22;4816:32;;4886:7;4879:4;4875:2;4871:13;4867:27;4857:55;;4908:1;4905;4898:12;4857:55;4948:2;4935:16;4974:2;4966:6;4963:14;4960:34;;;4990:1;4987;4980:12;4960:34;5043:7;5038:2;5028:6;5025:1;5021:14;5017:2;5013:23;5009:32;5006:45;5003:65;;;5064:1;5061;5054:12;5003:65;5095:2;5087:11;;;;;5117:6;;-1:-1:-1;4479:650:8;;-1:-1:-1;;;;4479:650:8:o;5134:336::-;5336:2;5318:21;;;5375:2;5355:18;;;5348:30;-1:-1:-1;;;5409:2:8;5394:18;;5387:42;5461:2;5446:18;;5134:336::o;5784:127::-;5845:10;5840:3;5836:20;5833:1;5826:31;5876:4;5873:1;5866:15;5900:4;5897:1;5890:15;6661:973;6910:2;6962:21;;;6935:18;;;7018:22;;;6881:4;;7059:2;7077:18;;;7118:6;6881:4;7152:456;7166:6;7163:1;7160:13;7152:456;;;7241:6;7228:20;7261:31;7286:5;7261:31;:::i;:::-;-1:-1:-1;;;;;7359:14:8;;;7347:27;;7415:15;;;7402:29;;7444:33;7402:29;7444:33;:::i;:::-;7511:16;7497:12;;;7490:38;7548:12;;;;7583:15;;;;7188:1;7181:9;7152:456;;;-1:-1:-1;7625:3:8;;6661:973;-1:-1:-1;;;;;;;6661:973:8:o;7639:271::-;7822:6;7814;7809:3;7796:33;7778:3;7848:16;;7873:13;;;7848:16;7639:271;-1:-1:-1;7639:271:8:o

Swarm Source

ipfs://9ca59ca3b1a45c0142169edc7d5c3e7051782a57f49a40db6fa82c782f3349f8

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.