Source Code
Latest 25 from a total of 2,712 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Buy | 22259442 | 335 days ago | IN | 0.00000005 ETH | 0.00004253 | ||||
| Buy | 22236648 | 339 days ago | IN | 0 ETH | 0.00009547 | ||||
| Buy | 22236641 | 339 days ago | IN | 0 ETH | 0.00009734 | ||||
| Buy | 22171874 | 348 days ago | IN | 0.00001135 ETH | 0.00006403 | ||||
| Buy | 22114778 | 356 days ago | IN | 0.0000101 ETH | 0.00009823 | ||||
| Buy | 22066487 | 362 days ago | IN | 0.0000101 ETH | 0.00010117 | ||||
| Buy | 22028451 | 368 days ago | IN | 0.000101 ETH | 0.000093 | ||||
| Buy | 21962927 | 377 days ago | IN | 0 ETH | 0.00014034 | ||||
| Buy | 21959021 | 377 days ago | IN | 0.000101 ETH | 0.00010548 | ||||
| Buy | 21959021 | 377 days ago | IN | 0.000101 ETH | 0.0001055 | ||||
| Buy | 21959021 | 377 days ago | IN | 0.000101 ETH | 0.0001055 | ||||
| Buy | 21959021 | 377 days ago | IN | 0.000101 ETH | 0.0001055 | ||||
| Buy | 21959021 | 377 days ago | IN | 0.000101 ETH | 0.0001055 | ||||
| Buy | 21959021 | 377 days ago | IN | 0.000101 ETH | 0.0001055 | ||||
| Buy | 21959021 | 377 days ago | IN | 0.000101 ETH | 0.0001055 | ||||
| Buy | 21959021 | 377 days ago | IN | 0.000101 ETH | 0.0001055 | ||||
| Buy | 21959021 | 377 days ago | IN | 0.000101 ETH | 0.0001055 | ||||
| Buy | 21959021 | 377 days ago | IN | 0.000101 ETH | 0.0001055 | ||||
| Buy | 21956608 | 378 days ago | IN | 0.0000101 ETH | 0.00005611 | ||||
| Buy | 21902480 | 385 days ago | IN | 0.0000101 ETH | 0.00006731 | ||||
| Buy | 21636181 | 422 days ago | IN | 0.000101 ETH | 0.00044632 | ||||
| Buy | 21543467 | 435 days ago | IN | 0.0130302 ETH | 0.00068121 | ||||
| Buy | 20990733 | 513 days ago | IN | 1.30302089 ETH | 0.00240212 | ||||
| Buy | 20990732 | 513 days ago | IN | 2.04 ETH | 0.00237692 | ||||
| Buy | 20990729 | 513 days ago | IN | 1.00999999 ETH | 0.00245132 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 22259442 | 335 days ago | 0 ETH | ||||
| Transfer | 22236648 | 339 days ago | 0 ETH | ||||
| Transfer | 22236641 | 339 days ago | 0 ETH | ||||
| Transfer | 22189153 | 345 days ago | 0.12901196 ETH | ||||
| Transfer | 22171874 | 348 days ago | 0.00000011 ETH | ||||
| Transfer | 22114778 | 356 days ago | 0.0000001 ETH | ||||
| Transfer | 22066487 | 362 days ago | 0.0000001 ETH | ||||
| Transfer | 22028451 | 368 days ago | 0.000001 ETH | ||||
| Transfer | 21962927 | 377 days ago | 0 ETH | ||||
| Transfer | 21959021 | 377 days ago | 0.000001 ETH | ||||
| Transfer | 21959021 | 377 days ago | 0.000001 ETH | ||||
| Transfer | 21959021 | 377 days ago | 0.000001 ETH | ||||
| Transfer | 21959021 | 377 days ago | 0.000001 ETH | ||||
| Transfer | 21959021 | 377 days ago | 0.000001 ETH | ||||
| Transfer | 21959021 | 377 days ago | 0.000001 ETH | ||||
| Transfer | 21959021 | 377 days ago | 0.000001 ETH | ||||
| Transfer | 21959021 | 377 days ago | 0.000001 ETH | ||||
| Transfer | 21959021 | 377 days ago | 0.000001 ETH | ||||
| Transfer | 21959021 | 377 days ago | 0.000001 ETH | ||||
| Transfer | 21956614 | 378 days ago | 0.00000993 ETH | ||||
| Transfer | 21956608 | 378 days ago | 0.0000001 ETH | ||||
| Transfer | 21902480 | 385 days ago | 0.0000001 ETH | ||||
| Transfer | 21701642 | 413 days ago | 0.28382633 ETH | ||||
| Transfer | 21636181 | 422 days ago | 0.000001 ETH | ||||
| Transfer | 21544812 | 435 days ago | 1.38042807 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
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/IERC165.sol@v4.8.1
// 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/IERC1155.sol@v4.8.1
// 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/IERC1155Receiver.sol@v4.8.1
// 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/ERC165.sol@v4.8.1
// 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/ERC1155Receiver.sol@v4.8.1
// 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/ReentrancyGuard.sol@v4.8.1
// 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/IERC20.sol@v4.8.1
// 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
Contract ABI
API[{"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
Net Worth in USD
$76,407.54
Net Worth in ETH
36.240486
Token Allocations
ETH
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $2,108.35 | 36.2405 | $76,407.54 |
Loading...
Loading
Loading...
Loading
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.