Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
ZeroXSwapImpl
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *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
- No Contract Security Audit Submitted- Submit Audit Here
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"}]
Contract Creation Code
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
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.