Source Code
Latest 25 from a total of 285 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Buy Single | 14264214 | 1476 days ago | IN | 0.22 ETH | 0.0014902 | ||||
| Buy Single | 14264058 | 1476 days ago | IN | 0.22 ETH | 0.01363455 | ||||
| Buy Single | 14263989 | 1476 days ago | IN | 0.22 ETH | 0.01853755 | ||||
| Buy Single | 14263981 | 1477 days ago | IN | 0.22 ETH | 0.01615694 | ||||
| Withdraw | 14263963 | 1477 days ago | IN | 0 ETH | 0.00570628 | ||||
| Buy Single | 14263939 | 1477 days ago | IN | 0.22 ETH | 0.02258113 | ||||
| Buy Single | 14263935 | 1477 days ago | IN | 0.22 ETH | 0.02004865 | ||||
| Buy Single | 14263918 | 1477 days ago | IN | 0.22 ETH | 0.01988065 | ||||
| Buy Single | 14263911 | 1477 days ago | IN | 0.22 ETH | 0.01931116 | ||||
| Buy | 14263891 | 1477 days ago | IN | 0.44 ETH | 0.03818218 | ||||
| Buy Single | 14263880 | 1477 days ago | IN | 0.22 ETH | 0.01817416 | ||||
| Buy Single | 14263825 | 1477 days ago | IN | 0.22 ETH | 0.02025623 | ||||
| Buy Single | 14263753 | 1477 days ago | IN | 0.22 ETH | 0.02094119 | ||||
| Buy Single | 14263644 | 1477 days ago | IN | 0.22 ETH | 0.02261471 | ||||
| Buy Single | 14263641 | 1477 days ago | IN | 0.22 ETH | 0.02132855 | ||||
| Buy Single | 14263613 | 1477 days ago | IN | 0.22 ETH | 0.0327111 | ||||
| Buy Single | 14263551 | 1477 days ago | IN | 0.22 ETH | 0.04728264 | ||||
| Buy Single | 14263358 | 1477 days ago | IN | 0.22 ETH | 0.01371571 | ||||
| Buy Single | 14263269 | 1477 days ago | IN | 0.22 ETH | 0.01506973 | ||||
| Buy Single | 14263178 | 1477 days ago | IN | 0.22 ETH | 0.01589515 | ||||
| Buy Single | 14263154 | 1477 days ago | IN | 0.22 ETH | 0.0203031 | ||||
| Buy Single | 14263147 | 1477 days ago | IN | 0.22 ETH | 0.01583347 | ||||
| Buy Single | 14263112 | 1477 days ago | IN | 0.22 ETH | 0.01190946 | ||||
| Buy Single | 14263090 | 1477 days ago | IN | 0.22 ETH | 0.01209395 | ||||
| Buy Single | 14263049 | 1477 days ago | IN | 0.22 ETH | 0.0123841 |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
MintableSale
Compiler Version
v0.8.12+commit.f00d7308
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity =0.8.12;
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/interfaces/IERC165.sol";
import "@openzeppelin/contracts/interfaces/IERC721.sol";
import "./interfaces/IMintableERC721.sol";
/**
* @title Mintable Sale
*
* @notice Mintable Sale sales fixed amount of NFTs (tokens) for a fixed price in a fixed period of time;
* it can be used in a 10k sale campaign and the smart contract is generic and
* can sell any type of mintable NFT (see MintableERC721 interface)
*
* @dev Technically, all the "fixed" parameters can be changed on the go after smart contract is deployed
* and operational, but this ability is reserved for quick fix-like adjustments, and to provide
* an ability to restart and run a similar sale after the previous one ends
*
* @dev When buying a token from this smart contract, next token is minted to the recipient
*
* @dev Supports functionality to limit amount of tokens that can be minted to each address
*
* @dev Deployment and setup:
* 1. Deploy smart contract, specify smart contract address during the deployment:
* - Mintable ER721 deployed instance address
* 2. Execute `initialize` function and set up the sale parameters;
* sale is not active until it's initialized
*
*/
contract MintableSale is Ownable {
/**
* @dev Next token ID to mint;
* initially this is the first "free" ID which can be minted;
* at any point in time this should point to a free, mintable ID
* for the token
*
* @dev `nextId` cannot be zero, we do not ever mint NFTs with zero IDs
*/
uint256 public nextId = 1;
/**
* @dev Last token ID to mint;
* once `nextId` exceeds `finalId` the sale pauses
*/
uint256 public finalId;
// ----- SLOT.1 (224/256)
/**
* @notice Price of a single item (token) minted
* When buying several tokens at once the price accumulates accordingly, with no discount
*
* @dev Maximum item price is ~18.44 ETH
*/
uint64 public itemPrice;
/**
* @notice Sale start unix timestamp; the sale is active after the start (inclusive)
*/
uint32 public saleStart;
/**
* @notice Sale end unix timestamp; the sale is active before the end (exclusive)
*/
uint32 public saleEnd;
/**
* @notice Once set, limits the amount of tokens one can buy in a single transaction;
* When unset (zero) the amount of tokens is limited only by block size and
* amount of tokens left for sale
*/
uint32 public batchLimit;
/**
* @notice Once set, limits the amount of tokens one address can buy for the duration of the sale;
* When unset (zero) the amount of tokens is limited only by the amount of tokens left for sale
*/
uint32 public mintLimit;
/**
* @notice Counter of the tokens sold (minted) by this sale smart contract
*/
uint32 public soldCounter;
// ----- NON-SLOTTED
/**
* @dev Mintable ERC721 contract address to mint
*/
address public immutable tokenContract;
// ----- NON-SLOTTED
/**
* @dev Developer fee
*/
uint256 public immutable developerFee;
// ----- NON-SLOTTED
/**
* @dev Address of developer to receive withdraw fees
*/
address public immutable developerAddress;
// ----- NON-SLOTTED
/**
* @dev Number of mints performed by address
*/
mapping(address => uint32) mints;
/**
* @dev Smart contract unique identifier, a random number
*
* @dev Should be regenerated each time smart contact source code is changed
* and changes smart contract itself is to be redeployed
*
* @dev Generated using https://www.random.org/bytes/
*/
uint256 public constant UID = 0x3f38351a8d513731422d6b231445dccf6ea9ae952d15c73513da3b92754e778f;
/**
* @dev Fired in initialize()
*
* @param _by an address which executed the initialization
* @param _itemPrice price of one token created
* @param _nextId next ID of the token to mint
* @param _finalId final ID of the token to mint
* @param _saleStart start of the sale, unix timestamp
* @param _saleEnd end of the sale, unix timestamp
* @param _batchLimit how many tokens is allowed to buy in a single transaction
*/
event Initialized(
address indexed _by,
uint64 _itemPrice,
uint256 _nextId,
uint256 _finalId,
uint32 _saleStart,
uint32 _saleEnd,
uint32 _batchLimit,
uint32 _limit
);
/**
* @dev Fired in buy(), buyTo(), buySingle(), and buySingleTo()
*
* @param _by an address which executed and payed the transaction, probably a buyer
* @param _to an address which received token(s) minted
* @param _amount number of tokens minted
* @param _value ETH amount charged
*/
event Bought(address indexed _by, address indexed _to, uint32 _amount, uint256 _value);
/**
* @dev Fired in withdraw() and withdrawTo()
*
* @param _by an address which executed the withdrawal
* @param _to an address which received the ETH withdrawn
* @param _value ETH amount withdrawn
*/
event Withdrawn(address indexed _by, address indexed _to, uint256 _value);
/**
* @dev Creates/deploys MintableSale and binds it to Mintable ERC721
* smart contract on construction
*
* @param _tokenContract deployed Mintable ERC721 smart contract; sale will mint ERC721
* tokens of that type to the recipient
*/
constructor(address _tokenContract, uint256 _developerFee, address _developerAddress) {
// verify the input is set
require(_tokenContract != address(0), "token contract is not set");
// verify that developer address is correct
require(_developerAddress != address(0), "developer address is not set");
// verify input is valid smart contract of the expected interfaces
require(
IERC165(_tokenContract).supportsInterface(type(IMintableERC721).interfaceId)
&& IERC165(_tokenContract).supportsInterface(type(IMintableERC721).interfaceId),
"unexpected token contract type"
);
// assign the addresses
tokenContract = _tokenContract;
// assign the developer fee
developerFee = _developerFee;
// assign the developer address
developerAddress = _developerAddress;
}
/**
* @notice Number of tokens left on sale
*
* @dev Doesn't take into account if sale is active or not,
* if `nextId - finalId < 1` returns zero
*
* @return number of tokens left on sale
*/
function itemsOnSale() public view returns(uint256) {
// calculate items left on sale, taking into account that
// finalId is on sale (inclusive bound)
return finalId >= nextId? finalId + 1 - nextId: 0;
}
/**
* @notice Number of tokens available on sale
*
* @dev Takes into account if sale is active or not, doesn't throw,
* returns zero if sale is inactive
*
* @return number of tokens available on sale
*/
function itemsAvailable() public view returns(uint256) {
// delegate to itemsOnSale() if sale is active, return zero otherwise
return isActive()? itemsOnSale(): 0;
}
/**
* @notice Active sale is an operational sale capable of minting and selling tokens
*
* @dev The sale is active when all the requirements below are met:
* 1. Price is set (`itemPrice` is not zero)
* 2. `finalId` is not reached (`nextId <= finalId`)
* 3. current timestamp is between `saleStart` (inclusive) and `saleEnd` (exclusive)
*
* @dev Function is marked as virtual to be overridden in the helper test smart contract (mock)
* in order to test how it affects the sale process
*
* @return true if sale is active (operational) and can sell tokens, false otherwise
*/
function isActive() public view virtual returns(bool) {
// evaluate sale state based on the internal state variables and return
return itemPrice > 0 && nextId <= finalId && saleStart <= block.timestamp && saleEnd > block.timestamp;
}
/**
* @dev Restricted access function to set up sale parameters, all at once,
* or any subset of them
*
* @dev To skip parameter initialization, set it to `-1`,
* that is a maximum value for unsigned integer of the corresponding type;
* `_aliSource` and `_aliValue` must both be either set or skipped
*
* @dev Example: following initialization will update only _itemPrice and _batchLimit,
* leaving the rest of the fields unchanged
* initialize(
* 100000000000000000,
* 0xFFFFFFFF,
* 0xFFFFFFFF,
* 0xFFFFFFFF,
* 0xFFFFFFFF,
* 10,
* 0xFFFFFFFF
* )
*
* @dev Requires next ID to be greater than zero (strict): `_nextId > 0`
*
* @dev Requires transaction sender to have `ROLE_SALE_MANAGER` role
*
* @param _itemPrice price of one token created;
* setting the price to zero deactivates the sale
* @param _nextId next ID of the token to mint, will be increased
* in smart contract storage after every successful buy
* @param _finalId final ID of the token to mint; sale is capable of producing
* `_finalId - _nextId + 1` tokens
* @param _saleStart start of the sale, unix timestamp
* @param _saleEnd end of the sale, unix timestamp; sale is active only
* when current time is within _saleStart (inclusive) and _saleEnd (exclusive)
* @param _batchLimit how many tokens is allowed to buy in a single transaction,
* set to zero to disable the limit
* @param _mintLimit how many tokens is allowed to buy for the duration of the sale,
* set to zero to disable the limit
*/
function initialize(
uint64 _itemPrice, // <<<--- keep type in sync with the body type(uint64).max !!!
uint256 _nextId, // <<<--- keep type in sync with the body type(uint256).max !!!
uint256 _finalId, // <<<--- keep type in sync with the body type(uint256).max !!!
uint32 _saleStart, // <<<--- keep type in sync with the body type(uint32).max !!!
uint32 _saleEnd, // <<<--- keep type in sync with the body type(uint32).max !!!
uint32 _batchLimit, // <<<--- keep type in sync with the body type(uint32).max !!!
uint32 _mintLimit // <<<--- keep type in sync with the body type(uint32).max !!!
) public onlyOwner {
// verify the inputs
require(_nextId > 0, "zero nextId");
// no need to verify extra parameters - "incorrect" values will deactivate the sale
// initialize contract state based on the values supplied
// take into account our convention that value `-1` means "do not set"
// 0xFFFFFFFFFFFFFFFF, 64 bits
if(_itemPrice != type(uint64).max) {
itemPrice = _itemPrice;
}
// 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, 256 bits
if(_nextId != type(uint256).max) {
nextId = _nextId;
}
// 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, 256 bits
if(_finalId != type(uint256).max) {
finalId = _finalId;
}
// 0xFFFFFFFF, 32 bits
if(_saleStart != type(uint32).max) {
saleStart = _saleStart;
}
// 0xFFFFFFFF, 32 bits
if(_saleEnd != type(uint32).max) {
saleEnd = _saleEnd;
}
// 0xFFFFFFFF, 32 bits
if(_batchLimit != type(uint32).max) {
batchLimit = _batchLimit;
}
// 0xFFFFFFFF, 32 bits
if(_mintLimit != type(uint32).max) {
mintLimit = _mintLimit;
}
// emit an event - read values from the storage since not all of them might be set
emit Initialized(
msg.sender,
itemPrice,
nextId,
finalId,
saleStart,
saleEnd,
batchLimit,
mintLimit
);
}
/**
* @notice Buys several (at least two) tokens in a batch.
* Accepts ETH as payment and mints a token
*
* @param _amount amount of tokens to create, two or more
*/
function buy(uint32 _amount) public payable {
// delegate to `buyTo` with the transaction sender set to be a recipient
buyTo(msg.sender, _amount);
}
/**
* @notice Buys several (at least two) tokens in a batch to an address specified.
* Accepts ETH as payment and mints tokens
*
* @param _to address to mint tokens to
* @param _amount amount of tokens to create, two or more
*/
function buyTo(address _to, uint32 _amount) public payable {
// verify the inputs
require(_to != address(0), "recipient not set");
require(_amount > 1 && (batchLimit == 0 || _amount <= batchLimit), "incorrect amount");
// verify mint limit
if(mintLimit != 0) {
require(mints[msg.sender] + _amount <= mintLimit, "mint limit reached");
}
// verify there is enough items available to buy the amount
// verifies sale is in active state under the hood
require(itemsAvailable() >= _amount, "inactive sale or not enough items available");
// calculate the total price required and validate the transaction value
uint256 totalPrice = uint256(itemPrice) * _amount;
require(msg.value >= totalPrice, "not enough funds");
// mint token to to the recipient
IMintableERC721(tokenContract).mintBatch(_to, nextId, _amount);
// increment `nextId`
nextId += _amount;
// increment `soldCounter`
soldCounter += _amount;
// increment sender mints
mints[msg.sender] += _amount;
// if ETH amount supplied exceeds the price
if(msg.value > totalPrice) {
// send excess amount back to sender
payable(msg.sender).transfer(msg.value - totalPrice);
}
// emit en event
emit Bought(msg.sender, _to, _amount, totalPrice);
}
/**
* @notice Buys single token.
* Accepts ETH as payment and mints a token
*/
function buySingle() public payable {
// delegate to `buySingleTo` with the transaction sender set to be a recipient
buySingleTo(msg.sender);
}
/**
* @notice Buys single token to an address specified.
* Accepts ETH as payment and mints a token
*
* @param _to address to mint token to
*/
function buySingleTo(address _to) public payable {
// verify the inputs and transaction value
require(_to != address(0), "recipient not set");
require(msg.value >= itemPrice, "not enough funds");
// verify mint limit
if(mintLimit != 0) {
require(mints[msg.sender] + 1 <= mintLimit, "mint limit reached");
}
// verify sale is in active state
require(isActive(), "inactive sale");
// mint token to the recipient
IMintableERC721(tokenContract).mint(_to, nextId);
// increment `nextId`
nextId++;
// increment `soldCounter`
soldCounter++;
// increment sender mints
mints[msg.sender]++;
// if ETH amount supplied exceeds the price
if(msg.value > itemPrice) {
// send excess amount back to sender
payable(msg.sender).transfer(msg.value - itemPrice);
}
// emit en event
emit Bought(msg.sender, _to, 1, itemPrice);
}
/**
* @dev Restricted access function to withdraw ETH on the contract balance,
* sends ETH back to transaction sender
*/
function withdraw() public {
// delegate to `withdrawTo`
withdrawTo(msg.sender);
}
/**
* @dev Restricted access function to withdraw ETH on the contract balance,
* sends ETH to the address specified
*
* @param _to an address to send ETH to
*/
function withdrawTo(address _to) public onlyOwner {
// verify withdrawal address is set
require(_to != address(0), "address not set");
// ETH value to send
uint256 _value = address(this).balance;
uint256 computedDevFee = _value * developerFee / 100;
_value -= computedDevFee;
// verify sale balance is positive (non-zero)
require(_value > 0, "zero balance");
// send the entire balance to the transaction sender
payable(_to).transfer(_value);
payable(developerAddress).transfer(computedDevFee);
// emit en event
emit Withdrawn(msg.sender, _to, _value);
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_setOwner(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_setOwner(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_setOwner(newOwner);
}
function _setOwner(address newOwner) private {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../utils/introspection/IERC165.sol";
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../token/ERC721/IERC721.sol";
// SPDX-License-Identifier: MIT
pragma solidity 0.8.12;
interface IMintableERC721 {
/**
* @notice Checks if specified token exists
*
* @dev Returns whether the specified token ID has an ownership
* information associated with it
*
* @param _tokenId ID of the token to query existence for
* @return whether the token exists (true - exists, false - doesn't exist)
*/
function exists(uint256 _tokenId) external view returns(bool);
/**
* @dev Creates new token with token ID specified
* and assigns an ownership `_to` for this token
*
* @dev Unsafe: doesn't execute `onERC721Received` on the receiver.
* Prefer the use of `saveMint` instead of `mint`.
*
* @dev Should have a restricted access handled by the implementation
*
* @param _to an address to mint token to
* @param _tokenId ID of the token to mint
*/
function mint(address _to, uint256 _tokenId) external;
/**
* @dev Creates new tokens starting with token ID specified
* and assigns an ownership `_to` for these tokens
*
* @dev Token IDs to be minted: [_tokenId, _tokenId + n)
*
* @dev n must be greater or equal 2: `n > 1`
*
* @dev Unsafe: doesn't execute `onERC721Received` on the receiver.
* Prefer the use of `saveMintBatch` instead of `mintBatch`.
*
* @dev Should have a restricted access handled by the implementation
*
* @param _to an address to mint tokens to
* @param _tokenId ID of the first token to mint
* @param n how many tokens to mint, sequentially increasing the _tokenId
*/
function mintBatch(address _to, uint256 _tokenId, uint256 n) external;
/**
* @dev Creates new token with token ID specified
* and assigns an ownership `_to` for this token
*
* @dev Checks if `_to` is a smart contract (code size > 0). If so, it calls
* `onERC721Received` on `_to` and throws if the return value is not
* `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`.
*
* @dev Should have a restricted access handled by the implementation
*
* @param _to an address to mint token to
* @param _tokenId ID of the token to mint
*/
function safeMint(address _to, uint256 _tokenId) external;
/**
* @dev Creates new token with token ID specified
* and assigns an ownership `_to` for this token
*
* @dev Checks if `_to` is a smart contract (code size > 0). If so, it calls
* `onERC721Received` on `_to` and throws if the return value is not
* `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`.
*
* @dev Should have a restricted access handled by the implementation
*
* @param _to an address to mint token to
* @param _tokenId ID of the token to mint
* @param _data additional data with no specified format, sent in call to `_to`
*/
function safeMint(address _to, uint256 _tokenId, bytes memory _data) external;
/**
* @dev Creates new tokens starting with token ID specified
* and assigns an ownership `_to` for these tokens
*
* @dev Token IDs to be minted: [_tokenId, _tokenId + n)
*
* @dev n must be greater or equal 2: `n > 1`
*
* @dev Checks if `_to` is a smart contract (code size > 0). If so, it calls
* `onERC721Received` on `_to` and throws if the return value is not
* `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`.
*
* @dev Should have a restricted access handled by the implementation
*
* @param _to an address to mint token to
* @param _tokenId ID of the token to mint
* @param n how many tokens to mint, sequentially increasing the _tokenId
*/
function safeMintBatch(address _to, uint256 _tokenId, uint256 n) external;
/**
* @dev Creates new tokens starting with token ID specified
* and assigns an ownership `_to` for these tokens
*
* @dev Token IDs to be minted: [_tokenId, _tokenId + n)
*
* @dev n must be greater or equal 2: `n > 1`
*
* @dev Checks if `_to` is a smart contract (code size > 0). If so, it calls
* `onERC721Received` on `_to` and throws if the return value is not
* `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`.
*
* @dev Should have a restricted access handled by the implementation
*
* @param _to an address to mint token to
* @param _tokenId ID of the token to mint
* @param n how many tokens to mint, sequentially increasing the _tokenId
* @param _data additional data with no specified format, sent in call to `_to`
*/
function safeMintBatch(address _to, uint256 _tokenId, uint256 n, bytes memory _data) external;
}// SPDX-License-Identifier: MIT
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
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: MIT
pragma solidity ^0.8.0;
import "../../utils/introspection/IERC165.sol";
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
}{
"optimizer": {
"enabled": true,
"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":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_developerFee","type":"uint256"},{"internalType":"address","name":"_developerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_by","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint32","name":"_amount","type":"uint32"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Bought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_by","type":"address"},{"indexed":false,"internalType":"uint64","name":"_itemPrice","type":"uint64"},{"indexed":false,"internalType":"uint256","name":"_nextId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_finalId","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"_saleStart","type":"uint32"},{"indexed":false,"internalType":"uint32","name":"_saleEnd","type":"uint32"},{"indexed":false,"internalType":"uint32","name":"_batchLimit","type":"uint32"},{"indexed":false,"internalType":"uint32","name":"_limit","type":"uint32"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_by","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[],"name":"UID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"batchLimit","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_amount","type":"uint32"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"buySingle","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"buySingleTo","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint32","name":"_amount","type":"uint32"}],"name":"buyTo","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"developerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"developerFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finalId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint64","name":"_itemPrice","type":"uint64"},{"internalType":"uint256","name":"_nextId","type":"uint256"},{"internalType":"uint256","name":"_finalId","type":"uint256"},{"internalType":"uint32","name":"_saleStart","type":"uint32"},{"internalType":"uint32","name":"_saleEnd","type":"uint32"},{"internalType":"uint32","name":"_batchLimit","type":"uint32"},{"internalType":"uint32","name":"_mintLimit","type":"uint32"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"itemPrice","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"itemsAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"itemsOnSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintLimit","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleEnd","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleStart","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"soldCounter","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawTo","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60e0604052600180553480156200001557600080fd5b5060405162001799380380620017998339810160408190526200003891620002bc565b62000043336200024f565b6001600160a01b0383166200009f5760405162461bcd60e51b815260206004820152601960248201527f746f6b656e20636f6e7472616374206973206e6f74207365740000000000000060448201526064015b60405180910390fd5b6001600160a01b038116620000f75760405162461bcd60e51b815260206004820152601c60248201527f646576656c6f7065722061646472657373206973206e6f742073657400000000604482015260640162000096565b6040516301ffc9a760e01b8152633197b5d160e21b60048201526001600160a01b038416906301ffc9a790602401602060405180830381865afa15801562000143573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001699190620002fd565b8015620001e357506040516301ffc9a760e01b8152633197b5d160e21b60048201526001600160a01b038416906301ffc9a790602401602060405180830381865afa158015620001bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e39190620002fd565b620002315760405162461bcd60e51b815260206004820152601e60248201527f756e657870656374656420746f6b656e20636f6e747261637420747970650000604482015260640162000096565b6001600160a01b0392831660805260a0919091521660c05262000328565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620002b757600080fd5b919050565b600080600060608486031215620002d257600080fd5b620002dd846200029f565b925060208401519150620002f4604085016200029f565b90509250925092565b6000602082840312156200031057600080fd5b815180151581146200032157600080fd5b9392505050565b60805160a05160c051611425620003746000396000818161041e0152610aa50152600081816101a701526109e5015260008181610254015281816107a00152610ce901526114256000f3fe6080604052600436106101665760003560e01c806388e515f4116100d1578063c10b93581161008a578063dac6db1c11610064578063dac6db1c14610440578063e2ae99f91461047a578063f2fde38b1461048f578063fcfc59f2146104af57600080fd5b8063c10b9358146103c4578063c1161dd8146103e8578063caccd7f71461040c57600080fd5b806388e515f4146103205780638a18e5f2146103355780638da5cb5b1461034b5780639691f95b14610369578063996517cf1461037c578063ab0bcc41146103a057600080fd5b806355a373d61161012357806355a373d6146102425780635cc99e351461028e57806361b8ce8c146102c2578063715018a6146102d857806372b0d90c146102ed5780637db5bd521461030d57600080fd5b806322f3e2d41461016b57806331c2ad531461019557806333820d59146101d75780633bcd3dbe146101e15780633ccfd60b146101f4578063474740b114610209575b600080fd5b34801561017757600080fd5b506101806104cf565b60405190151581526020015b60405180910390f35b3480156101a157600080fd5b506101c97f000000000000000000000000000000000000000000000000000000000000000081565b60405190815260200161018c565b6101df61052d565b005b6101df6101ef3660046111d6565b610538565b34801561020057600080fd5b506101df61092c565b34801561021557600080fd5b5060035461022d90600160801b900463ffffffff1681565b60405163ffffffff909116815260200161018c565b34801561024e57600080fd5b506102767f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161018c565b34801561029a57600080fd5b506101c97f3f38351a8d513731422d6b231445dccf6ea9ae952d15c73513da3b92754e778f81565b3480156102ce57600080fd5b506101c960015481565b3480156102e457600080fd5b506101df610935565b3480156102f957600080fd5b506101df610308366004611209565b610969565b6101df61031b36600461122b565b610b2c565b34801561032c57600080fd5b506101c9610b39565b34801561034157600080fd5b506101c960025481565b34801561035757600080fd5b506000546001600160a01b0316610276565b6101df610377366004611209565b610b55565b34801561038857600080fd5b5060035461022d90600160a01b900463ffffffff1681565b3480156103ac57600080fd5b5060035461022d90600160401b900463ffffffff1681565b3480156103d057600080fd5b5060035461022d90600160601b900463ffffffff1681565b3480156103f457600080fd5b5060035461022d90600160c01b900463ffffffff1681565b34801561041857600080fd5b506102767f000000000000000000000000000000000000000000000000000000000000000081565b34801561044c57600080fd5b506003546104619067ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161018c565b34801561048657600080fd5b506101c9610e88565b34801561049b57600080fd5b506101df6104aa366004611209565b610eb8565b3480156104bb57600080fd5b506101df6104ca366004611246565b610f50565b60035460009067ffffffffffffffff16158015906104f1575060025460015411155b801561050d575060035442600160401b90910463ffffffff1611155b8015610528575060035442600160601b90910463ffffffff16115b905090565b61053633610b55565b565b6001600160a01b0382166105875760405162461bcd60e51b81526020600482015260116024820152701c9958da5c1a595b9d081b9bdd081cd95d607a1b60448201526064015b60405180910390fd5b60018163ffffffff161180156105c75750600354600160801b900463ffffffff1615806105c7575060035463ffffffff600160801b909104811690821611155b6106065760405162461bcd60e51b815260206004820152601060248201526f1a5b98dbdc9c9958dd08185b5bdd5b9d60821b604482015260640161057e565b600354600160a01b900463ffffffff1615610693576003543360009081526004602052604090205463ffffffff600160a01b90920482169161064a918491166112e3565b63ffffffff1611156106935760405162461bcd60e51b81526020600482015260126024820152711b5a5b9d081b1a5b5a5d081c995858da195960721b604482015260640161057e565b8063ffffffff166106a2610b39565b10156107045760405162461bcd60e51b815260206004820152602b60248201527f696e6163746976652073616c65206f72206e6f7420656e6f756768206974656d60448201526a7320617661696c61626c6560a81b606482015260840161057e565b6003546000906107259063ffffffff84169067ffffffffffffffff1661130b565b90508034101561076a5760405162461bcd60e51b815260206004820152601060248201526f6e6f7420656e6f7567682066756e647360801b604482015260640161057e565b600154604051631740d57560e11b81526001600160a01b038581166004830152602482019290925263ffffffff841660448201527f000000000000000000000000000000000000000000000000000000000000000090911690632e81aaea90606401600060405180830381600087803b1580156107e657600080fd5b505af11580156107fa573d6000803e3d6000fd5b505050508163ffffffff1660016000828254610816919061132a565b90915550506003805483919060189061083d908490600160c01b900463ffffffff166112e3565b82546101009290920a63ffffffff8181021990931691831602179091553360009081526004602052604081208054869450909261087c918591166112e3565b92506101000a81548163ffffffff021916908363ffffffff160217905550803411156108da57336108fc6108b08334611342565b6040518115909202916000818181858888f193505050501580156108d8573d6000803e3d6000fd5b505b6040805163ffffffff84168152602081018390526001600160a01b0385169133917f79a83e4a5caa2c1d013811413f9cd03c6db771c529534d8a8e41075f3fa70d1f91015b60405180910390a3505050565b61053633610969565b6000546001600160a01b0316331461095f5760405162461bcd60e51b815260040161057e90611359565b6105366000611156565b6000546001600160a01b031633146109935760405162461bcd60e51b815260040161057e90611359565b6001600160a01b0381166109db5760405162461bcd60e51b815260206004820152600f60248201526e1859191c995cdcc81b9bdd081cd95d608a1b604482015260640161057e565b4760006064610a0a7f00000000000000000000000000000000000000000000000000000000000000008461130b565b610a14919061138e565b9050610a208183611342565b915060008211610a615760405162461bcd60e51b815260206004820152600c60248201526b7a65726f2062616c616e636560a01b604482015260640161057e565b6040516001600160a01b0384169083156108fc029084906000818181858888f19350505050158015610a97573d6000803e3d6000fd5b506040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169082156108fc029083906000818181858888f19350505050158015610aee573d6000803e3d6000fd5b506040518281526001600160a01b0384169033907fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb9060200161091f565b610b363382610538565b50565b6000610b436104cf565b610b4d5750600090565b610528610e88565b6001600160a01b038116610b9f5760405162461bcd60e51b81526020600482015260116024820152701c9958da5c1a595b9d081b9bdd081cd95d607a1b604482015260640161057e565b60035467ffffffffffffffff16341015610bee5760405162461bcd60e51b815260206004820152601060248201526f6e6f7420656e6f7567682066756e647360801b604482015260640161057e565b600354600160a01b900463ffffffff1615610c7b576003543360009081526004602052604090205463ffffffff600160a01b909204821691610c32911660016112e3565b63ffffffff161115610c7b5760405162461bcd60e51b81526020600482015260126024820152711b5a5b9d081b1a5b5a5d081c995858da195960721b604482015260640161057e565b610c836104cf565b610cbf5760405162461bcd60e51b815260206004820152600d60248201526c696e6163746976652073616c6560981b604482015260640161057e565b6001546040516340c10f1960e01b81526001600160a01b03838116600483015260248201929092527f0000000000000000000000000000000000000000000000000000000000000000909116906340c10f1990604401600060405180830381600087803b158015610d2f57600080fd5b505af1158015610d43573d6000803e3d6000fd5b505060018054925090506000610d58836113b0565b909155505060038054600160c01b900463ffffffff16906018610d7a836113cb565b82546101009290920a63ffffffff81810219909316918316021790915533600090815260046020526040812080549092169250610db6836113cb565b825463ffffffff9182166101009390930a92830291909202199091161790555060035467ffffffffffffffff16341115610e315760035433906108fc90610e079067ffffffffffffffff1634611342565b6040518115909202916000818181858888f19350505050158015610e2f573d6000803e3d6000fd5b505b600354604080516001815267ffffffffffffffff90921660208301526001600160a01b0383169133917f79a83e4a5caa2c1d013811413f9cd03c6db771c529534d8a8e41075f3fa70d1f910160405180910390a350565b60006001546002541015610e9c5750600090565b6001546002546001610eae919061132a565b6105289190611342565b6000546001600160a01b03163314610ee25760405162461bcd60e51b815260040161057e90611359565b6001600160a01b038116610f475760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161057e565b610b3681611156565b6000546001600160a01b03163314610f7a5760405162461bcd60e51b815260040161057e90611359565b60008611610fb85760405162461bcd60e51b815260206004820152600b60248201526a1e995c9bc81b995e1d125960aa1b604482015260640161057e565b67ffffffffffffffff87811614610fe7576003805467ffffffffffffffff191667ffffffffffffffff89161790555b6000198614610ff65760018690555b60001985146110055760028590555b63ffffffff8481161461103657600380546bffffffff00000000000000001916600160401b63ffffffff8716021790555b63ffffffff83811614611062576003805463ffffffff60601b1916600160601b63ffffffff8616021790555b63ffffffff8281161461108e576003805463ffffffff60801b1916600160801b63ffffffff8516021790555b63ffffffff818116146110ba576003805463ffffffff60a01b1916600160a01b63ffffffff8416021790555b6003546001546002546040805167ffffffffffffffff85168152602081019390935282015263ffffffff600160401b830481166060830152600160601b830481166080830152600160801b8304811660a0830152600160a01b90920490911660c082015233907fadcd3dfe1ea89e26deeb66ba7e0c4222331ad5298443b25f7ad150b4c84e6b449060e00160405180910390a250505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b03811681146111bd57600080fd5b919050565b803563ffffffff811681146111bd57600080fd5b600080604083850312156111e957600080fd5b6111f2836111a6565b9150611200602084016111c2565b90509250929050565b60006020828403121561121b57600080fd5b611224826111a6565b9392505050565b60006020828403121561123d57600080fd5b611224826111c2565b600080600080600080600060e0888a03121561126157600080fd5b873567ffffffffffffffff8116811461127957600080fd5b96506020880135955060408801359450611295606089016111c2565b93506112a3608089016111c2565b92506112b160a089016111c2565b91506112bf60c089016111c2565b905092959891949750929550565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff808316818516808303821115611302576113026112cd565b01949350505050565b6000816000190483118215151615611325576113256112cd565b500290565b6000821982111561133d5761133d6112cd565b500190565b600082821015611354576113546112cd565b500390565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000826113ab57634e487b7160e01b600052601260045260246000fd5b500490565b60006000198214156113c4576113c46112cd565b5060010190565b600063ffffffff808316818114156113e5576113e56112cd565b600101939250505056fea2646970667358221220fd89a32d271ee4b76e0a5ad1fa9afee3d3705b29cc270b77d95996e75d60578564736f6c634300080c00330000000000000000000000008e2b2ca41427605bf3472ef260e8a3f6d633e3dd0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000aebb2b8f23a74f461bcccb56c3dbd189d0b73b7e
Deployed Bytecode
0x6080604052600436106101665760003560e01c806388e515f4116100d1578063c10b93581161008a578063dac6db1c11610064578063dac6db1c14610440578063e2ae99f91461047a578063f2fde38b1461048f578063fcfc59f2146104af57600080fd5b8063c10b9358146103c4578063c1161dd8146103e8578063caccd7f71461040c57600080fd5b806388e515f4146103205780638a18e5f2146103355780638da5cb5b1461034b5780639691f95b14610369578063996517cf1461037c578063ab0bcc41146103a057600080fd5b806355a373d61161012357806355a373d6146102425780635cc99e351461028e57806361b8ce8c146102c2578063715018a6146102d857806372b0d90c146102ed5780637db5bd521461030d57600080fd5b806322f3e2d41461016b57806331c2ad531461019557806333820d59146101d75780633bcd3dbe146101e15780633ccfd60b146101f4578063474740b114610209575b600080fd5b34801561017757600080fd5b506101806104cf565b60405190151581526020015b60405180910390f35b3480156101a157600080fd5b506101c97f000000000000000000000000000000000000000000000000000000000000000281565b60405190815260200161018c565b6101df61052d565b005b6101df6101ef3660046111d6565b610538565b34801561020057600080fd5b506101df61092c565b34801561021557600080fd5b5060035461022d90600160801b900463ffffffff1681565b60405163ffffffff909116815260200161018c565b34801561024e57600080fd5b506102767f0000000000000000000000008e2b2ca41427605bf3472ef260e8a3f6d633e3dd81565b6040516001600160a01b03909116815260200161018c565b34801561029a57600080fd5b506101c97f3f38351a8d513731422d6b231445dccf6ea9ae952d15c73513da3b92754e778f81565b3480156102ce57600080fd5b506101c960015481565b3480156102e457600080fd5b506101df610935565b3480156102f957600080fd5b506101df610308366004611209565b610969565b6101df61031b36600461122b565b610b2c565b34801561032c57600080fd5b506101c9610b39565b34801561034157600080fd5b506101c960025481565b34801561035757600080fd5b506000546001600160a01b0316610276565b6101df610377366004611209565b610b55565b34801561038857600080fd5b5060035461022d90600160a01b900463ffffffff1681565b3480156103ac57600080fd5b5060035461022d90600160401b900463ffffffff1681565b3480156103d057600080fd5b5060035461022d90600160601b900463ffffffff1681565b3480156103f457600080fd5b5060035461022d90600160c01b900463ffffffff1681565b34801561041857600080fd5b506102767f000000000000000000000000aebb2b8f23a74f461bcccb56c3dbd189d0b73b7e81565b34801561044c57600080fd5b506003546104619067ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161018c565b34801561048657600080fd5b506101c9610e88565b34801561049b57600080fd5b506101df6104aa366004611209565b610eb8565b3480156104bb57600080fd5b506101df6104ca366004611246565b610f50565b60035460009067ffffffffffffffff16158015906104f1575060025460015411155b801561050d575060035442600160401b90910463ffffffff1611155b8015610528575060035442600160601b90910463ffffffff16115b905090565b61053633610b55565b565b6001600160a01b0382166105875760405162461bcd60e51b81526020600482015260116024820152701c9958da5c1a595b9d081b9bdd081cd95d607a1b60448201526064015b60405180910390fd5b60018163ffffffff161180156105c75750600354600160801b900463ffffffff1615806105c7575060035463ffffffff600160801b909104811690821611155b6106065760405162461bcd60e51b815260206004820152601060248201526f1a5b98dbdc9c9958dd08185b5bdd5b9d60821b604482015260640161057e565b600354600160a01b900463ffffffff1615610693576003543360009081526004602052604090205463ffffffff600160a01b90920482169161064a918491166112e3565b63ffffffff1611156106935760405162461bcd60e51b81526020600482015260126024820152711b5a5b9d081b1a5b5a5d081c995858da195960721b604482015260640161057e565b8063ffffffff166106a2610b39565b10156107045760405162461bcd60e51b815260206004820152602b60248201527f696e6163746976652073616c65206f72206e6f7420656e6f756768206974656d60448201526a7320617661696c61626c6560a81b606482015260840161057e565b6003546000906107259063ffffffff84169067ffffffffffffffff1661130b565b90508034101561076a5760405162461bcd60e51b815260206004820152601060248201526f6e6f7420656e6f7567682066756e647360801b604482015260640161057e565b600154604051631740d57560e11b81526001600160a01b038581166004830152602482019290925263ffffffff841660448201527f0000000000000000000000008e2b2ca41427605bf3472ef260e8a3f6d633e3dd90911690632e81aaea90606401600060405180830381600087803b1580156107e657600080fd5b505af11580156107fa573d6000803e3d6000fd5b505050508163ffffffff1660016000828254610816919061132a565b90915550506003805483919060189061083d908490600160c01b900463ffffffff166112e3565b82546101009290920a63ffffffff8181021990931691831602179091553360009081526004602052604081208054869450909261087c918591166112e3565b92506101000a81548163ffffffff021916908363ffffffff160217905550803411156108da57336108fc6108b08334611342565b6040518115909202916000818181858888f193505050501580156108d8573d6000803e3d6000fd5b505b6040805163ffffffff84168152602081018390526001600160a01b0385169133917f79a83e4a5caa2c1d013811413f9cd03c6db771c529534d8a8e41075f3fa70d1f91015b60405180910390a3505050565b61053633610969565b6000546001600160a01b0316331461095f5760405162461bcd60e51b815260040161057e90611359565b6105366000611156565b6000546001600160a01b031633146109935760405162461bcd60e51b815260040161057e90611359565b6001600160a01b0381166109db5760405162461bcd60e51b815260206004820152600f60248201526e1859191c995cdcc81b9bdd081cd95d608a1b604482015260640161057e565b4760006064610a0a7f00000000000000000000000000000000000000000000000000000000000000028461130b565b610a14919061138e565b9050610a208183611342565b915060008211610a615760405162461bcd60e51b815260206004820152600c60248201526b7a65726f2062616c616e636560a01b604482015260640161057e565b6040516001600160a01b0384169083156108fc029084906000818181858888f19350505050158015610a97573d6000803e3d6000fd5b506040516001600160a01b037f000000000000000000000000aebb2b8f23a74f461bcccb56c3dbd189d0b73b7e169082156108fc029083906000818181858888f19350505050158015610aee573d6000803e3d6000fd5b506040518281526001600160a01b0384169033907fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb9060200161091f565b610b363382610538565b50565b6000610b436104cf565b610b4d5750600090565b610528610e88565b6001600160a01b038116610b9f5760405162461bcd60e51b81526020600482015260116024820152701c9958da5c1a595b9d081b9bdd081cd95d607a1b604482015260640161057e565b60035467ffffffffffffffff16341015610bee5760405162461bcd60e51b815260206004820152601060248201526f6e6f7420656e6f7567682066756e647360801b604482015260640161057e565b600354600160a01b900463ffffffff1615610c7b576003543360009081526004602052604090205463ffffffff600160a01b909204821691610c32911660016112e3565b63ffffffff161115610c7b5760405162461bcd60e51b81526020600482015260126024820152711b5a5b9d081b1a5b5a5d081c995858da195960721b604482015260640161057e565b610c836104cf565b610cbf5760405162461bcd60e51b815260206004820152600d60248201526c696e6163746976652073616c6560981b604482015260640161057e565b6001546040516340c10f1960e01b81526001600160a01b03838116600483015260248201929092527f0000000000000000000000008e2b2ca41427605bf3472ef260e8a3f6d633e3dd909116906340c10f1990604401600060405180830381600087803b158015610d2f57600080fd5b505af1158015610d43573d6000803e3d6000fd5b505060018054925090506000610d58836113b0565b909155505060038054600160c01b900463ffffffff16906018610d7a836113cb565b82546101009290920a63ffffffff81810219909316918316021790915533600090815260046020526040812080549092169250610db6836113cb565b825463ffffffff9182166101009390930a92830291909202199091161790555060035467ffffffffffffffff16341115610e315760035433906108fc90610e079067ffffffffffffffff1634611342565b6040518115909202916000818181858888f19350505050158015610e2f573d6000803e3d6000fd5b505b600354604080516001815267ffffffffffffffff90921660208301526001600160a01b0383169133917f79a83e4a5caa2c1d013811413f9cd03c6db771c529534d8a8e41075f3fa70d1f910160405180910390a350565b60006001546002541015610e9c5750600090565b6001546002546001610eae919061132a565b6105289190611342565b6000546001600160a01b03163314610ee25760405162461bcd60e51b815260040161057e90611359565b6001600160a01b038116610f475760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161057e565b610b3681611156565b6000546001600160a01b03163314610f7a5760405162461bcd60e51b815260040161057e90611359565b60008611610fb85760405162461bcd60e51b815260206004820152600b60248201526a1e995c9bc81b995e1d125960aa1b604482015260640161057e565b67ffffffffffffffff87811614610fe7576003805467ffffffffffffffff191667ffffffffffffffff89161790555b6000198614610ff65760018690555b60001985146110055760028590555b63ffffffff8481161461103657600380546bffffffff00000000000000001916600160401b63ffffffff8716021790555b63ffffffff83811614611062576003805463ffffffff60601b1916600160601b63ffffffff8616021790555b63ffffffff8281161461108e576003805463ffffffff60801b1916600160801b63ffffffff8516021790555b63ffffffff818116146110ba576003805463ffffffff60a01b1916600160a01b63ffffffff8416021790555b6003546001546002546040805167ffffffffffffffff85168152602081019390935282015263ffffffff600160401b830481166060830152600160601b830481166080830152600160801b8304811660a0830152600160a01b90920490911660c082015233907fadcd3dfe1ea89e26deeb66ba7e0c4222331ad5298443b25f7ad150b4c84e6b449060e00160405180910390a250505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b03811681146111bd57600080fd5b919050565b803563ffffffff811681146111bd57600080fd5b600080604083850312156111e957600080fd5b6111f2836111a6565b9150611200602084016111c2565b90509250929050565b60006020828403121561121b57600080fd5b611224826111a6565b9392505050565b60006020828403121561123d57600080fd5b611224826111c2565b600080600080600080600060e0888a03121561126157600080fd5b873567ffffffffffffffff8116811461127957600080fd5b96506020880135955060408801359450611295606089016111c2565b93506112a3608089016111c2565b92506112b160a089016111c2565b91506112bf60c089016111c2565b905092959891949750929550565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff808316818516808303821115611302576113026112cd565b01949350505050565b6000816000190483118215151615611325576113256112cd565b500290565b6000821982111561133d5761133d6112cd565b500190565b600082821015611354576113546112cd565b500390565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000826113ab57634e487b7160e01b600052601260045260246000fd5b500490565b60006000198214156113c4576113c46112cd565b5060010190565b600063ffffffff808316818114156113e5576113e56112cd565b600101939250505056fea2646970667358221220fd89a32d271ee4b76e0a5ad1fa9afee3d3705b29cc270b77d95996e75d60578564736f6c634300080c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000008e2b2ca41427605bf3472ef260e8a3f6d633e3dd0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000aebb2b8f23a74f461bcccb56c3dbd189d0b73b7e
-----Decoded View---------------
Arg [0] : _tokenContract (address): 0x8e2b2CA41427605BF3472eF260e8A3F6D633e3dD
Arg [1] : _developerFee (uint256): 2
Arg [2] : _developerAddress (address): 0xAeBB2b8f23A74F461bcCCb56C3DbD189D0b73B7E
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000008e2b2ca41427605bf3472ef260e8a3f6d633e3dd
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [2] : 000000000000000000000000aebb2b8f23a74f461bcccb56c3dbd189d0b73b7e
Loading...
Loading
Loading...
Loading
Net Worth in USD
$1,365.29
Net Worth in ETH
0.659766
Token Allocations
ETH
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $2,068.62 | 0.66 | $1,365.29 |
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.