ETH Price: $2,255.93 (+4.14%)

Contract

0x84502e430b8Fc064756d3034ad303d1456D23bfe
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

> 10 Internal Transactions found.

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
201008032024-06-16 0:35:23258 days ago1718498123
0x84502e43...456D23bfe
0.00122139 ETH
196714312024-04-16 23:52:11318 days ago1713311531
0x84502e43...456D23bfe
0.005 ETH
195934182024-04-06 1:30:11329 days ago1712367011
0x84502e43...456D23bfe
0.0099458 ETH
195107012024-03-25 9:47:11340 days ago1711360031
0x84502e43...456D23bfe
0 ETH
195106912024-03-25 9:44:59340 days ago1711359899
0x84502e43...456D23bfe
0 ETH
195105882024-03-25 9:24:11340 days ago1711358651
0x84502e43...456D23bfe
0.02661751 ETH
195104962024-03-25 9:05:11340 days ago1711357511
0x84502e43...456D23bfe
0 ETH
195104882024-03-25 9:03:35340 days ago1711357415
0x84502e43...456D23bfe
0.06046834 ETH
195104872024-03-25 9:03:23340 days ago1711357403
0x84502e43...456D23bfe
0.005 ETH
195104132024-03-25 8:48:23340 days ago1711356503
0x84502e43...456D23bfe
0 ETH
195103972024-03-25 8:45:11340 days ago1711356311
0x84502e43...456D23bfe
0 ETH
195103892024-03-25 8:43:35340 days ago1711356215
0x84502e43...456D23bfe
0 ETH
195103732024-03-25 8:40:23340 days ago1711356023
0x84502e43...456D23bfe
0 ETH
195103702024-03-25 8:39:47340 days ago1711355987
0x84502e43...456D23bfe
0 ETH
195103542024-03-25 8:36:23340 days ago1711355783
0x84502e43...456D23bfe
0.03469375 ETH
195103032024-03-25 8:25:59340 days ago1711355159
0x84502e43...456D23bfe
0 ETH
195102442024-03-25 8:14:11340 days ago1711354451
0x84502e43...456D23bfe
0 ETH
195101372024-03-25 7:52:47340 days ago1711353167
0x84502e43...456D23bfe
0 ETH
195100872024-03-25 7:42:11340 days ago1711352531
0x84502e43...456D23bfe
0.1 ETH
195099052024-03-25 7:04:59340 days ago1711350299
0x84502e43...456D23bfe
0 ETH
195098312024-03-25 6:49:59340 days ago1711349399
0x84502e43...456D23bfe
1.12030886 ETH
195097952024-03-25 6:42:47340 days ago1711348967
0x84502e43...456D23bfe
0 ETH
195096792024-03-25 6:19:23340 days ago1711347563
0x84502e43...456D23bfe
0 ETH
195096742024-03-25 6:18:23340 days ago1711347503
0x84502e43...456D23bfe
7.152091 ETH
195096732024-03-25 6:18:11340 days ago1711347491
0x84502e43...456D23bfe
1.6852414 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ZeroXSwapImpl

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 1000000 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2023-11-09
*/

// SPDX-License-Identifier: MIT
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);
    }
}

/// @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), from) // Append the "from" argument.
            mstore(add(freeMemoryPointer, 36), to) // Append the "to" argument.
            mstore(add(freeMemoryPointer, 68), amount) // Append the "amount" argument.

            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), to) // Append the "to" argument.
            mstore(add(freeMemoryPointer, 36), amount) // Append the "amount" argument.

            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), to) // Append the "to" argument.
            mstore(add(freeMemoryPointer, 36), amount) // Append the "amount" argument.

            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");
    }
}

/**
 * @title ISocketGateway
 * @notice Interface for SocketGateway functions.
 * @dev functions can be added here for invocation from external contracts or off-chain
 * @author Socket dot tech.
 */
interface ISocketGateway {
    /**
     * @notice Request-struct for controllerRequests
     * @dev ensure the value for data is generated using the function-selectors defined in the controllerImplementation contracts
     */
    struct SocketControllerRequest {
        // controllerId is the id mapped to the controllerAddress
        uint32 controllerId;
        // transactionImplData generated off-chain or by caller using function-selector of the controllerContract
        bytes data;
    }

    // @notice view to get owner-address
    function owner() external view returns (address);
}

error CelerRefundNotReady();
error OnlySocketDeployer();
error OnlySocketGatewayOwner();
error OnlySocketGateway();
error OnlyOwner();
error OnlyNominee();
error TransferIdExists();
error TransferIdDoesnotExist();
error Address0Provided();
error SwapFailed();
error UnsupportedInterfaceId();
error InvalidCelerRefund();
error CelerAlreadyRefunded();
error IncorrectBridgeRatios();
error ZeroAddressNotAllowed();
error ArrayLengthMismatch();
error PartialSwapsNotAllowed();

/**
 * @title Abstract Implementation Contract.
 * @notice All Swap Implementation will follow this interface.
 * @author Socket dot tech.
 */
