Ready To Use
Lazy Mint ERC20
Nestable Multi Asset Lazy Mint ERC20

RMRKNestableMultiAssetLazyMintErc20

RMRK team

RMRKNestableMultiAssetLazyMintErc20

Implementation of joined RMRK nestable and multi asset module with ERC20-powered lazy minting.

Methods

RMRK_INTERFACE

function RMRK_INTERFACE() external pure returns (bytes4 rmrkInterface)

Interface identifier of the @rmrk-team/evm-contracts package

Returns

NameTypeDescription
rmrkInterfacebytes4Interface identifier for implementations of the @rmrk-team/evm-contracts package

VERSION

function VERSION() external pure returns (string version)

Version of the @rmrk-team/evm-contracts package

Returns

NameTypeDescription
versionstringVersion identifier for implementations of the @rmrk-team/evm-contracts package

acceptAsset

function acceptAsset(uint256 tokenId, uint256 index, uint64 assetId) external nonpayable

Accepts an asset at from the pending array of given token.

Migrates the asset from the token's pending asset array to the token's active asset array.Active assets cannot be removed by anyone, but can be replaced by a new asset.Requirements: - The caller must own the token or be approved to manage the token's assets - tokenId must exist. - index must be in range of the length of the pending asset array.Emits an {AssetAccepted} event.

Parameters

NameTypeDescription
tokenIduint256ID of the token for which to accept the pending asset
indexuint256Index of the asset in the pending array to accept
assetIduint64ID of the asset expected to be in the index

acceptChild

function acceptChild(uint256 parentId, uint256 childIndex, address childAddress, uint256 childId) external nonpayable

Used to accept a pending child token for a given parent token.

This moves the child token from parent token's pending child tokens array into the active child tokens array.

Parameters

NameTypeDescription
parentIduint256ID of the parent token for which the child token is being accepted
childIndexuint256Index of a child tokem in the given parent's pending children array
childAddressaddressAddress of the collection smart contract of the child token expected to be located at the specified index of the given parent token's pending children array
childIduint256ID of the child token expected to be located at the specified index of the given parent token's pending children array

addAssetEntry

function addAssetEntry(string metadataURI) external nonpayable returns (uint256 assetId)

Used to add a asset entry.

The ID of the asset is automatically assigned to be the next available asset ID.

Parameters

NameTypeDescription
metadataURIstringMetadata URI of the asset

Returns

NameTypeDescription
assetIduint256The ID of the newly added asset

addAssetToToken

function addAssetToToken(uint256 tokenId, uint64 assetId, uint64 replacesAssetWithId) external nonpayable

Used to add an asset to a token.

If the given asset is already added to the token, the execution will be reverted.If the asset ID is invalid, the execution will be reverted.If the token already has the maximum amount of pending assets (128), the execution will be reverted.

Parameters

NameTypeDescription
tokenIduint256ID of the token to add the asset to
assetIduint64ID of the asset to add to the token
replacesAssetWithIduint64ID of the asset to replace from the token's list of active assets

addChild

function addChild(uint256 parentId, uint256 childId, bytes data) external nonpayable

Used to add a child token to a given parent token.

This adds the child token into the given parent token's pending child tokens array.Requirements: - directOwnerOf on the child contract must resolve to the called contract. - the pending array of the parent contract must not be full.

Parameters

NameTypeDescription
parentIduint256ID of the parent token to receive the new child token
childIduint256ID of the new proposed child token
databytesAdditional data with no specified format

approve

function approve(address to, uint256 tokenId) external nonpayable

Used to grant a one-time approval to manage one's token.

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.

Parameters

NameTypeDescription
toaddressAddress receiving the approval
tokenIduint256ID of the token for which the approval is being granted

approveForAssets

function approveForAssets(address to, uint256 tokenId) external nonpayable

Used to grant permission to the user to manage token's assets.

This differs from transfer approvals, as approvals are not cleared when the approved party accepts or rejects an asset, or sets asset priorities. This approval is cleared on token transfer.Only a single account can be approved at a time, so approving the 0x0 address clears previous approvals.Requirements: - The caller must own the token or be an approved operator. - tokenId must exist.Emits an {ApprovalForAssets} event.

Parameters

NameTypeDescription
toaddressAddress of the account to grant the approval to
tokenIduint256ID of the token for which the approval to manage the assets is granted

balanceOf

function balanceOf(address owner) external view returns (uint256 balance)

Used to retrieve the number of tokens in owner's account.

Parameters

NameTypeDescription
owneraddressAddress of the account being checked

Returns

NameTypeDescription
balanceuint256The balance of the given account

burn

function burn(uint256 tokenId) external nonpayable

Used to burn a given token.

In case the token has any child tokens, the execution will be reverted.

Parameters

NameTypeDescription
tokenIduint256ID of the token to burn

