DigitalaxGenesis
About
Stats
Public Functions
23
Event Types
9
Code Size
74,954 bytes
Library Use
Uses SafeMath for uint256.
Events (9) keyboard_arrow_up
Constants (8) keyboard_arrow_up
State Variables (16) keyboard_arrow_up
Functions
supportsInterface keyboard_arrow_up
balanceOf keyboard_arrow_up
Source Code
function balanceOf(address owner) public view override returns (uint256) {
require(owner != address(0), "ERC721: balance query for the zero address");
return _holderTokens[owner].length();
}
ownerOf keyboard_arrow_up
name keyboard_arrow_up
symbol keyboard_arrow_up
tokenURI keyboard_arrow_up
Requirements help
null
Source Code
function tokenURI(uint256 tokenId)
public
view
override
returns (string memory)
{
require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
return tokenURI_;
}
tokenOfOwnerByIndex keyboard_arrow_up
totalSupply keyboard_arrow_up
tokenByIndex keyboard_arrow_up
approve keyboard_arrow_up
Requirements help
Source Code
function approve(address to, uint256 tokenId) public virtual override {
address owner = ownerOf(tokenId);
require(to != owner, "ERC721: approval to current owner");
require(
_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
"ERC721: approve caller is not owner nor approved for all"
);
_approve(to, tokenId);
}
getApproved keyboard_arrow_up
Requirements help
null
Source Code
function getApproved(uint256 tokenId) public view override returns (address) {
require(_exists(tokenId), "ERC721: approved query for nonexistent token");
return _tokenApprovals[tokenId];
}
setApprovalForAll keyboard_arrow_up
Requirements help
Source Code
function setApprovalForAll(address operator, bool approved)
public
virtual
override
{
require(operator != _msgSender(), "ERC721: approve to caller");
_operatorApprovals[_msgSender()][operator] = approved;
emit ApprovalForAll(_msgSender(), operator, approved);
}
isApprovedForAll keyboard_arrow_up
transferFrom keyboard_arrow_up
Requirements help
Source Code
function transferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
//solhint-disable-next-line max-line-length
require(
_isApprovedOrOwner(_msgSender(), tokenId),
"ERC721: transfer caller is not owner nor approved"
);
_transfer(from, to, tokenId);
}
safeTransferFrom keyboard_arrow_up
Requirements help
Source Code
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
safeTransferFrom(from, to, tokenId, "");
}
safeTransferFrom keyboard_arrow_up
Requirements help
Source Code
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes memory _data
) public virtual override {
require(
_isApprovedOrOwner(_msgSender(), tokenId),
"ERC721: transfer caller is not owner nor approved"
);
_safeTransfer(from, to, tokenId, _data);
}
buyOrIncreaseContribution keyboard_arrow_up
buy keyboard_arrow_up
Parameters help
This function has no parameters.
Requirements help
fundsTransferSuccess must be true
null
Source Code
function buy() public payable {
require(
contribution[_msgSender()] == 0,
"DigitalaxGenesisNFT.buy: You already own a genesis NFT"
);
require(
_getNow() >= genesisStartTimestamp && _getNow() <= genesisEndTimestamp,
"DigitalaxGenesisNFT.buy: No genesis are available outside of the genesis window"
);
uint256 _contributionAmount = msg.value;
require(
_contributionAmount >= minimumContributionAmount,
"DigitalaxGenesisNFT.buy: Contribution does not meet minimum requirement"
);
require(
_contributionAmount <= maximumContributionAmount,
"DigitalaxGenesisNFT.buy: You cannot exceed the maximum contribution amount"
);
require(
remainingGenesisTokens() > 0,
"DigitalaxGenesisNFT.buy: Total number of genesis token holders reached"
);
contribution[_msgSender()] = _contributionAmount;
totalContributions = totalContributions.add(_contributionAmount);
(bool fundsTransferSuccess, ) = fundsMultisig.call{
value: _contributionAmount
}("");
require(
fundsTransferSuccess,
"DigitalaxGenesisNFT.buy: Unable to send contribution to funds multisig"
);
uint256 tokenId = totalSupply().add(1);
_safeMint(_msgSender(), tokenId);
emit GenesisPurchased(_msgSender(), tokenId, _contributionAmount);
}
increaseContribution keyboard_arrow_up
Parameters help
This function has no parameters.
Requirements help
maximumContributionAmount
must be greater than or equal to
contribution for the result of calling _msgSender
fundsTransferSuccess must be true
Source Code
function increaseContribution() public payable {
require(
_getNow() >= genesisStartTimestamp && _getNow() <= genesisEndTimestamp,
"DigitalaxGenesisNFT.increaseContribution: No increases are possible outside of the genesis window"
);
require(
contribution[_msgSender()] > 0,
"DigitalaxGenesisNFT.increaseContribution: You do not own a genesis NFT"
);
uint256 _amountToIncrease = msg.value;
contribution[_msgSender()] = contribution[_msgSender()].add(
_amountToIncrease
);
require(
contribution[_msgSender()] <= maximumContributionAmount,
"DigitalaxGenesisNFT.increaseContribution: You cannot exceed the maximum contribution amount"
);
totalContributions = totalContributions.add(_amountToIncrease);
(bool fundsTransferSuccess, ) = fundsMultisig.call{value: _amountToIncrease}(
""
);
require(
fundsTransferSuccess,
"DigitalaxGenesisNFT.increaseContribution: Unable to send contribution to funds multisig"
);
emit ContributionIncreased(_msgSender(), _amountToIncrease);
}
adminBuy keyboard_arrow_up
Requirements help
null
Source Code
function adminBuy(address _beneficiary) external {
require(
accessControls.hasAdminRole(_msgSender()),
"DigitalaxGenesisNFT.adminBuy: Sender must be admin"
);
require(
_beneficiary != address(0),
"DigitalaxGenesisNFT.adminBuy: Beneficiary cannot be ZERO"
);
require(
balanceOf(_beneficiary) == 0,
"DigitalaxGenesisNFT.adminBuy: Beneficiary already owns a genesis NFT"
);
uint256 tokenId = totalSupply().add(1);
_safeMint(_beneficiary, tokenId);
// Increase admin mint counts
totalAdminMints = totalAdminMints.add(1);
emit AdminGenesisMinted(_beneficiary, _msgSender(), tokenId);
}
updateGenesisEnd keyboard_arrow_up
Requirements help
Source Code
function updateGenesisEnd(uint256 _end) external {
require(
accessControls.hasAdminRole(_msgSender()),
"DigitalaxGenesisNFT.updateGenesisEnd: Sender must be admin"
);
// If already passed, dont allow opening again
require(
genesisEndTimestamp > _getNow(),
"DigitalaxGenesisNFT.updateGenesisEnd: End time already passed"
);
// Only allow setting this once
require(
!genesisEndTimestampLocked,
"DigitalaxGenesisNFT.updateGenesisEnd: End time locked"
);
genesisEndTimestamp = _end;
// Lock future end time modifications
genesisEndTimestampLocked = true;
emit GenesisEndUpdated(genesisEndTimestamp, _msgSender());
}
updateAccessControls keyboard_arrow_up
Requirements help
UNKNOWN VALUE
must not be equal to
UNKNOWN VALUE
Source Code
function updateAccessControls(DigitalaxAccessControls _accessControls)
external
{
require(
accessControls.hasAdminRole(_msgSender()),
"DigitalaxGenesisNFT.updateAccessControls: Sender must be admin"
);
require(
address(_accessControls) != address(0),
"DigitalaxGenesisNFT.updateAccessControls: Zero Address"
);
accessControls = _accessControls;
emit AccessControlsUpdated(address(_accessControls));
}
remainingGenesisTokens keyboard_arrow_up
Internal Functions
Internal functions are parts of the contract that can't be used directly, but instead are used by the public functions listed above.
internal DigitalaxGenesisNFT._getNow keyboard_arrow_up
internal DigitalaxGenesisNFT._getMaxGenesisContributionTokens keyboard_arrow_up
internal DigitalaxGenesisNFT._beforeTokenTransfer keyboard_arrow_up
Source Code
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal override {
if (from != address(0) && _getNow() <= genesisEndTimestamp) {
revert(
"DigitalaxGenesisNFT._beforeTokenTransfer: Transfers are currently locked at this time"
);
}
}
internal ERC721WithSameTokenURIForAllTokens._safeTransfer keyboard_arrow_up
Requirements help
Source Code
function _safeTransfer(
address from,
address to,
uint256 tokenId,
bytes memory _data
) internal virtual {
_transfer(from, to, tokenId);
require(
_checkOnERC721Received(from, to, tokenId, _data),
"ERC721: transfer to non ERC721Receiver implementer"
);
}
internal ERC721WithSameTokenURIForAllTokens._exists keyboard_arrow_up
internal ERC721WithSameTokenURIForAllTokens._isApprovedOrOwner keyboard_arrow_up
Requirements help
null
Source Code
function _isApprovedOrOwner(address spender, uint256 tokenId)
internal
view
returns (bool)
{
require(_exists(tokenId), "ERC721: operator query for nonexistent token");
address owner = ownerOf(tokenId);
return (spender == owner ||
getApproved(tokenId) == spender ||
isApprovedForAll(owner, spender));
}
internal ERC721WithSameTokenURIForAllTokens._safeMint keyboard_arrow_up
Requirements help
null
Source Code
function _safeMint(address to, uint256 tokenId) internal virtual {
_safeMint(to, tokenId, "");
}
internal ERC721WithSameTokenURIForAllTokens._safeMint keyboard_arrow_up
Requirements help
null
Source Code
function _safeMint(
address to,
uint256 tokenId,
bytes memory _data
) internal virtual {
_mint(to, tokenId);
require(
_checkOnERC721Received(address(0), to, tokenId, _data),
"ERC721: transfer to non ERC721Receiver implementer"
);
}
internal ERC721WithSameTokenURIForAllTokens._mint keyboard_arrow_up
Requirements help
Source Code
function _mint(address to, uint256 tokenId) internal virtual {
require(to != address(0), "ERC721: mint to the zero address");
require(!_exists(tokenId), "ERC721: token already minted");
_beforeTokenTransfer(address(0), to, tokenId);
_holderTokens[to].add(tokenId);
_tokenOwners.set(tokenId, to);
emit Transfer(address(0), to, tokenId);
}
internal ERC721WithSameTokenURIForAllTokens._burn keyboard_arrow_up
Source Code
function _burn(uint256 tokenId) internal virtual {
address owner = ownerOf(tokenId);
_beforeTokenTransfer(owner, address(0), tokenId);
// Clear approvals
_approve(address(0), tokenId);
_holderTokens[owner].remove(tokenId);
_tokenOwners.remove(tokenId);
emit Transfer(owner, address(0), tokenId);
}
internal ERC721WithSameTokenURIForAllTokens._transfer keyboard_arrow_up
Requirements help
Source Code
function _transfer(
address from,
address to,
uint256 tokenId
) internal virtual {
require(
ownerOf(tokenId) == from,
"ERC721: transfer of token that is not own"
);
require(to != address(0), "ERC721: transfer to the zero address");
_beforeTokenTransfer(from, to, tokenId);
// Clear approvals from the previous owner
_approve(address(0), tokenId);
_holderTokens[from].remove(tokenId);
_holderTokens[to].add(tokenId);
_tokenOwners.set(tokenId, to);
emit Transfer(from, to, tokenId);
}
internal ERC721WithSameTokenURIForAllTokens._checkOnERC721Received keyboard_arrow_up
Source Code
function _checkOnERC721Received(
address from,
address to,
uint256 tokenId,
bytes memory _data
) private returns (bool) {
if (!to.isContract()) {
return true;
}
bytes memory returndata = to.functionCall(
abi.encodeWithSelector(
IERC721Receiver(to).onERC721Received.selector,
_msgSender(),
from,
tokenId,
_data
),
"ERC721: transfer to non ERC721Receiver implementer"
);
bytes4 retval = abi.decode(returndata, (bytes4));
return (retval == _ERC721_RECEIVED);
}
internal ERC721WithSameTokenURIForAllTokens._approve keyboard_arrow_up
internal ERC721WithSameTokenURIForAllTokens._beforeTokenTransfer keyboard_arrow_up
internal Context._msgSender keyboard_arrow_up
internal Context._msgData keyboard_arrow_up
Parameters help
This function has no parameters.
Source Code
function _msgData() internal view virtual returns (bytes memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
internal ERC165.constructor keyboard_arrow_up
internal ERC165._registerInterface keyboard_arrow_up
Requirements help
Source Code
function _registerInterface(bytes4 interfaceId) internal virtual {
require(interfaceId != 0xffffffff, "ERC165: invalid interface id");
_supportedInterfaces[interfaceId] = true;
}