abstract contract SwapImplBase {
    /// @notice SafeTransferLib - library for safe and optimised operations on ERC20 tokens
    using SafeTransferLib for ERC20;

    /// @notice Address used to identify if it is a native token transfer or not
    address public immutable NATIVE_TOKEN_ADDRESS =
        address(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE);

    /// @notice immutable variable to store the socketGateway address
    address public immutable socketGateway;

    /// @notice immutable variable to store the socketGateway address
    address public immutable socketDeployFactory;

    /// @notice FunctionSelector used to delegatecall to the performAction function of swap-router-implementation
    bytes4 public immutable SWAP_FUNCTION_SELECTOR =
        bytes4(
            keccak256("performAction(address,address,uint256,address,bytes)")
        );

    /// @notice FunctionSelector used to delegatecall to the performActionWithIn function of swap-router-implementation
    bytes4 public immutable SWAP_WITHIN_FUNCTION_SELECTOR =
        bytes4(keccak256("performActionWithIn(address,address,uint256,bytes)"));

    /****************************************
     *               EVENTS                 *
     ****************************************/

    event SocketSwapTokens(
        address fromToken,
        address toToken,
        uint256 buyAmount,
        uint256 sellAmount,
        bytes32 routeName,
        address receiver,
        bytes32 metadata
    );

    /**
     * @notice Construct the base for all SwapImplementations.
     * @param _socketGateway Socketgateway address, an immutable variable to set.
     */
    constructor(address _socketGateway, address _socketDeployFactory) {
        socketGateway = _socketGateway;
        socketDeployFactory = _socketDeployFactory;
    }

    /****************************************
     *               MODIFIERS              *
     ****************************************/

    /// @notice Implementing contract needs to make use of the modifier where restricted access is to be used
    modifier isSocketGatewayOwner() {
        if (msg.sender != ISocketGateway(socketGateway).owner()) {
            revert OnlySocketGatewayOwner();
        }
        _;
    }

    /// @notice Implementing contract needs to make use of the modifier where restricted access is to be used
    modifier isSocketDeployFactory() {
        if (msg.sender != socketDeployFactory) {
            revert OnlySocketDeployer();
        }
        _;
    }

    /****************************************
     *    RESTRICTED FUNCTIONS              *
     ****************************************/

    /**
     * @notice function to rescue the ERC20 tokens in the Swap-Implementation contract
     * @notice this is a function restricted to Owner of SocketGateway only
     * @param token address of ERC20 token being rescued
     * @param userAddress receipient address to which ERC20 tokens will be rescued to
     * @param amount amount of ERC20 tokens being rescued
     */
    function rescueFunds(
        address token,
        address userAddress,
        uint256 amount
    ) external isSocketGatewayOwner {
        ERC20(token).safeTransfer(userAddress, amount);
    }

    /**
     * @notice function to rescue the native-balance in the  Swap-Implementation contract
     * @notice this is a function restricted to Owner of SocketGateway only
     * @param userAddress receipient address to which native-balance will be rescued to
     * @param amount amount of native balance tokens being rescued
     */
    function rescueEther(
        address payable userAddress,
        uint256 amount
    ) external isSocketGatewayOwner {
        userAddress.transfer(amount);
    }

    function killme() external isSocketDeployFactory {
        selfdestruct(payable(msg.sender));
    }

    /******************************
     *    VIRTUAL FUNCTIONS       *
     *****************************/

    /**
     * @notice function to swap tokens on the chain
     *         All swap implementation contracts must implement this function
     * @param fromToken token to be swapped
     * @param  toToken token to which fromToken has to be swapped
     * @param amount amount of fromToken being swapped
     * @param receiverAddress recipient address of toToken
     * @param data encoded value of properties in the swapData Struct
     */
    function performAction(
        address fromToken,
        address toToken,
        uint256 amount,
        address receiverAddress,
        bytes32 metadata,
        bytes memory data
    ) external payable virtual returns (uint256);

    /**
     * @notice function to swapWith - swaps tokens on the chain to socketGateway as recipient
     *         All swap implementation contracts must implement this function
     * @param fromToken token to be swapped
     * @param toToken token to which fromToken has to be swapped
     * @param amount amount of fromToken being swapped
     * @param swapExtraData encoded value of properties in the swapData Struct
     */
    function performActionWithIn(
        address fromToken,
        address toToken,
        uint256 amount,
        bytes32 metadata,
        bytes memory swapExtraData
    ) external payable virtual returns (uint256, address);
}

bytes32 constant ACROSS = keccak256("Across");

bytes32 constant ANYSWAP = keccak256("Anyswap");

bytes32 constant CBRIDGE = keccak256("CBridge");

bytes32 constant HOP = keccak256("Hop");

bytes32 constant HYPHEN = keccak256("Hyphen");

bytes32 constant NATIVE_OPTIMISM = keccak256("NativeOptimism");

bytes32 constant NATIVE_ARBITRUM = keccak256("NativeArbitrum");

bytes32 constant NATIVE_POLYGON = keccak256("NativePolygon");

bytes32 constant REFUEL = keccak256("Refuel");

bytes32 constant STARGATE = keccak256("Stargate");

bytes32 constant ONEINCH = keccak256("OneInch");

bytes32 constant ZEROX = keccak256("Zerox");

bytes32 constant RAINBOW = keccak256("Rainbow");

bytes32 constant CCTP = keccak256("cctp");

bytes32 constant CONNEXT = keccak256("Connext");

bytes32 constant SYNAPSE = keccak256("Synapse");

bytes32 constant ZKSYNC = keccak256("ZkSync");

bytes32 constant SYMBIOSIS = keccak256("Symbiosis");

/**
 * @title ZeroX-Swap-Route Implementation
 * @notice Route implementation with functions to swap tokens via ZeroX-Swap
 * Called via SocketGateway if the routeId in the request maps to the routeId of ZeroX-Swap-Implementation
 * @author Socket dot tech.
 */