burn

function burn(uint256 tokenId, uint256 maxChildrenBurns) external nonpayable returns (uint256 burnedChildren)

Used to burn a given token.

When a token is burned, all of its child tokens are recursively burned as well.When specifying the maximum recursive burns, the execution will be reverted if there are more children to be burned.Setting the maxRecursiveBurn value to 0 will only attempt to burn the specified token and revert if there are any child tokens present.The approvals are cleared when the token is burned.Requirements: - tokenId must exist.Emits a {Transfer} event.

Parameters

NameTypeDescription
tokenIduint256ID of the token to burn
maxChildrenBurnsuint256undefined

Returns

NameTypeDescription
burnedChildrenuint256Number of recursively burned children

childOf

function childOf(uint256 parentId, uint256 index) external view returns (struct IERC7401.Child child)

Used to retrieve a specific active child token for a given parent token.

Returns a single Child struct locating at index of parent token's active child tokens array.The Child struct consists of the following values: [ tokenId, contractAddress ]

Parameters

NameTypeDescription
parentIduint256ID of the parent token for which the child is being retrieved
indexuint256Index of the child token in the parent token's active child tokens array

Returns

NameTypeDescription
childIERC7401.ChildA Child struct containing data about the specified child

childrenOf

function childrenOf(uint256 parentId) external view returns (struct IERC7401.Child[] children)

Used to retrieve the active child tokens of a given parent token.

Returns array of Child structs existing for parent token.The Child struct consists of the following values: [ tokenId, contractAddress ]

Parameters

NameTypeDescription
parentIduint256ID of the parent token for which to retrieve the active child tokens

Returns

NameTypeDescription
childrenIERC7401.Child[]An array of Child structs containing the parent token's active child tokens

contractURI

function contractURI() external view returns (string contractURI_)

Used to retrieve the metadata URI of the collection.

Returns

NameTypeDescription
contractURI_stringstring The metadata URI of the collection

directOwnerOf

function directOwnerOf(uint256 tokenId) external view returns (address owner_, uint256 parentId, bool isNFT)

Used to retrieve the immediate owner of the given token.

If the immediate owner is another token, the address returned will be the parent token's collection address.

Parameters

NameTypeDescription
tokenIduint256ID of the token for which the RMRK owner is being retrieved

Returns

NameTypeDescription
owner_addressAddress of the given token's owner
parentIduint256The ID of the parent token. Should be 0 if the owner is an externally owned account
isNFTboolThe boolean value signifying whether the owner is an NFT or not

erc20TokenAddress

function erc20TokenAddress() external view returns (address erc20Token)

Used to retrieve the address of the ERC20 token this smart contract supports.

Returns

NameTypeDescription
erc20TokenaddressAddress of the ERC20 token's smart contract

getActiveAssetPriorities

function getActiveAssetPriorities(uint256 tokenId) external view returns (uint64[] priorities)

Used to retrieve the priorities of the active resoources of a given token.

Asset priorities are a non-sequential array of uint64 values with an array size equal to active asset priorites.

Parameters

NameTypeDescription
tokenIduint256ID of the token for which to retrieve the priorities of the active assets

Returns

NameTypeDescription
prioritiesuint64[]An array of priorities of the active assets of the given token

getActiveAssets

function getActiveAssets(uint256 tokenId) external view returns (uint64[] assetIds)

Used to retrieve IDs of the active assets of given token.

Asset data is stored by reference, in order to access the data corresponding to the ID, call getAssetMetadata(tokenId, assetId).You can safely get 10k

Parameters

NameTypeDescription
tokenIduint256ID of the token to retrieve the IDs of the active assets

Returns

NameTypeDescription
assetIdsuint64[]An array of active asset IDs of the given token

getApproved

function getApproved(uint256 tokenId) external view returns (address approved)

Used to retrieve the account approved to manage given token.

Requirements: - tokenId must exist.

Parameters

NameTypeDescription
tokenIduint256ID of the token to check for approval

Returns

NameTypeDescription
approvedaddressAddress of the account approved to manage the token

getApprovedForAssets

function getApprovedForAssets(uint256 tokenId) external view returns (address approved)

Used to retrieve the address of the account approved to manage assets of a given token.

Requirements: - tokenId must exist.

Parameters

NameTypeDescription
tokenIduint256ID of the token for which to retrieve the approved address

Returns

NameTypeDescription
approvedaddressAddress of the account that is approved to manage the specified token's assets

getAssetMetadata

function getAssetMetadata(uint256 tokenId, uint64 assetId) external view returns (string metadata)

Used to fetch the asset metadata of the specified token's active asset with the given index.

Assets are stored by reference mapping _assets[assetId].Can be overriden to implement enumerate, fallback or other custom logic.

Parameters

