Zapper NFT
About
Stats
Public Functions
18
Event Types
5
Code Size
45,950 bytes
Library Use
Uses Counters for Counters.Counter.
Events (5) keyboard_arrow_up
State Variables (12) keyboard_arrow_up
Functions
getMessageHash keyboard_arrow_up
owner keyboard_arrow_up
renounceOwnership keyboard_arrow_up
transferOwnership keyboard_arrow_up
Modifiers help
onlyOwner checks for the following:
Source Code
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
supportsInterface keyboard_arrow_up
Source Code
function supportsInterface(bytes4 interfaceId)
public
view
virtual
override(ERC165, IERC165)
returns (bool)
{
return
interfaceId == type(IERC1155).interfaceId ||
interfaceId == type(IERC1155MetadataURI).interfaceId ||
super.supportsInterface(interfaceId);
}
uri keyboard_arrow_up
balanceOf keyboard_arrow_up
Source Code
function balanceOf(address account, uint256 id)
public
view
virtual
override
returns (uint256)
{
require(account != address(0), "ERC1155: balance query for the zero address");
return _balances[id][account];
}
balanceOfBatch keyboard_arrow_up
Requirements help
Source Code
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;
}
setApprovalForAll keyboard_arrow_up
Requirements help
Source Code
function setApprovalForAll(address operator, bool approved)
public
virtual
override
{
require(
_msgSender() != operator,
"ERC1155: setting approval status for self"
);
_operatorApprovals[_msgSender()][operator] = approved;
emit ApprovalForAll(_msgSender(), operator, approved);
}
isApprovedForAll keyboard_arrow_up
safeTransferFrom keyboard_arrow_up
Parameters help
Requirements help
Source Code
function safeTransferFrom(
address from,
address to,
uint256 id,
uint256 amount,
bytes memory data
) public virtual override {
require(to != address(0), "ERC1155: transfer to the zero address");
require(
from == _msgSender() || isApprovedForAll(from, _msgSender()),
"ERC1155: caller is not owner nor approved"
);
address operator = _msgSender();
_beforeTokenTransfer(
operator,
from,
to,
_asSingletonArray(id),
_asSingletonArray(amount),
data
);
uint256 fromBalance = _balances[id][from];
require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
_balances[id][from] = fromBalance - amount;
_balances[id][to] += amount;
emit TransferSingle(operator, from, to, id, amount);
_doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
}
safeBatchTransferFrom keyboard_arrow_up
Parameters help
Requirements help
Source Code
function safeBatchTransferFrom(
address from,
address to,
uint256[] memory ids,
uint256[] memory amounts,
bytes memory data
) public virtual override {
require(
ids.length == amounts.length,
"ERC1155: ids and amounts length mismatch"
);
require(to != address(0), "ERC1155: transfer to the zero address");
require(
from == _msgSender() || isApprovedForAll(from, _msgSender()),
"ERC1155: transfer caller is not owner nor approved"
);
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"
);
_balances[id][from] = fromBalance - amount;
_balances[id][to] += amount;
}
emit TransferBatch(operator, from, to, ids, amounts);
_doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
}
create keyboard_arrow_up
Modifiers help
onlyOwner checks for the following:
Requirements help
Source Code
function create(string calldata _cid, bytes calldata _data)
external
onlyOwner
returns (uint256 _id)
{
require(bytes(_cid).length > 0, "Err: Missing Content Identifier");
_id = _nextId();
_mint(msg.sender, _id, 0, _data);
string memory _uri = _createUri(_cid);
idToUri[_id] = _uri;
emit URI(_uri, _id);
}
mint keyboard_arrow_up
Parameters help
Modifiers help
pausable checks for the following:
Requirements help
null
null
Source Code
function mint(
address _account,
uint256 _id,
bytes calldata _signature,
bytes calldata _data
) public pausable {
require(_exists(_id), "Err: Invalid ID");
require(!hasMinted[_id][_account], "Err: Already Minted");
require(verify(_account, _id, _signature), "Err: Invalid Signature");
hasMinted[_id][_account] = true;
_mint(_account, _id, 1, _data);
tokenSupply[_id]++;
}
batchMint keyboard_arrow_up
Parameters help
Modifiers help
pausable checks for the following:
Source Code
function batchMint(
address _account,
uint256[] calldata _ids,
bytes[] calldata _signatures,
bytes[] calldata _data
) external pausable {
for (uint256 i = 0; i < _ids.length; i++) {
mint(_account, _ids[i], _signatures[i], _data[i]);
}
}
totalSupply keyboard_arrow_up
pause keyboard_arrow_up
updateSigner keyboard_arrow_up
Modifiers help
onlyOwner checks for the following:
Source Code
function updateSigner(address signer) public onlyOwner {
_signer = signer;
}
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 Zapper_NFT_V1_0_5._createUri keyboard_arrow_up
internal Zapper_NFT_V1_0_5._nextId keyboard_arrow_up
internal Zapper_NFT_V1_0_5._exists keyboard_arrow_up
internal ERC1155._setURI keyboard_arrow_up
internal ERC1155._mint keyboard_arrow_up
Requirements help
Source Code
function _mint(
address account,
uint256 id,
uint256 amount,
bytes memory data
) internal virtual {
require(account != address(0), "ERC1155: mint to the zero address");
address operator = _msgSender();
_beforeTokenTransfer(
operator,
address(0),
account,
_asSingletonArray(id),
_asSingletonArray(amount),
data
);
_balances[id][account] += amount;
emit TransferSingle(operator, address(0), account, id, amount);
_doSafeTransferAcceptanceCheck(
operator,
address(0),
account,
id,
amount,
data
);
}
internal ERC1155._mintBatch keyboard_arrow_up
Requirements help
Source Code
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);
_doSafeBatchTransferAcceptanceCheck(
operator,
address(0),
to,
ids,
amounts,
data
);
}
internal ERC1155._burn keyboard_arrow_up
Requirements help
Source Code
function _burn(
address account,
uint256 id,
uint256 amount
) internal virtual {
require(account != address(0), "ERC1155: burn from the zero address");
address operator = _msgSender();
_beforeTokenTransfer(
operator,
account,
address(0),
_asSingletonArray(id),
_asSingletonArray(amount),
""
);
uint256 accountBalance = _balances[id][account];
require(accountBalance >= amount, "ERC1155: burn amount exceeds balance");
_balances[id][account] = accountBalance - amount;
emit TransferSingle(operator, account, address(0), id, amount);
}
internal ERC1155._burnBatch keyboard_arrow_up
Requirements help
Source Code
function _burnBatch(
address account,
uint256[] memory ids,
uint256[] memory amounts
) internal virtual {
require(account != address(0), "ERC1155: burn from the zero address");
require(
ids.length == amounts.length,
"ERC1155: ids and amounts length mismatch"
);
address operator = _msgSender();
_beforeTokenTransfer(operator, account, address(0), ids, amounts, "");
for (uint256 i = 0; i < ids.length; i++) {
uint256 id = ids[i];
uint256 amount = amounts[i];
uint256 accountBalance = _balances[id][account];
require(accountBalance >= amount, "ERC1155: burn amount exceeds balance");
_balances[id][account] = accountBalance - amount;
}
emit TransferBatch(operator, account, address(0), ids, amounts);
}
internal ERC1155._beforeTokenTransfer keyboard_arrow_up
Parameters help
Source Code
function _beforeTokenTransfer(
address operator,
address from,
address to,
uint256[] memory ids,
uint256[] memory amounts,
bytes memory data
) internal virtual {}
internal ERC1155._doSafeTransferAcceptanceCheck keyboard_arrow_up
Parameters help
Source Code
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(to).onERC1155Received.selector) {
revert("ERC1155: ERC1155Receiver rejected tokens");
}
} catch Error(string memory reason) {
revert(reason);
} catch {
revert("ERC1155: transfer to non ERC1155Receiver implementer");
}
}
}
internal ERC1155._doSafeBatchTransferAcceptanceCheck keyboard_arrow_up
Parameters help
Source Code
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(to).onERC1155BatchReceived.selector) {
revert("ERC1155: ERC1155Receiver rejected tokens");
}
} catch Error(string memory reason) {
revert(reason);
} catch {
revert("ERC1155: transfer to non ERC1155Receiver implementer");
}
}
}
internal ERC1155._asSingletonArray 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 calldata) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
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 calldata) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
internal SignatureVerifier.verify keyboard_arrow_up
Source Code
function verify(
address account,
uint256 id,
bytes memory signature
) internal view returns (bool) {
bytes32 messageHash = getMessageHash(account, id);
bytes32 ethSignedMessageHash = getEthSignedMessageHash(messageHash);
return recoverSigner(ethSignedMessageHash, signature) == _signer;
}
internal SignatureVerifier.getEthSignedMessageHash keyboard_arrow_up
internal SignatureVerifier.recoverSigner keyboard_arrow_up
Source Code
function recoverSigner(bytes32 _ethSignedMessageHash, bytes memory _signature)
internal
pure
returns (address)
{
(bytes32 r, bytes32 s, uint8 v) = splitSignature(_signature);
return ecrecover(_ethSignedMessageHash, v, r, s);
}
internal SignatureVerifier.splitSignature keyboard_arrow_up
Requirements help
Source Code
function splitSignature(bytes memory signature)
internal
pure
returns (
bytes32 r,
bytes32 s,
uint8 v
)
{
require(signature.length == 65, "invalid signature length");
assembly {
r := mload(add(signature, 32))
s := mload(add(signature, 64))
v := byte(0, mload(add(signature, 96)))
}
}