contract ZeroXSwapImpl is SwapImplBase {
    /// @notice SafeTransferLib - library for safe and optimised operations on ERC20 tokens
    using SafeTransferLib for ERC20;

    bytes32 public immutable ZeroXIdentifier = ZEROX;

    /// @notice unique name to identify the router, used to emit event upon successful bridging
    bytes32 public immutable NAME = keccak256("Zerox-Router");

    /// @notice address of ZeroX-Exchange-Proxy to swap the tokens on Chain
    address payable public immutable zeroXExchangeProxy;

    /// @notice socketGatewayAddress to be initialised via storage variable SwapImplBase
    /// @notice ZeroXExchangeProxy contract is payable to allow ethereum swaps
    /// @dev ensure _zeroXExchangeProxy are set properly for the chainId in which the contract is being deployed
    constructor(
        address _zeroXExchangeProxy,
        address _socketGateway,
        address _socketDeployFactory
    ) SwapImplBase(_socketGateway, _socketDeployFactory) {
        zeroXExchangeProxy = payable(_zeroXExchangeProxy);
    }

    receive() external payable {}

    fallback() external payable {}

    /**
     * @notice function to swap tokens on the chain and transfer to receiver address
     * @dev This is called only when there is a request for a swap.
     * @param fromToken token to be swapped
     * @param toToken token to which fromToken is to be swapped
     * @param amount amount to be swapped
     * @param receiverAddress address of toToken recipient
     * @param swapExtraData data required for zeroX Exchange to get the swap done
     */
    function performAction(
        address fromToken,
        address toToken,
        uint256 amount,
        address receiverAddress,
        bytes32 metadata,
        bytes calldata swapExtraData
    ) external payable override returns (uint256) {
        uint256 _initialBalanceTokenOut;
        uint256 _finalBalanceTokenOut;

        uint256 _initialBalanceTokenIn;
        uint256 _finalBalanceTokenIn;

        if (fromToken != NATIVE_TOKEN_ADDRESS) {
            ERC20(fromToken).safeTransferFrom(
                msg.sender,
                socketGateway,
                amount
            );
            ERC20(fromToken).safeApprove(zeroXExchangeProxy, amount);
        }

        if (toToken != NATIVE_TOKEN_ADDRESS) {
            _initialBalanceTokenOut = ERC20(toToken).balanceOf(socketGateway);
        } else {
            _initialBalanceTokenOut = address(this).balance;
        }

        if (fromToken != NATIVE_TOKEN_ADDRESS) {
            _initialBalanceTokenIn = ERC20(fromToken).balanceOf(socketGateway);
        } else {
            _initialBalanceTokenIn = address(this).balance;
        }

        if (fromToken != NATIVE_TOKEN_ADDRESS) {
            // solhint-disable-next-line
            (bool success, ) = zeroXExchangeProxy.call(swapExtraData);

            if (!success) {
                revert SwapFailed();
            }
        } else {
            (bool success, ) = zeroXExchangeProxy.call{value: amount}(
                swapExtraData
            );
            if (!success) {
                revert SwapFailed();
            }
        }

        if (fromToken != NATIVE_TOKEN_ADDRESS) {
            _finalBalanceTokenIn = ERC20(fromToken).balanceOf(socketGateway);
        } else {
            _finalBalanceTokenIn = address(this).balance;
        }
        if (_finalBalanceTokenIn > _initialBalanceTokenIn - amount)
            revert PartialSwapsNotAllowed();

        if (toToken != NATIVE_TOKEN_ADDRESS) {
            _finalBalanceTokenOut = ERC20(toToken).balanceOf(socketGateway);
        } else {
            _finalBalanceTokenOut = address(this).balance;
        }

        uint256 returnAmount = _finalBalanceTokenOut - _initialBalanceTokenOut;

        if (toToken == NATIVE_TOKEN_ADDRESS) {
            payable(receiverAddress).transfer(returnAmount);
        } else {
            ERC20(toToken).transfer(receiverAddress, returnAmount);
        }

        emit SocketSwapTokens(
            fromToken,
            toToken,
            returnAmount,
            amount,
            ZeroXIdentifier,
            receiverAddress,
            metadata
        );

        return returnAmount;
    }

    /**
     * @notice function to swapWithIn SocketGateway - swaps tokens on the chain to socketGateway as recipient
     * @param fromToken token to be swapped
     * @param toToken token to which fromToken has to be swapped
     * @param amount amount of fromToken being swapped
     * @param swapExtraData encoded value of properties in the swapData Struct
     * @return swapped amount (in toToken Address)
     */
    function performActionWithIn(
        address fromToken,
        address toToken,
        uint256 amount,
        bytes32 metadata,
        bytes calldata swapExtraData
    ) external payable override returns (uint256, address) {
        uint256 _initialBalanceTokenOut;
        uint256 _finalBalanceTokenOut;

        uint256 _initialBalanceTokenIn;
        uint256 _finalBalanceTokenIn;

        if (fromToken != NATIVE_TOKEN_ADDRESS) {
            ERC20(fromToken).safeTransferFrom(
                msg.sender,
                address(this),
                amount
            );
            ERC20(fromToken).safeApprove(zeroXExchangeProxy, amount);
        }

        if (toToken != NATIVE_TOKEN_ADDRESS) {
            _initialBalanceTokenOut = ERC20(toToken).balanceOf(socketGateway);
        } else {
            _initialBalanceTokenOut = address(this).balance;
        }

        if (fromToken != NATIVE_TOKEN_ADDRESS) {
            _initialBalanceTokenIn = ERC20(fromToken).balanceOf(socketGateway);
        } else {
            _initialBalanceTokenIn = address(this).balance;
        }

        if (fromToken != NATIVE_TOKEN_ADDRESS) {
            // solhint-disable-next-line
            (bool success, ) = zeroXExchangeProxy.call(swapExtraData);

            if (!success) {
                revert SwapFailed();
            }
        } else {
            (bool success, ) = zeroXExchangeProxy.call{value: amount}(
                swapExtraData
            );
            if (!success) {
                revert SwapFailed();
            }
        }

        if (fromToken != NATIVE_TOKEN_ADDRESS) {
            _finalBalanceTokenIn = ERC20(fromToken).balanceOf(socketGateway);
        } else {
            _finalBalanceTokenIn = address(this).balance;
        }
        if (_finalBalanceTokenIn > _initialBalanceTokenIn - amount)
            revert PartialSwapsNotAllowed();

        if (toToken != NATIVE_TOKEN_ADDRESS) {
            _finalBalanceTokenOut = ERC20(toToken).balanceOf(socketGateway);
        } else {
            _finalBalanceTokenOut = address(this).balance;
        }

        emit SocketSwapTokens(
            fromToken,
            toToken,
            _finalBalanceTokenOut - _initialBalanceTokenOut,
            amount,
            ZeroXIdentifier,
            socketGateway,
            metadata
        );

        return (_finalBalanceTokenOut - _initialBalanceTokenOut, toToken);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_zeroXExchangeProxy","type":"address"},{"internalType":"address","name":"_socketGateway","type":"address"},{"internalType":"address","name":"_socketDeployFactory","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"OnlySocketDeployer","type":"error"},{"inputs":[],"name":"OnlySocketGatewayOwner","type":"error"},{"inputs":[],"name":"PartialSwapsNotAllowed","type":"error"},{"inputs":[],"name":"SwapFailed","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"fromToken","type":"address"},{"indexed":false,"internalType":"address","name":"toToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"buyAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellAmount","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"routeName","type":"bytes32"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"bytes32","name":"metadata","type":"bytes32"}],"name":"SocketSwapTokens","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NATIVE_TOKEN_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SWAP_FUNCTION_SELECTOR","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SWAP_WITHIN_FUNCTION_SELECTOR","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ZeroXIdentifier","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"killme","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"fromToken","type":"address"},{"internalType":"address","name":"toToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"receiverAddress","type":"address"},{"internalType":"bytes32","name":"metadata","type":"bytes32"},{"internalType":"bytes","name":"swapExtraData","type":"bytes"}],"name":"performAction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"fromToken","type":"address"},{"internalType":"address","name":"toToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32","name":"metadata","type":"bytes32"},{"internalType":"bytes","name":"swapExtraData","type":"bytes"}],"name":"performActionWithIn","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"userAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"socketDeployFactory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"socketGateway","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"zeroXExchangeProxy","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6101806040527feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000608052630545ebbb60e41b60e0526328b1cc0b60e21b610100527f861b086cbd3ddee2b0b12c8ce3b43e1c111ac87dcabda086e02f18095da12f20610120527fe0011b1941c38c8fe64d36fb6e416afb2ab5b8b7ba6f71c4555ee65f297b86e3610140523480156200009757600080fd5b5060405162001fe238038062001fe2833981016040819052620000ba9162000100565b6001600160601b0319606092831b811660a05290821b811660c05291901b16610160526200014a565b80516001600160a01b0381168114620000fb57600080fd5b919050565b6000806000606084860312156200011657600080fd5b6200012184620000e3565b92506200013160208501620000e3565b91506200014160408501620000e3565b90509250925092565b60805160601c60a05160601c60c05160601c60e05160e01c60e01b6101005160e01c60e01b61012051610140516101605160601c611d2d620002b560003960008181610266015281816105d40152818161088a01528181610956015281816110860152818161133c01526114080152600061029a01526000818161021101528181610e1301526117a80152600060fa015260006101bd0152600081816102ce0152610399015260008181610164015281816103f50152818161059301528181610689015281816107a601528181610aab01528181610c0a01528181610ea90152818161113b015281816112580152818161155d015281816116bc01526117ce01526000818161030201528181610525015281816105fb015281816107180152818161083501528181610a1d01528181610b7c01528181610ca701528181610ff7015281816110ad015281816111ca015281816112e7015281816114cf015261162e0152611d2d6000f3fe6080604052600436106100ca5760003560e01c80637899f9ed11610079578063bc85276011610056578063bc852760146102bc578063df2ebdbb146102f0578063e42e0ea914610324578063ee8f0b861461034457005b80637899f9ed146102415780639997c7f114610254578063a3f4df7e1461028857005b80636b06d264116100a75780636b06d264146101ab5780636ccae054146101df5780636e655430146101ff57005b806324d97a4a146100d3578063547ba660146100e8578063678fcd611461015257005b366100d157005b005b3480156100df57600080fd5b506100d1610381565b3480156100f457600080fd5b5061011c7f000000000000000000000000000000000000000000000000000000000000000081565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020015b60405180910390f35b34801561015e57600080fd5b506101867f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610149565b3480156101b757600080fd5b5061011c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156101eb57600080fd5b506100d16101fa366004611afd565b6103f3565b34801561020b57600080fd5b506102337f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610149565b61023361024f366004611b3e565b61051b565b34801561026057600080fd5b506101867f000000000000000000000000000000000000000000000000000000000000000081565b34801561029457600080fd5b506102337f000000000000000000000000000000000000000000000000000000000000000081565b3480156102c857600080fd5b506101867f000000000000000000000000000000000000000000000000000000000000000081565b3480156102fc57600080fd5b506101867f000000000000000000000000000000000000000000000000000000000000000081565b34801561033057600080fd5b506100d161033f366004611ad1565b610ea7565b610357610352366004611bcd565b610fec565b6040805192835273ffffffffffffffffffffffffffffffffffffffff909116602083015201610149565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146103f0576040517f38647caa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33ff5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561045957600080fd5b505afa15801561046d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104919190611aad565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104f5576040517fb20ca36500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61051673ffffffffffffffffffffffffffffffffffffffff84168383611821565b505050565b60008060008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff16146105f9576105b873ffffffffffffffffffffffffffffffffffffffff8d16337f00000000000000000000000000000000000000000000000000000000000000008d6118e5565b6105f973ffffffffffffffffffffffffffffffffffffffff8d167f00000000000000000000000000000000000000000000000000000000000000008c6119ab565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614610712576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301528c16906370a082319060240160206040518083038186803b1580156106d357600080fd5b505afa1580156106e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070b9190611c6b565b9350610716565b4793505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff161461082f576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301528d16906370a082319060240160206040518083038186803b1580156107f057600080fd5b505afa158015610804573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108289190611c6b565b9150610833565b4791505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff16146109525760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1688886040516108cf929190611c84565b6000604051808303816000865af19150503d806000811461090c576040519150601f19603f3d011682016040523d82523d6000602084013e610911565b606091505b505090508061094c576040517f81ceff3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50610a1b565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168b898960405161099c929190611c84565b60006040518083038185875af1925050503d80600081146109d9576040519150601f19603f3d011682016040523d82523d6000602084013e6109de565b606091505b5050905080610a19576040517f81ceff3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614610b34576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301528d16906370a082319060240160206040518083038186803b158015610af557600080fd5b505afa158015610b09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2d9190611c6b565b9050610b37565b50475b610b418a83611c94565b811115610b7a576040517f7b36c47900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614610c93576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301528c16906370a082319060240160206040518083038186803b158015610c5457600080fd5b505afa158015610c68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8c9190611c6b565b9250610c97565b4792505b6000610ca38585611c94565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff161415610d425760405173ffffffffffffffffffffffffffffffffffffffff8b169082156108fc029083906000818181858888f19350505050158015610d3c573d6000803e3d6000fd5b50610dec565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152602482018390528d169063a9059cbb90604401602060405180830381600087803b158015610db257600080fd5b505af1158015610dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dea9190611c49565b505b7fb346a959ba6c0f1c7ba5426b10fd84fe4064e392a0dfcf6609e9640a0dd260d38d8d838e7f00000000000000000000000000000000000000000000000000000000000000008f8f604051610e8f979695949392919073ffffffffffffffffffffffffffffffffffffffff9788168152958716602087015260408601949094526060850192909252608084015290921660a082015260c081019190915260e00190565b60405180910390a19c9b505050505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f0d57600080fd5b505afa158015610f21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f459190611aad565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fa9576040517fb20ca36500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff83169082156108fc029083906000818181858888f19350505050158015610516573d6000803e3d6000fd5b6000806000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff16146110ab5761106a73ffffffffffffffffffffffffffffffffffffffff8d1633308d6118e5565b6110ab73ffffffffffffffffffffffffffffffffffffffff8d167f00000000000000000000000000000000000000000000000000000000000000008c6119ab565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16146111c4576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301528c16906370a082319060240160206040518083038186803b15801561118557600080fd5b505afa158015611199573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bd9190611c6b565b93506111c8565b4793505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff16146112e1576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301528d16906370a082319060240160206040518083038186803b1580156112a257600080fd5b505afa1580156112b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112da9190611c6b565b91506112e5565b4791505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff16146114045760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168989604051611381929190611c84565b6000604051808303816000865af19150503d80600081146113be576040519150601f19603f3d011682016040523d82523d6000602084013e6113c3565b606091505b50509050806113fe576040517f81ceff3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506114cd565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168b8a8a60405161144e929190611c84565b60006040518083038185875af1925050503d806000811461148b576040519150601f19603f3d011682016040523d82523d6000602084013e611490565b606091505b50509050806114cb576040517f81ceff3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff16146115e6576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301528d16906370a082319060240160206040518083038186803b1580156115a757600080fd5b505afa1580156115bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115df9190611c6b565b90506115e9565b50475b6115f38a83611c94565b81111561162c576040517f7b36c47900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614611745576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301528c16906370a082319060240160206040518083038186803b15801561170657600080fd5b505afa15801561171a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173e9190611c6b565b9250611749565b4792505b7fb346a959ba6c0f1c7ba5426b10fd84fe4064e392a0dfcf6609e9640a0dd260d38c8c6117768787611c94565b6040805173ffffffffffffffffffffffffffffffffffffffff94851681529284166020840152820152606081018d90527f000000000000000000000000000000000000000000000000000000000000000060808201527f000000000000000000000000000000000000000000000000000000000000000090911660a082015260c081018b905260e00160405180910390a16118118484611c94565b9c9a9b5050505050505050505050565b60006040517fa9059cbb000000000000000000000000000000000000000000000000000000008152836004820152826024820152602060006044836000895af13d15601f3d11600160005114161716915050806118df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5452414e534645525f4641494c4544000000000000000000000000000000000060448201526064015b60405180910390fd5b50505050565b60006040517f23b872dd0000000000000000000000000000000000000000000000000000000081528460048201528360248201528260448201526020600060648360008a5af13d15601f3d11600160005114161716915050806119a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c454400000000000000000000000060448201526064016118d6565b5050505050565b60006040517f095ea7b3000000000000000000000000000000000000000000000000000000008152836004820152826024820152602060006044836000895af13d15601f3d11600160005114161716915050806118df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f415050524f56455f4641494c454400000000000000000000000000000000000060448201526064016118d6565b60008083601f840112611a7657600080fd5b50813567ffffffffffffffff811115611a8e57600080fd5b602083019150836020828501011115611aa657600080fd5b9250929050565b600060208284031215611abf57600080fd5b8151611aca81611cd2565b9392505050565b60008060408385031215611ae457600080fd5b8235611aef81611cd2565b946020939093013593505050565b600080600060608486031215611b1257600080fd5b8335611b1d81611cd2565b92506020840135611b2d81611cd2565b929592945050506040919091013590565b600080600080600080600060c0888a031215611b5957600080fd5b8735611b6481611cd2565b96506020880135611b7481611cd2565b9550604088013594506060880135611b8b81611cd2565b93506080880135925060a088013567ffffffffffffffff811115611bae57600080fd5b611bba8a828b01611a64565b989b979a50959850939692959293505050565b60008060008060008060a08789031215611be657600080fd5b8635611bf181611cd2565b95506020870135611c0181611cd2565b94506040870135935060608701359250608087013567ffffffffffffffff811115611c2b57600080fd5b611c3789828a01611a64565b979a9699509497509295939492505050565b600060208284031215611c5b57600080fd5b81518015158114611aca57600080fd5b600060208284031215611c7d57600080fd5b5051919050565b8183823760009101908152919050565b600082821015611ccd577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b73ffffffffffffffffffffffffffffffffffffffff81168114611cf457600080fd5b5056fea2646970667358221220619ab02452a33eccf246e6b5798aa347172237baf345cbf2a2a6763ef6af811e64736f6c63430008070033000000000000000000000000def1c0ded9bec7f1a1670819833240f027b25eff0000000000000000000000003a23f943181408eac424116af7b7790c94cb97a500000000000000000000000071630095e3f08a86afc73f7b07342192adf39c55