NameTypeDescription
tokenIduint256ID of the token from which to retrieve the asset metadata
assetIduint64Asset Id, must be in the active assets array

Returns

NameTypeDescription
metadatastringThe metadata of the asset belonging to the specified index in the token's active assets array

getAssetReplacements

function getAssetReplacements(uint256 tokenId, uint64 newAssetId) external view returns (uint64 replacesAssetId)

Used to retrieve the asset that will be replaced if a given asset from the token's pending array is accepted.

Asset data is stored by reference, in order to access the data corresponding to the ID, call getAssetMetadata(tokenId, assetId).

Parameters

NameTypeDescription
tokenIduint256ID of the token to check
newAssetIduint64ID of the pending asset which will be accepted

Returns

NameTypeDescription
replacesAssetIduint64ID of the asset which will be replaced

getPendingAssets

function getPendingAssets(uint256 tokenId) external view returns (uint64[] assetIds)

Used to retrieve IDs of the pending assets of given token.

Asset data is stored by reference, in order to access the data corresponding to the ID, call getAssetMetadata(tokenId, assetId).

Parameters

NameTypeDescription
tokenIduint256ID of the token to retrieve the IDs of the pending assets

Returns

NameTypeDescription
assetIdsuint64[]An array of pending asset IDs of the given token

getRoyaltyPercentage

function getRoyaltyPercentage() external view returns (uint256 royaltyPercentageBps)

Used to retrieve the specified royalty percentage.

Returns

NameTypeDescription
royaltyPercentageBpsuint256The royalty percentage expressed in the basis points

getRoyaltyRecipient

function getRoyaltyRecipient() external view returns (address recipient)

Used to retrieve the recipient of royalties.

Returns

NameTypeDescription
recipientaddressAddress of the recipient of royalties

isApprovedForAll

function isApprovedForAll(address owner, address operator) external view returns (bool isApproved)

Used to check if the given address is allowed to manage the tokens of the specified address.

Parameters

NameTypeDescription
owneraddressAddress of the owner of the tokens
operatoraddressAddress being checked for approval

Returns

NameTypeDescription
isApprovedboolA boolean value signifying whether the operator is allowed to manage the tokens of the owner (true) or not (false)

isApprovedForAllForAssets

function isApprovedForAllForAssets(address owner, address operator) external view returns (bool isApproved)

Used to check whether the address has been granted the operator role by a given address or not.

See {setApprovalForAllForAssets}.

Parameters

NameTypeDescription
owneraddressAddress of the account that we are checking for whether it has granted the operator role
operatoraddressAddress of the account that we are checking whether it has the operator role or not

Returns

NameTypeDescription
isApprovedboolA boolean value indicating whether the account we are checking has been granted the operator role

isContributor

function isContributor(address contributor) external view returns (bool isContributor_)

Used to check if the address is one of the contributors.

Parameters

NameTypeDescription
contributoraddressAddress of the contributor whose status we are checking

Returns

NameTypeDescription
isContributor_boolBoolean value indicating whether the address is a contributor or not

manageContributor

function manageContributor(address contributor, bool grantRole) external nonpayable

Adds or removes a contributor to the smart contract.

Can only be called by the owner.Emits ContributorUpdate event.

Parameters

NameTypeDescription
contributoraddressAddress of the contributor's account
grantRoleboolA boolean value signifying whether the contributor role is being granted (true) or revoked (false)

maxSupply

function maxSupply() external view returns (uint256 maxSupply_)

Used to retrieve the maximum supply of the collection.

Returns

NameTypeDescription
maxSupply_uint256The maximum supply of tokens in the collection

mint

function mint(address to, uint256 numToMint) external payable returns (uint256 firstTokenId)

Used to mint the desired number of tokens to the specified address.

The data value of the _safeMint method is set to an empty value.Can only be called while the open sale is open.

Parameters

NameTypeDescription
toaddressAddress to which to mint the token
numToMintuint256Number of tokens to mint

Returns

NameTypeDescription
firstTokenIduint256The ID of the first token to be minted in the current minting cycle

name

function name() external view returns (string name_)

Used to retrieve the collection name.

Returns

NameTypeDescription
name_stringName of the collection

nestMint

function nestMint(address to, uint256 numToMint, uint256 destinationId) external payable returns (uint256 firstTokenId)

Used to mint a desired number of child tokens to a given parent token.

The data value of the _safeMint method is set to an empty value.Can only be called while the open sale is open.

Parameters

NameTypeDescription
toaddressAddress of the collection smart contract of the token into which to mint the child token
numToMintuint256Number of tokens to mint
destinationIduint256ID of the token into which to mint the new child token

Returns

NameTypeDescription
firstTokenIduint256The ID of the first token to be minted in the current minting cycle

nestTransferFrom

