More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 2,592 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Buy | 20030450 | 20 days ago | IN | 0.13030208 ETH | 0.00075581 | ||||
Buy | 19716433 | 64 days ago | IN | 0.26060417 ETH | 0.00103464 | ||||
Buy | 19716396 | 64 days ago | IN | 0.13030208 ETH | 0.00088111 | ||||
Buy | 19716386 | 64 days ago | IN | 0.13030208 ETH | 0.00103688 | ||||
Buy | 19716360 | 64 days ago | IN | 0.13030208 ETH | 0.00126672 | ||||
Buy | 19707965 | 65 days ago | IN | 0.03909062 ETH | 0.00041912 | ||||
Buy | 19632637 | 76 days ago | IN | 0.0130302 ETH | 0.00250408 | ||||
Buy | 19631125 | 76 days ago | IN | 0.01563625 ETH | 0.00145947 | ||||
Buy | 19627932 | 76 days ago | IN | 0.06515104 ETH | 0.00166668 | ||||
Buy | 19607957 | 79 days ago | IN | 0.02606041 ETH | 0.00154013 | ||||
Buy | 19607950 | 79 days ago | IN | 0.02606041 ETH | 0.0002376 | ||||
Buy | 19602317 | 80 days ago | IN | 0.05212083 ETH | 0.00114149 | ||||
Buy | 19602311 | 80 days ago | IN | 0.07818125 ETH | 0.00131305 | ||||
Buy | 19600565 | 80 days ago | IN | 0.01483637 ETH | 0.00090687 | ||||
Buy | 19600538 | 80 days ago | IN | 0.02818911 ETH | 0.00083164 | ||||
Buy | 19598974 | 80 days ago | IN | 0.28382633 ETH | 0.00086912 | ||||
Buy | 19598026 | 80 days ago | IN | 0.02606041 ETH | 0.00130362 | ||||
Withdraw Protoco... | 19588907 | 82 days ago | IN | 0 ETH | 0.00080042 | ||||
Buy | 19581905 | 83 days ago | IN | 0.01051399 ETH | 0.00188133 | ||||
Buy | 19581681 | 83 days ago | IN | 0.01051399 ETH | 0.00180082 | ||||
Buy | 19581670 | 83 days ago | IN | 0.01050972 ETH | 0.00215524 | ||||
Buy | 19581318 | 83 days ago | IN | 0.02104079 ETH | 0.00178028 | ||||
Buy | 19576463 | 84 days ago | IN | 0.01051826 ETH | 0.00528955 | ||||
Buy | 19528417 | 90 days ago | IN | 0.01154326 ETH | 0.00395079 | ||||
Buy | 19528207 | 90 days ago | IN | 0.02311111 ETH | 0.00335601 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
20117132 | 8 days ago | 1.93517954 ETH | ||||
20099254 | 10 days ago | 0.12901196 ETH | ||||
20079695 | 13 days ago | 0.00903083 ETH | ||||
20054523 | 17 days ago | 0.21932034 ETH | ||||
20041807 | 18 days ago | 0.02580239 ETH | ||||
20030454 | 20 days ago | 0.25802393 ETH | ||||
20030450 | 20 days ago | 0.00129011 ETH | ||||
20012940 | 22 days ago | 0.03870359 ETH | ||||
19997783 | 25 days ago | 0.12901196 ETH | ||||
19996850 | 25 days ago | 0.10320957 ETH | ||||
19990184 | 26 days ago | 1.29011969 ETH | ||||
19988596 | 26 days ago | 0.90308378 ETH | ||||
19988569 | 26 days ago | 0.12901196 ETH | ||||
19981733 | 27 days ago | 0.07740718 ETH | ||||
19931370 | 34 days ago | 0.03870359 ETH | ||||
19926919 | 34 days ago | 0.02580239 ETH | ||||
19924357 | 35 days ago | 0.06450598 ETH | ||||
19917902 | 36 days ago | 0.20641915 ETH | ||||
19914350 | 36 days ago | 0.19351795 ETH | ||||
19865458 | 43 days ago | 0.01290119 ETH | ||||
19854962 | 45 days ago | 0.15481436 ETH | ||||
19845977 | 46 days ago | 0.01290119 ETH | ||||
19840092 | 47 days ago | 0.02580239 ETH | ||||
19824416 | 49 days ago | 0.3870359 ETH | ||||
19794266 | 53 days ago | 0.01290119 ETH |
Loading...
Loading
Contract Name:
LaunchSwap
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-03-16 */ // SPDX-License-Identifier: MIT // File @openzeppelin/contracts/utils/introspection/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts/token/ERC1155/[email protected] // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File @openzeppelin/contracts/token/ERC1155/[email protected] // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File @openzeppelin/contracts/utils/introspection/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File @openzeppelin/contracts/token/ERC1155/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC1155/utils/ERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ abstract contract ERC1155Receiver is ERC165, IERC1155Receiver { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId); } } // File contracts/IEthrunes.sol pragma solidity ^0.8.17; interface IEthrunes is IERC1155 { function transfer( address to, uint256 id, uint256 amount, bytes memory data ) external payable; function batchTransfer( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) external payable; function deploy2( string calldata tick, uint8 decimals, uint256 supply, address to ) external payable; function tokens(uint160 _id) external view returns( uint160 id, uint8 decimals, uint256 supply, uint256 limit, string memory tick ); function totalSupply(uint256 id) external view returns (uint256); } // File @openzeppelin/contracts/security/[email protected] // OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File @openzeppelin/contracts/token/ERC20/[email protected] // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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); /** * @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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount ) external returns (bool); } // File contracts/TransferHelper.sol pragma solidity >=0.6.0; library TransferHelper { /// @notice Transfers tokens from the targeted address to the given destination /// @notice Errors with 'STF' if transfer fails /// @param token The contract address of the token to be transferred /// @param from The originating address from which the tokens will be transferred /// @param to The destination address of the transfer /// @param value The amount to be transferred function safeTransferFrom( address token, address from, address to, uint256 value ) internal { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.transferFrom.selector, from, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'STF'); } /// @notice Transfers tokens from msg.sender to a recipient /// @dev Errors with ST if transfer fails /// @param token The contract address of the token which will be transferred /// @param to The recipient of the transfer /// @param value The value of the transfer function safeTransfer( address token, address to, uint256 value ) internal { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.transfer.selector, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'ST'); } /// @notice Approves the stipulated contract to spend the given allowance in the given token /// @dev Errors with 'SA' if transfer fails /// @param token The contract address of the token to be approved /// @param to The target of the approval /// @param value The amount of the given token the target will be allowed to spend function safeApprove( address token, address to, uint256 value ) internal { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.approve.selector, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'SA'); } /// @notice Transfers ETH to the recipient address /// @dev Fails with `STE` /// @param to The destination of the transfer /// @param value The value to be transferred function safeTransferETH(address to, uint256 value) internal { (bool success, ) = to.call{value: value}(new bytes(0)); require(success, 'STE'); } } // File contracts/LaunchSwap.sol pragma solidity ^0.8.17; contract LaunchSwap is ReentrancyGuard, ERC1155Receiver { error InvalidSender(); error InvalidCall(); error NotSupportBatchReceivedCallback(); error PoolAlreadyCreated(); error ExceedLimitPerBuy(); error ExceedLimitPerSell(); error InsufficientAmountOut(); error InsufficientAmountIn(); error LessThanAmountOutMin(); error Expired(); error InitialPriceTooLow(); error InvalidTotalSupply(); error TotalSupplyMustBeEven(); error ZeroAmountIn(); error InvalidRecipient(); error InvalidFeeRate(); struct Pool { uint256 reserve0; uint256 reserve1; uint256 halfReserve; uint256 price; uint256 limitPerBuy; uint256 limitPerSell; uint256 fee; address creator; uint256 creatorFees; } uint256 public accProtocolFees; uint16 public protocolFee = 20; // 20% for creator and service address public ethrunes; address feeRecipient; address dev; mapping (uint160 => Pool) public pools; mapping (uint256 => bool) public feeTiers; event CreatePool(address indexed creator, uint160 indexed id, uint256 amount, uint256 price, uint256 fee); event Buy(uint160 indexed id, uint256 amountInEth, uint256 amountOut); event Sell(uint160 indexed id, uint256 amountIn, uint256 amountOutEth); constructor(address _ethrunes, address _feeRecipient) { ethrunes = _ethrunes; feeRecipient = _feeRecipient; dev = msg.sender; feeTiers[300] = true; feeTiers[200] = true; feeTiers[100] = true; feeTiers[50] = true; feeTiers[30] = true; } modifier checkDeadline(uint256 deadline) { if(deadline < block.timestamp) revert Expired(); _; } function _createPool( uint160 id, uint256 amount, uint256 price, uint256 limitPerBuy, uint256 limitPerSell, uint256 fee, address creator ) internal { Pool storage pool = pools[id]; if(pool.reserve1 != 0) revert PoolAlreadyCreated(); uint256 supply = IEthrunes(ethrunes).totalSupply(id); if(amount != supply) revert InvalidTotalSupply(); if(!feeTiers[fee]) revert InvalidFeeRate(); if(amount / 2 * 2 != amount) revert TotalSupplyMustBeEven(); pool.reserve0 = 0; pool.reserve1 = amount; pool.halfReserve = amount / 2; pool.price = price; pool.limitPerBuy = limitPerBuy; pool.limitPerSell = limitPerSell; pool.fee = fee; pool.creator = creator; if(pool.halfReserve * pool.price / 1e18 == 0) revert InitialPriceTooLow(); emit CreatePool(creator, id, amount, price, fee); } function buy( uint160 id, uint256 amountOut, uint256 deadline, address recipient ) external payable checkDeadline(deadline) nonReentrant returns(uint256) { if(msg.value == 0) revert ZeroAmountIn(); Pool storage pool = pools[id]; if(pool.limitPerBuy > 0 && amountOut > pool.limitPerBuy) revert ExceedLimitPerBuy(); if(amountOut >= pool.reserve1) revert InsufficientAmountOut(); uint256 buyAmount; uint256 swapAmount; if(pool.reserve1 > pool.halfReserve) { uint256 maxBuyAmount = pool.reserve1 - pool.halfReserve; if(maxBuyAmount >= amountOut) { buyAmount = amountOut; } else { swapAmount = amountOut - maxBuyAmount; buyAmount = maxBuyAmount; } } else { swapAmount = amountOut; } uint256 amountIn; if(buyAmount > 0) { amountIn = pool.price * buyAmount / 1e18; pool.reserve0 += amountIn; pool.reserve1 -= buyAmount; } if(swapAmount > 0) { if(swapAmount >= pool.reserve1) revert InsufficientAmountOut(); uint256 numerator = swapAmount * pool.reserve0; uint256 denominator = pool.reserve1 - swapAmount; uint256 swapAmountIn = numerator / denominator + 1; uint256 feeAmount = swapAmountIn * pool.fee / 10000; uint256 _protocolFees = feeAmount * protocolFee / 100; uint256 _creatorFee = _protocolFees * 75 / 100; uint256 providerFees = feeAmount - _protocolFees; accProtocolFees += (_protocolFees - _creatorFee); pool.creatorFees += _creatorFee; pool.reserve0 += swapAmountIn; pool.reserve1 -= swapAmount; pool.price += (providerFees * 1e18 / pool.halfReserve); amountIn += (swapAmountIn + feeAmount); } if(msg.value < amountIn) revert InsufficientAmountIn(); bytes memory data; if(recipient == address(0x0) || recipient == msg.sender) { recipient = msg.sender; } else { data = abi.encode(msg.sender); } IEthrunes(ethrunes).transfer(recipient, id, amountOut, data); uint256 refund = msg.value - amountIn; // refund if(refund > 0) { TransferHelper.safeTransferETH(msg.sender, refund); } emit Buy(id, amountIn, amountOut); return amountIn; } function _sell( uint160 id, address to, uint256 amountIn, uint256 amountOutMin, uint256 deadline ) internal checkDeadline(deadline) nonReentrant { Pool storage pool = pools[id]; if(to == address(0x0)) revert InvalidRecipient(); if(amountIn == 0) revert ZeroAmountIn(); if(pool.limitPerSell > 0 && amountIn > pool.limitPerSell) revert ExceedLimitPerSell(); uint256 sellAmount; uint256 swapAmount; if(pool.reserve1 >= pool.halfReserve) { sellAmount = amountIn; } else { uint256 maxSwapAmount = pool.halfReserve - pool.reserve1; if(maxSwapAmount >= amountIn) { swapAmount = amountIn; } else { swapAmount = maxSwapAmount; sellAmount = amountIn - maxSwapAmount; } } uint256 amountOut; if(swapAmount > 0) { uint256 numerator = swapAmount * pool.reserve0; uint256 denominator = pool.reserve1 + swapAmount; amountOut = numerator / denominator - 1; uint256 feeAmount = amountOut * pool.fee / 10000; uint256 _protocolFees = feeAmount * protocolFee / 100; uint256 _creatorFee = _protocolFees * 75 / 100; uint256 providerFees = feeAmount - _protocolFees; accProtocolFees += (_protocolFees - _creatorFee); pool.creatorFees += _creatorFee; pool.reserve0 -= amountOut; pool.reserve1 += swapAmount; pool.price += providerFees * 1e18 / pool.halfReserve; amountOut -= feeAmount; } if(pool.reserve1 == pool.halfReserve) { pool.reserve0 = pool.price * pool.halfReserve / 1e18; } if(sellAmount > 0) { uint256 sellValue = sellAmount * pool.price / 1e18; pool.reserve0 -= sellValue; pool.reserve1 += sellAmount; amountOut += sellValue; } if(amountOut < amountOutMin) revert LessThanAmountOutMin(); TransferHelper.safeTransferETH(to, amountOut); emit Sell(id, amountIn, amountOut); } function setFeeRecipient(address _feeRecipient) external { require(msg.sender == dev); feeRecipient = _feeRecipient; } function setFeeTier(uint256 tier, bool b) external { require(tier <= 1000); require(msg.sender == dev); feeTiers[tier] = b; } function withdrawProtocolFees() external nonReentrant { uint256 fees = accProtocolFees; accProtocolFees = 0; TransferHelper.safeTransferETH(feeRecipient, fees); } function withdrawCreatorFees(uint160 id) external nonReentrant { Pool storage pool = pools[id]; uint256 fees = pool.creatorFees; pool.creatorFees = 0; TransferHelper.safeTransferETH(pool.creator, fees); } function onERC1155Received( address operator, address from, uint256 id, uint256 amount, bytes calldata data ) public override returns (bytes4) { if(msg.sender != ethrunes) revert InvalidSender(); uint8 command = uint8(data[0]); // sell if(command == 1) { address recipient; uint256 amountOutMin; uint256 deadline; assembly { recipient := calldataload(add(data.offset, 0x1)) amountOutMin := calldataload(add(data.offset, 0x21)) deadline := calldataload(add(data.offset, 0x41)) } _sell(uint160(id), recipient, amount, amountOutMin, deadline); } else if(command == 2) { // createPool uint256 price; uint256 limitPerBuy; uint256 limitPerSell; uint256 fee; address creator; assembly { price := calldataload(add(data.offset, 0x1)) limitPerBuy := calldataload(add(data.offset, 0x21)) limitPerSell := calldataload(add(data.offset, 0x41)) fee := calldataload(add(data.offset, 0x61)) creator := calldataload(add(data.offset, 0x81)) } _createPool( uint160(id), amount, price, limitPerBuy, limitPerSell, fee, creator ); } else { revert InvalidCall(); } return this.onERC1155Received.selector; } function onERC1155BatchReceived( address, address, uint256[] calldata, uint256[] calldata, bytes calldata ) public override returns (bytes4) { revert NotSupportBatchReceivedCallback(); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_ethrunes","type":"address"},{"internalType":"address","name":"_feeRecipient","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ExceedLimitPerBuy","type":"error"},{"inputs":[],"name":"ExceedLimitPerSell","type":"error"},{"inputs":[],"name":"Expired","type":"error"},{"inputs":[],"name":"InitialPriceTooLow","type":"error"},{"inputs":[],"name":"InsufficientAmountIn","type":"error"},{"inputs":[],"name":"InsufficientAmountOut","type":"error"},{"inputs":[],"name":"InvalidCall","type":"error"},{"inputs":[],"name":"InvalidFeeRate","type":"error"},{"inputs":[],"name":"InvalidRecipient","type":"error"},{"inputs":[],"name":"InvalidSender","type":"error"},{"inputs":[],"name":"InvalidTotalSupply","type":"error"},{"inputs":[],"name":"LessThanAmountOutMin","type":"error"},{"inputs":[],"name":"NotSupportBatchReceivedCallback","type":"error"},{"inputs":[],"name":"PoolAlreadyCreated","type":"error"},{"inputs":[],"name":"TotalSupplyMustBeEven","type":"error"},{"inputs":[],"name":"ZeroAmountIn","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint160","name":"id","type":"uint160"},{"indexed":false,"internalType":"uint256","name":"amountInEth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"}],"name":"Buy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"creator","type":"address"},{"indexed":true,"internalType":"uint160","name":"id","type":"uint160"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"CreatePool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint160","name":"id","type":"uint160"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOutEth","type":"uint256"}],"name":"Sell","type":"event"},{"inputs":[],"name":"accProtocolFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint160","name":"id","type":"uint160"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"buy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"ethrunes","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"feeTiers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint160","name":"","type":"uint160"}],"name":"pools","outputs":[{"internalType":"uint256","name":"reserve0","type":"uint256"},{"internalType":"uint256","name":"reserve1","type":"uint256"},{"internalType":"uint256","name":"halfReserve","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"limitPerBuy","type":"uint256"},{"internalType":"uint256","name":"limitPerSell","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"address","name":"creator","type":"address"},{"internalType":"uint256","name":"creatorFees","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_feeRecipient","type":"address"}],"name":"setFeeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tier","type":"uint256"},{"internalType":"bool","name":"b","type":"bool"}],"name":"setFeeTier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint160","name":"id","type":"uint160"}],"name":"withdrawCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawProtocolFees","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526002805461ffff1916601417905534801561001e57600080fd5b506040516116d13803806116d183398101604081905261003d9161018a565b60016000818155600280546001600160a01b03958616620100000262010000600160b01b031990911617905560038054939094166001600160a01b03199384161790935560048054909216331790915560066020527fe35badbf25c63a5d1ab35b3ca6cb3f58b64f38e5dcf8f0175fb3933f138973f5805460ff1990811683179091557fdbf7dfb1b10537b92f8a90a98ea2652a215b1ccb1fe0411ff3d4cf38f89a466d80548216831790557f294249a73dade72954ce261e2d3e7a241ea69fbb9c559454dd3e40f332fd4f1780548216831790557fd4c27e5d2ce7b7345f78d7f5ddc8b90697d63512e00b9f949b158a467d0bfffc8054821683179055601e9092527fb6ba906ff52451a7a924e2eaeb8aea3ebee7350a8703e5e417edb25358c7dcc180549092161790556101bd565b80516001600160a01b038116811461018557600080fd5b919050565b6000806040838503121561019d57600080fd5b6101a68361016e565b91506101b46020840161016e565b90509250929050565b611505806101cc6000396000f3fe6080604052600436106100c25760003560e01c806385dc1df51161007f578063b0e21e8a11610059578063b0e21e8a146102b5578063bc197c81146102e3578063e74b981b1461031c578063f23a6e611461033c57600080fd5b806385dc1df5146101d05780638795cccb146101e3578063aefe78db146101f857600080fd5b806301ffc9a7146100c7578063230ed44a146100fc57806328b275a81461012c5780632db69c551461015057806338f5571f14610172578063467d9b9d14610192575b600080fd5b3480156100d357600080fd5b506100e76100e23660046110d3565b61035c565b60405190151581526020015b60405180910390f35b34801561010857600080fd5b506100e7610117366004611104565b60066020526000908152604090205460ff1681565b34801561013857600080fd5b5061014260015481565b6040519081526020016100f3565b34801561015c57600080fd5b5061017061016b36600461111d565b610393565b005b34801561017e57600080fd5b5061017061018d366004611167565b6103d9565b34801561019e57600080fd5b506002546101b8906201000090046001600160a01b031681565b6040516001600160a01b0390911681526020016100f3565b6101426101de366004611184565b610424565b3480156101ef57600080fd5b5061017061088a565b34801561020457600080fd5b50610268610213366004611167565b6005602081905260009182526040909120805460018201546002830154600384015460048501549585015460068601546007870154600890970154959794969395929493919290916001600160a01b03169089565b60408051998a5260208a0198909852968801959095526060870193909352608086019190915260a085015260c08401526001600160a01b031660e0830152610100820152610120016100f3565b3480156102c157600080fd5b506002546102d09061ffff1681565b60405161ffff90911681526020016100f3565b3480156102ef57600080fd5b506103036102fe36600461125c565b6108be565b6040516001600160e01b031990911681526020016100f3565b34801561032857600080fd5b50610170610337366004611167565b6108d9565b34801561034857600080fd5b5061030361035736600461131b565b610912565b60006001600160e01b03198216630271189760e51b148061038d57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6103e88211156103a257600080fd5b6004546001600160a01b031633146103b957600080fd5b600091825260066020526040909120805460ff1916911515919091179055565b6103e16109fd565b6001600160a01b03808216600090815260056020526040812060088101805492905560078101549092610415911682610a5b565b50506104216001600055565b50565b6000824281101561044857604051630407b05b60e31b815260040160405180910390fd5b6104506109fd565b346000036104715760405163990965c160e01b815260040160405180910390fd5b6001600160a01b038616600090815260056020526040902060048101541580159061049f5750806004015486115b156104bd576040516308af9b0960e21b815260040160405180910390fd5b806001015486106104e157604051637294b85560e11b815260040160405180910390fd5b6000808260020154836001015411156105315760008360020154846001015461050a91906113ad565b905088811061051b5788925061052b565b610525818a6113ad565b91508092505b50610534565b50865b6000821561059657670de0b6b3a764000083856003015461055591906113c0565b61055f91906113d7565b90508084600001600082825461057591906113f9565b925050819055508284600101600082825461059091906113ad565b90915550505b811561073357836001015482106105c057604051637294b85560e11b815260040160405180910390fd5b83546000906105cf90846113c0565b905060008386600101546105e391906113ad565b905060006105f182846113d7565b6105fc9060016113f9565b9050600061271088600601548361061391906113c0565b61061d91906113d7565b6002549091506000906064906106379061ffff16846113c0565b61064191906113d7565b90506000606461065283604b6113c0565b61065c91906113d7565b9050600061066a83856113ad565b905061067682846113ad565b6001600082825461068791906113f9565b92505081905550818b60080160008282546106a291906113f9565b90915550508a5485908c906000906106bb9084906113f9565b92505081905550888b60010160008282546106d691906113ad565b909155505060028b01546106f282670de0b6b3a76400006113c0565b6106fc91906113d7565b8b600301600082825461070f91906113f9565b9091555061071f905084866113f9565b61072990896113f9565b9750505050505050505b8034101561075457604051636fad977360e11b815260040160405180910390fd5b60606001600160a01b038816158061077457506001600160a01b03881633145b156107815733975061079e565b604080513360208201520160405160208183030381529060405290505b60025460405163dabd76e960e01b8152620100009091046001600160a01b03169063dabd76e9906107d9908b908f908f908790600401611430565b600060405180830381600087803b1580156107f357600080fd5b505af1158015610807573d6000803e3d6000fd5b505050506000823461081991906113ad565b9050801561082b5761082b3382610a5b565b60408051848152602081018d90526001600160a01b038e16917f414e2af7d9e148af9dd239499d0abecf8aa2174a1b62d0ee195fce7ca0b77f86910160405180910390a250909550505050506108816001600055565b50949350505050565b6108926109fd565b6001805460009091556003546108b1906001600160a01b031682610a5b565b506108bc6001600055565b565b600060405163b893332b60e01b815260040160405180910390fd5b6004546001600160a01b031633146108f057600080fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6002546000906201000090046001600160a01b0316331461094657604051636edaef2f60e11b815260040160405180910390fd5b60008383600081811061095b5761095b611484565b919091013560f81c91505060018190036109935760018401356021850135604186013561098b89848a8585610b03565b5050506109e9565b8060ff166002036109d057600184013560218501356041860135606187013560818801356109c68b8b8787878787610eac565b50505050506109e9565b60405163574b16a760e11b815260040160405180910390fd5b5063f23a6e6160e01b979650505050505050565b600260005403610a545760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600055565b604080516000808252602082019092526001600160a01b038416908390604051610a85919061149a565b60006040518083038185875af1925050503d8060008114610ac2576040519150601f19603f3d011682016040523d82523d6000602084013e610ac7565b606091505b5050905080610afe5760405162461bcd60e51b815260206004820152600360248201526253544560e81b6044820152606401610a4b565b505050565b8042811015610b2557604051630407b05b60e31b815260040160405180910390fd5b610b2d6109fd565b6001600160a01b038087166000908152600560205260409020908616610b6657604051634e46966960e11b815260040160405180910390fd5b84600003610b875760405163990965c160e01b815260040160405180910390fd5b60008160050154118015610b9e5750806005015485115b15610bbc5760405163023e69fd60e51b815260040160405180910390fd5b6000808260020154836001015410610bd657869150610c0f565b600083600101548460020154610bec91906113ad565b9050878110610bfd57879150610c0d565b905080610c0a81896113ad565b92505b505b60008115610d7e578354600090610c2690846113c0565b90506000838660010154610c3a91906113f9565b90506001610c4882846113d7565b610c5291906113ad565b92506000612710876006015485610c6991906113c0565b610c7391906113d7565b600254909150600090606490610c8d9061ffff16846113c0565b610c9791906113d7565b905060006064610ca883604b6113c0565b610cb291906113d7565b90506000610cc083856113ad565b9050610ccc82846113ad565b60016000828254610cdd91906113f9565b92505081905550818a6008016000828254610cf891906113f9565b9091555050895487908b90600090610d119084906113ad565b92505081905550878a6001016000828254610d2c91906113f9565b909155505060028a0154610d4882670de0b6b3a76400006113c0565b610d5291906113d7565b8a6003016000828254610d6591906113f9565b90915550610d75905084886113ad565b96505050505050505b8360020154846001015403610db757670de0b6b3a764000084600201548560030154610daa91906113c0565b610db491906113d7565b84555b8215610e27576000670de0b6b3a7640000856003015485610dd891906113c0565b610de291906113d7565b905080856000016000828254610df891906113ad565b9250508190555083856001016000828254610e1391906113f9565b90915550610e23905081836113f9565b9150505b86811015610e4857604051636383072760e11b815260040160405180910390fd5b610e528982610a5b565b60408051898152602081018390526001600160a01b038c16917fa51c3fd9f12784345ed139a5fb52b323c591368bab8a4d38f2073adeef0167f8910160405180910390a250505050610ea46001600055565b505050505050565b6001600160a01b0387166000908152600560205260409020600181015415610ee757604051630149ba8b60e11b815260040160405180910390fd5b60025460405163bd85b03960e01b81526001600160a01b038a81166004830152600092620100009004169063bd85b03990602401602060405180830381865afa158015610f38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5c91906114b6565b9050808814610f7e576040516334bbd58560e01b815260040160405180910390fd5b60008481526006602052604090205460ff16610fad57604051630adad23360e31b815260040160405180910390fd5b87610fb96002826113d7565b610fc49060026113c0565b14610fe2576040516301c7a0c560e71b815260040160405180910390fd5b6000825560018201889055610ff86002896113d7565b60028301819055600383018890556004830187905560058301869055600683018590556007830180546001600160a01b0319166001600160a01b038616179055670de0b6b3a76400009061104d9089906113c0565b61105791906113d7565b60000361107757604051633e6f5e7760e01b815260040160405180910390fd5b60408051898152602081018990529081018590526001600160a01b03808b1691908516907ff51250db2729f4349d2702ea57244f542214e68012d507e78eaba60bed629d309060600160405180910390a3505050505050505050565b6000602082840312156110e557600080fd5b81356001600160e01b0319811681146110fd57600080fd5b9392505050565b60006020828403121561111657600080fd5b5035919050565b6000806040838503121561113057600080fd5b823591506020830135801515811461114757600080fd5b809150509250929050565b6001600160a01b038116811461042157600080fd5b60006020828403121561117957600080fd5b81356110fd81611152565b6000806000806080858703121561119a57600080fd5b84356111a581611152565b9350602085013592506040850135915060608501356111c381611152565b939692955090935050565b60008083601f8401126111e057600080fd5b50813567ffffffffffffffff8111156111f857600080fd5b6020830191508360208260051b850101111561121357600080fd5b9250929050565b60008083601f84011261122c57600080fd5b50813567ffffffffffffffff81111561124457600080fd5b60208301915083602082850101111561121357600080fd5b60008060008060008060008060a0898b03121561127857600080fd5b883561128381611152565b9750602089013561129381611152565b9650604089013567ffffffffffffffff808211156112b057600080fd5b6112bc8c838d016111ce565b909850965060608b01359150808211156112d557600080fd5b6112e18c838d016111ce565b909650945060808b01359150808211156112fa57600080fd5b506113078b828c0161121a565b999c989b5096995094979396929594505050565b60008060008060008060a0878903121561133457600080fd5b863561133f81611152565b9550602087013561134f81611152565b94506040870135935060608701359250608087013567ffffffffffffffff81111561137957600080fd5b61138589828a0161121a565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561038d5761038d611397565b808202811582820484141761038d5761038d611397565b6000826113f457634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561038d5761038d611397565b60005b8381101561142757818101518382015260200161140f565b50506000910152565b600060018060a01b03808716835280861660208401525083604083015260806060830152825180608084015261146d8160a085016020870161140c565b601f01601f19169190910160a00195945050505050565b634e487b7160e01b600052603260045260246000fd5b600082516114ac81846020870161140c565b9190910192915050565b6000602082840312156114c857600080fd5b505191905056fea2646970667358221220eef08eb6b3bf291e804fbcd4ddd750b960133476104574bcfc704efad99a325d64736f6c63430008110033000000000000000000000000326490a8f5dcaeaa4a2ad9ea902990c5b0834d9b000000000000000000000000830b7791fbfa34ac8eaadd15e1f74b702c8af0eb
Deployed Bytecode
0x6080604052600436106100c25760003560e01c806385dc1df51161007f578063b0e21e8a11610059578063b0e21e8a146102b5578063bc197c81146102e3578063e74b981b1461031c578063f23a6e611461033c57600080fd5b806385dc1df5146101d05780638795cccb146101e3578063aefe78db146101f857600080fd5b806301ffc9a7146100c7578063230ed44a146100fc57806328b275a81461012c5780632db69c551461015057806338f5571f14610172578063467d9b9d14610192575b600080fd5b3480156100d357600080fd5b506100e76100e23660046110d3565b61035c565b60405190151581526020015b60405180910390f35b34801561010857600080fd5b506100e7610117366004611104565b60066020526000908152604090205460ff1681565b34801561013857600080fd5b5061014260015481565b6040519081526020016100f3565b34801561015c57600080fd5b5061017061016b36600461111d565b610393565b005b34801561017e57600080fd5b5061017061018d366004611167565b6103d9565b34801561019e57600080fd5b506002546101b8906201000090046001600160a01b031681565b6040516001600160a01b0390911681526020016100f3565b6101426101de366004611184565b610424565b3480156101ef57600080fd5b5061017061088a565b34801561020457600080fd5b50610268610213366004611167565b6005602081905260009182526040909120805460018201546002830154600384015460048501549585015460068601546007870154600890970154959794969395929493919290916001600160a01b03169089565b60408051998a5260208a0198909852968801959095526060870193909352608086019190915260a085015260c08401526001600160a01b031660e0830152610100820152610120016100f3565b3480156102c157600080fd5b506002546102d09061ffff1681565b60405161ffff90911681526020016100f3565b3480156102ef57600080fd5b506103036102fe36600461125c565b6108be565b6040516001600160e01b031990911681526020016100f3565b34801561032857600080fd5b50610170610337366004611167565b6108d9565b34801561034857600080fd5b5061030361035736600461131b565b610912565b60006001600160e01b03198216630271189760e51b148061038d57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6103e88211156103a257600080fd5b6004546001600160a01b031633146103b957600080fd5b600091825260066020526040909120805460ff1916911515919091179055565b6103e16109fd565b6001600160a01b03808216600090815260056020526040812060088101805492905560078101549092610415911682610a5b565b50506104216001600055565b50565b6000824281101561044857604051630407b05b60e31b815260040160405180910390fd5b6104506109fd565b346000036104715760405163990965c160e01b815260040160405180910390fd5b6001600160a01b038616600090815260056020526040902060048101541580159061049f5750806004015486115b156104bd576040516308af9b0960e21b815260040160405180910390fd5b806001015486106104e157604051637294b85560e11b815260040160405180910390fd5b6000808260020154836001015411156105315760008360020154846001015461050a91906113ad565b905088811061051b5788925061052b565b610525818a6113ad565b91508092505b50610534565b50865b6000821561059657670de0b6b3a764000083856003015461055591906113c0565b61055f91906113d7565b90508084600001600082825461057591906113f9565b925050819055508284600101600082825461059091906113ad565b90915550505b811561073357836001015482106105c057604051637294b85560e11b815260040160405180910390fd5b83546000906105cf90846113c0565b905060008386600101546105e391906113ad565b905060006105f182846113d7565b6105fc9060016113f9565b9050600061271088600601548361061391906113c0565b61061d91906113d7565b6002549091506000906064906106379061ffff16846113c0565b61064191906113d7565b90506000606461065283604b6113c0565b61065c91906113d7565b9050600061066a83856113ad565b905061067682846113ad565b6001600082825461068791906113f9565b92505081905550818b60080160008282546106a291906113f9565b90915550508a5485908c906000906106bb9084906113f9565b92505081905550888b60010160008282546106d691906113ad565b909155505060028b01546106f282670de0b6b3a76400006113c0565b6106fc91906113d7565b8b600301600082825461070f91906113f9565b9091555061071f905084866113f9565b61072990896113f9565b9750505050505050505b8034101561075457604051636fad977360e11b815260040160405180910390fd5b60606001600160a01b038816158061077457506001600160a01b03881633145b156107815733975061079e565b604080513360208201520160405160208183030381529060405290505b60025460405163dabd76e960e01b8152620100009091046001600160a01b03169063dabd76e9906107d9908b908f908f908790600401611430565b600060405180830381600087803b1580156107f357600080fd5b505af1158015610807573d6000803e3d6000fd5b505050506000823461081991906113ad565b9050801561082b5761082b3382610a5b565b60408051848152602081018d90526001600160a01b038e16917f414e2af7d9e148af9dd239499d0abecf8aa2174a1b62d0ee195fce7ca0b77f86910160405180910390a250909550505050506108816001600055565b50949350505050565b6108926109fd565b6001805460009091556003546108b1906001600160a01b031682610a5b565b506108bc6001600055565b565b600060405163b893332b60e01b815260040160405180910390fd5b6004546001600160a01b031633146108f057600080fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6002546000906201000090046001600160a01b0316331461094657604051636edaef2f60e11b815260040160405180910390fd5b60008383600081811061095b5761095b611484565b919091013560f81c91505060018190036109935760018401356021850135604186013561098b89848a8585610b03565b5050506109e9565b8060ff166002036109d057600184013560218501356041860135606187013560818801356109c68b8b8787878787610eac565b50505050506109e9565b60405163574b16a760e11b815260040160405180910390fd5b5063f23a6e6160e01b979650505050505050565b600260005403610a545760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600055565b604080516000808252602082019092526001600160a01b038416908390604051610a85919061149a565b60006040518083038185875af1925050503d8060008114610ac2576040519150601f19603f3d011682016040523d82523d6000602084013e610ac7565b606091505b5050905080610afe5760405162461bcd60e51b815260206004820152600360248201526253544560e81b6044820152606401610a4b565b505050565b8042811015610b2557604051630407b05b60e31b815260040160405180910390fd5b610b2d6109fd565b6001600160a01b038087166000908152600560205260409020908616610b6657604051634e46966960e11b815260040160405180910390fd5b84600003610b875760405163990965c160e01b815260040160405180910390fd5b60008160050154118015610b9e5750806005015485115b15610bbc5760405163023e69fd60e51b815260040160405180910390fd5b6000808260020154836001015410610bd657869150610c0f565b600083600101548460020154610bec91906113ad565b9050878110610bfd57879150610c0d565b905080610c0a81896113ad565b92505b505b60008115610d7e578354600090610c2690846113c0565b90506000838660010154610c3a91906113f9565b90506001610c4882846113d7565b610c5291906113ad565b92506000612710876006015485610c6991906113c0565b610c7391906113d7565b600254909150600090606490610c8d9061ffff16846113c0565b610c9791906113d7565b905060006064610ca883604b6113c0565b610cb291906113d7565b90506000610cc083856113ad565b9050610ccc82846113ad565b60016000828254610cdd91906113f9565b92505081905550818a6008016000828254610cf891906113f9565b9091555050895487908b90600090610d119084906113ad565b92505081905550878a6001016000828254610d2c91906113f9565b909155505060028a0154610d4882670de0b6b3a76400006113c0565b610d5291906113d7565b8a6003016000828254610d6591906113f9565b90915550610d75905084886113ad565b96505050505050505b8360020154846001015403610db757670de0b6b3a764000084600201548560030154610daa91906113c0565b610db491906113d7565b84555b8215610e27576000670de0b6b3a7640000856003015485610dd891906113c0565b610de291906113d7565b905080856000016000828254610df891906113ad565b9250508190555083856001016000828254610e1391906113f9565b90915550610e23905081836113f9565b9150505b86811015610e4857604051636383072760e11b815260040160405180910390fd5b610e528982610a5b565b60408051898152602081018390526001600160a01b038c16917fa51c3fd9f12784345ed139a5fb52b323c591368bab8a4d38f2073adeef0167f8910160405180910390a250505050610ea46001600055565b505050505050565b6001600160a01b0387166000908152600560205260409020600181015415610ee757604051630149ba8b60e11b815260040160405180910390fd5b60025460405163bd85b03960e01b81526001600160a01b038a81166004830152600092620100009004169063bd85b03990602401602060405180830381865afa158015610f38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5c91906114b6565b9050808814610f7e576040516334bbd58560e01b815260040160405180910390fd5b60008481526006602052604090205460ff16610fad57604051630adad23360e31b815260040160405180910390fd5b87610fb96002826113d7565b610fc49060026113c0565b14610fe2576040516301c7a0c560e71b815260040160405180910390fd5b6000825560018201889055610ff86002896113d7565b60028301819055600383018890556004830187905560058301869055600683018590556007830180546001600160a01b0319166001600160a01b038616179055670de0b6b3a76400009061104d9089906113c0565b61105791906113d7565b60000361107757604051633e6f5e7760e01b815260040160405180910390fd5b60408051898152602081018990529081018590526001600160a01b03808b1691908516907ff51250db2729f4349d2702ea57244f542214e68012d507e78eaba60bed629d309060600160405180910390a3505050505050505050565b6000602082840312156110e557600080fd5b81356001600160e01b0319811681146110fd57600080fd5b9392505050565b60006020828403121561111657600080fd5b5035919050565b6000806040838503121561113057600080fd5b823591506020830135801515811461114757600080fd5b809150509250929050565b6001600160a01b038116811461042157600080fd5b60006020828403121561117957600080fd5b81356110fd81611152565b6000806000806080858703121561119a57600080fd5b84356111a581611152565b9350602085013592506040850135915060608501356111c381611152565b939692955090935050565b60008083601f8401126111e057600080fd5b50813567ffffffffffffffff8111156111f857600080fd5b6020830191508360208260051b850101111561121357600080fd5b9250929050565b60008083601f84011261122c57600080fd5b50813567ffffffffffffffff81111561124457600080fd5b60208301915083602082850101111561121357600080fd5b60008060008060008060008060a0898b03121561127857600080fd5b883561128381611152565b9750602089013561129381611152565b9650604089013567ffffffffffffffff808211156112b057600080fd5b6112bc8c838d016111ce565b909850965060608b01359150808211156112d557600080fd5b6112e18c838d016111ce565b909650945060808b01359150808211156112fa57600080fd5b506113078b828c0161121a565b999c989b5096995094979396929594505050565b60008060008060008060a0878903121561133457600080fd5b863561133f81611152565b9550602087013561134f81611152565b94506040870135935060608701359250608087013567ffffffffffffffff81111561137957600080fd5b61138589828a0161121a565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561038d5761038d611397565b808202811582820484141761038d5761038d611397565b6000826113f457634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561038d5761038d611397565b60005b8381101561142757818101518382015260200161140f565b50506000910152565b600060018060a01b03808716835280861660208401525083604083015260806060830152825180608084015261146d8160a085016020870161140c565b601f01601f19169190910160a00195945050505050565b634e487b7160e01b600052603260045260246000fd5b600082516114ac81846020870161140c565b9190910192915050565b6000602082840312156114c857600080fd5b505191905056fea2646970667358221220eef08eb6b3bf291e804fbcd4ddd750b960133476104574bcfc704efad99a325d64736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000326490a8f5dcaeaa4a2ad9ea902990c5b0834d9b000000000000000000000000830b7791fbfa34ac8eaadd15e1f74b702c8af0eb
-----Decoded View---------------
Arg [0] : _ethrunes (address): 0x326490A8f5dCaEAa4a2Ad9ea902990c5b0834D9B
Arg [1] : _feeRecipient (address): 0x830b7791fbFA34ac8EAadd15E1f74b702c8af0eb
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000326490a8f5dcaeaa4a2ad9ea902990c5b0834d9b
Arg [1] : 000000000000000000000000830b7791fbfa34ac8eaadd15e1f74b702c8af0eb
Deployed Bytecode Sourcemap
18544:9306:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9111:223;;;;;;;;;;-1:-1:-1;9111:223:0;;;;;:::i;:::-;;:::i;:::-;;;470:14:1;;463:22;445:41;;433:2;418:18;9111:223:0;;;;;;;;19540:41;;;;;;;;;;-1:-1:-1;19540:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19325:30;;;;;;;;;;;;;;;;;;;828:25:1;;;816:2;801:18;19325:30:0;682:177:1;25644:143:0;;;;;;;;;;-1:-1:-1;25644:143:0;;;;;:::i;:::-;;:::i;:::-;;25979:227;;;;;;;;;;-1:-1:-1;25979:227:0;;;;;:::i;:::-;;:::i;19426:23::-;;;;;;;;;;-1:-1:-1;19426:23:0;;;;;;;-1:-1:-1;;;;;19426:23:0;;;;;;-1:-1:-1;;;;;1762:32:1;;;1744:51;;1732:2;1717:18;19426:23:0;1598:203:1;21155:2329:0;;;;;;:::i;:::-;;:::i;25793:180::-;;;;;;;;;;;;;:::i;19497:38::-;;;;;;;;;;-1:-1:-1;19497:38:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19497:38:0;;;;;;;;2707:25:1;;;2763:2;2748:18;;2741:34;;;;2791:18;;;2784:34;;;;2849:2;2834:18;;2827:34;;;;2892:3;2877:19;;2870:35;;;;2936:3;2921:19;;2914:35;2980:3;2965:19;;2958:35;-1:-1:-1;;;;;3030:32:1;3024:3;3009:19;;3002:61;3094:3;3079:19;;3072:35;2694:3;2679:19;19497:38:0;2336:777:1;19360:30:0;;;;;;;;;;-1:-1:-1;19360:30:0;;;;;;;;;;;3292:6:1;3280:19;;;3262:38;;3250:2;3235:18;19360:30:0;3118:188:1;27625:222:0;;;;;;;;;;-1:-1:-1;27625:222:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;;5540:33:1;;;5522:52;;5510:2;5495:18;27625:222:0;5378:202:1;25507:131:0;;;;;;;;;;-1:-1:-1;25507:131:0;;;;;:::i;:::-;;:::i;26212:1407::-;;;;;;;;;;-1:-1:-1;26212:1407:0;;;;;:::i;:::-;;:::i;9111:223::-;9213:4;-1:-1:-1;;;;;;9237:49:0;;-1:-1:-1;;;9237:49:0;;:89;;-1:-1:-1;;;;;;;;;;8687:40:0;;;9290:36;9230:96;9111:223;-1:-1:-1;;9111:223:0:o;25644:143::-;25718:4;25710;:12;;25702:21;;;;;;25752:3;;-1:-1:-1;;;;;25752:3:0;25738:10;:17;25730:26;;;;;;25763:14;;;;:8;:14;;;;;;:18;;-1:-1:-1;;25763:18:0;;;;;;;;;;25644:143::o;25979:227::-;12444:21;:19;:21::i;:::-;-1:-1:-1;;;;;26069:9:0;;::::1;26049:17;26069:9:::0;;;:5:::1;:9;::::0;;;;26100:16:::1;::::0;::::1;::::0;;26123:20;;;26181:12:::1;::::0;::::1;::::0;26069:9;;26150:50:::1;::::0;26181:12:::1;26100:16:::0;26150:30:::1;:50::i;:::-;26042:164;;12488:20:::0;11882:1;13008:7;:22;12825:213;12488:20;25979:227;:::o;21155:2329::-;21325:7;21294:8;20199:15;20188:8;:26;20185:47;;;20223:9;;-1:-1:-1;;;20223:9:0;;;;;;;;;;;20185:47;12444:21:::1;:19;:21::i;:::-;21344:9:::2;21357:1;21344:14:::0;21341:40:::2;;21367:14;;-1:-1:-1::0;;;21367:14:0::2;;;;;;;;;;;21341:40;-1:-1:-1::0;;;;;21408:9:0;::::2;21388:17;21408:9:::0;;;:5:::2;:9;::::0;;;;21427:16:::2;::::0;::::2;::::0;:20;;;;:52:::2;;;21463:4;:16;;;21451:9;:28;21427:52;21424:83;;;21488:19;;-1:-1:-1::0;;;21488:19:0::2;;;;;;;;;;;21424:83;21530:4;:13;;;21517:9;:26;21514:61;;21552:23;;-1:-1:-1::0;;;21552:23:0::2;;;;;;;;;;;21514:61;21584:17;21608:18:::0;21654:4:::2;:16;;;21638:4;:13;;;:32;21635:333;;;21681:20;21720:4;:16;;;21704:4;:13;;;:32;;;;:::i;:::-;21681:55;;21764:9;21748:12;:25;21745:171;;21798:9;21786:21;;21745:171;;;21847:24;21859:12:::0;21847:9;:24:::2;:::i;:::-;21834:37;;21894:12;21882:24;;21745:171;21672:251;21635:333;;;-1:-1:-1::0;21951:9:0;21635:333:::2;21976:16;22004:13:::0;;22001:144:::2;;22064:4;22052:9;22039:4;:10;;;:22;;;;:::i;:::-;:29;;;;:::i;:::-;22028:40;;22094:8;22077:4;:13;;;:25;;;;;;;:::i;:::-;;;;;;;;22128:9;22111:4;:13;;;:26;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;22001:144:0::2;22156:14:::0;;22153:799:::2;;22198:4;:13;;;22184:10;:27;22181:62;;22220:23;;-1:-1:-1::0;;;22220:23:0::2;;;;;;;;;;;22181:62;22288:13:::0;;22254:17:::2;::::0;22275:26:::2;::::0;:10;:26:::2;:::i;:::-;22254:47;;22310:19;22348:10;22332:4;:13;;;:26;;;;:::i;:::-;22310:48:::0;-1:-1:-1;22369:20:0::2;22392:23;22310:48:::0;22392:9;:23:::2;:::i;:::-;:27;::::0;22418:1:::2;22392:27;:::i;:::-;22369:50;;22430:17;22476:5;22465:4;:8;;;22450:12;:23;;;;:::i;:::-;:31;;;;:::i;:::-;22528:11;::::0;22430:51;;-1:-1:-1;22492:21:0::2;::::0;22542:3:::2;::::0;22516:23:::2;::::0;22528:11:::2;;22430:51:::0;22516:23:::2;:::i;:::-;:29;;;;:::i;:::-;22492:53:::0;-1:-1:-1;22554:19:0::2;22597:3;22576:18;22492:53:::0;22592:2:::2;22576:18;:::i;:::-;:24;;;;:::i;:::-;22554:46:::0;-1:-1:-1;22609:20:0::2;22632:25;22644:13:::0;22632:9;:25:::2;:::i;:::-;22609:48:::0;-1:-1:-1;22688:27:0::2;22704:11:::0;22688:13;:27:::2;:::i;:::-;22668:15;;:48;;;;;;;:::i;:::-;;;;;;;;22747:11;22727:4;:16;;;:31;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;22767:29:0;;22784:12;;22767:4;;:13:::2;::::0;:29:::2;::::0;22784:12;;22767:29:::2;:::i;:::-;;;;;;;;22822:10;22805:4;:13;;;:27;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;22878:16:0::2;::::0;::::2;::::0;22856:19:::2;:12:::0;22871:4:::2;22856:19;:::i;:::-;:38;;;;:::i;:::-;22841:4;:10;;;:54;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;22919:24:0::2;::::0;-1:-1:-1;22934:9:0;22919:12;:24:::2;:::i;:::-;22906:38;::::0;;::::2;:::i;:::-;;;22172:780;;;;;;;22153:799;22975:8;22963:9;:20;22960:54;;;22992:22;;-1:-1:-1::0;;;22992:22:0::2;;;;;;;;;;;22960:54;23023:17;-1:-1:-1::0;;;;;23050:25:0;::::2;::::0;;:52:::2;;-1:-1:-1::0;;;;;;23079:23:0;::::2;23092:10;23079:23;23050:52;23047:148;;;23125:10;23113:22;;23047:148;;;23165:22;::::0;;23176:10:::2;23165:22;::::0;::::2;1744:51:1::0;1717:18;23165:22:0::2;;;;;;;;;;;;23158:29;;23047:148;23211:8;::::0;23201:60:::2;::::0;-1:-1:-1;;;23201:60:0;;23211:8;;;::::2;-1:-1:-1::0;;;;;23211:8:0::2;::::0;23201:28:::2;::::0;:60:::2;::::0;23230:9;;23241:2;;23245:9;;23256:4;;23201:60:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;23270:14;23299:8;23287:9;:20;;;;:::i;:::-;23270:37:::0;-1:-1:-1;23334:10:0;;23331:82:::2;;23355:50;23386:10;23398:6;23355:30;:50::i;:::-;23426:28;::::0;;8556:25:1;;;8612:2;8597:18;;8590:34;;;-1:-1:-1;;;;;23426:28:0;::::2;::::0;::::2;::::0;8529:18:1;23426:28:0::2;;;;;;;-1:-1:-1::0;23470:8:0;;-1:-1:-1;;;;;12488:20:0::1;11882:1:::0;13008:7;:22;12825:213;12488:20:::1;21155:2329:::0;;;;;;;:::o;25793:180::-;12444:21;:19;:21::i;:::-;25869:15:::1;::::0;;25854:12:::1;25891:19:::0;;;25948:12:::1;::::0;25917:50:::1;::::0;-1:-1:-1;;;;;25948:12:0::1;25869:15:::0;25917:30:::1;:50::i;:::-;25847:126;12488:20:::0;11882:1;13008:7;:22;12825:213;12488:20;25793:180::o;27625:222::-;27786:6;27808:33;;-1:-1:-1;;;27808:33:0;;;;;;;;;;;25507:131;25593:3;;-1:-1:-1;;;;;25593:3:0;25579:10;:17;25571:26;;;;;;25604:12;:28;;-1:-1:-1;;;;;;25604:28:0;-1:-1:-1;;;;;25604:28:0;;;;;;;;;;25507:131::o;26212:1407::-;26407:8;;26375:6;;26407:8;;;-1:-1:-1;;;;;26407:8:0;26393:10;:22;26390:49;;26424:15;;-1:-1:-1;;;26424:15:0;;;;;;;;;;;26390:49;26446:13;26468:4;;26473:1;26468:7;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;26510:1:0;26499:12;;;26496:1071;;26665:3;26648:21;;26635:35;26726:4;26709:22;;26696:36;26784:4;26767:22;;26754:36;26807:61;26821:2;26635:35;26837:6;26696:36;26754;26807:5;:61::i;:::-;26513:365;;;26496:1071;;;26887:7;:12;;26898:1;26887:12;26884:683;;27106:3;27089:21;;27076:35;27166:4;27149:22;;27136:36;27228:4;27211:22;;27198:36;27281:4;27264:22;;27251:36;27338:4;27321:22;;27308:36;27363:153;27393:2;27408:6;27076:35;27136:36;27198;27251;27308;27363:11;:153::i;:::-;26901:623;;;;;26884:683;;;27546:13;;-1:-1:-1;;;27546:13:0;;;;;;;;;;;26884:683;-1:-1:-1;;;;27582:31:0;26212:1407;-1:-1:-1;;;;;;;26212:1407:0:o;12524:293::-;11926:1;12658:7;;:19;12650:63;;;;-1:-1:-1;;;12650:63:0;;8969:2:1;12650:63:0;;;8951:21:1;9008:2;8988:18;;;8981:30;9047:33;9027:18;;;9020:61;9098:18;;12650:63:0;;;;;;;;;11926:1;12791:7;:18;12524:293::o;18295:168::-;18408:12;;;18368;18408;;;;;;;;;-1:-1:-1;;;;;18386:7:0;;;18401:5;;18386:35;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18367:54;;;18440:7;18432:23;;;;-1:-1:-1;;;18432:23:0;;9753:2:1;18432:23:0;;;9735:21:1;9792:1;9772:18;;;9765:29;-1:-1:-1;;;9810:18:1;;;9803:33;9853:18;;18432:23:0;9551:326:1;18432:23:0;18356:107;18295:168;;:::o;23490:2009::-;23643:8;20199:15;20188:8;:26;20185:47;;;20223:9;;-1:-1:-1;;;20223:9:0;;;;;;;;;;;20185:47;12444:21:::1;:19;:21::i;:::-;-1:-1:-1::0;;;;;23693:9:0;;::::2;23673:17;23693:9:::0;;;:5:::2;:9;::::0;;;;;23712:18;::::2;23709:48;;23739:18;;-1:-1:-1::0;;;23739:18:0::2;;;;;;;;;;;23709:48;23767:8;23779:1;23767:13:::0;23764:39:::2;;23789:14;;-1:-1:-1::0;;;23789:14:0::2;;;;;;;;;;;23764:39;23835:1;23815:4;:17;;;:21;:53;;;;;23851:4;:17;;;23840:8;:28;23815:53;23812:85;;;23877:20;;-1:-1:-1::0;;;23877:20:0::2;;;;;;;;;;;23812:85;23906:18;23931::::0;23978:4:::2;:16;;;23961:4;:13;;;:33;23958:336;;24018:8;24005:21;;23958:336;;;24049:21;24092:4;:13;;;24073:4;:16;;;:32;;;;:::i;:::-;24049:56;;24134:8;24117:13;:25;24114:173;;24168:8;24155:21;;24114:173;;;24216:13:::0;-1:-1:-1;24216:13:0;24253:24:::2;24216:13:::0;24253:8;:24:::2;:::i;:::-;24240:37;;24114:173;24040:254;23958:336;24302:17;24329:14:::0;;24326:693:::2;;24388:13:::0;;24354:17:::2;::::0;24375:26:::2;::::0;:10;:26:::2;:::i;:::-;24354:47;;24410:19;24448:10;24432:4;:13;;;:26;;;;:::i;:::-;24410:48:::0;-1:-1:-1;24505:1:0::2;24479:23;24410:48:::0;24479:9;:23:::2;:::i;:::-;:27;;;;:::i;:::-;24467:39;;24517:17;24560:5;24549:4;:8;;;24537:9;:20;;;;:::i;:::-;:28;;;;:::i;:::-;24612:11;::::0;24517:48;;-1:-1:-1;24576:21:0::2;::::0;24626:3:::2;::::0;24600:23:::2;::::0;24612:11:::2;;24517:48:::0;24600:23:::2;:::i;:::-;:29;;;;:::i;:::-;24576:53:::0;-1:-1:-1;24638:19:0::2;24681:3;24660:18;24576:53:::0;24676:2:::2;24660:18;:::i;:::-;:24;;;;:::i;:::-;24638:46:::0;-1:-1:-1;24695:20:0::2;24718:25;24730:13:::0;24718:9;:25:::2;:::i;:::-;24695:48:::0;-1:-1:-1;24774:27:0::2;24790:11:::0;24774:13;:27:::2;:::i;:::-;24754:15;;:48;;;;;;;:::i;:::-;;;;;;;;24833:11;24813:4;:16;;;:31;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;24853:26:0;;24870:9;;24853:4;;:13:::2;::::0;:26:::2;::::0;24870:9;;24853:26:::2;:::i;:::-;;;;;;;;24905:10;24888:4;:13;;;:27;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;24962:16:0::2;::::0;::::2;::::0;24940:19:::2;:12:::0;24955:4:::2;24940:19;:::i;:::-;:38;;;;:::i;:::-;24926:4;:10;;;:52;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;24989:22:0::2;::::0;-1:-1:-1;25002:9:0;24989:22;::::2;:::i;:::-;;;24345:674;;;;;;24326:693;25047:4;:16;;;25030:4;:13;;;:33:::0;25027:107:::2;;25122:4;25103;:16;;;25090:4;:10;;;:29;;;;:::i;:::-;:36;;;;:::i;:::-;25074:52:::0;;25027:107:::2;25145:14:::0;;25142:188:::2;;25170:17;25216:4;25203;:10;;;25190;:23;;;;:::i;:::-;:30;;;;:::i;:::-;25170:50;;25246:9;25229:4;:13;;;:26;;;;;;;:::i;:::-;;;;;;;;25281:10;25264:4;:13;;;:27;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;25300:22:0::2;::::0;-1:-1:-1;25313:9:0;25300:22;::::2;:::i;:::-;;;25161:169;25142:188;25353:12;25341:9;:24;25338:58;;;25374:22;;-1:-1:-1::0;;;25374:22:0::2;;;;;;;;;;;25338:58;25405:45;25436:2;25440:9;25405:30;:45::i;:::-;25464:29;::::0;;8556:25:1;;;8612:2;8597:18;;8590:34;;;-1:-1:-1;;;;;25464:29:0;::::2;::::0;::::2;::::0;8529:18:1;25464:29:0::2;;;;;;;23666:1833;;;;12488:20:::1;11882:1:::0;13008:7;:22;12825:213;12488:20:::1;23490:2009:::0;;;;;;:::o;20252:895::-;-1:-1:-1;;;;;20465:9:0;;20445:17;20465:9;;;:5;:9;;;;;20484:13;;;;:18;20481:50;;20511:20;;-1:-1:-1;;;20511:20:0;;;;;;;;;;;20481:50;20565:8;;20555:35;;-1:-1:-1;;;20555:35:0;;-1:-1:-1;;;;;1762:32:1;;;20555:35:0;;;1744:51:1;20538:14:0;;20565:8;;;;;20555:31;;1717:18:1;;20555:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20538:52;;20610:6;20600;:16;20597:48;;20625:20;;-1:-1:-1;;;20625:20:0;;;;;;;;;;;20597:48;20656:13;;;;:8;:13;;;;;;;;20652:42;;20678:16;;-1:-1:-1;;;20678:16:0;;;;;;;;;;;20652:42;20722:6;20704:10;20713:1;20722:6;20704:10;:::i;:::-;:14;;20717:1;20704:14;:::i;:::-;:24;20701:59;;20737:23;;-1:-1:-1;;;20737:23:0;;;;;;;;;;;20701:59;20785:1;20769:17;;20793:13;;;:22;;;20841:10;20850:1;20809:6;20841:10;:::i;:::-;20822:16;;;:29;;;20858:10;;;:18;;;20883:16;;;:30;;;20920:17;;;:32;;;20959:8;;;:14;;;20980:12;;;:22;;-1:-1:-1;;;;;;20980:22:0;-1:-1:-1;;;;;20980:22:0;;;;;21046:4;;21014:29;;20858:18;;21014:29;:::i;:::-;:36;;;;:::i;:::-;21054:1;21014:41;21011:73;;21064:20;;-1:-1:-1;;;21064:20:0;;;;;;;;;;;21011:73;21098:43;;;10481:25:1;;;10537:2;10522:18;;10515:34;;;10565:18;;;10558:34;;;-1:-1:-1;;;;;21098:43:0;;;;;;;;;;10469:2:1;10454:18;21098:43:0;;;;;;;20438:709;;20252:895;;;;;;;:::o;14:286:1:-;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:1;;209:43;;199:71;;266:1;263;256:12;199:71;289:5;14:286;-1:-1:-1;;;14:286:1:o;497:180::-;556:6;609:2;597:9;588:7;584:23;580:32;577:52;;;625:1;622;615:12;577:52;-1:-1:-1;648:23:1;;497:180;-1:-1:-1;497:180:1:o;864:341::-;929:6;937;990:2;978:9;969:7;965:23;961:32;958:52;;;1006:1;1003;996:12;958:52;1042:9;1029:23;1019:33;;1102:2;1091:9;1087:18;1074:32;1149:5;1142:13;1135:21;1128:5;1125:32;1115:60;;1171:1;1168;1161:12;1115:60;1194:5;1184:15;;;864:341;;;;;:::o;1210:131::-;-1:-1:-1;;;;;1285:31:1;;1275:42;;1265:70;;1331:1;1328;1321:12;1346:247;1405:6;1458:2;1446:9;1437:7;1433:23;1429:32;1426:52;;;1474:1;1471;1464:12;1426:52;1513:9;1500:23;1532:31;1557:5;1532:31;:::i;1806:525::-;1892:6;1900;1908;1916;1969:3;1957:9;1948:7;1944:23;1940:33;1937:53;;;1986:1;1983;1976:12;1937:53;2025:9;2012:23;2044:31;2069:5;2044:31;:::i;:::-;2094:5;-1:-1:-1;2146:2:1;2131:18;;2118:32;;-1:-1:-1;2197:2:1;2182:18;;2169:32;;-1:-1:-1;2253:2:1;2238:18;;2225:32;2266:33;2225:32;2266:33;:::i;:::-;1806:525;;;;-1:-1:-1;1806:525:1;;-1:-1:-1;;1806:525:1:o;3311:367::-;3374:8;3384:6;3438:3;3431:4;3423:6;3419:17;3415:27;3405:55;;3456:1;3453;3446:12;3405:55;-1:-1:-1;3479:20:1;;3522:18;3511:30;;3508:50;;;3554:1;3551;3544:12;3508:50;3591:4;3583:6;3579:17;3567:29;;3651:3;3644:4;3634:6;3631:1;3627:14;3619:6;3615:27;3611:38;3608:47;3605:67;;;3668:1;3665;3658:12;3605:67;3311:367;;;;;:::o;3683:347::-;3734:8;3744:6;3798:3;3791:4;3783:6;3779:17;3775:27;3765:55;;3816:1;3813;3806:12;3765:55;-1:-1:-1;3839:20:1;;3882:18;3871:30;;3868:50;;;3914:1;3911;3904:12;3868:50;3951:4;3943:6;3939:17;3927:29;;4003:3;3996:4;3987:6;3979;3975:19;3971:30;3968:39;3965:59;;;4020:1;4017;4010:12;4035:1338;4195:6;4203;4211;4219;4227;4235;4243;4251;4304:3;4292:9;4283:7;4279:23;4275:33;4272:53;;;4321:1;4318;4311:12;4272:53;4360:9;4347:23;4379:31;4404:5;4379:31;:::i;:::-;4429:5;-1:-1:-1;4486:2:1;4471:18;;4458:32;4499:33;4458:32;4499:33;:::i;:::-;4551:7;-1:-1:-1;4609:2:1;4594:18;;4581:32;4632:18;4662:14;;;4659:34;;;4689:1;4686;4679:12;4659:34;4728:70;4790:7;4781:6;4770:9;4766:22;4728:70;:::i;:::-;4817:8;;-1:-1:-1;4702:96:1;-1:-1:-1;4905:2:1;4890:18;;4877:32;;-1:-1:-1;4921:16:1;;;4918:36;;;4950:1;4947;4940:12;4918:36;4989:72;5053:7;5042:8;5031:9;5027:24;4989:72;:::i;:::-;5080:8;;-1:-1:-1;4963:98:1;-1:-1:-1;5168:3:1;5153:19;;5140:33;;-1:-1:-1;5185:16:1;;;5182:36;;;5214:1;5211;5204:12;5182:36;;5253:60;5305:7;5294:8;5283:9;5279:24;5253:60;:::i;:::-;4035:1338;;;;-1:-1:-1;4035:1338:1;;-1:-1:-1;4035:1338:1;;;;;;5332:8;-1:-1:-1;;;4035:1338:1:o;5837:823::-;5943:6;5951;5959;5967;5975;5983;6036:3;6024:9;6015:7;6011:23;6007:33;6004:53;;;6053:1;6050;6043:12;6004:53;6092:9;6079:23;6111:31;6136:5;6111:31;:::i;:::-;6161:5;-1:-1:-1;6218:2:1;6203:18;;6190:32;6231:33;6190:32;6231:33;:::i;:::-;6283:7;-1:-1:-1;6337:2:1;6322:18;;6309:32;;-1:-1:-1;6388:2:1;6373:18;;6360:32;;-1:-1:-1;6443:3:1;6428:19;;6415:33;6471:18;6460:30;;6457:50;;;6503:1;6500;6493:12;6457:50;6542:58;6592:7;6583:6;6572:9;6568:22;6542:58;:::i;:::-;5837:823;;;;-1:-1:-1;5837:823:1;;-1:-1:-1;5837:823:1;;6619:8;;5837:823;-1:-1:-1;;;5837:823:1:o;6665:127::-;6726:10;6721:3;6717:20;6714:1;6707:31;6757:4;6754:1;6747:15;6781:4;6778:1;6771:15;6797:128;6864:9;;;6885:11;;;6882:37;;;6899:18;;:::i;6930:168::-;7003:9;;;7034;;7051:15;;;7045:22;;7031:37;7021:71;;7072:18;;:::i;7103:217::-;7143:1;7169;7159:132;;7213:10;7208:3;7204:20;7201:1;7194:31;7248:4;7245:1;7238:15;7276:4;7273:1;7266:15;7159:132;-1:-1:-1;7305:9:1;;7103:217::o;7325:125::-;7390:9;;;7411:10;;;7408:36;;;7424:18;;:::i;7455:250::-;7540:1;7550:113;7564:6;7561:1;7558:13;7550:113;;;7640:11;;;7634:18;7621:11;;;7614:39;7586:2;7579:10;7550:113;;;-1:-1:-1;;7697:1:1;7679:16;;7672:27;7455:250::o;7710:667::-;7904:4;7950:1;7946;7941:3;7937:11;7933:19;7991:2;7983:6;7979:15;7968:9;7961:34;8043:2;8035:6;8031:15;8026:2;8015:9;8011:18;8004:43;;8083:6;8078:2;8067:9;8063:18;8056:34;8126:3;8121:2;8110:9;8106:18;8099:31;8159:6;8153:13;8203:6;8197:3;8186:9;8182:19;8175:35;8219:80;8292:6;8286:3;8275:9;8271:19;8266:2;8258:6;8254:15;8219:80;:::i;:::-;8360:2;8339:15;-1:-1:-1;;8335:29:1;8320:45;;;;8367:3;8316:55;;7710:667;-1:-1:-1;;;;;7710:667:1:o;8635:127::-;8696:10;8691:3;8687:20;8684:1;8677:31;8727:4;8724:1;8717:15;8751:4;8748:1;8741:15;9259:287;9388:3;9426:6;9420:13;9442:66;9501:6;9496:3;9489:4;9481:6;9477:17;9442:66;:::i;:::-;9524:16;;;;;9259:287;-1:-1:-1;;9259:287:1:o;10090:184::-;10160:6;10213:2;10201:9;10192:7;10188:23;10184:32;10181:52;;;10229:1;10226;10219:12;10181:52;-1:-1:-1;10252:16:1;;10090:184;-1:-1:-1;10090:184:1:o
Swarm Source
ipfs://eef08eb6b3bf291e804fbcd4ddd750b960133476104574bcfc704efad99a325d
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,351.89 | 44.5799 | $149,426.75 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.