Deployed Bytecode

0x6080604052600436106100ca5760003560e01c80637899f9ed11610079578063bc85276011610056578063bc852760146102bc578063df2ebdbb146102f0578063e42e0ea914610324578063ee8f0b861461034457005b80637899f9ed146102415780639997c7f114610254578063a3f4df7e1461028857005b80636b06d264116100a75780636b06d264146101ab5780636ccae054146101df5780636e655430146101ff57005b806324d97a4a146100d3578063547ba660146100e8578063678fcd611461015257005b366100d157005b005b3480156100df57600080fd5b506100d1610381565b3480156100f457600080fd5b5061011c7fa2c7302c0000000000000000000000000000000000000000000000000000000081565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020015b60405180910390f35b34801561015e57600080fd5b506101867f0000000000000000000000003a23f943181408eac424116af7b7790c94cb97a581565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610149565b3480156101b757600080fd5b5061011c7f545ebbb00000000000000000000000000000000000000000000000000000000081565b3480156101eb57600080fd5b506100d16101fa366004611afd565b6103f3565b34801561020b57600080fd5b506102337f861b086cbd3ddee2b0b12c8ce3b43e1c111ac87dcabda086e02f18095da12f2081565b604051908152602001610149565b61023361024f366004611b3e565b61051b565b34801561026057600080fd5b506101867f000000000000000000000000def1c0ded9bec7f1a1670819833240f027b25eff81565b34801561029457600080fd5b506102337fe0011b1941c38c8fe64d36fb6e416afb2ab5b8b7ba6f71c4555ee65f297b86e381565b3480156102c857600080fd5b506101867f00000000000000000000000071630095e3f08a86afc73f7b07342192adf39c5581565b3480156102fc57600080fd5b506101867f000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b34801561033057600080fd5b506100d161033f366004611ad1565b610ea7565b610357610352366004611bcd565b610fec565b6040805192835273ffffffffffffffffffffffffffffffffffffffff909116602083015201610149565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000071630095e3f08a86afc73f7b07342192adf39c5516146103f0576040517f38647caa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33ff5b7f0000000000000000000000003a23f943181408eac424116af7b7790c94cb97a573ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561045957600080fd5b505afa15801561046d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104919190611aad565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104f5576040517fb20ca36500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61051673ffffffffffffffffffffffffffffffffffffffff84168383611821565b505050565b60008060008060007f000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff16146105f9576105b873ffffffffffffffffffffffffffffffffffffffff8d16337f0000000000000000000000003a23f943181408eac424116af7b7790c94cb97a58d6118e5565b6105f973ffffffffffffffffffffffffffffffffffffffff8d167f000000000000000000000000def1c0ded9bec7f1a1670819833240f027b25eff8c6119ab565b7f000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614610712576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000003a23f943181408eac424116af7b7790c94cb97a5811660048301528c16906370a082319060240160206040518083038186803b1580156106d357600080fd5b505afa1580156106e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070b9190611c6b565b9350610716565b4793505b7f000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff161461082f576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000003a23f943181408eac424116af7b7790c94cb97a5811660048301528d16906370a082319060240160206040518083038186803b1580156107f057600080fd5b505afa158015610804573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108289190611c6b565b9150610833565b4791505b7f000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff16146109525760007f000000000000000000000000def1c0ded9bec7f1a1670819833240f027b25eff73ffffffffffffffffffffffffffffffffffffffff1688886040516108cf929190611c84565b6000604051808303816000865af19150503d806000811461090c576040519150601f19603f3d011682016040523d82523d6000602084013e610911565b606091505b505090508061094c576040517f81ceff3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50610a1b565b60007f000000000000000000000000def1c0ded9bec7f1a1670819833240f027b25eff73ffffffffffffffffffffffffffffffffffffffff168b898960405161099c929190611c84565b60006040518083038185875af1925050503d80600081146109d9576040519150601f19603f3d011682016040523d82523d6000602084013e6109de565b606091505b5050905080610a19576040517f81ceff3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b7f000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614610b34576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000003a23f943181408eac424116af7b7790c94cb97a5811660048301528d16906370a082319060240160206040518083038186803b158015610af557600080fd5b505afa158015610b09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2d9190611c6b565b9050610b37565b50475b610b418a83611c94565b811115610b7a576040517f7b36c47900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614610c93576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000003a23f943181408eac424116af7b7790c94cb97a5811660048301528c16906370a082319060240160206040518083038186803b158015610c5457600080fd5b505afa158015610c68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8c9190611c6b565b9250610c97565b4792505b6000610ca38585611c94565b90507f000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff161415610d425760405173ffffffffffffffffffffffffffffffffffffffff8b169082156108fc029083906000818181858888f19350505050158015610d3c573d6000803e3d6000fd5b50610dec565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152602482018390528d169063a9059cbb90604401602060405180830381600087803b158015610db257600080fd5b505af1158015610dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dea9190611c49565b505b7fb346a959ba6c0f1c7ba5426b10fd84fe4064e392a0dfcf6609e9640a0dd260d38d8d838e7f861b086cbd3ddee2b0b12c8ce3b43e1c111ac87dcabda086e02f18095da12f208f8f604051610e8f979695949392919073ffffffffffffffffffffffffffffffffffffffff9788168152958716602087015260408601949094526060850192909252608084015290921660a082015260c081019190915260e00190565b60405180910390a19c9b505050505050505050505050565b7f0000000000000000000000003a23f943181408eac424116af7b7790c94cb97a573ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f0d57600080fd5b505afa158015610f21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f459190611aad565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fa9576040517fb20ca36500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff83169082156108fc029083906000818181858888f19350505050158015610516573d6000803e3d6000fd5b6000806000806000807f000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff16146110ab5761106a73ffffffffffffffffffffffffffffffffffffffff8d1633308d6118e5565b6110ab73ffffffffffffffffffffffffffffffffffffffff8d167f000000000000000000000000def1c0ded9bec7f1a1670819833240f027b25eff8c6119ab565b7f000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16146111c4576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000003a23f943181408eac424116af7b7790c94cb97a5811660048301528c16906370a082319060240160206040518083038186803b15801561118557600080fd5b505afa158015611199573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bd9190611c6b565b93506111c8565b4793505b7f000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff16146112e1576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000003a23f943181408eac424116af7b7790c94cb97a5811660048301528d16906370a082319060240160206040518083038186803b1580156112a257600080fd5b505afa1580156112b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112da9190611c6b565b91506112e5565b4791505b7f000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff16146114045760007f000000000000000000000000def1c0ded9bec7f1a1670819833240f027b25eff73ffffffffffffffffffffffffffffffffffffffff168989604051611381929190611c84565b6000604051808303816000865af19150503d80600081146113be576040519150601f19603f3d011682016040523d82523d6000602084013e6113c3565b606091505b50509050806113fe576040517f81ceff3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506114cd565b60007f000000000000000000000000def1c0ded9bec7f1a1670819833240f027b25eff73ffffffffffffffffffffffffffffffffffffffff168b8a8a60405161144e929190611c84565b60006040518083038185875af1925050503d806000811461148b576040519150601f19603f3d011682016040523d82523d6000602084013e611490565b606091505b50509050806114cb576040517f81ceff3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b7f000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff16146115e6576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000003a23f943181408eac424116af7b7790c94cb97a5811660048301528d16906370a082319060240160206040518083038186803b1580156115a757600080fd5b505afa1580156115bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115df9190611c6b565b90506115e9565b50475b6115f38a83611c94565b81111561162c576040517f7b36c47900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614611745576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000003a23f943181408eac424116af7b7790c94cb97a5811660048301528c16906370a082319060240160206040518083038186803b15801561170657600080fd5b505afa15801561171a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173e9190611c6b565b9250611749565b4792505b7fb346a959ba6c0f1c7ba5426b10fd84fe4064e392a0dfcf6609e9640a0dd260d38c8c6117768787611c94565b6040805173ffffffffffffffffffffffffffffffffffffffff94851681529284166020840152820152606081018d90527f861b086cbd3ddee2b0b12c8ce3b43e1c111ac87dcabda086e02f18095da12f2060808201527f0000000000000000000000003a23f943181408eac424116af7b7790c94cb97a590911660a082015260c081018b905260e00160405180910390a16118118484611c94565b9c9a9b5050505050505050505050565b60006040517fa9059cbb000000000000000000000000000000000000000000000000000000008152836004820152826024820152602060006044836000895af13d15601f3d11600160005114161716915050806118df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5452414e534645525f4641494c4544000000000000000000000000000000000060448201526064015b60405180910390fd5b50505050565b60006040517f23b872dd0000000000000000000000000000000000000000000000000000000081528460048201528360248201528260448201526020600060648360008a5af13d15601f3d11600160005114161716915050806119a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c454400000000000000000000000060448201526064016118d6565b5050505050565b60006040517f095ea7b3000000000000000000000000000000000000000000000000000000008152836004820152826024820152602060006044836000895af13d15601f3d11600160005114161716915050806118df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f415050524f56455f4641494c454400000000000000000000000000000000000060448201526064016118d6565b60008083601f840112611a7657600080fd5b50813567ffffffffffffffff811115611a8e57600080fd5b602083019150836020828501011115611aa657600080fd5b9250929050565b600060208284031215611abf57600080fd5b8151611aca81611cd2565b9392505050565b60008060408385031215611ae457600080fd5b8235611aef81611cd2565b946020939093013593505050565b600080600060608486031215611b1257600080fd5b8335611b1d81611cd2565b92506020840135611b2d81611cd2565b929592945050506040919091013590565b600080600080600080600060c0888a031215611b5957600080fd5b8735611b6481611cd2565b96506020880135611b7481611cd2565b9550604088013594506060880135611b8b81611cd2565b93506080880135925060a088013567ffffffffffffffff811115611bae57600080fd5b611bba8a828b01611a64565b989b979a50959850939692959293505050565b60008060008060008060a08789031215611be657600080fd5b8635611bf181611cd2565b95506020870135611c0181611cd2565b94506040870135935060608701359250608087013567ffffffffffffffff811115611c2b57600080fd5b611c3789828a01611a64565b979a9699509497509295939492505050565b600060208284031215611c5b57600080fd5b81518015158114611aca57600080fd5b600060208284031215611c7d57600080fd5b5051919050565b8183823760009101908152919050565b600082821015611ccd577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b73ffffffffffffffffffffffffffffffffffffffff81168114611cf457600080fd5b5056fea2646970667358221220619ab02452a33eccf246e6b5798aa347172237baf345cbf2a2a6763ef6af811e64736f6c63430008070033

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