function nestTransferFrom(address from, address to, uint256 tokenId, uint256 destinationId, bytes data) external nonpayable

Used to transfer the token into another token.

Parameters

NameTypeDescription
fromaddressAddress of the direct owner of the token to be transferred
toaddressAddress of the receiving token's collection smart contract
tokenIduint256ID of the token being transferred
destinationIduint256ID of the token to receive the token being transferred
databytesAdditional data with no specified format, sent in the addChild call

owner

function owner() external view returns (address owner_)

Returns the address of the current owner.

Returns

NameTypeDescription
owner_addressAddress of the current owner

ownerOf

function ownerOf(uint256 tokenId) external view returns (address owner_)

Used to retrieve the root owner of a given token.

The root owner of the token is an externally owned account (EOA). If the given token is child of another NFT, this will return an EOA address. Otherwise, if the token is owned by an EOA, this EOA will be returned.

Parameters

NameTypeDescription
tokenIduint256ID of the token for which the root owner has been retrieved

Returns

NameTypeDescription
owner_addressThe root owner of the token

pendingChildOf

function pendingChildOf(uint256 parentId, uint256 index) external view returns (struct IERC7401.Child child)

Used to retrieve a specific pending child token from a given parent token.

Returns a single Child struct locating at index of parent token's active child tokens array.The Child struct consists of the following values: [ tokenId, contractAddress ]

Parameters

NameTypeDescription
parentIduint256ID of the parent token for which the pending child token is being retrieved
indexuint256Index of the child token in the parent token's pending child tokens array

Returns

NameTypeDescription
childIERC7401.ChildA Child struct containting data about the specified child

pendingChildrenOf

function pendingChildrenOf(uint256 parentId) external view returns (struct IERC7401.Child[] children)

Used to retrieve the pending child tokens of a given parent token.

Returns array of pending Child structs existing for given parent.The Child struct consists of the following values: [ tokenId, contractAddress ]

Parameters

NameTypeDescription
parentIduint256ID of the parent token for which to retrieve the pending child tokens

Returns

NameTypeDescription
childrenIERC7401.Child[]An array of Child structs containing the parent token's pending child tokens

pricePerMint

function pricePerMint() external view returns (uint256 price)

Used to retrieve the price per mint.

Returns

NameTypeDescription
priceuint256The price per mint of a single token expressed in the lowest denomination of a native currency

rejectAllAssets

function rejectAllAssets(uint256 tokenId, uint256 maxRejections) external nonpayable

Rejects all assets from the pending array of a given token.

Effecitvely deletes the pending array.Requirements: - The caller must own the token or be approved to manage the token's assets - tokenId must exist.Emits a {AssetRejected} event with assetId = 0.

Parameters

NameTypeDescription
tokenIduint256ID of the token of which to clear the pending array.
maxRejectionsuint256Maximum number of expected assets to reject, used to prevent from rejecting assets which arrive just before this operation.

rejectAllChildren

function rejectAllChildren(uint256 tokenId, uint256 maxRejections) external nonpayable

Used to reject all pending children of a given parent token.

Removes the children from the pending array mapping.This does not update the ownership storage data on children. If necessary, ownership can be reclaimed by the rootOwner of the previous parent.Requirements: Requirements: - parentId must exist

Parameters

NameTypeDescription
tokenIduint256undefined
maxRejectionsuint256Maximum number of expected children to reject, used to prevent from rejecting children which arrive just before this operation.

rejectAsset

function rejectAsset(uint256 tokenId, uint256 index, uint64 assetId) external nonpayable

Rejects an asset from the pending array of given token.

Removes the asset from the token's pending asset array.Requirements: - The caller must own the token or be approved to manage the token's assets - tokenId must exist. - index must be in range of the length of the pending asset array.Emits a {AssetRejected} event.

Parameters

NameTypeDescription
tokenIduint256ID of the token that the asset is being rejected from
indexuint256Index of the asset in the pending array to be rejected
assetIduint64ID of the asset expected to be in the index

renounceOwnership

function renounceOwnership() external nonpayable

Leaves the contract without owner. Functions using the onlyOwner modifier will be disabled.

Can only be called by the current owner.Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.

royaltyInfo

function royaltyInfo(uint256 tokenId, uint256 salePrice) external view returns (address receiver, uint256 royaltyAmount)

Used to retrieve the information about who shall receive royalties of a sale of the specified token and how much they will be.

Parameters

NameTypeDescription
tokenIduint256ID of the token for which the royalty info is being retrieved
salePriceuint256Price of the token sale

Returns

NameTypeDescription
receiveraddressThe beneficiary receiving royalties of the sale
royaltyAmountuint256The value of the royalties recieved by the receiver from the sale

safeTransferFrom

function safeTransferFrom(address from, address to, uint256 tokenId) external nonpayable

Used to safely transfer a given token 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.

