Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 30 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Create Contract | 18175550 | 539 days ago | IN | 0 ETH | 0.0038894 | ||||
Create Contract | 18151193 | 542 days ago | IN | 0 ETH | 0.00421746 | ||||
Create Contract | 18151188 | 542 days ago | IN | 0 ETH | 0.0039308 | ||||
Create Contract | 18150122 | 542 days ago | IN | 0 ETH | 0.00413296 | ||||
Create Contract | 18112123 | 548 days ago | IN | 0 ETH | 0.00465016 | ||||
Create Contract | 18094433 | 550 days ago | IN | 0 ETH | 0.00580397 | ||||
Create Contract | 18055695 | 556 days ago | IN | 0 ETH | 0.00482442 | ||||
Create Contract | 17949628 | 570 days ago | IN | 0 ETH | 0.00603404 | ||||
Create Contract | 17896812 | 578 days ago | IN | 0 ETH | 0.00650789 | ||||
Create Contract | 17894294 | 578 days ago | IN | 0 ETH | 0.00815995 | ||||
Create Contract | 17876244 | 581 days ago | IN | 0 ETH | 0.00668043 | ||||
Create Contract | 17854899 | 584 days ago | IN | 0 ETH | 0.00480659 | ||||
Create Contract | 17854459 | 584 days ago | IN | 0 ETH | 0.00655697 | ||||
Create Contract | 17850078 | 584 days ago | IN | 0 ETH | 0.00697398 | ||||
Create Contract | 17849442 | 584 days ago | IN | 0 ETH | 0.00992762 | ||||
Create Contract | 17825688 | 588 days ago | IN | 0 ETH | 0.00822821 | ||||
Create Contract | 17818609 | 589 days ago | IN | 0 ETH | 0.01075133 | ||||
Create Contract | 17812611 | 590 days ago | IN | 0 ETH | 0.00739988 | ||||
Create Contract | 17746964 | 599 days ago | IN | 0 ETH | 0.00795894 | ||||
Create Contract | 17742362 | 599 days ago | IN | 0 ETH | 0.01119834 | ||||
Create Contract | 17543930 | 627 days ago | IN | 0 ETH | 0.00937761 | ||||
Create Contract | 17485808 | 636 days ago | IN | 0 ETH | 0.01161499 | ||||
Create Contract | 17462744 | 639 days ago | IN | 0 ETH | 0.00656625 | ||||
Create Contract | 17406829 | 647 days ago | IN | 0 ETH | 0.00869634 | ||||
Create Contract | 17195983 | 676 days ago | IN | 0 ETH | 0.11011588 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Method | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|---|
0x3d602d80 | 18175550 | 539 days ago | Contract Creation | 0 ETH | |||
0x3d602d80 | 18151193 | 542 days ago | Contract Creation | 0 ETH | |||
0x3d602d80 | 18151188 | 542 days ago | Contract Creation | 0 ETH | |||
0x3d602d80 | 18150122 | 542 days ago | Contract Creation | 0 ETH | |||
0x3d602d80 | 18112123 | 548 days ago | Contract Creation | 0 ETH | |||
0x3d602d80 | 18094433 | 550 days ago | Contract Creation | 0 ETH | |||
0x3d602d80 | 18055695 | 556 days ago | Contract Creation | 0 ETH | |||
0x3d602d80 | 17949628 | 570 days ago | Contract Creation | 0 ETH | |||
0x3d602d80 | 17896812 | 578 days ago | Contract Creation | 0 ETH | |||
0x3d602d80 | 17894294 | 578 days ago | Contract Creation | 0 ETH | |||
0x3d602d80 | 17876244 | 581 days ago | Contract Creation | 0 ETH | |||
0x3d602d80 | 17854899 | 584 days ago | Contract Creation | 0 ETH | |||
0x3d602d80 | 17854459 | 584 days ago | Contract Creation | 0 ETH | |||
0x3d602d80 | 17850078 | 584 days ago | Contract Creation | 0 ETH | |||
0x3d602d80 | 17849442 | 584 days ago | Contract Creation | 0 ETH | |||
0x3d602d80 | 17825688 | 588 days ago | Contract Creation | 0 ETH | |||
0x3d602d80 | 17818609 | 589 days ago | Contract Creation | 0 ETH | |||
0x3d602d80 | 17812611 | 590 days ago | Contract Creation | 0 ETH | |||
0x3d602d80 | 17746964 | 599 days ago | Contract Creation | 0 ETH | |||
0x3d602d80 | 17742362 | 599 days ago | Contract Creation | 0 ETH | |||
0x3d602d80 | 17543930 | 627 days ago | Contract Creation | 0 ETH | |||
0x3d602d80 | 17485808 | 636 days ago | Contract Creation | 0 ETH | |||
0x3d602d80 | 17462744 | 639 days ago | Contract Creation | 0 ETH | |||
0x3d602d80 | 17406829 | 647 days ago | Contract Creation | 0 ETH | |||
0x3d602d80 | 17195983 | 676 days ago | Contract Creation | 0 ETH |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
ErcForgeDeployer
Compiler Version
v0.8.13+commit.abaa5c0e
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
/* /$$$$$$$$ /$$$$$$$$ /$$ | $$_____/ | $$_____/ |__/ | $$ /$$$$$$ /$$$$$$$| $$ /$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ /$$ /$$$$$$ | $$$$$ /$$__ $$ /$$_____/| $$$$$ /$$__ $$ /$$__ $$ /$$__ $$ /$$__ $$ | $$ /$$__ $$ | $$__/ | $$ \__/| $$ | $$__/| $$ \ $$| $$ \__/| $$ \ $$| $$$$$$$$ | $$| $$ \ $$ | $$ | $$ | $$ | $$ | $$ | $$| $$ | $$ | $$| $$_____/ | $$| $$ | $$ | $$$$$$$$| $$ | $$$$$$$| $$ | $$$$$$/| $$ | $$$$$$$| $$$$$$$ /$$| $$| $$$$$$/ |________/|__/ \_______/|__/ \______/ |__/ \____ $$ \_______/|__/|__/ \______/ /$$ \ $$ | $$$$$$/ \______/ */ //SPDX-License-Identifier: CC-BY-NC-ND pragma solidity ^0.8.0; import "../interface/IErcForgeInitiable.sol"; import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol"; contract ErcForgeDeployer { mapping(uint256 => address) private _templateAddresses; address public fullDiscountTokenAddress; uint256 public fullDiscountTokenId; address owner; uint256 public fee = 0 gwei; uint256 public referrerDiscount = 0 gwei; uint256 public referrerReward = 0 gwei; uint256 public totalReferrerFunds; mapping(address => uint256) private _referrerFunds; bool public isPaused = false; event ContractCreated(address contractAddress); error NotOwner(); constructor() { owner = msg.sender; } function setTemplateAddress( uint256 _templateType, address _address ) public { if (owner != msg.sender) { revert NotOwner(); } _templateAddresses[_templateType] = _address; } function getTemplateAddress( uint256 _templateType ) public view returns (address) { if (owner != msg.sender) { revert NotOwner(); } return _templateAddresses[_templateType]; } function setFullDiscountToken(address _address, uint256 _id) public { if (owner != msg.sender) { revert NotOwner(); } fullDiscountTokenAddress = _address; fullDiscountTokenId = _id; } function setOwner(address _owner) public { if (owner != msg.sender) { revert NotOwner(); } owner = _owner; } function setFee(uint256 _fee) public { if (owner != msg.sender) { revert NotOwner(); } fee = _fee; } function setReferrerDiscount(uint256 _referrerDiscount) public { if (owner != msg.sender) { revert NotOwner(); } referrerDiscount = _referrerDiscount; } function setReferrerReward(uint256 _referrerReward) public { if (owner != msg.sender) { revert NotOwner(); } referrerReward = _referrerReward; } function setIsPaused(bool _isPaused) public { if (owner != msg.sender) { revert NotOwner(); } isPaused = _isPaused; } function getFee(bool hasReferrer) public view returns (uint256) { uint256 tmpFee = fee; if (hasReferrer) tmpFee -= referrerDiscount; if (fullDiscountTokenAddress != address(0)) { ERC1155 fullDiscountToken = ERC1155(fullDiscountTokenAddress); if ( fullDiscountToken.balanceOf(msg.sender, fullDiscountTokenId) > 0 ) tmpFee = 0; } return tmpFee; } function createContract( uint256 contractType, string memory name, string memory symbol, string memory uri, string memory contractUri, address royaltyAddresses, uint96 royaltyFee, address referrer ) public payable returns (address) { require(!isPaused, "Paused"); require( _templateAddresses[contractType] != address(0), "Contract type not defined" ); uint256 tmpFee = getFee(referrer != address(0)); require(msg.value >= tmpFee, "Not enough funds"); address clone = createClone(_templateAddresses[contractType]); IErcForgeInitiable token = IErcForgeInitiable(clone); token.init( msg.sender, name, symbol, uri, contractUri, royaltyAddresses, royaltyFee ); emit ContractCreated(clone); if (referrer != address(0) && tmpFee != 0) { _referrerFunds[referrer] += referrerReward; totalReferrerFunds += referrerReward; } return clone; } function createClone(address target) internal returns (address result) { bytes20 targetBytes = bytes20(target); assembly { let clone := mload(0x40) mstore( clone, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000 ) mstore(add(clone, 0x14), targetBytes) mstore( add(clone, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000 ) result := create(0, clone, 0x37) } } function withdraw() public { uint256 funds; if (msg.sender == owner) funds = address(this).balance - totalReferrerFunds; else { funds = _referrerFunds[msg.sender]; totalReferrerFunds -= funds; _referrerFunds[msg.sender] = 0; } payable(msg.sender).transfer(funds); } function getBalance(address user) public view returns (uint256) { if (user == owner) return address(this).balance - totalReferrerFunds; else return _referrerFunds[user]; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; import "./IERC1155.sol"; import "./IERC1155Receiver.sol"; import "./extensions/IERC1155MetadataURI.sol"; import "../../utils/Address.sol"; import "../../utils/Context.sol"; import "../../utils/introspection/ERC165.sol"; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: address zero is not a valid owner"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not token owner or approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not token owner or approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `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 memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, to, ids, amounts, data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - 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[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * 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 _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Emits a {TransferSingle} event. * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `ids` and `amounts` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} /** * @dev Hook that is called after any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non-ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non-ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; import "../IERC1155.sol"; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @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; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @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; } }
// SPDX-License-Identifier: MIT // 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); }
//SPDX-License-Identifier: CC-BY-NC-ND pragma solidity ^0.8.0; interface IErcForgeInitiable { function init( address newOwner, string memory newName, string memory newSymbol, string memory newBaseTokenURI, string memory newContractUri, address royaltyReceiver, uint96 royaltyFee ) external; }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"NotOwner","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractCreated","type":"event"},{"inputs":[{"internalType":"uint256","name":"contractType","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"uri","type":"string"},{"internalType":"string","name":"contractUri","type":"string"},{"internalType":"address","name":"royaltyAddresses","type":"address"},{"internalType":"uint96","name":"royaltyFee","type":"uint96"},{"internalType":"address","name":"referrer","type":"address"}],"name":"createContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fullDiscountTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fullDiscountTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"hasReferrer","type":"bool"}],"name":"getFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_templateType","type":"uint256"}],"name":"getTemplateAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"referrerDiscount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"referrerReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"setFullDiscountToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isPaused","type":"bool"}],"name":"setIsPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_referrerDiscount","type":"uint256"}],"name":"setReferrerDiscount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_referrerReward","type":"uint256"}],"name":"setReferrerReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_templateType","type":"uint256"},{"internalType":"address","name":"_address","type":"address"}],"name":"setTemplateAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalReferrerFunds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600455600060055560006006556000600960006101000a81548160ff02191690831515021790555034801561003a57600080fd5b5033600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506119f78061008b6000396000f3fe6080604052600436106101145760003560e01c80635ec69615116100a0578063b187bd2611610064578063b187bd2614610377578063d4202448146103a2578063ddca3f43146103cb578063e4fa2616146103f6578063f8b2cb4f1461042657610114565b80635ec69615146102a657806369fe0e2d146102d157806383eca581146102fa57806398f55c7614610323578063a890aa491461034c57610114565b8063306939dd116100e7578063306939dd146101c15780633ccfd60b146101ec5780634e97ecfa14610203578063512b45ea1461022c57806353da311d1461026957610114565b80630763f34e1461011957806313af403514610144578063240976bf1461016d5780632db9fc7114610196575b600080fd5b34801561012557600080fd5b5061012e610463565b60405161013b919061113b565b60405180910390f35b34801561015057600080fd5b5061016b600480360381019061016691906111c8565b610469565b005b34801561017957600080fd5b50610194600480360381019061018f919061122d565b610534565b005b3480156101a257600080fd5b506101ab6105d8565b6040516101b8919061113b565b60405180910390f35b3480156101cd57600080fd5b506101d66105de565b6040516101e3919061113b565b60405180910390f35b3480156101f857600080fd5b506102016105e4565b005b34801561020f57600080fd5b5061022a60048036038101906102259190611286565b61073b565b005b34801561023857600080fd5b50610253600480360381019061024e919061122d565b610817565b604051610260919061113b565b60405180910390f35b34801561027557600080fd5b50610290600480360381019061028b91906112c6565b610948565b60405161029d9190611302565b60405180910390f35b3480156102b257600080fd5b506102bb610a0b565b6040516102c8919061113b565b60405180910390f35b3480156102dd57600080fd5b506102f860048036038101906102f391906112c6565b610a11565b005b34801561030657600080fd5b50610321600480360381019061031c91906112c6565b610aa2565b005b34801561032f57600080fd5b5061034a6004803603810190610345919061131d565b610b33565b005b34801561035857600080fd5b50610361610c06565b60405161036e9190611302565b60405180910390f35b34801561038357600080fd5b5061038c610c2c565b604051610399919061136c565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c491906112c6565b610c3f565b005b3480156103d757600080fd5b506103e0610cd0565b6040516103ed919061113b565b60405180910390f35b610410600480360381019061040b9190611511565b610cd6565b60405161041d9190611302565b60405180910390f35b34801561043257600080fd5b5061044d600480360381019061044891906111c8565b611004565b60405161045a919061113b565b60405180910390f35b60065481565b3373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146104f0576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b3373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146105bb576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b60055481565b60075481565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361065057600754476106499190611666565b90506106f1565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080600760008282546106a49190611666565b925050819055506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610737573d6000803e3d6000fd5b5050565b3373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146107c2576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060008084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000806004549050821561083657600554816108339190611666565b90505b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461093f576000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff1662fdd58e336002546040518363ffffffff1660e01b81526004016108f192919061169a565b602060405180830381865afa15801561090e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093291906116d8565b111561093d57600091505b505b80915050919050565b60003373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109d1576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60025481565b3373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a98576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060048190555050565b3373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b29576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060068190555050565b3373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bba576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806002819055505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900460ff1681565b3373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cc6576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060058190555050565b60045481565b6000600960009054906101000a900460ff1615610d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1f90611762565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000808b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc0906117ce565b60405180910390fd5b6000610e04600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610817565b905080341015610e49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e409061183a565b60405180910390fd5b6000610e866000808d815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166110b8565b905060008190508073ffffffffffffffffffffffffffffffffffffffff1663ff5a4b74338d8d8d8d8d8d6040518863ffffffff1660e01b8152600401610ed297969594939291906118e0565b600060405180830381600087803b158015610eec57600080fd5b505af1158015610f00573d6000803e3d6000fd5b505050507fcf78cf0d6f3d8371e1075c69c492ab4ec5d8cf23a1a239b6a51a1d00be7ca31282604051610f339190611302565b60405180910390a1600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015610f79575060008314155b15610ff257600654600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610fcf919061196b565b9250508190555060065460076000828254610fea919061196b565b925050819055505b81935050505098975050505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361107057600754476110699190611666565b90506110b3565b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b919050565b6000808260601b90506040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528160148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f092505050919050565b6000819050919050565b61113581611122565b82525050565b6000602082019050611150600083018461112c565b92915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006111958261116a565b9050919050565b6111a58161118a565b81146111b057600080fd5b50565b6000813590506111c28161119c565b92915050565b6000602082840312156111de576111dd611160565b5b60006111ec848285016111b3565b91505092915050565b60008115159050919050565b61120a816111f5565b811461121557600080fd5b50565b60008135905061122781611201565b92915050565b60006020828403121561124357611242611160565b5b600061125184828501611218565b91505092915050565b61126381611122565b811461126e57600080fd5b50565b6000813590506112808161125a565b92915050565b6000806040838503121561129d5761129c611160565b5b60006112ab85828601611271565b92505060206112bc858286016111b3565b9150509250929050565b6000602082840312156112dc576112db611160565b5b60006112ea84828501611271565b91505092915050565b6112fc8161118a565b82525050565b600060208201905061131760008301846112f3565b92915050565b6000806040838503121561133457611333611160565b5b6000611342858286016111b3565b925050602061135385828601611271565b9150509250929050565b611366816111f5565b82525050565b6000602082019050611381600083018461135d565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6113da82611391565b810181811067ffffffffffffffff821117156113f9576113f86113a2565b5b80604052505050565b600061140c611156565b905061141882826113d1565b919050565b600067ffffffffffffffff821115611438576114376113a2565b5b61144182611391565b9050602081019050919050565b82818337600083830152505050565b600061147061146b8461141d565b611402565b90508281526020810184848401111561148c5761148b61138c565b5b61149784828561144e565b509392505050565b600082601f8301126114b4576114b3611387565b5b81356114c484826020860161145d565b91505092915050565b60006bffffffffffffffffffffffff82169050919050565b6114ee816114cd565b81146114f957600080fd5b50565b60008135905061150b816114e5565b92915050565b600080600080600080600080610100898b03121561153257611531611160565b5b60006115408b828c01611271565b985050602089013567ffffffffffffffff81111561156157611560611165565b5b61156d8b828c0161149f565b975050604089013567ffffffffffffffff81111561158e5761158d611165565b5b61159a8b828c0161149f565b965050606089013567ffffffffffffffff8111156115bb576115ba611165565b5b6115c78b828c0161149f565b955050608089013567ffffffffffffffff8111156115e8576115e7611165565b5b6115f48b828c0161149f565b94505060a06116058b828c016111b3565b93505060c06116168b828c016114fc565b92505060e06116278b828c016111b3565b9150509295985092959890939650565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061167182611122565b915061167c83611122565b92508282101561168f5761168e611637565b5b828203905092915050565b60006040820190506116af60008301856112f3565b6116bc602083018461112c565b9392505050565b6000815190506116d28161125a565b92915050565b6000602082840312156116ee576116ed611160565b5b60006116fc848285016116c3565b91505092915050565b600082825260208201905092915050565b7f5061757365640000000000000000000000000000000000000000000000000000600082015250565b600061174c600683611705565b915061175782611716565b602082019050919050565b6000602082019050818103600083015261177b8161173f565b9050919050565b7f436f6e74726163742074797065206e6f7420646566696e656400000000000000600082015250565b60006117b8601983611705565b91506117c382611782565b602082019050919050565b600060208201905081810360008301526117e7816117ab565b9050919050565b7f4e6f7420656e6f7567682066756e647300000000000000000000000000000000600082015250565b6000611824601083611705565b915061182f826117ee565b602082019050919050565b6000602082019050818103600083015261185381611817565b9050919050565b600081519050919050565b60005b83811015611883578082015181840152602081019050611868565b83811115611892576000848401525b50505050565b60006118a38261185a565b6118ad8185611705565b93506118bd818560208601611865565b6118c681611391565b840191505092915050565b6118da816114cd565b82525050565b600060e0820190506118f5600083018a6112f3565b81810360208301526119078189611898565b9050818103604083015261191b8188611898565b9050818103606083015261192f8187611898565b905081810360808301526119438186611898565b905061195260a08301856112f3565b61195f60c08301846118d1565b98975050505050505050565b600061197682611122565b915061198183611122565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156119b6576119b5611637565b5b82820190509291505056fea2646970667358221220794c6d2b834e6bb515ef7a4030c75dd9c2a44d546fc1aaf3281fe1fa50ac5c2e64736f6c634300080d0033
Deployed Bytecode
0x6080604052600436106101145760003560e01c80635ec69615116100a0578063b187bd2611610064578063b187bd2614610377578063d4202448146103a2578063ddca3f43146103cb578063e4fa2616146103f6578063f8b2cb4f1461042657610114565b80635ec69615146102a657806369fe0e2d146102d157806383eca581146102fa57806398f55c7614610323578063a890aa491461034c57610114565b8063306939dd116100e7578063306939dd146101c15780633ccfd60b146101ec5780634e97ecfa14610203578063512b45ea1461022c57806353da311d1461026957610114565b80630763f34e1461011957806313af403514610144578063240976bf1461016d5780632db9fc7114610196575b600080fd5b34801561012557600080fd5b5061012e610463565b60405161013b919061113b565b60405180910390f35b34801561015057600080fd5b5061016b600480360381019061016691906111c8565b610469565b005b34801561017957600080fd5b50610194600480360381019061018f919061122d565b610534565b005b3480156101a257600080fd5b506101ab6105d8565b6040516101b8919061113b565b60405180910390f35b3480156101cd57600080fd5b506101d66105de565b6040516101e3919061113b565b60405180910390f35b3480156101f857600080fd5b506102016105e4565b005b34801561020f57600080fd5b5061022a60048036038101906102259190611286565b61073b565b005b34801561023857600080fd5b50610253600480360381019061024e919061122d565b610817565b604051610260919061113b565b60405180910390f35b34801561027557600080fd5b50610290600480360381019061028b91906112c6565b610948565b60405161029d9190611302565b60405180910390f35b3480156102b257600080fd5b506102bb610a0b565b6040516102c8919061113b565b60405180910390f35b3480156102dd57600080fd5b506102f860048036038101906102f391906112c6565b610a11565b005b34801561030657600080fd5b50610321600480360381019061031c91906112c6565b610aa2565b005b34801561032f57600080fd5b5061034a6004803603810190610345919061131d565b610b33565b005b34801561035857600080fd5b50610361610c06565b60405161036e9190611302565b60405180910390f35b34801561038357600080fd5b5061038c610c2c565b604051610399919061136c565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c491906112c6565b610c3f565b005b3480156103d757600080fd5b506103e0610cd0565b6040516103ed919061113b565b60405180910390f35b610410600480360381019061040b9190611511565b610cd6565b60405161041d9190611302565b60405180910390f35b34801561043257600080fd5b5061044d600480360381019061044891906111c8565b611004565b60405161045a919061113b565b60405180910390f35b60065481565b3373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146104f0576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b3373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146105bb576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b60055481565b60075481565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361065057600754476106499190611666565b90506106f1565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080600760008282546106a49190611666565b925050819055506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610737573d6000803e3d6000fd5b5050565b3373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146107c2576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060008084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000806004549050821561083657600554816108339190611666565b90505b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461093f576000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff1662fdd58e336002546040518363ffffffff1660e01b81526004016108f192919061169a565b602060405180830381865afa15801561090e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093291906116d8565b111561093d57600091505b505b80915050919050565b60003373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109d1576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60025481565b3373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a98576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060048190555050565b3373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b29576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060068190555050565b3373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bba576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806002819055505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900460ff1681565b3373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cc6576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060058190555050565b60045481565b6000600960009054906101000a900460ff1615610d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1f90611762565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000808b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc0906117ce565b60405180910390fd5b6000610e04600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610817565b905080341015610e49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e409061183a565b60405180910390fd5b6000610e866000808d815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166110b8565b905060008190508073ffffffffffffffffffffffffffffffffffffffff1663ff5a4b74338d8d8d8d8d8d6040518863ffffffff1660e01b8152600401610ed297969594939291906118e0565b600060405180830381600087803b158015610eec57600080fd5b505af1158015610f00573d6000803e3d6000fd5b505050507fcf78cf0d6f3d8371e1075c69c492ab4ec5d8cf23a1a239b6a51a1d00be7ca31282604051610f339190611302565b60405180910390a1600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015610f79575060008314155b15610ff257600654600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610fcf919061196b565b9250508190555060065460076000828254610fea919061196b565b925050819055505b81935050505098975050505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361107057600754476110699190611666565b90506110b3565b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b919050565b6000808260601b90506040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528160148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f092505050919050565b6000819050919050565b61113581611122565b82525050565b6000602082019050611150600083018461112c565b92915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006111958261116a565b9050919050565b6111a58161118a565b81146111b057600080fd5b50565b6000813590506111c28161119c565b92915050565b6000602082840312156111de576111dd611160565b5b60006111ec848285016111b3565b91505092915050565b60008115159050919050565b61120a816111f5565b811461121557600080fd5b50565b60008135905061122781611201565b92915050565b60006020828403121561124357611242611160565b5b600061125184828501611218565b91505092915050565b61126381611122565b811461126e57600080fd5b50565b6000813590506112808161125a565b92915050565b6000806040838503121561129d5761129c611160565b5b60006112ab85828601611271565b92505060206112bc858286016111b3565b9150509250929050565b6000602082840312156112dc576112db611160565b5b60006112ea84828501611271565b91505092915050565b6112fc8161118a565b82525050565b600060208201905061131760008301846112f3565b92915050565b6000806040838503121561133457611333611160565b5b6000611342858286016111b3565b925050602061135385828601611271565b9150509250929050565b611366816111f5565b82525050565b6000602082019050611381600083018461135d565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6113da82611391565b810181811067ffffffffffffffff821117156113f9576113f86113a2565b5b80604052505050565b600061140c611156565b905061141882826113d1565b919050565b600067ffffffffffffffff821115611438576114376113a2565b5b61144182611391565b9050602081019050919050565b82818337600083830152505050565b600061147061146b8461141d565b611402565b90508281526020810184848401111561148c5761148b61138c565b5b61149784828561144e565b509392505050565b600082601f8301126114b4576114b3611387565b5b81356114c484826020860161145d565b91505092915050565b60006bffffffffffffffffffffffff82169050919050565b6114ee816114cd565b81146114f957600080fd5b50565b60008135905061150b816114e5565b92915050565b600080600080600080600080610100898b03121561153257611531611160565b5b60006115408b828c01611271565b985050602089013567ffffffffffffffff81111561156157611560611165565b5b61156d8b828c0161149f565b975050604089013567ffffffffffffffff81111561158e5761158d611165565b5b61159a8b828c0161149f565b965050606089013567ffffffffffffffff8111156115bb576115ba611165565b5b6115c78b828c0161149f565b955050608089013567ffffffffffffffff8111156115e8576115e7611165565b5b6115f48b828c0161149f565b94505060a06116058b828c016111b3565b93505060c06116168b828c016114fc565b92505060e06116278b828c016111b3565b9150509295985092959890939650565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061167182611122565b915061167c83611122565b92508282101561168f5761168e611637565b5b828203905092915050565b60006040820190506116af60008301856112f3565b6116bc602083018461112c565b9392505050565b6000815190506116d28161125a565b92915050565b6000602082840312156116ee576116ed611160565b5b60006116fc848285016116c3565b91505092915050565b600082825260208201905092915050565b7f5061757365640000000000000000000000000000000000000000000000000000600082015250565b600061174c600683611705565b915061175782611716565b602082019050919050565b6000602082019050818103600083015261177b8161173f565b9050919050565b7f436f6e74726163742074797065206e6f7420646566696e656400000000000000600082015250565b60006117b8601983611705565b91506117c382611782565b602082019050919050565b600060208201905081810360008301526117e7816117ab565b9050919050565b7f4e6f7420656e6f7567682066756e647300000000000000000000000000000000600082015250565b6000611824601083611705565b915061182f826117ee565b602082019050919050565b6000602082019050818103600083015261185381611817565b9050919050565b600081519050919050565b60005b83811015611883578082015181840152602081019050611868565b83811115611892576000848401525b50505050565b60006118a38261185a565b6118ad8185611705565b93506118bd818560208601611865565b6118c681611391565b840191505092915050565b6118da816114cd565b82525050565b600060e0820190506118f5600083018a6112f3565b81810360208301526119078189611898565b9050818103604083015261191b8188611898565b9050818103606083015261192f8187611898565b905081810360808301526119438186611898565b905061195260a08301856112f3565b61195f60c08301846118d1565b98975050505050505050565b600061197682611122565b915061198183611122565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156119b6576119b5611637565b5b82820190509291505056fea2646970667358221220794c6d2b834e6bb515ef7a4030c75dd9c2a44d546fc1aaf3281fe1fa50ac5c2e64736f6c634300080d0033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.