More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x47cc7451060cfaeb820cf5a027173e07e3696ae97e6464bbdd827a92bf83ba4e | Fill Quote Eth T... | (pending) | 6 hrs ago | IN | 0.000086 ETH | (Pending) | |||
0x664687c0378e5012aa79e62fb79d480b27e9fd19f6575eaffedd073006e39a62 | Fill Quote Token... | (pending) | 16 hrs ago | IN | 0 ETH | (Pending) | |||
0xa06a5b53a6d2f990405fadbf5a68db652adef259a8e8b9480a743a95f051cc15 | Fill Quote Eth T... | (pending) | 8 days ago | IN | 0.0000029485 ETH | (Pending) | |||
Fill Quote Eth T... | 21863742 | 13 mins ago | IN | 0.1 ETH | 0.00013372 | ||||
Fill Quote Token... | 21863591 | 44 mins ago | IN | 0 ETH | 0.0001602 | ||||
Fill Quote Token... | 21863586 | 45 mins ago | IN | 0 ETH | 0.0001302 | ||||
Fill Quote Token... | 21863585 | 45 mins ago | IN | 0 ETH | 0.00003595 | ||||
Fill Quote Token... | 21863577 | 46 mins ago | IN | 0 ETH | 0.0001514 | ||||
Fill Quote Token... | 21863574 | 47 mins ago | IN | 0 ETH | 0.00004246 | ||||
Fill Quote Token... | 21863571 | 48 mins ago | IN | 0 ETH | 0.00015897 | ||||
Fill Quote Token... | 21863571 | 48 mins ago | IN | 0 ETH | 0.00016926 | ||||
Fill Quote Token... | 21863565 | 49 mins ago | IN | 0 ETH | 0.00015385 | ||||
Fill Quote Token... | 21863564 | 49 mins ago | IN | 0 ETH | 0.00016621 | ||||
Fill Quote Token... | 21863496 | 1 hr ago | IN | 0 ETH | 0.00053975 | ||||
Fill Quote Token... | 21863462 | 1 hr ago | IN | 0 ETH | 0.0002253 | ||||
Fill Quote Eth T... | 21863458 | 1 hr ago | IN | 0.0125 ETH | 0.00015256 | ||||
Fill Quote Token... | 21863433 | 1 hr ago | IN | 0 ETH | 0.00033998 | ||||
Fill Quote Token... | 21863424 | 1 hr ago | IN | 0 ETH | 0.00024699 | ||||
Fill Quote Token... | 21863368 | 1 hr ago | IN | 0 ETH | 0.00062156 | ||||
Fill Quote Token... | 21863354 | 1 hr ago | IN | 0 ETH | 0.00017589 | ||||
Fill Quote Token... | 21863243 | 1 hr ago | IN | 0 ETH | 0.00012044 | ||||
Fill Quote Token... | 21863239 | 1 hr ago | IN | 0 ETH | 0.00014789 | ||||
Fill Quote Token... | 21863182 | 2 hrs ago | IN | 0 ETH | 0.0000374 | ||||
Fill Quote Eth T... | 21863060 | 2 hrs ago | IN | 0.0412 ETH | 0.00013942 | ||||
Fill Quote Token... | 21862961 | 2 hrs ago | IN | 0 ETH | 0.00012029 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
21863742 | 13 mins ago | 0.09915 ETH | ||||
21863591 | 44 mins ago | 0.00031814 ETH | ||||
21863591 | 44 mins ago | 0.00032087 ETH | ||||
21863586 | 45 mins ago | 0.0003545 ETH | ||||
21863586 | 45 mins ago | 0.00035754 ETH | ||||
21863577 | 46 mins ago | 0.00030984 ETH | ||||
21863577 | 46 mins ago | 0.0003125 ETH | ||||
21863571 | 48 mins ago | 0.00046744 ETH | ||||
21863571 | 48 mins ago | 0.00047145 ETH | ||||
21863571 | 48 mins ago | 0.00051218 ETH | ||||
21863571 | 48 mins ago | 0.00051657 ETH | ||||
21863565 | 49 mins ago | 0.00055251 ETH | ||||
21863565 | 49 mins ago | 0.00055724 ETH | ||||
21863564 | 49 mins ago | 0.00096574 ETH | ||||
21863564 | 49 mins ago | 0.00097401 ETH | ||||
21863458 | 1 hr ago | 0.01239375 ETH | ||||
21863368 | 1 hr ago | 0.12057656 ETH | ||||
21863368 | 1 hr ago | 0.12161025 ETH | ||||
21863354 | 1 hr ago | 0.0021801 ETH | ||||
21863354 | 1 hr ago | 0.00219879 ETH | ||||
21863239 | 1 hr ago | 0.0038265 ETH | ||||
21863239 | 1 hr ago | 0.00385931 ETH | ||||
21863060 | 2 hrs ago | 0.0408498 ETH | ||||
21862961 | 2 hrs ago | 0.02167415 ETH | ||||
21862961 | 2 hrs ago | 0.02185996 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
RainbowRouter
Compiler Version
v0.8.11+commit.d7f03943
Optimization Enabled:
Yes with 1000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
/* ▐██▒ ███ ,╓, ▄▄ ,▄▄▄, .▄▄. ,╓, ▄▄▄ ██▌ ▄▄▄ ,▄▄▄, ,╓╓ ╓╓ ,╓ ██████ ███▀▀██⌐ ▐██⌐ ███▀▀███⌐ ████▀▀███ ╓██▀▀▀██▄`██▌ ▐██▌ ▐██ ███ ▄▄█████▌ ▐██⌐ ██▌ ▐██▌ ██▌ ║██⌐███ ▓██ ╙██▄█▌██▄██⌐ ██▌ ▐██▄▄███▌,▐██⌐ ██▌ ▐██▌ ███▓▄▄███ ╙██▄▄▄██▀ ║███¬╙███▌ ╙╙└ ╙╙▀╙─╙▀▀└"╙╙` ╙╙└ ╙╙" ╙╙`╙╙▀▀└ ╙╙▀▀╙` ╙╙└ ╙╙╙ _," _ _"""ⁿ=-, _ ⌠ _ __"=.__ ▐░...... _ _ "=._ ▐░░░░░░░░░░░░░░░░. "= _ ╚╩╩╩╩╩╩δφφφφ░░░░░░░░░░░ >__ ▐░░░░░░░░__ _ ╙╙╚╩φφ░░░░░░░ ^=_ ▐░░░░░░░░░░░░░░░,░ `╙╠φ░░░░░░░ ⁿ ▐░░░░░░░░░░░░░░░░░░░░._ `╚Åφ░░░░░ " _ ╚╠╠╠╠╠╠╠╬╬╬▒▒φ░░░░░░░░░░░░ ╙╠░░░░░ " ╚╝╝╝╝╝╝╝╬╬╬╠╢╬╠╬╠╬▒░░░░░░░░░░ "╚φ░░░░ ½_ ▐░░░░░░░░░░;░╙╙╝╬╠╬╠╠▒▒░░░░░░░░_ ╚φ░░░░ "_ ╚▒φφφ░░░░░░░░░░░░-╙╚╬╠╠╠╬▒░░░░░░░ `╠▒░░░░ , ╞╬╬╬╠╠╠╬╬╬╬▒φ▒░░░░░░░╙╚╬╬╠╬▒▒░░░░░ .╙╠░░░░ ≥ _▒░░░ΓΓ╙╙╙╚╩╬╠╬╠▒▒░░░░░░╙╬╬╠╬▒▒░░░░░' ╠▒░░░░ ≥ `╙ⁿⁿ≈≈σ╓░ '╙╙╚╬╠╬▒░░░░░░╙╬╬╠╬▒░░░░░ ╠▒░░░░ [ _╙Θ░ ░╙╠╠╬╬▒░░░░░╬╠╠╠▒▒░░░░ ╠▒░░░░ '_ _╙φ░'╙╠╠╬▒░░░░░╟╠╠╠▒░░░░░ _╠▒░░░ ░_ _`φ ░╚╬╠╠▒░░░░║╠╠╠▒░░░░░.`╠░░░░ [ _╚░⌡╚╠╬╬▒░░░░╠╠╠╬▒░░░░░ ╠▒░░░░ ░ _╙░⌡╚╠╠╬▒░░░"▒╠╠╬▒░░░░ ⌠╠░░░░ ⌡_ ╠ ░╠╠╠╬▒░░░║╠╬╠╬▒░░░ _╠▒░░░ Γ ▐░░░╠╠╠▒░░░╟╠╠╠╬▒░░░░ ╠▒░░░░ [ _░.░╠╠╠▒░░░▐╬╠╠╬▒░░░░[╠╬░░░░ │ _╙φ░╠╠╠╬▒░░▐╬╬╠╬╬▒░░░[╠╬░░░░ ░≥_ ____ ____ __ _______ ____ /$$$$$$ /$$$$$$ /$$ /$$__ $$ /$$__ $$ | $$ | $$ \__/ /$$ /$$ /$$ /$$$$$$ /$$$$$$ | $$ \ $$ /$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ | $$$$$$ | $$ | $$ | $$ |____ $$ /$$__ $$ | $$$$$$$$ /$$__ $$ /$$__ $$ /$$__ $$ /$$__ $$ /$$__ $$ |____ $$|_ $$_/ /$$__ $$ /$$__ $$ \____ $$| $$ | $$ | $$ /$$$$$$$| $$ \ $$ | $$__ $$| $$ \ $$| $$ \ $$| $$ \__/| $$$$$$$$| $$ \ $$ /$$$$$$$ | $$ | $$ \ $$| $$ \__/ /$$ \ $$| $$ | $$ | $$ /$$__ $$| $$ | $$ | $$ | $$| $$ | $$| $$ | $$| $$ | $$_____/| $$ | $$ /$$__ $$ | $$ /$$| $$ | $$| $$ | $$$$$$/| $$$$$/$$$$/| $$$$$$$| $$$$$$$/ | $$ | $$| $$$$$$$| $$$$$$$| $$ | $$$$$$$| $$$$$$$| $$$$$$$ | $$$$/| $$$$$$/| $$ \______/ \_____/\___/ \_______/| $$____/ |__/ |__/ \____ $$ \____ $$|__/ \_______/ \____ $$ \_______/ \___/ \______/ |__/ | $$ /$$ \ $$ /$$ \ $$ /$$ \ $$ | $$ | $$$$$$/| $$$$$$/ | $$$$$$/ |__/ \______/ \______/ \______/ */ //SPDX-License-Identifier: GPL-3.0 pragma solidity =0.8.11; import "@rari-capital/solmate/src/utils/SafeTransferLib.sol"; import "@rari-capital/solmate/src/tokens/ERC20.sol"; import "./routers/BaseAggregator.sol"; /// @title Rainbow swap aggregator contract contract RainbowRouter is BaseAggregator { /// @dev The address that is the current owner of this contract address public owner; /// @dev Event emitted when the owner changes event OwnerChanged(address indexed newOwner, address indexed oldOwner); /// @dev Event emitted when a swap target gets added event SwapTargetAdded(address indexed target); /// @dev Event emitted when a swap target gets removed event SwapTargetRemoved(address indexed target); /// @dev Event emitted when token fees are withdrawn event TokenWithdrawn( address indexed token, address indexed target, uint256 amount ); /// @dev Event emitted when ETH fees are withdrawn event EthWithdrawn(address indexed target, uint256 amount); /// @dev modifier that ensures only the owner is allowed to call a specific method modifier onlyOwner() { require(msg.sender == owner, "ONLY_OWNER"); _; } constructor() { owner = msg.sender; status = 1; } /// @dev We don't want to accept any ETH, except refunds from aggregators /// or the owner (for testing purposes), which can also withdraw /// This is done by evaluating the value of status, which is set to 2 /// only during swaps due to the "nonReentrant" modifier receive() external payable { require(status == 2 || msg.sender == owner, "NO_RECEIVE"); } /// @dev method to add or remove swap targets from swapTargets /// This is required so we only approve "trusted" swap targets /// to transfer tokens out of this contract /// @param target address of the swap target to add /// @param add flag to add or remove the swap target function updateSwapTargets(address target, bool add) external onlyOwner { swapTargets[target] = add; if (add) { emit SwapTargetAdded(target); } else { emit SwapTargetRemoved(target); } } /// @dev method to withdraw ERC20 tokens (from the fees) /// @param token address of the token to withdraw /// @param to address that's receiving the tokens /// @param amount amount of tokens to withdraw function withdrawToken( address token, address to, uint256 amount ) external onlyOwner { require(to != address(0), "ZERO_ADDRESS"); SafeTransferLib.safeTransfer(ERC20(token), to, amount); emit TokenWithdrawn(token, to, amount); } /// @dev method to withdraw ETH (from the fees) /// @param to address that's receiving the ETH /// @param amount amount of ETH to withdraw function withdrawEth(address to, uint256 amount) external onlyOwner { require(to != address(0), "ZERO_ADDRESS"); SafeTransferLib.safeTransferETH(to, amount); emit EthWithdrawn(to, amount); } /// @dev Transfers ownership of the contract to a new account (`newOwner`). /// @param newOwner address of the new owner /// Can only be called by the current owner. function transferOwnership(address newOwner) external virtual onlyOwner { require(newOwner != address(0), "ZERO_ADDRESS"); require(newOwner != owner, "SAME_OWNER"); address previousOwner = owner; owner = newOwner; emit OwnerChanged(newOwner, previousOwner); } }
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity >=0.8.0; import {ERC20} from "../tokens/ERC20.sol"; /// @notice Safe ETH and ERC20 transfer library that gracefully handles missing return values. /// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/SafeTransferLib.sol) /// @author Modified from Gnosis (https://github.com/gnosis/gp-v2-contracts/blob/main/src/contracts/libraries/GPv2SafeERC20.sol) /// @dev Use with caution! Some functions in this library knowingly create dirty bits at the destination of the free memory pointer. library SafeTransferLib { /*/////////////////////////////////////////////////////////////// ETH OPERATIONS //////////////////////////////////////////////////////////////*/ function safeTransferETH(address to, uint256 amount) internal { bool callStatus; assembly { // Transfer the ETH and store if it succeeded or not. callStatus := call(gas(), to, amount, 0, 0, 0, 0) } require(callStatus, "ETH_TRANSFER_FAILED"); } /*/////////////////////////////////////////////////////////////// ERC20 OPERATIONS //////////////////////////////////////////////////////////////*/ function safeTransferFrom( ERC20 token, address from, address to, uint256 amount ) internal { bool callStatus; assembly { // Get a pointer to some free memory. let freeMemoryPointer := mload(0x40) // Write the abi-encoded calldata to memory piece by piece: mstore(freeMemoryPointer, 0x23b872dd00000000000000000000000000000000000000000000000000000000) // Begin with the function selector. mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff)) // Mask and append the "from" argument. mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Mask and append the "to" argument. mstore(add(freeMemoryPointer, 68), amount) // Finally append the "amount" argument. No mask as it's a full 32 byte value. // Call the token and store if it succeeded or not. // We use 100 because the calldata length is 4 + 32 * 3. callStatus := call(gas(), token, 0, freeMemoryPointer, 100, 0, 0) } require(didLastOptionalReturnCallSucceed(callStatus), "TRANSFER_FROM_FAILED"); } function safeTransfer( ERC20 token, address to, uint256 amount ) internal { bool callStatus; assembly { // Get a pointer to some free memory. let freeMemoryPointer := mload(0x40) // Write the abi-encoded calldata to memory piece by piece: mstore(freeMemoryPointer, 0xa9059cbb00000000000000000000000000000000000000000000000000000000) // Begin with the function selector. mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Mask and append the "to" argument. mstore(add(freeMemoryPointer, 36), amount) // Finally append the "amount" argument. No mask as it's a full 32 byte value. // Call the token and store if it succeeded or not. // We use 68 because the calldata length is 4 + 32 * 2. callStatus := call(gas(), token, 0, freeMemoryPointer, 68, 0, 0) } require(didLastOptionalReturnCallSucceed(callStatus), "TRANSFER_FAILED"); } function safeApprove( ERC20 token, address to, uint256 amount ) internal { bool callStatus; assembly { // Get a pointer to some free memory. let freeMemoryPointer := mload(0x40) // Write the abi-encoded calldata to memory piece by piece: mstore(freeMemoryPointer, 0x095ea7b300000000000000000000000000000000000000000000000000000000) // Begin with the function selector. mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Mask and append the "to" argument. mstore(add(freeMemoryPointer, 36), amount) // Finally append the "amount" argument. No mask as it's a full 32 byte value. // Call the token and store if it succeeded or not. // We use 68 because the calldata length is 4 + 32 * 2. callStatus := call(gas(), token, 0, freeMemoryPointer, 68, 0, 0) } require(didLastOptionalReturnCallSucceed(callStatus), "APPROVE_FAILED"); } /*/////////////////////////////////////////////////////////////// INTERNAL HELPER LOGIC //////////////////////////////////////////////////////////////*/ function didLastOptionalReturnCallSucceed(bool callStatus) private pure returns (bool success) { assembly { // Get how many bytes the call returned. let returnDataSize := returndatasize() // If the call reverted: if iszero(callStatus) { // Copy the revert message into memory. returndatacopy(0, 0, returnDataSize) // Revert with the same message. revert(0, returnDataSize) } switch returnDataSize case 32 { // Copy the return data into memory. returndatacopy(0, 0, returnDataSize) // Set success to whether it returned true. success := iszero(iszero(mload(0))) } case 0 { // There was no return data. success := 1 } default { // It returned some malformed input. success := 0 } } } }
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity >=0.8.0; /// @notice Modern and gas efficient ERC20 + EIP-2612 implementation. /// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol) /// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol) /// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it. abstract contract ERC20 { /*/////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ event Transfer(address indexed from, address indexed to, uint256 amount); event Approval(address indexed owner, address indexed spender, uint256 amount); /*/////////////////////////////////////////////////////////////// METADATA STORAGE //////////////////////////////////////////////////////////////*/ string public name; string public symbol; uint8 public immutable decimals; /*/////////////////////////////////////////////////////////////// ERC20 STORAGE //////////////////////////////////////////////////////////////*/ uint256 public totalSupply; mapping(address => uint256) public balanceOf; mapping(address => mapping(address => uint256)) public allowance; /*/////////////////////////////////////////////////////////////// EIP-2612 STORAGE //////////////////////////////////////////////////////////////*/ bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"); uint256 internal immutable INITIAL_CHAIN_ID; bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR; mapping(address => uint256) public nonces; /*/////////////////////////////////////////////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////*/ constructor( string memory _name, string memory _symbol, uint8 _decimals ) { name = _name; symbol = _symbol; decimals = _decimals; INITIAL_CHAIN_ID = block.chainid; INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); } /*/////////////////////////////////////////////////////////////// ERC20 LOGIC //////////////////////////////////////////////////////////////*/ function approve(address spender, uint256 amount) public virtual returns (bool) { allowance[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function transfer(address to, uint256 amount) public virtual returns (bool) { balanceOf[msg.sender] -= amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(msg.sender, to, amount); return true; } function transferFrom( address from, address to, uint256 amount ) public virtual returns (bool) { uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals. if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount; balanceOf[from] -= amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(from, to, amount); return true; } /*/////////////////////////////////////////////////////////////// EIP-2612 LOGIC //////////////////////////////////////////////////////////////*/ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) public virtual { require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED"); // Unchecked because the only math done is incrementing // the owner's nonce which cannot realistically overflow. unchecked { bytes32 digest = keccak256( abi.encodePacked( "\x19\x01", DOMAIN_SEPARATOR(), keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline)) ) ); address recoveredAddress = ecrecover(digest, v, r, s); require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER"); allowance[recoveredAddress][spender] = value; } emit Approval(owner, spender, value); } function DOMAIN_SEPARATOR() public view virtual returns (bytes32) { return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator(); } function computeDomainSeparator() internal view virtual returns (bytes32) { return keccak256( abi.encode( keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), keccak256(bytes(name)), keccak256("1"), block.chainid, address(this) ) ); } /*/////////////////////////////////////////////////////////////// INTERNAL MINT/BURN LOGIC //////////////////////////////////////////////////////////////*/ function _mint(address to, uint256 amount) internal virtual { totalSupply += amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(address(0), to, amount); } function _burn(address from, uint256 amount) internal virtual { balanceOf[from] -= amount; // Cannot underflow because a user's balance // will never be larger than the total supply. unchecked { totalSupply -= amount; } emit Transfer(from, address(0), amount); } }
//SPDX-License-Identifier: GPL-3.0 pragma solidity =0.8.11; import "@rari-capital/solmate/src/utils/SafeTransferLib.sol"; import "@rari-capital/solmate/src/tokens/ERC20.sol"; import "../libraries/PermitHelper.sol"; /// @title Rainbow base aggregator contract contract BaseAggregator { /// @dev Used to prevent re-entrancy uint256 internal status; /// @dev Set of allowed swapTargets. mapping(address => bool) public swapTargets; /// @dev modifier that prevents reentrancy attacks on specific methods modifier nonReentrant() { // On the first call to nonReentrant, status will be 1 require(status != 2, "NON_REENTRANT"); // Any calls to nonReentrant after this point will fail status = 2; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) status = 1; } /// @dev modifier that ensures only approved targets can be called modifier onlyApprovedTarget(address target) { require(swapTargets[target], "TARGET_NOT_AUTH"); _; } /** EXTERNAL **/ /// @param buyTokenAddress the address of token that the user should receive /// @param target the address of the aggregator contract that will exec the swap /// @param swapCallData the calldata that will be passed to the aggregator contract /// @param feeAmount the amount of ETH that we will take as a fee function fillQuoteEthToToken( address buyTokenAddress, address payable target, bytes calldata swapCallData, uint256 feeAmount ) external payable nonReentrant onlyApprovedTarget(target) { // 1 - Get the initial balances uint256 initialTokenBalance = ERC20(buyTokenAddress).balanceOf( address(this) ); uint256 initialEthAmount = address(this).balance - msg.value; uint256 sellAmount = msg.value - feeAmount; // 2 - Call the encoded swap function call on the contract at `target`, // passing along any ETH attached to this function call to cover protocol fees // minus our fees, which are kept in this contract (bool success, bytes memory res) = target.call{value: sellAmount}( swapCallData ); // Get the revert message of the call and revert with it if the call failed if (!success) { assembly { let returndata_size := mload(res) revert(add(32, res), returndata_size) } } // 3 - Make sure we received the tokens { uint256 finalTokenBalance = ERC20(buyTokenAddress).balanceOf( address(this) ); require(initialTokenBalance < finalTokenBalance, "NO_TOKENS"); } // 4 - Send the received tokens back to the user SafeTransferLib.safeTransfer( ERC20(buyTokenAddress), msg.sender, ERC20(buyTokenAddress).balanceOf(address(this)) - initialTokenBalance ); // 5 - Return the remaining ETH to the user (if any) { uint256 finalEthAmount = address(this).balance - feeAmount; if (finalEthAmount > initialEthAmount) { SafeTransferLib.safeTransferETH( msg.sender, finalEthAmount - initialEthAmount ); } } } /// @param sellTokenAddress the address of token that the user is selling /// @param buyTokenAddress the address of token that the user should receive /// @param target the address of the aggregator contract that will exec the swap /// @param swapCallData the calldata that will be passed to the aggregator contract /// @param sellAmount the amount of tokens that the user is selling /// @param feeAmount the amount of the tokens to sell that we will take as a fee function fillQuoteTokenToToken( address sellTokenAddress, address buyTokenAddress, address payable target, bytes calldata swapCallData, uint256 sellAmount, uint256 feeAmount ) external payable nonReentrant onlyApprovedTarget(target) { _fillQuoteTokenToToken( sellTokenAddress, buyTokenAddress, target, swapCallData, sellAmount, feeAmount ); } /// @dev method that executes ERC20 to ERC20 token swaps with the ability to take a fee from the input // and accepts a signature to use permit, so the user doesn't have to make an previous approval transaction /// @param sellTokenAddress the address of token that the user is selling /// @param buyTokenAddress the address of token that the user should receive /// @param target the address of the aggregator contract that will exec the swap /// @param swapCallData the calldata that will be passed to the aggregator contract /// @param sellAmount the amount of tokens that the user is selling /// @param feeAmount the amount of the tokens to sell that we will take as a fee /// @param permitData struct containing the value, nonce, deadline, v, r and s values of the permit data function fillQuoteTokenToTokenWithPermit( address sellTokenAddress, address buyTokenAddress, address payable target, bytes calldata swapCallData, uint256 sellAmount, uint256 feeAmount, PermitHelper.Permit calldata permitData ) external payable nonReentrant onlyApprovedTarget(target) { // 1 - Apply permit PermitHelper.permit( permitData, sellTokenAddress, msg.sender, address(this) ); //2 - Call fillQuoteTokenToToken _fillQuoteTokenToToken( sellTokenAddress, buyTokenAddress, target, swapCallData, sellAmount, feeAmount ); } /// @dev method that executes ERC20 to ETH token swaps with the ability to take a fee from the output /// @param sellTokenAddress the address of token that the user is selling /// @param target the address of the aggregator contract that will exec the swap /// @param swapCallData the calldata that will be passed to the aggregator contract /// @param sellAmount the amount of tokens that the user is selling /// @param feePercentageBasisPoints the amount of ETH that we will take as a fee in 1e18 basis points (basis points with 4 decimals plus 14 extra decimals of precision) function fillQuoteTokenToEth( address sellTokenAddress, address payable target, bytes calldata swapCallData, uint256 sellAmount, uint256 feePercentageBasisPoints ) external payable nonReentrant onlyApprovedTarget(target) { _fillQuoteTokenToEth( sellTokenAddress, target, swapCallData, sellAmount, feePercentageBasisPoints ); } /// @dev method that executes ERC20 to ETH token swaps with the ability to take a fee from the output // and accepts a signature to use permit, so the user doesn't have to make an previous approval transaction /// @param sellTokenAddress the address of token that the user is selling /// @param target the address of the aggregator contract that will exec the swap /// @param swapCallData the calldata that will be passed to the aggregator contract /// @param sellAmount the amount of tokens that the user is selling /// @param feePercentageBasisPoints the amount of ETH that we will take as a fee in 1e18 basis points (basis points with 4 decimals plus 14 extra decimals of precision) /// @param permitData struct containing the amount, nonce, deadline, v, r and s values of the permit data function fillQuoteTokenToEthWithPermit( address sellTokenAddress, address payable target, bytes calldata swapCallData, uint256 sellAmount, uint256 feePercentageBasisPoints, PermitHelper.Permit calldata permitData ) external payable nonReentrant onlyApprovedTarget(target) { // 1 - Apply permit PermitHelper.permit( permitData, sellTokenAddress, msg.sender, address(this) ); // 2 - call fillQuoteTokenToEth _fillQuoteTokenToEth( sellTokenAddress, target, swapCallData, sellAmount, feePercentageBasisPoints ); } /** INTERNAL **/ /// @dev internal method that executes ERC20 to ETH token swaps with the ability to take a fee from the output function _fillQuoteTokenToEth( address sellTokenAddress, address payable target, bytes calldata swapCallData, uint256 sellAmount, uint256 feePercentageBasisPoints ) internal { // 1 - Get the initial ETH amount uint256 initialEthAmount = address(this).balance - msg.value; // 2 - Move the tokens to this contract // NOTE: This implicitly assumes that the the necessary approvals have been granted // from msg.sender to the BaseAggregator SafeTransferLib.safeTransferFrom( ERC20(sellTokenAddress), msg.sender, address(this), sellAmount ); // 3 - Approve the aggregator's contract to swap the tokens SafeTransferLib.safeApprove( ERC20(sellTokenAddress), target, sellAmount ); // 4 - Call the encoded swap function call on the contract at `target`, // passing along any ETH attached to this function call to cover protocol fees. (bool success, bytes memory res) = target.call{value: msg.value}( swapCallData ); // Get the revert message of the call and revert with it if the call failed if (!success) { assembly { let returndata_size := mload(res) revert(add(32, res), returndata_size) } } // 5 - Check that the tokens were fully spent during the swap uint256 allowance = ERC20(sellTokenAddress).allowance( address(this), target ); require(allowance == 0, "ALLOWANCE_NOT_ZERO"); // 6 - Subtract the fees and send the rest to the user // Fees will be held in this contract uint256 finalEthAmount = address(this).balance; uint256 ethDiff = finalEthAmount - initialEthAmount; require(ethDiff > 0, "NO_ETH_BACK"); if (feePercentageBasisPoints > 0) { uint256 fees = (ethDiff * feePercentageBasisPoints) / 1e18; uint256 amountMinusFees = ethDiff - fees; SafeTransferLib.safeTransferETH(msg.sender, amountMinusFees); // when there's no fee, 1inch sends the funds directly to the user // we check to prevent sending 0 ETH in that case } else if (ethDiff > 0) { SafeTransferLib.safeTransferETH(msg.sender, ethDiff); } } /// @dev internal method that executes ERC20 to ERC20 token swaps with the ability to take a fee from the input function _fillQuoteTokenToToken( address sellTokenAddress, address buyTokenAddress, address payable target, bytes calldata swapCallData, uint256 sellAmount, uint256 feeAmount ) internal { // 1 - Get the initial output token balance uint256 initialOutputTokenAmount = ERC20(buyTokenAddress).balanceOf( address(this) ); // 2 - Move the tokens to this contract (which includes our fees) // NOTE: This implicitly assumes that the the necessary approvals have been granted // from msg.sender to the BaseAggregator SafeTransferLib.safeTransferFrom( ERC20(sellTokenAddress), msg.sender, address(this), sellAmount ); // 3 - Approve the aggregator's contract to swap the tokens if needed SafeTransferLib.safeApprove( ERC20(sellTokenAddress), target, sellAmount - feeAmount ); // 4 - Call the encoded swap function call on the contract at `target`, // passing along any ETH attached to this function call to cover protocol fees. (bool success, bytes memory res) = target.call{value: msg.value}( swapCallData ); // Get the revert message of the call and revert with it if the call failed if (!success) { assembly { let returndata_size := mload(res) revert(add(32, res), returndata_size) } } // 5 - Check that the tokens were fully spent during the swap uint256 allowance = ERC20(sellTokenAddress).allowance( address(this), target ); require(allowance == 0, "ALLOWANCE_NOT_ZERO"); // 6 - Make sure we received the tokens uint256 finalOutputTokenAmount = ERC20(buyTokenAddress).balanceOf( address(this) ); require(initialOutputTokenAmount < finalOutputTokenAmount, "NO_TOKENS"); // 7 - Send tokens to the user SafeTransferLib.safeTransfer( ERC20(buyTokenAddress), msg.sender, finalOutputTokenAmount - initialOutputTokenAmount ); } }
//SPDX-License-Identifier: GPL-3.0 pragma solidity =0.8.11; import "../interfaces/IERC2612.sol"; import "../interfaces/IDAI.sol"; /// @title PermitHelper /// @dev Helper methods for using ERC20 Permit (ERC2612 or DAI/CHAI like) library PermitHelper { struct Permit { uint256 value; uint256 nonce; uint256 deadline; bool isDaiStylePermit; uint8 v; bytes32 r; bytes32 s; } /// @dev permit method helper that will handle both known implementations // DAI vs ERC2612 tokens /// @param permitData bytes containing the encoded permit signature /// @param tokenAddress address of the token that will be permitted /// @param holder address that holds the tokens to be permitted /// @param spender address that will be permitted to spend the tokens function permit( Permit memory permitData, address tokenAddress, address holder, address spender ) internal { if (permitData.isDaiStylePermit) { IDAI(tokenAddress).permit( holder, spender, permitData.nonce, permitData.deadline, true, permitData.v, permitData.r, permitData.s ); } else { IERC2612(tokenAddress).permit( holder, spender, permitData.value, permitData.deadline, permitData.v, permitData.r, permitData.s ); } } }
//SPDX-License-Identifier: GPL-3.0 pragma solidity =0.8.11; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol"; interface IERC2612 is IERC20Metadata, IERC20Permit { function _nonces(address owner) external view returns (uint256); function version() external view returns (string memory); }
//SPDX-License-Identifier: GPL-3.0 pragma solidity =0.8.11; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "@uniswap/v3-periphery/contracts/interfaces/external/IERC20PermitAllowed.sol"; interface IDAI is IERC20Metadata, IERC20PermitAllowed { function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function version() external view returns (string memory); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; import "../IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity >=0.5.0; /// @title Interface for permit /// @notice Interface used by DAI/CHAI for permit interface IERC20PermitAllowed { /// @notice Approve the spender to spend some tokens via the holder signature /// @dev This is the permit interface used by DAI and CHAI /// @param holder The address of the token holder, the token owner /// @param spender The address of the token spender /// @param nonce The holder's nonce, increases at each call to permit /// @param expiry The timestamp at which the permit is no longer valid /// @param allowed Boolean that sets approval amount, true for type(uint256).max and false for 0 /// @param v Must produce valid secp256k1 signature from the holder along with `r` and `s` /// @param r Must produce valid secp256k1 signature from the holder along with `v` and `s` /// @param s Must produce valid secp256k1 signature from the holder along with `r` and `v` function permit( address holder, address spender, uint256 nonce, uint256 expiry, bool allowed, uint8 v, bytes32 r, bytes32 s ) external; }
{ "optimizer": { "enabled": true, "runs": 1000 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EthWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newOwner","type":"address"},{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"target","type":"address"}],"name":"SwapTargetAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"target","type":"address"}],"name":"SwapTargetRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenWithdrawn","type":"event"},{"inputs":[{"internalType":"address","name":"buyTokenAddress","type":"address"},{"internalType":"address payable","name":"target","type":"address"},{"internalType":"bytes","name":"swapCallData","type":"bytes"},{"internalType":"uint256","name":"feeAmount","type":"uint256"}],"name":"fillQuoteEthToToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"sellTokenAddress","type":"address"},{"internalType":"address payable","name":"target","type":"address"},{"internalType":"bytes","name":"swapCallData","type":"bytes"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"feePercentageBasisPoints","type":"uint256"}],"name":"fillQuoteTokenToEth","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"sellTokenAddress","type":"address"},{"internalType":"address payable","name":"target","type":"address"},{"internalType":"bytes","name":"swapCallData","type":"bytes"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"feePercentageBasisPoints","type":"uint256"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"isDaiStylePermit","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct PermitHelper.Permit","name":"permitData","type":"tuple"}],"name":"fillQuoteTokenToEthWithPermit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"sellTokenAddress","type":"address"},{"internalType":"address","name":"buyTokenAddress","type":"address"},{"internalType":"address payable","name":"target","type":"address"},{"internalType":"bytes","name":"swapCallData","type":"bytes"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"feeAmount","type":"uint256"}],"name":"fillQuoteTokenToToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"sellTokenAddress","type":"address"},{"internalType":"address","name":"buyTokenAddress","type":"address"},{"internalType":"address payable","name":"target","type":"address"},{"internalType":"bytes","name":"swapCallData","type":"bytes"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"isDaiStylePermit","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct PermitHelper.Permit","name":"permitData","type":"tuple"}],"name":"fillQuoteTokenToTokenWithPermit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"swapTargets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"add","type":"bool"}],"name":"updateSwapTargets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561001057600080fd5b50600280546001600160a01b031916331790556001600055611afd806100376000396000f3fe6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b0480bbd1161004e578063b0480bbd1461024e578063b309383814610261578063f2fde38b1461027457600080fd5b80638da5cb5b146101e357806397bbda0e1461021b578063999b64641461023b57600080fd5b80633c2b9a7d116100a55780633c2b9a7d1461017857806355e4b7be1461018b57806383c4a19d1461019e57600080fd5b806301e33667146101385780631b9a91a41461015857600080fd5b3661013357600054600214806100e057506002546001600160a01b031633145b6101315760405162461bcd60e51b815260206004820152600a60248201527f4e4f5f524543454956450000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b005b600080fd5b34801561014457600080fd5b506101316101533660046115a6565b610294565b34801561016457600080fd5b506101316101733660046115e7565b61037d565b61013161018636600461165c565b61045a565b6101316101993660046116c9565b61075f565b3480156101aa57600080fd5b506101ce6101b9366004611754565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156101ef57600080fd5b50600254610203906001600160a01b031681565b6040516001600160a01b0390911681526020016101da565b34801561022757600080fd5b5061013161023636600461178d565b610820565b6101316102493660046117c2565b610904565b61013161025c366004611851565b6109c3565b61013161026f3660046118f1565b610a9f565b34801561028057600080fd5b5061013161028f366004611754565b610b6a565b6002546001600160a01b031633146102db5760405162461bcd60e51b815260206004820152600a60248201526927a7262cafa7aba722a960b11b6044820152606401610128565b6001600160a01b0382166103205760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b6044820152606401610128565b61032b838383610cbd565b816001600160a01b0316836001600160a01b03167f8210728e7c071f615b840ee026032693858fbcd5e5359e67e438c890f59e56208360405161037091815260200190565b60405180910390a3505050565b6002546001600160a01b031633146103c45760405162461bcd60e51b815260206004820152600a60248201526927a7262cafa7aba722a960b11b6044820152606401610128565b6001600160a01b0382166104095760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b6044820152606401610128565b6104138282610d63565b816001600160a01b03167f8455ae6be5d92f1df1c3c1484388e247a36c7e60d72055ae216dbc258f257d4b8260405161044e91815260200190565b60405180910390a25050565b6000546002141561049d5760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038516815260016020526040902054849060ff166104fd5760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b6040516370a0823160e01b81523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015610544573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610568919061197f565b9050600061057634476119ae565b9050600061058485346119ae565b9050600080896001600160a01b0316838a8a6040516105a49291906119c5565b60006040518083038185875af1925050503d80600081146105e1576040519150601f19603f3d011682016040523d82523d6000602084013e6105e6565b606091505b5091509150816105f95780518082602001fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038d16906370a0823190602401602060405180830381865afa158015610640573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610664919061197f565b90508086106106a15760405162461bcd60e51b81526020600482015260096024820152684e4f5f544f4b454e5360b81b6044820152606401610128565b506040516370a0823160e01b8152306004820152610723908c90339088906001600160a01b038416906370a0823190602401602060405180830381865afa1580156106f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610714919061197f565b61071e91906119ae565b610cbd565b600061072f88476119ae565b90508481111561074c5761074c3361074787846119ae565b610d63565b5050600160005550505050505050505050565b600054600214156107a25760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038616815260016020526040902054859060ff166108025760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b61081188888888888888610dc3565b50506001600055505050505050565b6002546001600160a01b031633146108675760405162461bcd60e51b815260206004820152600a60248201526927a7262cafa7aba722a960b11b6044820152606401610128565b6001600160a01b0382166000908152600160205260409020805460ff191682158015919091179091556108cc576040516001600160a01b038316907fb907822409611d127ab6a64611591b98e03a6a85ade4f258bae26b7c1efdfeaf90600090a25050565b6040516001600160a01b038316907f393b8be3e26787f19285ecd039dfd80bc6507828750f4d50367e6efe2524695c90600090a25050565b600054600214156109475760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038616815260016020526040902054859060ff166109a75760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b6109b587878787878761104c565b505060016000555050505050565b60005460021415610a065760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038716815260016020526040902054869060ff16610a665760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b610a80610a78368490038401846119e6565b8a333061125d565b610a8f89898989898989610dc3565b5050600160005550505050505050565b60005460021415610ae25760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038716815260016020526040902054869060ff16610b425760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b610b5c610b54368490038401846119e6565b89333061125d565b61081188888888888861104c565b6002546001600160a01b03163314610bb15760405162461bcd60e51b815260206004820152600a60248201526927a7262cafa7aba722a960b11b6044820152606401610128565b6001600160a01b038116610bf65760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b6044820152606401610128565b6002546001600160a01b0382811691161415610c545760405162461bcd60e51b815260206004820152600a60248201527f53414d455f4f574e4552000000000000000000000000000000000000000000006044820152606401610128565b600280546001600160a01b038381167fffffffffffffffffffffffff00000000000000000000000000000000000000008316811790935560405191169182917fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c90600090a35050565b60006040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201528260248201526000806044836000895af1915050610d11816113f1565b610d5d5760405162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c454400000000000000000000000000000000006044820152606401610128565b50505050565b600080600080600085875af1905080610dbe5760405162461bcd60e51b815260206004820152601360248201527f4554485f5452414e534645525f4641494c4544000000000000000000000000006044820152606401610128565b505050565b6040516370a0823160e01b81523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015610e0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2e919061197f565b9050610e3c88333086611438565b610e508887610e4b85876119ae565b6114ee565b600080876001600160a01b0316348888604051610e6e9291906119c5565b60006040518083038185875af1925050503d8060008114610eab576040519150601f19603f3d011682016040523d82523d6000602084013e610eb0565b606091505b509150915081610ec35780518082602001fd5b604051636eb1769f60e11b81523060048201526001600160a01b038981166024830152600091908c169063dd62ed3e90604401602060405180830381865afa158015610f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f37919061197f565b90508015610f875760405162461bcd60e51b815260206004820152601260248201527f414c4c4f57414e43455f4e4f545f5a45524f00000000000000000000000000006044820152606401610128565b6040516370a0823160e01b81523060048201526000906001600160a01b038c16906370a0823190602401602060405180830381865afa158015610fce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff2919061197f565b905080851061102f5760405162461bcd60e51b81526020600482015260096024820152684e4f5f544f4b454e5360b81b6044820152606401610128565b61103e8b3361071e88856119ae565b505050505050505050505050565b600061105834476119ae565b905061106687333086611438565b6110718787856114ee565b600080876001600160a01b031634888860405161108f9291906119c5565b60006040518083038185875af1925050503d80600081146110cc576040519150601f19603f3d011682016040523d82523d6000602084013e6110d1565b606091505b5091509150816110e45780518082602001fd5b604051636eb1769f60e11b81523060048201526001600160a01b038981166024830152600091908b169063dd62ed3e90604401602060405180830381865afa158015611134573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611158919061197f565b905080156111a85760405162461bcd60e51b815260206004820152601260248201527f414c4c4f57414e43455f4e4f545f5a45524f00000000000000000000000000006044820152606401610128565b4760006111b586836119ae565b9050600081116112075760405162461bcd60e51b815260206004820152600b60248201527f4e4f5f4554485f4241434b0000000000000000000000000000000000000000006044820152606401610128565b861561124d576000670de0b6b3a76400006112228984611a86565b61122c9190611aa5565b9050600061123a82846119ae565b90506112463382610d63565b505061103e565b801561103e5761103e3382610d63565b836060015115611331576020840151604080860151608087015160a088015160c089015193517f8fcbaf0c0000000000000000000000000000000000000000000000000000000081526001600160a01b0388811660048301528781166024830152604482019690965260648101939093526001608484015260ff90911660a483015260c482015260e481019190915290841690638fcbaf0c9061010401600060405180830381600087803b15801561131457600080fd5b505af1158015611328573d6000803e3d6000fd5b50505050610d5d565b8351604080860151608087015160a088015160c089015193517fd505accf0000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301526044820196909652606481019390935260ff909116608483015260a482015260c48101919091529084169063d505accf9060e401600060405180830381600087803b1580156113d357600080fd5b505af11580156113e7573d6000803e3d6000fd5b5050505050505050565b60003d8261140357806000803e806000fd5b806020811461141b57801561142c5760009250611431565b816000803e60005115159250611431565b600192505b5050919050565b60006040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526001600160a01b038416602482015282604482015260008060648360008a5af191505061149b816113f1565b6114e75760405162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152606401610128565b5050505050565b60006040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201528260248201526000806044836000895af1915050611542816113f1565b610d5d5760405162461bcd60e51b815260206004820152600e60248201527f415050524f56455f4641494c45440000000000000000000000000000000000006044820152606401610128565b6001600160a01b03811681146115a357600080fd5b50565b6000806000606084860312156115bb57600080fd5b83356115c68161158e565b925060208401356115d68161158e565b929592945050506040919091013590565b600080604083850312156115fa57600080fd5b82356116058161158e565b946020939093013593505050565b60008083601f84011261162557600080fd5b50813567ffffffffffffffff81111561163d57600080fd5b60208301915083602082850101111561165557600080fd5b9250929050565b60008060008060006080868803121561167457600080fd5b853561167f8161158e565b9450602086013561168f8161158e565b9350604086013567ffffffffffffffff8111156116ab57600080fd5b6116b788828901611613565b96999598509660600135949350505050565b600080600080600080600060c0888a0312156116e457600080fd5b87356116ef8161158e565b965060208801356116ff8161158e565b9550604088013561170f8161158e565b9450606088013567ffffffffffffffff81111561172b57600080fd5b6117378a828b01611613565b989b979a50959895979660808701359660a0013595509350505050565b60006020828403121561176657600080fd5b81356117718161158e565b9392505050565b8035801515811461178857600080fd5b919050565b600080604083850312156117a057600080fd5b82356117ab8161158e565b91506117b960208401611778565b90509250929050565b60008060008060008060a087890312156117db57600080fd5b86356117e68161158e565b955060208701356117f68161158e565b9450604087013567ffffffffffffffff81111561181257600080fd5b61181e89828a01611613565b979a9699509760608101359660809091013595509350505050565b600060e0828403121561184b57600080fd5b50919050565b6000806000806000806000806101a0898b03121561186e57600080fd5b88356118798161158e565b975060208901356118898161158e565b965060408901356118998161158e565b9550606089013567ffffffffffffffff8111156118b557600080fd5b6118c18b828c01611613565b9096509450506080890135925060a089013591506118e28a60c08b01611839565b90509295985092959890939650565b6000806000806000806000610180888a03121561190d57600080fd5b87356119188161158e565b965060208801356119288161158e565b9550604088013567ffffffffffffffff81111561194457600080fd5b6119508a828b01611613565b90965094505060608801359250608088013591506119718960a08a01611839565b905092959891949750929550565b60006020828403121561199157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156119c0576119c0611998565b500390565b8183823760009101908152919050565b803560ff8116811461178857600080fd5b600060e082840312156119f857600080fd5b60405160e0810181811067ffffffffffffffff82111715611a2957634e487b7160e01b600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152611a5260608401611778565b6060820152611a63608084016119d5565b608082015260a083013560a082015260c083013560c08201528091505092915050565b6000816000190483118215151615611aa057611aa0611998565b500290565b600082611ac257634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212209870dd0dc3fb83baf72036a002768c9388c9b2cbf93b6d7b09369fddefaaf87764736f6c634300080b0033
Deployed Bytecode
0x6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b0480bbd1161004e578063b0480bbd1461024e578063b309383814610261578063f2fde38b1461027457600080fd5b80638da5cb5b146101e357806397bbda0e1461021b578063999b64641461023b57600080fd5b80633c2b9a7d116100a55780633c2b9a7d1461017857806355e4b7be1461018b57806383c4a19d1461019e57600080fd5b806301e33667146101385780631b9a91a41461015857600080fd5b3661013357600054600214806100e057506002546001600160a01b031633145b6101315760405162461bcd60e51b815260206004820152600a60248201527f4e4f5f524543454956450000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b005b600080fd5b34801561014457600080fd5b506101316101533660046115a6565b610294565b34801561016457600080fd5b506101316101733660046115e7565b61037d565b61013161018636600461165c565b61045a565b6101316101993660046116c9565b61075f565b3480156101aa57600080fd5b506101ce6101b9366004611754565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156101ef57600080fd5b50600254610203906001600160a01b031681565b6040516001600160a01b0390911681526020016101da565b34801561022757600080fd5b5061013161023636600461178d565b610820565b6101316102493660046117c2565b610904565b61013161025c366004611851565b6109c3565b61013161026f3660046118f1565b610a9f565b34801561028057600080fd5b5061013161028f366004611754565b610b6a565b6002546001600160a01b031633146102db5760405162461bcd60e51b815260206004820152600a60248201526927a7262cafa7aba722a960b11b6044820152606401610128565b6001600160a01b0382166103205760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b6044820152606401610128565b61032b838383610cbd565b816001600160a01b0316836001600160a01b03167f8210728e7c071f615b840ee026032693858fbcd5e5359e67e438c890f59e56208360405161037091815260200190565b60405180910390a3505050565b6002546001600160a01b031633146103c45760405162461bcd60e51b815260206004820152600a60248201526927a7262cafa7aba722a960b11b6044820152606401610128565b6001600160a01b0382166104095760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b6044820152606401610128565b6104138282610d63565b816001600160a01b03167f8455ae6be5d92f1df1c3c1484388e247a36c7e60d72055ae216dbc258f257d4b8260405161044e91815260200190565b60405180910390a25050565b6000546002141561049d5760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038516815260016020526040902054849060ff166104fd5760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b6040516370a0823160e01b81523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015610544573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610568919061197f565b9050600061057634476119ae565b9050600061058485346119ae565b9050600080896001600160a01b0316838a8a6040516105a49291906119c5565b60006040518083038185875af1925050503d80600081146105e1576040519150601f19603f3d011682016040523d82523d6000602084013e6105e6565b606091505b5091509150816105f95780518082602001fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038d16906370a0823190602401602060405180830381865afa158015610640573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610664919061197f565b90508086106106a15760405162461bcd60e51b81526020600482015260096024820152684e4f5f544f4b454e5360b81b6044820152606401610128565b506040516370a0823160e01b8152306004820152610723908c90339088906001600160a01b038416906370a0823190602401602060405180830381865afa1580156106f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610714919061197f565b61071e91906119ae565b610cbd565b600061072f88476119ae565b90508481111561074c5761074c3361074787846119ae565b610d63565b5050600160005550505050505050505050565b600054600214156107a25760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038616815260016020526040902054859060ff166108025760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b61081188888888888888610dc3565b50506001600055505050505050565b6002546001600160a01b031633146108675760405162461bcd60e51b815260206004820152600a60248201526927a7262cafa7aba722a960b11b6044820152606401610128565b6001600160a01b0382166000908152600160205260409020805460ff191682158015919091179091556108cc576040516001600160a01b038316907fb907822409611d127ab6a64611591b98e03a6a85ade4f258bae26b7c1efdfeaf90600090a25050565b6040516001600160a01b038316907f393b8be3e26787f19285ecd039dfd80bc6507828750f4d50367e6efe2524695c90600090a25050565b600054600214156109475760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038616815260016020526040902054859060ff166109a75760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b6109b587878787878761104c565b505060016000555050505050565b60005460021415610a065760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038716815260016020526040902054869060ff16610a665760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b610a80610a78368490038401846119e6565b8a333061125d565b610a8f89898989898989610dc3565b5050600160005550505050505050565b60005460021415610ae25760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038716815260016020526040902054869060ff16610b425760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b610b5c610b54368490038401846119e6565b89333061125d565b61081188888888888861104c565b6002546001600160a01b03163314610bb15760405162461bcd60e51b815260206004820152600a60248201526927a7262cafa7aba722a960b11b6044820152606401610128565b6001600160a01b038116610bf65760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b6044820152606401610128565b6002546001600160a01b0382811691161415610c545760405162461bcd60e51b815260206004820152600a60248201527f53414d455f4f574e4552000000000000000000000000000000000000000000006044820152606401610128565b600280546001600160a01b038381167fffffffffffffffffffffffff00000000000000000000000000000000000000008316811790935560405191169182917fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c90600090a35050565b60006040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201528260248201526000806044836000895af1915050610d11816113f1565b610d5d5760405162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c454400000000000000000000000000000000006044820152606401610128565b50505050565b600080600080600085875af1905080610dbe5760405162461bcd60e51b815260206004820152601360248201527f4554485f5452414e534645525f4641494c4544000000000000000000000000006044820152606401610128565b505050565b6040516370a0823160e01b81523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015610e0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2e919061197f565b9050610e3c88333086611438565b610e508887610e4b85876119ae565b6114ee565b600080876001600160a01b0316348888604051610e6e9291906119c5565b60006040518083038185875af1925050503d8060008114610eab576040519150601f19603f3d011682016040523d82523d6000602084013e610eb0565b606091505b509150915081610ec35780518082602001fd5b604051636eb1769f60e11b81523060048201526001600160a01b038981166024830152600091908c169063dd62ed3e90604401602060405180830381865afa158015610f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f37919061197f565b90508015610f875760405162461bcd60e51b815260206004820152601260248201527f414c4c4f57414e43455f4e4f545f5a45524f00000000000000000000000000006044820152606401610128565b6040516370a0823160e01b81523060048201526000906001600160a01b038c16906370a0823190602401602060405180830381865afa158015610fce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff2919061197f565b905080851061102f5760405162461bcd60e51b81526020600482015260096024820152684e4f5f544f4b454e5360b81b6044820152606401610128565b61103e8b3361071e88856119ae565b505050505050505050505050565b600061105834476119ae565b905061106687333086611438565b6110718787856114ee565b600080876001600160a01b031634888860405161108f9291906119c5565b60006040518083038185875af1925050503d80600081146110cc576040519150601f19603f3d011682016040523d82523d6000602084013e6110d1565b606091505b5091509150816110e45780518082602001fd5b604051636eb1769f60e11b81523060048201526001600160a01b038981166024830152600091908b169063dd62ed3e90604401602060405180830381865afa158015611134573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611158919061197f565b905080156111a85760405162461bcd60e51b815260206004820152601260248201527f414c4c4f57414e43455f4e4f545f5a45524f00000000000000000000000000006044820152606401610128565b4760006111b586836119ae565b9050600081116112075760405162461bcd60e51b815260206004820152600b60248201527f4e4f5f4554485f4241434b0000000000000000000000000000000000000000006044820152606401610128565b861561124d576000670de0b6b3a76400006112228984611a86565b61122c9190611aa5565b9050600061123a82846119ae565b90506112463382610d63565b505061103e565b801561103e5761103e3382610d63565b836060015115611331576020840151604080860151608087015160a088015160c089015193517f8fcbaf0c0000000000000000000000000000000000000000000000000000000081526001600160a01b0388811660048301528781166024830152604482019690965260648101939093526001608484015260ff90911660a483015260c482015260e481019190915290841690638fcbaf0c9061010401600060405180830381600087803b15801561131457600080fd5b505af1158015611328573d6000803e3d6000fd5b50505050610d5d565b8351604080860151608087015160a088015160c089015193517fd505accf0000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301526044820196909652606481019390935260ff909116608483015260a482015260c48101919091529084169063d505accf9060e401600060405180830381600087803b1580156113d357600080fd5b505af11580156113e7573d6000803e3d6000fd5b5050505050505050565b60003d8261140357806000803e806000fd5b806020811461141b57801561142c5760009250611431565b816000803e60005115159250611431565b600192505b5050919050565b60006040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526001600160a01b038416602482015282604482015260008060648360008a5af191505061149b816113f1565b6114e75760405162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152606401610128565b5050505050565b60006040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201528260248201526000806044836000895af1915050611542816113f1565b610d5d5760405162461bcd60e51b815260206004820152600e60248201527f415050524f56455f4641494c45440000000000000000000000000000000000006044820152606401610128565b6001600160a01b03811681146115a357600080fd5b50565b6000806000606084860312156115bb57600080fd5b83356115c68161158e565b925060208401356115d68161158e565b929592945050506040919091013590565b600080604083850312156115fa57600080fd5b82356116058161158e565b946020939093013593505050565b60008083601f84011261162557600080fd5b50813567ffffffffffffffff81111561163d57600080fd5b60208301915083602082850101111561165557600080fd5b9250929050565b60008060008060006080868803121561167457600080fd5b853561167f8161158e565b9450602086013561168f8161158e565b9350604086013567ffffffffffffffff8111156116ab57600080fd5b6116b788828901611613565b96999598509660600135949350505050565b600080600080600080600060c0888a0312156116e457600080fd5b87356116ef8161158e565b965060208801356116ff8161158e565b9550604088013561170f8161158e565b9450606088013567ffffffffffffffff81111561172b57600080fd5b6117378a828b01611613565b989b979a50959895979660808701359660a0013595509350505050565b60006020828403121561176657600080fd5b81356117718161158e565b9392505050565b8035801515811461178857600080fd5b919050565b600080604083850312156117a057600080fd5b82356117ab8161158e565b91506117b960208401611778565b90509250929050565b60008060008060008060a087890312156117db57600080fd5b86356117e68161158e565b955060208701356117f68161158e565b9450604087013567ffffffffffffffff81111561181257600080fd5b61181e89828a01611613565b979a9699509760608101359660809091013595509350505050565b600060e0828403121561184b57600080fd5b50919050565b6000806000806000806000806101a0898b03121561186e57600080fd5b88356118798161158e565b975060208901356118898161158e565b965060408901356118998161158e565b9550606089013567ffffffffffffffff8111156118b557600080fd5b6118c18b828c01611613565b9096509450506080890135925060a089013591506118e28a60c08b01611839565b90509295985092959890939650565b6000806000806000806000610180888a03121561190d57600080fd5b87356119188161158e565b965060208801356119288161158e565b9550604088013567ffffffffffffffff81111561194457600080fd5b6119508a828b01611613565b90965094505060608801359250608088013591506119718960a08a01611839565b905092959891949750929550565b60006020828403121561199157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156119c0576119c0611998565b500390565b8183823760009101908152919050565b803560ff8116811461178857600080fd5b600060e082840312156119f857600080fd5b60405160e0810181811067ffffffffffffffff82111715611a2957634e487b7160e01b600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152611a5260608401611778565b6060820152611a63608084016119d5565b608082015260a083013560a082015260c083013560c08201528091505092915050565b6000816000190483118215151615611aa057611aa0611998565b500290565b600082611ac257634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212209870dd0dc3fb83baf72036a002768c9388c9b2cbf93b6d7b09369fddefaaf87764736f6c634300080b0033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 1.43% | $0.999871 | 911.7728 | $911.66 | |
ETH | 1.41% | $1 | 897.0055 | $897.01 | |
ETH | 1.39% | $0.079598 | 11,176.7269 | $889.65 | |
ETH | 1.31% | $2,662.87 | 0.3144 | $837.28 | |
ETH | 1.17% | $0.141874 | 5,244.0023 | $743.99 | |
ETH | 1.15% | $0.999989 | 734.0621 | $734.05 | |
ETH | 1.13% | $1.27 | 566.9003 | $719.96 | |
ETH | 1.04% | $2,665.45 | 0.2486 | $662.74 | |
ETH | 0.79% | $0.103338 | 4,877.6081 | $504.04 | |
ETH | 0.77% | $26.1 | 18.7927 | $490.49 | |
ETH | 0.65% | $1.23 | 338.623 | $416.51 | |
ETH | 0.64% | $2,824.41 | 0.1457 | $411.56 | |
ETH | 0.64% | $6.49 | 62.8346 | $407.8 | |
ETH | 0.59% | $96,107 | 0.00393192 | $377.89 | |
ETH | 0.58% | $0.000001 | 456,247,003.9868 | $368.5 | |
ETH | 0.55% | $1.15 | 307.5332 | $353.66 | |
ETH | 0.54% | $2,662.87 | 0.13 | $346.12 | |
ETH | 0.52% | $1.75 | 189.0725 | $330.88 | |
ETH | 0.49% | $18.69 | 16.7967 | $313.93 | |
ETH | 0.48% | $0.13374 | 2,286.1225 | $305.75 | |
ETH | 0.47% | $7.47 | 39.7814 | $297.17 | |
ETH | 0.41% | $95,950 | 0.00271616 | $260.62 | |
ETH | 0.41% | $0.455484 | 569.161 | $259.24 | |
ETH | 0.40% | $16.34 | 15.5721 | $254.45 | |
ETH | 0.39% | $253.6 | 0.9877 | $250.47 | |
ETH | 0.39% | $6.86 | 36.3756 | $249.54 | |
ETH | 0.39% | $0.513236 | 479.5694 | $246.13 | |
ETH | 0.38% | $0.052438 | 4,644.4983 | $243.55 | |
ETH | 0.37% | $0.00001 | 24,425,265.4169 | $238.15 | |
ETH | 0.36% | $2.89 | 80.1464 | $231.62 | |
ETH | 0.35% | $0.101718 | 2,227.3605 | $226.56 | |
ETH | 0.35% | $0.01315 | 17,141.6488 | $225.41 | |
ETH | 0.35% | $0.996887 | 224.8479 | $224.15 | |
ETH | 0.35% | $0.535352 | 411.5762 | $220.34 | |
ETH | 0.33% | $0.019668 | 10,845.1874 | $213.3 | |
ETH | 0.33% | $35.37 | 6.0221 | $213 | |
ETH | 0.33% | $0.327407 | 646.1133 | $211.54 | |
ETH | 0.33% | $0.999511 | 209.0773 | $208.98 | |
ETH | 0.33% | $0.724964 | 286.4137 | $207.64 | |
ETH | 0.32% | $0.325065 | 637.3824 | $207.19 | |
ETH | 0.32% | <$0.000001 | 5,767,087,798.023 | $206.69 | |
ETH | 0.31% | $1 | 199.8941 | $199.89 | |
ETH | 0.30% | $0.550361 | 349.8385 | $192.54 | |
ETH | 0.29% | $102.52 | 1.8096 | $185.52 | |
ETH | 0.29% | $0.144173 | 1,271.4937 | $183.32 | |
ETH | 0.28% | $1,003.03 | 0.1787 | $179.27 | |
ETH | 0.28% | $355.97 | 0.4988 | $177.56 | |
ETH | 0.27% | $3.46 | 50.4955 | $174.71 | |
ETH | 0.26% | $4.46 | 37.9246 | $169.14 | |
ETH | 0.25% | $1.05 | 154.9365 | $162.53 | |
ETH | 0.25% | $1 | 161.58 | $161.74 | |
ETH | 0.25% | $1 | 161.2819 | $161.28 | |
ETH | 0.25% | $0.883252 | 182 | $160.75 | |
ETH | 0.25% | $0.008359 | 18,924.4901 | $158.19 | |
ETH | 0.24% | $0.116668 | 1,338.1884 | $156.12 | |
ETH | 0.24% | $96,093 | 0.00161751 | $155.43 | |
ETH | 0.24% | $0.014301 | 10,738.3534 | $153.57 | |
ETH | 0.23% | $0.144958 | 1,020.7937 | $147.97 | |
ETH | 0.23% | $1.82 | 79.2085 | $144.16 | |
ETH | 0.23% | $3,183.85 | 0.0451 | $143.74 | |
ETH | 0.22% | $0.68419 | 209.3379 | $143.23 | |
ETH | 0.21% | $2.2 | 61.4028 | $135.09 | |
ETH | 0.21% | $1.67 | 80.7746 | $134.89 | |
ETH | 0.21% | $0.010014 | 13,301.8081 | $133.2 | |
ETH | 0.21% | $6,635.62 | 0.0198 | $131.27 | |
ETH | 0.20% | $0.003368 | 38,259.1955 | $128.87 | |
ETH | 0.20% | $0.001444 | 88,043.0162 | $127.17 | |
ETH | 0.20% | $0.000578 | 217,212.2105 | $125.49 | |
ETH | 0.19% | $0.000164 | 742,417.677 | $121.58 | |
ETH | 0.19% | $669.94 | 0.18 | $120.58 | |
ETH | 0.19% | $0.073189 | 1,620.367 | $118.59 | |
ETH | 0.18% | $0.045127 | 2,616.895 | $118.09 | |
ETH | 0.18% | $2,998.35 | 0.0392 | $117.66 | |
ETH | 0.18% | $0.018147 | 6,472.7505 | $117.46 | |
ETH | 0.18% | $0.129681 | 888.911 | $115.27 | |
ETH | 0.18% | $0.31905 | 361.163 | $115.23 | |
ETH | 0.18% | $0.020093 | 5,676.4553 | $114.06 | |
ETH | 0.17% | $0.048793 | 2,225.4019 | $108.58 | |
ETH | 0.17% | $0.000016 | 6,778,849.7139 | $108.19 | |
ETH | 0.17% | $2,762.89 | 0.0386 | $106.72 | |
ETH | 0.16% | $0.47424 | 216.9653 | $102.89 | |
ETH | 0.16% | $1.24 | 80.8 | $99.99 | |
ETH | 0.15% | $0.032487 | 2,984.8147 | $96.97 | |
ETH | 0.15% | $2.54 | 37.8031 | $96.02 | |
ETH | 0.15% | $2,885.82 | 0.0324 | $93.58 | |
ETH | 0.14% | $0.008856 | 10,037.5052 | $88.89 | |
ETH | 0.14% | <$0.000001 | 269,649,461.2244 | $88.55 | |
ETH | 0.14% | $25.04 | 3.5158 | $88.04 | |
ETH | 0.14% | $0.144782 | 599.1552 | $86.75 | |
ETH | 0.13% | $0.003309 | 25,912.3315 | $85.74 | |
ETH | 0.13% | $0.020386 | 4,163.6066 | $84.88 | |
ETH | 0.13% | $0.170744 | 489.0169 | $83.5 | |
ETH | 0.13% | $0.042472 | 1,965.6508 | $83.49 | |
ETH | 0.13% | $0.000036 | 2,306,740.0921 | $83.3 | |
ETH | 0.13% | $56.98 | 1.439 | $82 | |
ETH | 0.13% | $2.67 | 30.3429 | $81.02 | |
ETH | 0.12% | $0.01088 | 7,322.7909 | $79.67 | |
ETH | 0.12% | $5.33 | 14.8775 | $79.3 | |
ETH | 0.12% | $0.219014 | 355.5529 | $77.87 | |
ETH | 0.12% | $1.04 | 74.9618 | $77.74 | |
ETH | 0.12% | $0.000005 | 14,246,751.6459 | $77.62 | |
ETH | 0.12% | $0.13802 | 557.8189 | $76.99 | |
ETH | 0.12% | $0.212054 | 361.7301 | $76.71 | |
ETH | 0.12% | $0.000037 | 2,052,853.49 | $76.65 | |
ETH | 0.12% | <$0.000001 | 814,450,561.5519 | $75.74 | |
ETH | 0.11% | $0.180134 | 407.454 | $73.4 | |
ETH | 0.11% | $0.022384 | 3,272.6917 | $73.25 | |
ETH | 0.11% | $0.097543 | 739.2389 | $72.11 | |
ETH | 0.11% | $1.11 | 64.9605 | $72.11 | |
ETH | 0.11% | $0.34317 | 207.7675 | $71.3 | |
ETH | 0.11% | $0.000069 | 1,025,871.0012 | $70.62 | |
ETH | 0.11% | $0.048875 | 1,441.1185 | $70.44 | |
ETH | 0.11% | $0.052425 | 1,335.8278 | $70.03 | |
ETH | 0.11% | $0.667859 | 104.7704 | $69.97 | |
ETH | 0.11% | $0.066904 | 1,038.5938 | $69.49 | |
ETH | 0.11% | $1.24 | 55.9907 | $69.43 | |
ETH | 0.11% | $22.61 | 3.0527 | $69.04 | |
ETH | 0.11% | $0.000054 | 1,266,775.5562 | $68.86 | |
ETH | 0.11% | $2,757.41 | 0.0246 | $67.91 | |
ETH | 0.11% | $0.000929 | 73,079.3258 | $67.88 | |
ETH | 0.10% | $25.43 | 2.6141 | $66.48 | |
ETH | 0.10% | $0.130069 | 507.4897 | $66.01 | |
ETH | 0.10% | $0.718607 | 91.5206 | $65.77 | |
ETH | 0.10% | $3.81 | 17.2311 | $65.65 | |
ETH | 0.10% | $2,909.35 | 0.0225 | $65.55 | |
ETH | 0.10% | $0.364091 | 179.919 | $65.51 | |
ETH | 0.10% | $0.000144 | 455,227.8909 | $65.44 | |
ETH | 0.10% | $0.020454 | 3,175.4235 | $64.95 | |
ETH | 0.10% | $0.014864 | 4,358.5888 | $64.78 | |
ETH | 0.10% | $0.900862 | 71.3246 | $64.25 | |
ETH | 0.10% | $0.125284 | 511.7369 | $64.11 | |
ETH | 0.10% | $0.268418 | 238.2716 | $63.96 | |
ETH | 0.10% | $0.01403 | 4,543.308 | $63.74 | |
ETH | 0.10% | $0.453927 | 136.3388 | $61.89 | |
ETH | 0.10% | $410.18 | 0.1507 | $61.81 | |
ETH | 0.10% | $2.45 | 24.9539 | $61.08 | |
ETH | 0.09% | $0.036969 | 1,629.5094 | $60.24 | |
ETH | 0.09% | $0.000897 | 67,043.0788 | $60.13 | |
ETH | 0.09% | $2.03 | 29.1707 | $59.22 | |
ETH | 0.09% | <$0.000001 | 54,661,125,756.009 | $58.43 | |
ETH | 0.09% | $0.006398 | 8,850.8844 | $56.63 | |
ETH | 0.09% | $2.08 | 26.7135 | $55.56 | |
ETH | 0.08% | $0.065267 | 831.3841 | $54.26 | |
ETH | 0.08% | $0.917637 | 58.2272 | $53.43 | |
ETH | 0.08% | $6.42 | 8.15 | $52.32 | |
ETH | 0.08% | $0.232735 | 223.9895 | $52.13 | |
ETH | 0.08% | $0.022423 | 2,320.4629 | $52.03 | |
ETH | 0.08% | $10.28 | 4.9918 | $51.32 | |
ETH | 0.08% | $0.132081 | 386.3648 | $51.03 | |
ETH | 0.08% | $0.424961 | 119.6574 | $50.85 | |
ETH | 0.08% | $0.000232 | 219,021.7469 | $50.81 | |
ETH | 0.08% | $0.275472 | 184.1109 | $50.72 | |
ETH | 0.08% | $0.442178 | 114.6344 | $50.69 | |
ETH | 0.08% | $1.14 | 44.3582 | $50.57 | |
ETH | 0.08% | $3.67 | 13.5139 | $49.6 | |
ETH | 0.08% | $0.001931 | 25,409.7171 | $49.06 | |
ETH | 0.08% | $0.017578 | 2,776.7606 | $48.81 | |
ETH | 0.08% | $1.79 | 26.8686 | $48.09 | |
ETH | 0.08% | $0.785979 | 61.0506 | $47.98 | |
ETH | 0.07% | $0.004594 | 10,276.7067 | $47.21 | |
ETH | 0.07% | $1.66 | 28.1243 | $46.69 | |
ETH | 0.07% | $0.326253 | 141.9178 | $46.3 | |
ETH | 0.07% | $0.701891 | 65.7434 | $46.14 | |
ETH | 0.07% | $0.295746 | 153.1909 | $45.31 | |
ETH | 0.07% | $0.54708 | 81.1224 | $44.38 | |
ETH | 0.07% | $0.179323 | 246.5833 | $44.22 | |
ETH | 0.07% | $0.992725 | 44.5289 | $44.2 | |
ETH | 0.07% | $0.163608 | 270.0363 | $44.18 | |
ETH | 0.07% | $1.02 | 42.7568 | $43.53 | |
ETH | 0.07% | $0.008499 | 5,100 | $43.34 | |
ETH | 0.07% | $50.86 | 0.85 | $43.23 | |
ETH | 0.07% | $0.000067 | 647,198.6073 | $43.15 | |
ETH | 0.07% | $0.374436 | 112.214 | $42.02 | |
ETH | 0.07% | $0.240695 | 173.7432 | $41.82 | |
ETH | 0.06% | $0.16741 | 245.5989 | $41.12 | |
ETH | 0.06% | $0.267955 | 151.5644 | $40.61 | |
ETH | 0.06% | $0.322604 | 125.2208 | $40.4 | |
ETH | 0.06% | $0.799056 | 50.2231 | $40.13 | |
ETH | 0.06% | $0.330395 | 120.9002 | $39.94 | |
ETH | 0.06% | $0.090115 | 440.4965 | $39.7 | |
ETH | 0.06% | $0.39111 | 100.5474 | $39.33 | |
ETH | 0.06% | $1.35 | 29.0874 | $39.19 | |
ETH | 0.06% | $185.45 | 0.2109 | $39.12 | |
ETH | 0.06% | $0.000017 | 2,251,962.9695 | $39.03 | |
ETH | 0.06% | $0.000002 | 18,746,182.7398 | $38.99 | |
ETH | 0.06% | $0.00043 | 90,576.7637 | $38.9 | |
ETH | 0.06% | $0.000345 | 112,494.3653 | $38.77 | |
ETH | 0.06% | $0.280237 | 137.7461 | $38.6 | |
ETH | 0.06% | $0.071516 | 535.1523 | $38.27 | |
ETH | 0.06% | $0.105141 | 362.0114 | $38.06 | |
ETH | 0.06% | $0.150269 | 251.2795 | $37.76 | |
ETH | 0.06% | $13.91 | 2.7018 | $37.59 | |
ETH | 0.06% | $0.005313 | 7,072.691 | $37.58 | |
ETH | 0.06% | $0.998869 | 37.515 | $37.47 | |
ETH | 0.06% | $0.036188 | 1,008.3416 | $36.49 | |
ETH | 0.06% | $0.400958 | 90.9373 | $36.46 | |
ETH | 0.06% | $0.88861 | 40.6698 | $36.14 | |
ETH | 0.06% | $96,116 | 0.00037378 | $35.93 | |
ETH | 0.06% | $0.000018 | 1,988,275.3874 | $35.73 | |
ETH | 0.06% | $0.451644 | 79.1072 | $35.73 | |
ETH | 0.06% | $18.29 | 1.9503 | $35.67 | |
ETH | 0.06% | $0.759694 | 46.92 | $35.64 | |
ETH | 0.06% | $0.119911 | 294.6812 | $35.34 | |
ETH | 0.05% | $170.24 | 0.2061 | $35.09 | |
ETH | 0.05% | $1.97 | 17.6527 | $34.78 | |
ETH | 0.05% | $0.018756 | 1,844.2757 | $34.59 | |
ETH | 0.05% | $0.016723 | 1,990.6114 | $33.29 | |
ETH | 0.05% | $0.992595 | 33.3622 | $33.12 | |
ETH | 0.05% | $0.191982 | 172.1809 | $33.06 | |
ETH | 0.05% | $0.141399 | 229.4426 | $32.44 | |
ETH | 0.05% | <$0.000001 | 265,078,561.703 | $32.1 | |
ETH | 0.05% | $1.32 | 24.0912 | $31.8 | |
ETH | 0.05% | $0.256872 | 123.2419 | $31.66 | |
ETH | 0.05% | $24.66 | 1.2819 | $31.61 | |
ETH | 0.05% | <$0.000001 | 101,683,104.2921 | $31.51 | |
ETH | 0.05% | $0.016234 | 1,908.6498 | $30.99 | |
ETH | 0.05% | <$0.000001 | 155,645,160.0376 | $30.74 | |
ETH | 0.05% | $0.000212 | 142,727.3811 | $30.26 | |
ETH | 0.05% | $0.000317 | 95,400.719 | $30.24 | |
ETH | 0.05% | $0.176006 | 171.2772 | $30.15 | |
ETH | 0.05% | $0.315435 | 94.9004 | $29.93 | |
ETH | 0.05% | $0.037823 | 789.9355 | $29.88 | |
ETH | 0.05% | $0.027181 | 1,081.0443 | $29.38 | |
ETH | 0.05% | $0.507587 | 57.6269 | $29.25 | |
ETH | 0.05% | $0.008338 | 3,482.9731 | $29.04 | |
ETH | 0.05% | $0.016307 | 1,779.1894 | $29.01 | |
ETH | 0.05% | $0.000002 | 17,717,633.7718 | $28.88 | |
ETH | 0.05% | <$0.000001 | 5,796,944,277.7416 | $28.86 | |
ETH | 0.05% | $22.85 | 1.263 | $28.86 | |
ETH | 0.05% | $0.016323 | 1,766.2969 | $28.83 | |
ETH | 0.04% | $0.010823 | 2,627.7562 | $28.44 | |
ETH | 0.04% | $2.12 | 13.2076 | $28 | |
ETH | 0.04% | $0.259521 | 107.5811 | $27.92 | |
ETH | 0.04% | $0.158579 | 173.51 | $27.52 | |
ETH | 0.04% | $0.099025 | 275.7644 | $27.31 | |
ETH | 0.04% | $0.696516 | 39.0673 | $27.21 | |
ETH | 0.04% | <$0.000001 | 698,158,398.8623 | $26.74 | |
ETH | 0.04% | $0.819656 | 32.4728 | $26.62 | |
ETH | 0.04% | $0.002459 | 10,805.6588 | $26.57 | |
ETH | 0.04% | $0.999878 | 25.884 | $25.88 | |
ETH | 0.04% | $0.000178 | 144,202 | $25.72 | |
ETH | 0.04% | $0.286728 | 89.3145 | $25.61 | |
ETH | 0.04% | $0.091176 | 278.7063 | $25.41 | |
ETH | 0.04% | $0.993282 | 25.5 | $25.33 | |
ETH | 0.04% | $0.033067 | 764.481 | $25.28 | |
ETH | 0.04% | $12.69 | 1.9898 | $25.25 | |
ETH | 0.04% | $0.333883 | 74.7704 | $24.96 | |
ETH | 0.04% | $0.000067 | 371,760.3657 | $24.89 | |
ETH | 0.04% | $2.92 | 8.4957 | $24.81 | |
ETH | 0.04% | $0.002893 | 8,406.4663 | $24.32 | |
ETH | 0.04% | $0.294827 | 81.4294 | $24.01 | |
ETH | 0.04% | $0.01943 | 1,235.1763 | $24 | |
ETH | 0.04% | $0.015814 | 1,514.8481 | $23.96 | |
ETH | 0.04% | $0.071739 | 333.2373 | $23.91 | |
ETH | 0.04% | $0.22686 | 104.7641 | $23.77 | |
ETH | 0.04% | <$0.000001 | 306,577,264.7625 | $23.57 | |
ETH | 0.04% | $0.999419 | 23.3923 | $23.38 | |
ETH | 0.04% | $1.04 | 22.4546 | $23.33 | |
ETH | 0.04% | <$0.000001 | 4,165,464,155.7912 | $23.33 | |
ETH | 0.04% | $1.03 | 22.3142 | $22.94 | |
ETH | 0.04% | $0.018287 | 1,253.3652 | $22.92 | |
ETH | 0.04% | $253.6 | 0.0902 | $22.87 | |
ETH | 0.04% | $0.166358 | 136.5323 | $22.71 | |
ETH | 0.04% | <$0.000001 | 207,963,637,365.3179 | $22.71 | |
ETH | 0.04% | <$0.000001 | 7,081,470,123.6697 | $22.4 | |
ETH | 0.03% | $0.133251 | 166.7849 | $22.22 | |
ETH | 0.03% | $0.007199 | 3,085.6486 | $22.21 | |
ETH | 0.03% | $0.000316 | 69,208.4875 | $21.86 | |
ETH | 0.03% | <$0.000001 | 34,574,352,708.8073 | $21.49 | |
ETH | 0.03% | <$0.000001 | 3,145,000,000 | $21.36 | |
ETH | 0.03% | $0.021941 | 969.8837 | $21.28 | |
ETH | 0.03% | $0.08403 | 249.2866 | $20.95 | |
ETH | 0.03% | $0.999841 | 20.825 | $20.82 | |
ETH | 0.03% | <$0.000001 | 4,467,158,276.8727 | $20.69 | |
ETH | 0.03% | $0.418937 | 49.3565 | $20.68 | |
ETH | 0.03% | $0.002597 | 7,843.2438 | $20.37 | |
ETH | 0.03% | $0.000004 | 5,100,000 | $20.04 | |
ETH | 0.03% | $0.602682 | 33.0885 | $19.94 | |
ETH | 0.03% | $0.003664 | 5,435.6304 | $19.92 | |
ETH | 0.03% | $6.59 | 3.0056 | $19.81 | |
ETH | 0.03% | $0.043386 | 455.2901 | $19.75 | |
ETH | 0.03% | $4.37 | 4.4969 | $19.65 | |
ETH | 0.03% | $0.052443 | 370.8515 | $19.45 | |
ETH | 0.03% | $0.001025 | 18,897.0545 | $19.36 | |
ETH | 0.03% | $0.073314 | 263.1839 | $19.3 | |
ETH | 0.03% | $2,763.56 | 0.00687596 | $19 | |
ETH | 0.03% | $0.036158 | 523.9912 | $18.95 | |
ETH | 0.03% | $0.077011 | 245.7323 | $18.92 | |
ETH | 0.03% | $15.07 | 1.2538 | $18.9 | |
ETH | 0.03% | $0.014894 | 1,264.7357 | $18.84 | |
ETH | 0.03% | $20.3 | 0.9174 | $18.62 | |
ETH | 0.03% | $0.540639 | 34.4247 | $18.61 | |
ETH | 0.03% | $3.4 | 5.4179 | $18.42 | |
ETH | 0.03% | $0.1596 | 114.5435 | $18.28 | |
ETH | 0.03% | $0.085849 | 211.155 | $18.13 | |
ETH | 0.03% | $0.094878 | 188.6062 | $17.89 | |
ETH | 0.03% | $0.041692 | 426.2504 | $17.77 | |
ETH | 0.03% | $0.389747 | 45.5494 | $17.75 | |
ETH | 0.03% | $0.000017 | 1,024,412.4254 | $17.53 | |
ETH | 0.03% | $0.000042 | 410,842.4947 | $17.44 | |
ETH | 0.03% | $0.000013 | 1,383,129.8813 | $17.32 | |
ETH | 0.03% | $0.014612 | 1,182.3983 | $17.28 | |
ETH | 0.03% | $0.071078 | 241.3185 | $17.15 | |
ETH | 0.03% | $0.000055 | 310,470.1019 | $17.14 | |
ETH | 0.03% | $0.9811 | 17.4419 | $17.11 | |
ETH | 0.03% | $0.00005 | 341,690.2028 | $17.04 | |
ETH | 0.03% | $0.001372 | 12,363.2011 | $16.97 | |
ETH | 0.03% | $0.983852 | 16.9215 | $16.65 | |
ETH | 0.03% | $0.054099 | 307.0993 | $16.61 | |
ETH | 0.03% | $0.020524 | 803.9875 | $16.5 | |
ETH | 0.03% | $0.103818 | 157.6266 | $16.36 | |
ETH | 0.03% | $0.075729 | 213.4346 | $16.16 | |
ETH | 0.02% | $0.000903 | 17,622.9241 | $15.91 | |
ETH | 0.02% | $0.034253 | 452.0784 | $15.48 | |
ETH | 0.02% | <$0.000001 | 348,964,856.7137 | $15.45 | |
ETH | 0.02% | $261.83 | 0.0588 | $15.4 | |
ETH | 0.02% | $0.01478 | 1,041.3134 | $15.39 | |
ETH | 0.02% | $2.55 | 6.0313 | $15.38 | |
ETH | 0.02% | $0.001291 | 11,767.4767 | $15.2 | |
ETH | 0.02% | $0.000007 | 2,225,635.3005 | $15.18 | |
ETH | 0.02% | $0.001999 | 7,552.6269 | $15.1 | |
ETH | 0.02% | $0.102339 | 147.0737 | $15.05 | |
ETH | 0.02% | $0.972535 | 15.2304 | $14.81 | |
ETH | 0.02% | <$0.000001 | 356,069,519.797 | $14.79 | |
ETH | 0.02% | $0.011524 | 1,251.1028 | $14.42 | |
ETH | 0.02% | $0.012957 | 1,109.1696 | $14.37 | |
ETH | 0.02% | $0.015409 | 929.0945 | $14.32 | |
ETH | 0.02% | $0.06295 | 226.6825 | $14.27 | |
ETH | 0.02% | $0.121883 | 116.4511 | $14.19 | |
ETH | 0.02% | <$0.000001 | 4,990,740,794.7702 | $14.16 | |
ETH | 0.02% | $0.000001 | 16,228,224.2427 | $14.15 | |
ETH | 0.02% | $0.160599 | 85.9125 | $13.8 | |
ETH | 0.02% | $0.003003 | 4,593.0537 | $13.79 | |
ETH | 0.02% | $95.71 | 0.1441 | $13.79 | |
ETH | 0.02% | $5.88 | 2.3029 | $13.54 | |
ETH | 0.02% | $0.549584 | 24.2963 | $13.35 | |
ETH | 0.02% | $0.000989 | 13,323.3033 | $13.18 | |
ETH | 0.02% | $0.052912 | 248.1897 | $13.13 | |
ETH | 0.02% | $0.248057 | 52.8782 | $13.12 | |
ETH | 0.02% | $0.792631 | 16.4808 | $13.06 | |
ETH | 0.02% | $0.482466 | 27.0501 | $13.05 | |
ETH | 0.02% | $0.009945 | 1,306.373 | $12.99 | |
ETH | 0.02% | $95,280 | 0.000136 | $12.96 | |
ETH | 0.02% | $0.009201 | 1,404.0118 | $12.92 | |
ETH | 0.02% | $0.516011 | 24.9213 | $12.86 | |
ETH | 0.02% | $0.001645 | 7,682.2161 | $12.64 | |
ETH | 0.02% | $0.013232 | 943.5 | $12.48 | |
ETH | 0.02% | $0.030912 | 403.75 | $12.48 | |
ETH | 0.02% | $0.010819 | 1,146.9006 | $12.41 | |
ETH | 0.02% | $1.68 | 7.375 | $12.39 | |
ETH | 0.02% | $2.16 | 5.7286 | $12.37 | |
ETH | 0.02% | $0.023659 | 518.9466 | $12.28 | |
ETH | 0.02% | $54.93 | 0.2202 | $12.09 | |
ETH | 0.02% | <$0.000001 | 339,530,579.0159 | $11.95 | |
ETH | 0.02% | $1.07 | 11.1511 | $11.93 | |
ETH | 0.02% | $1.55 | 7.6727 | $11.9 | |
ETH | 0.02% | $0.002505 | 4,742 | $11.88 | |
ETH | 0.02% | $0.007261 | 1,615.1766 | $11.73 | |
ETH | 0.02% | <$0.000001 | 9,392,523,220.4146 | $11.71 | |
ETH | 0.02% | <$0.000001 | 11,101,258,362.6911 | $11.68 | |
ETH | 0.02% | $0.995993 | 11.6746 | $11.63 | |
ETH | 0.02% | $0.013826 | 840.1892 | $11.62 | |
ETH | 0.02% | $2,831.75 | 0.0041021 | $11.62 | |
ETH | 0.02% | $0.05469 | 211.9871 | $11.59 | |
ETH | 0.02% | $2.48 | 4.6454 | $11.52 | |
ETH | 0.02% | $0.011021 | 1,040.108 | $11.46 | |
ETH | 0.02% | $0.046278 | 247.187 | $11.44 | |
ETH | 0.02% | $0.000305 | 37,461.2269 | $11.42 | |
ETH | 0.02% | $9.59 | 1.1891 | $11.4 | |
ETH | 0.02% | $0.186 | 60.6961 | $11.29 | |
ETH | 0.02% | <$0.000001 | 4,581,787,243.6019 | $11.27 | |
ETH | 0.02% | $1 | 11.05 | $11.05 | |
ETH | 0.02% | $0.000007 | 1,681,806.9129 | $11.03 | |
ETH | 0.02% | $0.000002 | 7,066,924.7656 | $11.02 | |
ETH | 0.02% | $33.29 | 0.3299 | $10.98 | |
ETH | 0.02% | $0.000227 | 48,181.4751 | $10.94 | |
ETH | 0.02% | $0.133651 | 81.3534 | $10.87 | |
ETH | 0.02% | $36.64 | 0.2951 | $10.81 | |
ETH | 0.02% | $0.083102 | 129.6682 | $10.78 | |
ETH | 0.02% | $0.158451 | 68 | $10.77 | |
ETH | 0.02% | $0.004363 | 2,454.7358 | $10.71 | |
ETH | 0.02% | $0.078893 | 135.6043 | $10.7 | |
ETH | 0.02% | $4.45 | 2.4021 | $10.68 | |
ETH | 0.02% | $21,347 | 0.00049705 | $10.61 | |
ETH | 0.02% | $0.000895 | 11,741.1425 | $10.51 | |
ETH | 0.02% | $0.048697 | 215.5219 | $10.5 | |
ETH | 0.02% | $0.000947 | 11,063.2813 | $10.48 | |
ETH | 0.02% | $0.000004 | 2,773,598.0428 | $10.4 | |
ETH | 0.02% | $2.94 | 3.5354 | $10.4 | |
ETH | 0.02% | $0.000594 | 17,428.7489 | $10.36 | |
ETH | 0.02% | $0.035051 | 292.9458 | $10.27 | |
ETH | 0.02% | $0.133213 | 77.0389 | $10.26 | |
ETH | 0.02% | $2.57 | 3.9581 | $10.17 | |
ETH | 0.02% | $0.010968 | 916.3084 | $10.05 | |
ETH | 0.02% | $4.41 | 2.2744 | $10.04 | |
ETH | 0.02% | $0.060346 | 165.2376 | $9.97 | |
ETH | 0.02% | $1 | 9.9528 | $9.95 | |
ETH | 0.02% | $0.076457 | 130.1429 | $9.95 | |
ETH | 0.02% | $0.000202 | 48,922.9096 | $9.89 | |
ETH | 0.02% | $0.001041 | 9,469.7797 | $9.86 | |
ETH | 0.02% | $11.25 | 0.8754 | $9.85 | |
ETH | 0.02% | $0.272091 | 36.147 | $9.84 | |
ETH | 0.02% | $0.064236 | 151.7083 | $9.75 | |
ETH | 0.02% | $0.00397 | 2,452.6451 | $9.74 | |
ETH | 0.02% | $0.013337 | 729.6875 | $9.73 | |
ETH | 0.02% | $14.26 | 0.6802 | $9.7 | |
ETH | 0.02% | $0.337647 | 28.7077 | $9.69 | |
ETH | 0.02% | $0.002426 | 3,968.2251 | $9.63 | |
ETH | 0.02% | $0.545527 | 17.623 | $9.61 | |
ETH | 0.01% | $0.000937 | 10,220.2218 | $9.57 | |
ETH | 0.01% | $1.31 | 7.2655 | $9.52 | |
ETH | 0.01% | $0.035758 | 265.1651 | $9.48 | |
ETH | 0.01% | $0.003382 | 2,796.5 | $9.46 | |
ETH | 0.01% | $0.053802 | 175.2049 | $9.43 | |
ETH | 0.01% | <$0.000001 | 34,528,094.327 | $9.34 | |
ETH | 0.01% | <$0.000001 | 20,919,539.5734 | $9.33 | |
ETH | 0.01% | $0.061662 | 149.3154 | $9.21 | |
ETH | 0.01% | $0.046517 | 196.1699 | $9.13 | |
ETH | 0.01% | $0.076141 | 119.2146 | $9.08 | |
ETH | 0.01% | $0.017431 | 520.3068 | $9.07 | |
ETH | 0.01% | $2,902.34 | 0.0031 | $9 | |
ETH | 0.01% | <$0.000001 | 8,919,063,978.8323 | $8.94 | |
ETH | 0.01% | $0.034802 | 256.5811 | $8.93 | |
ETH | 0.01% | $1.4 | 6.2352 | $8.72 | |
ETH | 0.01% | $0.009915 | 878.6853 | $8.71 | |
ETH | 0.01% | $1,021.8 | 0.0085 | $8.69 | |
ETH | 0.01% | $0.002663 | 3,258.8715 | $8.68 | |
ETH | 0.01% | $0.999413 | 8.6445 | $8.64 | |
ETH | 0.01% | $0.001084 | 7,954.6727 | $8.62 | |
ETH | 0.01% | $0.271506 | 31.518 | $8.56 | |
ETH | 0.01% | $0.551395 | 15.2181 | $8.39 | |
ETH | 0.01% | $0.000003 | 3,183,063.0542 | $8.37 | |
ETH | 0.01% | $0.483612 | 17.3016 | $8.37 | |
ETH | 0.01% | $0.008016 | 1,030.5698 | $8.26 | |
ETH | 0.01% | $0.6192 | 13.3023 | $8.24 | |
ETH | 0.01% | $2.76 | 2.9724 | $8.2 | |
ETH | 0.01% | $0.185753 | 44.0691 | $8.19 | |
ETH | 0.01% | $0.004657 | 1,757.0218 | $8.18 | |
ETH | 0.01% | $0.000002 | 5,081,649.1669 | $8.13 | |
ETH | 0.01% | $0.403488 | 20.0501 | $8.09 | |
ETH | 0.01% | $0.011471 | 704.9951 | $8.09 | |
ETH | 0.01% | $4.67 | 1.6928 | $7.91 | |
ETH | 0.01% | $183.69 | 0.0427 | $7.85 | |
ETH | 0.01% | $0.005091 | 1,515.3836 | $7.71 | |
ETH | 0.01% | $14.09 | 0.5464 | $7.7 | |
ETH | 0.01% | $0.029072 | 261.375 | $7.6 | |
ETH | 0.01% | <$0.000001 | 165,172,576.2727 | $7.51 | |
ETH | 0.01% | $0.000404 | 18,507.8605 | $7.48 | |
ETH | 0.01% | $0.028185 | 264.8101 | $7.46 | |
ETH | 0.01% | $0.109636 | 67.6776 | $7.42 | |
ETH | 0.01% | $0.000326 | 22,723.3983 | $7.42 | |
ETH | 0.01% | $0.006681 | 1,109.1302 | $7.41 | |
ETH | 0.01% | $0.046736 | 157.6224 | $7.37 | |
ETH | 0.01% | $0.570624 | 12.8178 | $7.31 | |
ETH | 0.01% | $0.012133 | 602.6 | $7.31 | |
ETH | 0.01% | $0.019067 | 378.7128 | $7.22 | |
ETH | 0.01% | $0.110168 | 65.5194 | $7.22 | |
ETH | 0.01% | $0.473226 | 15.2128 | $7.2 | |
ETH | 0.01% | $0.000011 | 649,267.3695 | $7.19 | |
ETH | 0.01% | $0.000006 | 1,193,772.19 | $7.17 | |
ETH | 0.01% | $14.77 | 0.4833 | $7.14 | |
ETH | 0.01% | $0.000322 | 22,117.3202 | $7.12 | |
ETH | 0.01% | $0.018347 | 386.4744 | $7.09 | |
ETH | 0.01% | $5,927 | 0.00119438 | $7.08 | |
ETH | 0.01% | $0.10477 | 67.3393 | $7.06 | |
ETH | 0.01% | $0.049788 | 141.4624 | $7.04 | |
ETH | 0.01% | $0.000003 | 2,805,159.9302 | $7.04 | |
ETH | 0.01% | $0.404002 | 17.3834 | $7.02 | |
ETH | 0.01% | $0.997162 | 7.0226 | $7 | |
ETH | 0.01% | $0.000628 | 11,011.0086 | $6.92 | |
ETH | 0.01% | $0.012897 | 531.0794 | $6.85 | |
ETH | 0.01% | $0.000638 | 10,713.3046 | $6.83 | |
ETH | 0.01% | $0.669631 | 10.198 | $6.83 | |
ETH | 0.01% | <$0.000001 | 18,766,116.756 | $6.82 | |
ETH | 0.01% | $0.099554 | 68.3036 | $6.8 | |
ETH | 0.01% | $1.5 | 4.5227 | $6.79 | |
ETH | 0.01% | $0.090865 | 74.4075 | $6.76 | |
ETH | 0.01% | $0.008977 | 752.3071 | $6.75 | |
ETH | 0.01% | $0.067012 | 99.4944 | $6.67 | |
ETH | 0.01% | <$0.000001 | 64,314,650,040.1513 | $6.59 | |
ETH | 0.01% | $75.19 | 0.0863 | $6.49 | |
ETH | 0.01% | $0.026649 | 243.4551 | $6.49 | |
ETH | 0.01% | $1.4 | 4.6151 | $6.46 | |
ETH | 0.01% | $0.014212 | 450.037 | $6.4 | |
ETH | <0.01% | $1 | 6.3296 | $6.33 | |
ETH | <0.01% | $9.42 | 0.6718 | $6.33 | |
ETH | <0.01% | $0.02926 | 213.3868 | $6.24 | |
ETH | <0.01% | $0.009501 | 654.791 | $6.22 | |
ETH | <0.01% | $0.365167 | 16.9167 | $6.18 | |
ETH | <0.01% | $0.000017 | 350,954.5206 | $6.12 | |
ETH | <0.01% | $0.035848 | 170.5927 | $6.12 | |
ETH | <0.01% | $1.2 | 5.0745 | $6.09 | |
ETH | <0.01% | $0.46798 | 12.8929 | $6.03 | |
ETH | <0.01% | $0.008478 | 710.4542 | $6.02 | |
ETH | <0.01% | $0.00211 | 2,855.0335 | $6.02 | |
ETH | <0.01% | $0.213612 | 28.1912 | $6.02 | |
ETH | <0.01% | $0.999931 | 5.8668 | $5.87 | |
ETH | <0.01% | $0.010943 | 531.2004 | $5.81 | |
ETH | <0.01% | $0.000175 | 32,489.189 | $5.68 | |
ETH | <0.01% | $9.78 | 0.5792 | $5.66 | |
ETH | <0.01% | $0.049722 | 112.764 | $5.61 | |
ETH | ![]() |