Parameters

NameTypeDescription
fromaddressAddress to transfer the tokens from
toaddressAddress to transfer the tokens to
tokenIduint256ID of the token to transfer

safeTransferFrom

function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) external nonpayable

Used to safely transfer a given token 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.

Parameters

NameTypeDescription
fromaddressAddress to transfer the tokens from
toaddressAddress to transfer the tokens to
tokenIduint256ID of the token to transfer
databytesAdditional data without a specified format to be sent along with the token transaction

setApprovalForAll

function setApprovalForAll(address operator, bool approved) external nonpayable

Used to 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.

Parameters

NameTypeDescription
operatoraddressAddress of the operator being managed
approvedboolA boolean value signifying whether the approval is being granted (true) or (revoked)

setApprovalForAllForAssets

function setApprovalForAllForAssets(address operator, bool approved) external nonpayable

Used to add or remove an operator of assets for the caller.

Operators can call {acceptAsset}, {rejectAsset}, {rejectAllAssets} or {setPriority} for any token owned by the caller.Requirements: - The operator cannot be the caller.Emits an {ApprovalForAllForAssets} event.

Parameters

NameTypeDescription
operatoraddressAddress of the account to which the operator role is granted or revoked from
approvedboolThe boolean value indicating whether the operator role is being granted (true) or revoked (false)

setPriority

function setPriority(uint256 tokenId, uint64[] priorities) external nonpayable

Sets a new priority array for a given token.

The priority array is a non-sequential list of uint64s, where the lowest value is considered highest priority.Value 0 of a priority is a special case equivalent to unitialized.Requirements: - The caller must own the token or be approved to manage the token's assets - tokenId must exist. - The length of priorities must be equal the length of the active assets array.Emits a {AssetPrioritySet} event.

Parameters

NameTypeDescription
tokenIduint256ID of the token to set the priorities for
prioritiesuint64[]An array of priorities of active assets. The succesion of items in the priorities array matches that of the succesion of items in the active array

supportsInterface

function supportsInterface(bytes4 interfaceId) external view returns (bool)

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 (opens in a new tab) section] to learn more about how these ids are created. This function call must use less than 30 000 gas.

Parameters

NameTypeDescription
interfaceIdbytes4undefined

Returns

NameTypeDescription
_0boolundefined

symbol

function symbol() external view returns (string symbol_)

Used to retrieve the collection symbol.

Returns

NameTypeDescription
symbol_stringSymbol of the collection

tokenURI

function tokenURI(uint256 tokenId) external view returns (string tokenURI_)

Used to retrieve the metadata URI of a token.

Parameters

NameTypeDescription
tokenIduint256ID of the token to retrieve the metadata URI for

Returns

NameTypeDescription
tokenURI_stringMetadata URI of the specified token

totalAssets

function totalAssets() external view returns (uint256 totalAssets_)

Used to retrieve the total number of assets.

Returns

NameTypeDescription
totalAssets_uint256The total number of assets

totalSupply

function totalSupply() external view returns (uint256 totalSupply_)

Used to retrieve the total supply of the tokens in a collection.

Returns

NameTypeDescription
totalSupply_uint256The number of tokens in a collection

transferChild

function transferChild(uint256 tokenId, address to, uint256 destinationId, uint256 childIndex, address childAddress, uint256 childId, bool isPending, bytes data) external nonpayable

Used to transfer a child token from a given parent token.

When transferring a child token, the owner of the token is set to to, or is not updated in the event of to being the 0x0 address.

Parameters

NameTypeDescription
tokenIduint256ID of the parent token from which the child token is being transferred
toaddressAddress to which to transfer the token to
destinationIduint256ID of the token to receive this child token (MUST be 0 if the destination is not a token)
childIndexuint256Index of a token we are transferring, in the array it belongs to (can be either active array or pending array)
childAddressaddressAddress of the child token's collection smart contract.
childIduint256ID of the child token in its own collection smart contract.
isPendingboolA boolean value indicating whether the child token being transferred is in the pending array of the parent token (true) or in the active array (false)
databytesAdditional data with no specified format, sent in call to _to

transferFrom

function transferFrom(address from, address to, uint256 tokenId) external nonpayable

Transfers a given token from from to to.

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.

Parameters

NameTypeDescription
fromaddressAddress from which to transfer the token from
toaddressAddress to which to transfer the token to
tokenIduint256ID of the token to transfer

transferOwnership

function transferOwnership(address newOwner) external nonpayable

Transfers ownership of the contract to a new owner.

Can only be called by the current owner.

Parameters

NameTypeDescription
newOwneraddressAddress of the new owner's account

updateRoyaltyRecipient

function updateRoyaltyRecipient(address newRoyaltyRecipient) external nonpayable

Used to update recipient of royalties.