000000000000000000000000def1c0ded9bec7f1a1670819833240f027b25eff0000000000000000000000003a23f943181408eac424116af7b7790c94cb97a500000000000000000000000071630095e3f08a86afc73f7b07342192adf39c55

-----Decoded View---------------
Arg [0] : _zeroXExchangeProxy (address): 0xDef1C0ded9bec7F1a1670819833240f027b25EfF
Arg [1] : _socketGateway (address): 0x3a23F943181408EAC424116Af7b7790c94Cb97a5
Arg [2] : _socketDeployFactory (address): 0x71630095e3F08A86aFC73f7b07342192adf39C55

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000def1c0ded9bec7f1a1670819833240f027b25eff
Arg [1] : 0000000000000000000000003a23f943181408eac424116af7b7790c94cb97a5
Arg [2] : 00000000000000000000000071630095e3f08a86afc73f7b07342192adf39c55


Deployed Bytecode Sourcemap

21108:7286:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18284:101;;;;;;;;;;;;;:::i;15448:136::-;;;;;;;;;;;;;;;;;;5792:66:1;5780:79;;;5762:98;;5750:2;5735:18;15448:136:0;;;;;;;;14877:38;;;;;;;;;;;;;;;;;;4132:42:1;4120:55;;;4102:74;;4090:2;4075:18;14877:38:0;3956:226:1;15163:155:0;;;;;;;;;;;;;;;17555:202;;;;;;;;;;-1:-1:-1;17555:202:0;;;;;:::i;:::-;;:::i;21287:48::-;;;;;;;;;;;;;;;;;;5582:25:1;;;5570:2;5555:18;21287:48:0;5436:177:1;22728:2730:0;;;;;;:::i;:::-;;:::i;21584:51::-;;;;;;;;;;;;;;;21441:57;;;;;;;;;;;;;;;14995:44;;;;;;;;;;;;;;;14689:108;;;;;;;;;;;;;;;18108:168;;;;;;;;;;-1:-1:-1;18108:168:0;;;;;:::i;:::-;;:::i;25894:2497::-;;;;;;:::i;:::-;;:::i;:::-;;;;7263:25:1;;;7336:42;7324:55;;;7319:2;7304:18;;7297:83;7236:18;25894:2497:0;7089:297:1;18284:101:0;16908:10;:33;16922:19;16908:33;;16904:93;;16965:20;;;;;;;;;;;;;;16904:93;18365:10:::1;18344:33;17555:202:::0;16640:13;16625:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16611:51;;:10;:51;;;16607:115;;16686:24;;;;;;;;;;;;;;16607:115;17703:46:::1;:25;::::0;::::1;17729:11:::0;17742:6;17703:25:::1;:46::i;:::-;17555:202:::0;;;:::o;22728:2730::-;22972:7;22992:31;23034:29;23076:30;23117:28;23175:20;23162:33;;:9;:33;;;23158:271;;23212:134;:33;;;23264:10;23293:13;23325:6;23212:33;:134::i;:::-;23361:56;:28;;;23390:18;23410:6;23361:28;:56::i;:::-;23456:20;23445:31;;:7;:31;;;23441:209;;23519:39;;;;;:24;23544:13;4120:55:1;;23519:39:0;;;4102:74:1;23519:24:0;;;;;4075:18:1;;23519:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23493:65;;23441:209;;;23617:21;23591:47;;23441:209;23679:20;23666:33;;:9;:33;;;23662:211;;23741:41;;;;;:26;23768:13;4120:55:1;;23741:41:0;;;4102:74:1;23741:26:0;;;;;4075:18:1;;23741:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23716:66;;23662:211;;;23840:21;23815:46;;23662:211;23902:20;23889:33;;:9;:33;;;23885:468;;23982:12;24000:18;:23;;24024:13;;24000:38;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23981:57;;;24060:7;24055:68;;24095:12;;;;;;;;;;;;;;24055:68;23924:210;23885:468;;;24156:12;24174:18;:23;;24205:6;24231:13;;24174:85;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24155:104;;;24279:7;24274:68;;24314:12;;;;;;;;;;;;;;24274:68;24140:213;23885:468;24382:20;24369:33;;:9;:33;;;24365:207;;24442:41;;;;;:26;24469:13;4120:55:1;;24442:41:0;;;4102:74:1;24442:26:0;;;;;4075:18:1;;24442:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24419:64;;24365:207;;;-1:-1:-1;24539:21:0;24365:207;24609:31;24634:6;24609:22;:31;:::i;:::-;24586:20;:54;24582:104;;;24662:24;;;;;;;;;;;;;;24582:104;24714:20;24703:31;;:7;:31;;;24699:205;;24775:39;;;;;:24;24800:13;4120:55:1;;24775:39:0;;;4102:74:1;24775:24:0;;;;;4075:18:1;;24775:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24751:63;;24699:205;;;24871:21;24847:45;;24699:205;24916:20;24939:47;24963:23;24939:21;:47;:::i;:::-;24916:70;;25014:20;25003:31;;:7;:31;;;24999:198;;;25051:47;;:33;;;;:47;;;;;25085:12;;25051:47;;;;25085:12;25051:33;:47;;;;;;;;;;;;;;;;;;;;;24999:198;;;25131:54;;;;;:23;5326:55:1;;;25131:54:0;;;5308:74:1;5398:18;;;5391:34;;;25131:23:0;;;;;5281:18:1;;25131:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24999:198;25214:204;25245:9;25269:7;25291:12;25318:6;25339:15;25369;25399:8;25214:204;;;;;;;;;;;4759:42:1;4828:15;;;4810:34;;4880:15;;;4875:2;4860:18;;4853:43;4927:2;4912:18;;4905:34;;;;4970:2;4955:18;;4948:34;;;;5013:3;4998:19;;4991:35;5063:15;;;5057:3;5042:19;;5035:44;5110:3;5095:19;;5088:35;;;;4736:3;4721:19;;4434:695;25214:204:0;;;;;;;;25438:12;22728:2730;-1:-1:-1;;;;;;;;;;;;22728:2730:0:o;18108:168::-;16640:13;16625:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16611:51;;:10;:51;;;16607:115;;16686:24;;;;;;;;;;;;;;16607:115;18240:28:::1;::::0;:20:::1;::::0;::::1;::::0;:28;::::1;;;::::0;18261:6;;18240:28:::1;::::0;;;18261:6;18240:20;:28;::::1;;;;;;;;;;;;;::::0;::::1;;;;25894:2497:::0;26110:7;26119;26139:31;26181:29;26223:30;26264:28;26322:20;26309:33;;:9;:33;;;26305:271;;26359:134;:33;;;26411:10;26448:4;26472:6;26359:33;:134::i;:::-;26508:56;:28;;;26537:18;26557:6;26508:28;:56::i;:::-;26603:20;26592:31;;:7;:31;;;26588:209;;26666:39;;;;;:24;26691:13;4120:55:1;;26666:39:0;;;4102:74:1;26666:24:0;;;;;4075:18:1;;26666:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26640:65;;26588:209;;;26764:21;26738:47;;26588:209;26826:20;26813:33;;:9;:33;;;26809:211;;26888:41;;;;;:26;26915:13;4120:55:1;;26888:41:0;;;4102:74:1;26888:26:0;;;;;4075:18:1;;26888:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26863:66;;26809:211;;;26987:21;26962:46;;26809:211;27049:20;27036:33;;:9;:33;;;27032:468;;27129:12;27147:18;:23;;27171:13;;27147:38;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27128:57;;;27207:7;27202:68;;27242:12;;;;;;;;;;;;;;27202:68;27071:210;27032:468;;;27303:12;27321:18;:23;;27352:6;27378:13;;27321:85;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27302:104;;;27426:7;27421:68;;27461:12;;;;;;;;;;;;;;27421:68;27287:213;27032:468;27529:20;27516:33;;:9;:33;;;27512:207;;27589:41;;;;;:26;27616:13;4120:55:1;;27589:41:0;;;4102:74:1;27589:26:0;;;;;4075:18:1;;27589:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27566:64;;27512:207;;;-1:-1:-1;27686:21:0;27512:207;27756:31;27781:6;27756:22;:31;:::i;:::-;27733:20;:54;27729:104;;;27809:24;;;;;;;;;;;;;;27729:104;27861:20;27850:31;;:7;:31;;;27846:205;;27922:39;;;;;:24;27947:13;4120:55:1;;27922:39:0;;;4102:74:1;27922:24:0;;;;;4075:18:1;;27922:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27898:63;;27846:205;;;28018:21;27994:45;;27846:205;28068:237;28099:9;28123:7;28145:47;28169:23;28145:21;:47;:::i;:::-;28068:237;;;4759:42:1;4828:15;;;4810:34;;4880:15;;;4875:2;4860:18;;4853:43;4912:18;;4905:34;4970:2;4955:18;;4948:34;;;28228:15:0;5013:3:1;4998:19;;4991:35;28258:13:0;5063:15:1;;;5057:3;5042:19;;5035:44;5110:3;5095:19;;5088:35;;;4736:3;4721:19;28068:237:0;;;;;;;28326:47;28350:23;28326:21;:47;:::i;:::-;28318:65;28375:7;;-1:-1:-1;;;;;;;;;;;25894:2497:0:o;9907:1529::-;10024:12;10199:4;10193:11;10344:66;10325:17;10318:93;10459:2;10455:1;10436:17;10432:25;10425:37;10540:6;10535:2;10516:17;10512:26;10505:42;11352:2;11349:1;11345:2;11326:17;11323:1;11316:5;11309;11304:51;10868:16;10861:24;10855:2;10837:16;10834:24;10830:1;10826;10820:8;10817:15;10813:46;10810:76;10607:763;10596:774;;;11401:7;11393:35;;;;;;;6422:2:1;11393:35:0;;;6404:21:1;6461:2;6441:18;;;6434:30;6500:17;6480:18;;;6473:45;6535:18;;11393:35:0;;;;;;;;;10013:1423;9907:1529;;;:::o;8251:1648::-;8395:12;8570:4;8564:11;8715:66;8696:17;8689:93;8830:4;8826:1;8807:17;8803:25;8796:39;8915:2;8910;8891:17;8887:26;8880:38;8996:6;8991:2;8972:17;8968:26;8961:42;9810:2;9807:1;9802:3;9783:17;9780:1;9773:5;9766;9761:52;9324:16;9317:24;9311:2;9293:16;9290:24;9286:1;9282;9276:8;9273:15;9269:46;9266:76;9063:765;9052:776;;;9859:7;9851:40;;;;;;;6073:2:1;9851:40:0;;;6055:21:1;6112:2;6092:18;;;6085:30;6151:22;6131:18;;;6124:50;6191:18;;9851:40:0;5871:344:1;9851:40:0;8384:1515;8251:1648;;;;:::o;11444:1527::-;11560:12;11735:4;11729:11;11880:66;11861:17;11854:93;11995:2;11991:1;11972:17;11968:25;11961:37;12076:6;12071:2;12052:17;12048:26;12041:42;12888:2;12885:1;12881:2;12862:17;12859:1;12852:5;12845;12840:51;12404:16;12397:24;12391:2;12373:16;12370:24;12366:1;12362;12356:8;12353:15;12349:46;12346:76;12143:763;12132:774;;;12937:7;12929:34;;;;;;;6766:2:1;12929:34:0;;;6748:21:1;6805:2;6785:18;;;6778:30;6844:16;6824:18;;;6817:44;6878:18;;12929:34:0;6564:338:1;14:347;65:8;75:6;129:3;122:4;114:6;110:17;106:27;96:55;;147:1;144;137:12;96:55;-1:-1:-1;170:20:1;;213:18;202:30;;199:50;;;245:1;242;235:12;199:50;282:4;274:6;270:17;258:29;;334:3;327:4;318:6;310;306:19;302:30;299:39;296:59;;;351:1;348;341:12;296:59;14:347;;;;;:::o;366:251::-;436:6;489:2;477:9;468:7;464:23;460:32;457:52;;;505:1;502;495:12;457:52;537:9;531:16;556:31;581:5;556:31;:::i;:::-;606:5;366:251;-1:-1:-1;;;366:251:1:o;622:323::-;698:6;706;759:2;747:9;738:7;734:23;730:32;727:52;;;775:1;772;765:12;727:52;814:9;801:23;833:31;858:5;833:31;:::i;:::-;883:5;935:2;920:18;;;;907:32;;-1:-1:-1;;;622:323:1:o;950:456::-;1027:6;1035;1043;1096:2;1084:9;1075:7;1071:23;1067:32;1064:52;;;1112:1;1109;1102:12;1064:52;1151:9;1138:23;1170:31;1195:5;1170:31;:::i;:::-;1220:5;-1:-1:-1;1277:2:1;1262:18;;1249:32;1290:33;1249:32;1290:33;:::i;:::-;950:456;;1342:7;;-1:-1:-1;;;1396:2:1;1381:18;;;;1368:32;;950:456::o;1411:965::-;1526:6;1534;1542;1550;1558;1566;1574;1627:3;1615:9;1606:7;1602:23;1598:33;1595:53;;;1644:1;1641;1634:12;1595:53;1683:9;1670:23;1702:31;1727:5;1702:31;:::i;:::-;1752:5;-1:-1:-1;1809:2:1;1794:18;;1781:32;1822:33;1781:32;1822:33;:::i;:::-;1874:7;-1:-1:-1;1928:2:1;1913:18;;1900:32;;-1:-1:-1;1984:2:1;1969:18;;1956:32;1997:33;1956:32;1997:33;:::i;:::-;2049:7;-1:-1:-1;2103:3:1;2088:19;;2075:33;;-1:-1:-1;2159:3:1;2144:19;;2131:33;2187:18;2176:30;;2173:50;;;2219:1;2216;2209:12;2173:50;2258:58;2308:7;2299:6;2288:9;2284:22;2258:58;:::i;:::-;1411:965;;;;-1:-1:-1;1411:965:1;;-1:-1:-1;1411:965:1;;;;2232:84;;-1:-1:-1;;;1411:965:1:o;2381:823::-;2487:6;2495;2503;2511;2519;2527;2580:3;2568:9;2559:7;2555:23;2551:33;2548:53;;;2597:1;2594;2587:12;2548:53;2636:9;2623:23;2655:31;2680:5;2655:31;:::i;:::-;2705:5;-1:-1:-1;2762:2:1;2747:18;;2734:32;2775:33;2734:32;2775:33;:::i;:::-;2827:7;-1:-1:-1;2881:2:1;2866:18;;2853:32;;-1:-1:-1;2932:2:1;2917:18;;2904:32;;-1:-1:-1;2987:3:1;2972:19;;2959:33;3015:18;3004:30;;3001:50;;;3047:1;3044;3037:12;3001:50;3086:58;3136:7;3127:6;3116:9;3112:22;3086:58;:::i;:::-;2381:823;;;;-1:-1:-1;2381:823:1;;-1:-1:-1;2381:823:1;;3163:8;;2381:823;-1:-1:-1;;;2381:823:1:o;3209:277::-;3276:6;3329:2;3317:9;3308:7;3304:23;3300:32;3297:52;;;3345:1;3342;3335:12;3297:52;3377:9;3371:16;3430:5;3423:13;3416:21;3409:5;3406:32;3396:60;;3452:1;3449;3442:12;3491:184;3561:6;3614:2;3602:9;3593:7;3589:23;3585:32;3582:52;;;3630:1;3627;3620:12;3582:52;-1:-1:-1;3653:16:1;;3491:184;-1:-1:-1;3491:184:1:o;3680:271::-;3863:6;3855;3850:3;3837:33;3819:3;3889:16;;3914:13;;;3889:16;3680:271;-1:-1:-1;3680:271:1:o;7391:279::-;7431:4;7459:1;7456;7453:8;7450:188;;;7494:77;7491:1;7484:88;7595:4;7592:1;7585:15;7623:4;7620:1;7613:15;7450:188;-1:-1:-1;7655:9:1;;7391:279::o;7675:154::-;7761:42;7754:5;7750:54;7743:5;7740:65;7730:93;;7819:1;7816;7809:12;7730:93;7675:154;:::o

Swarm Source

ipfs://619ab02452a33eccf246e6b5798aa347172237baf345cbf2a2a6763ef6af811e

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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.