Custom access control has to be implemented to ensure that only the intended actors can update the beneficiary.

Parameters

NameTypeDescription
newRoyaltyRecipientaddressAddress of the new recipient of royalties

withdrawRaisedERC20

function withdrawRaisedERC20(address erc20, address to, uint256 amount) external nonpayable

Used to withdraw the minting proceedings to a specified address.

This function can only be called by the owner.

Parameters

NameTypeDescription
erc20addressAddress of the ERC20 token to withdraw
toaddressAddress to receive the given amount of minting proceedings
amountuint256The amount to withdraw

Events

AllChildrenRejected

event AllChildrenRejected(uint256 indexed tokenId)

Used to notify listeners that all pending child tokens of a given token have been rejected.

Emitted when a token removes all a child tokens from its pending array.

Parameters

NameTypeDescription
tokenId indexeduint256ID of the token that rejected all of the pending children

Approval

event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)

Emitted when owner enables approved to manage the tokenId token.

Parameters

NameTypeDescription
owner indexedaddressundefined
approved indexedaddressundefined
tokenId indexeduint256undefined

ApprovalForAll

event ApprovalForAll(address indexed owner, address indexed operator, bool approved)

Emitted when owner enables or disables (approved) operator to manage all of its assets.

Parameters

NameTypeDescription
owner indexedaddressundefined
operator indexedaddressundefined
approvedboolundefined

ApprovalForAllForAssets

event ApprovalForAllForAssets(address indexed owner, address indexed operator, bool approved)

Used to notify listeners that owner has granted approval to the user to manage assets of all of their tokens.

Parameters

NameTypeDescription
owner indexedaddressAddress of the account that has granted the approval for all assets on all of their tokens
operator indexedaddressAddress of the account that has been granted the approval to manage the token's assets on all of the tokens
approvedboolBoolean value signifying whether the permission has been granted (true) or revoked (false)

ApprovalForAssets

event ApprovalForAssets(address indexed owner, address indexed approved, uint256 indexed tokenId)

Used to notify listeners that owner has granted an approval to the user to manage the assets of a given token.

Approvals must be cleared on transfer

Parameters

NameTypeDescription
owner indexedaddressAddress of the account that has granted the approval for all token's assets
approved indexedaddressAddress of the account that has been granted approval to manage the token's assets
tokenId indexeduint256ID of the token on which the approval was granted

AssetAccepted

event AssetAccepted(uint256 indexed tokenId, uint64 indexed assetId, uint64 indexed replacesId)

Used to notify listeners that an asset object at assetId is accepted by the token and migrated from token's pending assets array to active assets array of the token.

Parameters

NameTypeDescription
tokenId indexeduint256ID of the token that had a new asset accepted
assetId indexeduint64ID of the asset that was accepted
replacesId indexeduint64ID of the asset that was replaced

AssetAddedToTokens

event AssetAddedToTokens(uint256[] tokenIds, uint64 indexed assetId, uint64 indexed replacesId)

Used to notify listeners that an asset object at assetId is added to token's pending asset array.

Parameters

NameTypeDescription
tokenIdsuint256[]An array of token IDs that received a new pending asset
assetId indexeduint64ID of the asset that has been added to the token's pending assets array
replacesId indexeduint64ID of the asset that would be replaced

AssetPrioritySet

event AssetPrioritySet(uint256 indexed tokenId)

Used to notify listeners that token's prioritiy array is reordered.

Parameters

NameTypeDescription
tokenId indexeduint256ID of the token that had the asset priority array updated

AssetRejected

event AssetRejected(uint256 indexed tokenId, uint64 indexed assetId)

Used to notify listeners that an asset object at assetId is rejected from token and is dropped from the pending assets array of the token.

Parameters

NameTypeDescription
tokenId indexeduint256ID of the token that had an asset rejected
assetId indexeduint64ID of the asset that was rejected

AssetSet

event AssetSet(uint64 indexed assetId)

Used to notify listeners that an asset object is initialized at assetId.

Parameters

NameTypeDescription
assetId indexeduint64ID of the asset that was initialized

ChildAccepted

event ChildAccepted(uint256 indexed tokenId, uint256 childIndex, address indexed childAddress, uint256 indexed childId)

Used to notify listeners that a new child token was accepted by the parent token.

Emitted when a parent token accepts a token from its pending array, migrating it to the active array.

Parameters

NameTypeDescription
tokenId indexeduint256ID of the token that accepted a new child token
childIndexuint256Index of the newly accepted child token in the parent token's active children array
childAddress indexedaddressAddress of the child token's collection smart contract
childId indexeduint256ID of the child token in the child token's collection smart contract

ChildProposed

event ChildProposed(uint256 indexed tokenId, uint256 childIndex, address indexed childAddress, uint256 indexed childId)

Used to notify listeners that a new token has been added to a given token's pending children array.

Emitted when a child NFT is added to a token's pending array.

Parameters

NameTypeDescription
tokenId indexeduint256ID of the token that received a new pending child token
childIndexuint256Index of the proposed child token in the parent token's pending children array
childAddress indexedaddressAddress of the proposed child token's collection smart contract
childId indexeduint256ID of the child token in the child token's collection smart contract

ChildTransferred

event ChildTransferred(uint256 indexed tokenId, uint256 childIndex, address indexed childAddress, uint256 indexed childId, bool fromPending, bool toZero)

Used to notify listeners a child token has been transferred from parent token.

Emitted when a token transfers a child from itself, transferring ownership to the root owner.

Parameters

NameTypeDescription
tokenId indexeduint256ID of the token that transferred a child token
childIndexuint256Index of a child in the array from which it is being transferred
childAddress indexedaddressAddress of the child token's collection smart contract
childId indexeduint256ID of the child token in the child token's collection smart contract
fromPendingboolA boolean value signifying whether the token was in the pending child tokens array (true) or in the active child tokens array (false)
toZeroboolA boolean value signifying whether the token is being transferred to the 0x0 address (true) or not (false)

ContributorUpdate

event ContributorUpdate(address indexed contributor, bool isContributor)

Event that signifies that an address was granted contributor role or that the permission has been revoked.

This can only be triggered by a current owner, so there is no need to include that information in the event.

Parameters

NameTypeDescription
contributor indexedaddressAddress of the account that had contributor role status updated
isContributorboolA boolean value signifying whether the role has been granted (true) or revoked (false)

NestTransfer

event NestTransfer(address indexed from, address indexed to, uint256 fromTokenId, uint256 toTokenId, uint256 indexed tokenId)

Used to notify listeners that the token is being transferred.

Emitted when tokenId token is transferred from from to to.

Parameters

NameTypeDescription
from indexedaddressAddress of the previous immediate owner, which is a smart contract if the token was nested.
to indexedaddressAddress of the new immediate owner, which is a smart contract if the token is being nested.
fromTokenIduint256ID of the previous parent token. If the token was not nested before, the value should be 0
toTokenIduint256ID of the new parent token. If the token is not being nested, the value should be 0
tokenId indexeduint256ID of the token being transferred

OwnershipTransferred

event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)

Used to anounce the transfer of ownership.

Parameters

NameTypeDescription
previousOwner indexedaddressAddress of the account that transferred their ownership role
newOwner indexedaddressAddress of the account receiving the ownership role

Transfer

event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)

Emitted when tokenId token is transferred from from to to.

Parameters

NameTypeDescription
from indexedaddressundefined
to indexedaddressundefined
tokenId indexeduint256undefined

Errors

ERC721AddressZeroIsNotaValidOwner

error ERC721AddressZeroIsNotaValidOwner()

Attempting to grant the token to 0x0 address

ERC721ApprovalToCurrentOwner

error ERC721ApprovalToCurrentOwner()

Attempting to grant approval to the current owner of the token

ERC721ApproveCallerIsNotOwnerNorApprovedForAll

error ERC721ApproveCallerIsNotOwnerNorApprovedForAll()

Attempting to grant approval when not being owner or approved for all should not be permitted

ERC721ApproveToCaller

error ERC721ApproveToCaller()

Attempting to grant approval to self

ERC721InvalidTokenId

error ERC721InvalidTokenId()

Attempting to use an invalid token ID

ERC721MintToTheZeroAddress

error ERC721MintToTheZeroAddress()

Attempting to mint to 0x0 address

ERC721NotApprovedOrOwner

error ERC721NotApprovedOrOwner()

Attempting to manage a token without being its owner or approved by the owner

ERC721TokenAlreadyMinted

error ERC721TokenAlreadyMinted()

Attempting to mint an already minted token

ERC721TransferFromIncorrectOwner

error ERC721TransferFromIncorrectOwner()

Attempting to transfer the token from an address that is not the owner

ERC721TransferToNonReceiverImplementer

error ERC721TransferToNonReceiverImplementer()

Attempting to safe transfer to an address that is unable to receive the token

ERC721TransferToTheZeroAddress

error ERC721TransferToTheZeroAddress()

Attempting to transfer the token to a 0x0 address

IndexOutOfBounds

error IndexOutOfBounds()

RMRKApprovalForAssetsToCurrentOwner

error RMRKApprovalForAssetsToCurrentOwner()

Attempting to grant approval of assets to their current owner

RMRKApproveForAssetsCallerIsNotOwnerNorApprovedForAll

error RMRKApproveForAssetsCallerIsNotOwnerNorApprovedForAll()

Attempting to grant approval of assets without being the caller or approved for all

RMRKAssetAlreadyExists

error RMRKAssetAlreadyExists()

Attempting to add an asset using an ID that has already been used

RMRKBadPriorityListLength

error RMRKBadPriorityListLength()

Attempting to set the priorities with an array of length that doesn't match the length of active assets array

RMRKChildAlreadyExists

error RMRKChildAlreadyExists()

Attempting to accept a child that has already been accepted

RMRKChildIndexOutOfRange

error RMRKChildIndexOutOfRange()

Attempting to interact with a child, using index that is higher than the number of children

RMRKIdZeroForbidden

error RMRKIdZeroForbidden()

Attempting to use ID 0, which is not supported

The ID 0 in RMRK suite is reserved for empty values. Guarding against its use ensures the expected operation

RMRKIndexOutOfRange

error RMRKIndexOutOfRange()

Attempting to interact with an asset, using index greater than number of assets

RMRKIsNotContract

error RMRKIsNotContract()

Attempting to interact with an end-user account when the contract account is expected

RMRKMaxPendingAssetsReached

error RMRKMaxPendingAssetsReached()

Attempting to add a pending asset after the number of pending assets has reached the limit (default limit is 128)

RMRKMaxPendingChildrenReached

error RMRKMaxPendingChildrenReached()

Attempting to add a pending child after the number of pending children has reached the limit (default limit is 128)

RMRKMaxRecursiveBurnsReached

error RMRKMaxRecursiveBurnsReached(address childContract, uint256 childId)

Attempting to burn a total number of recursive children higher than maximum set

Parameters

NameTypeDescription
childContractaddressAddress of the collection smart contract in which the maximum number of recursive burns was reached
childIduint256ID of the child token at which the maximum number of recursive burns was reached

RMRKMintOverMax

error RMRKMintOverMax()

Attempting to mint a number of tokens that would cause the total supply to be greater than maximum supply

RMRKMintZero

error RMRKMintZero()

Attempting to mint zero tokens

RMRKNestableTooDeep

error RMRKNestableTooDeep()

Attempting to nest a child over the nestable limit (current limit is 100 levels of nesting)

RMRKNestableTransferToDescendant

error RMRKNestableTransferToDescendant()

Attempting to nest the token to own descendant, which would create a loop and leave the looped tokens in limbo

RMRKNestableTransferToNonRMRKNestableImplementer

error RMRKNestableTransferToNonRMRKNestableImplementer()

Attempting to nest the token to a smart contract that doesn't support nesting

RMRKNestableTransferToSelf

error RMRKNestableTransferToSelf()

Attempting to nest the token into itself

RMRKNewContributorIsZeroAddress

error RMRKNewContributorIsZeroAddress()

Attempting to assign a 0x0 address as a contributor

RMRKNewOwnerIsZeroAddress

error RMRKNewOwnerIsZeroAddress()

Attempting to transfer the ownership to the 0x0 address

RMRKNoAssetMatchingId

error RMRKNoAssetMatchingId()

Attempting to interact with an asset that can not be found

RMRKNotApprovedForAssetsOrOwner

error RMRKNotApprovedForAssetsOrOwner()

Attempting to manage an asset without owning it or having been granted permission by the owner to do so

RMRKNotApprovedOrDirectOwner

error RMRKNotApprovedOrDirectOwner()

Attempting to interact with a token without being its owner or having been granted permission by the owner to do so

When a token is nested, only the direct owner (NFT parent) can mange it. In that case, approved addresses are not allowed to manage it, in order to ensure the expected behaviour

RMRKNotOwner

error RMRKNotOwner()

Attempting to interact with a management function without being the smart contract's owner

RMRKNotOwnerOrContributor

error RMRKNotOwnerOrContributor()

Attempting to interact with a function without being the owner or contributor of the collection

RMRKPendingChildIndexOutOfRange

error RMRKPendingChildIndexOutOfRange()

Attempting to interact with a pending child using an index greater than the size of pending array

RMRKRoyaltiesTooHigh

error RMRKRoyaltiesTooHigh()

Attempting to set the royalties to a value higher than 100% (10000 in basis points)

RMRKTokenDoesNotHaveAsset

error RMRKTokenDoesNotHaveAsset()

Attempting to compose a NFT of a token without active assets

RMRKUnexpectedAssetId

error RMRKUnexpectedAssetId()

Attempting to accept or reject an asset which does not match the one at the specified index

RMRKUnexpectedChildId

error RMRKUnexpectedChildId()

Attempting to accept or transfer a child which does not match the one at the specified index

RMRKUnexpectedNumberOfAssets

error RMRKUnexpectedNumberOfAssets()

Attempting to reject all pending assets but more assets than expected are pending

RMRKUnexpectedNumberOfChildren

error RMRKUnexpectedNumberOfChildren()

Attempting to reject all pending children but children assets than expected are pending