Skip to main content

NFT (ERC-721)

Pallet Precompile

Use this precompile to interact with the nft runtime pallet to create an ERC-721 collection.

Contract Address

0x00000000000000000000000000000000000006b9

Solidity Interfaces

interface TRNNFT is IERC165 {
event InitializeCollection(address indexed collectionOwner, address precompileAddress);
function initializeCollection(address owner, bytes calldata name, uint32 maxIssuance, bytes calldata metadataPath, address[] calldata royaltyAddresses, uint32[] calldata royaltyEntitlements) external returns (address, uint32);
}

Token Precompile

Contract Address

The ERC-721 contract address for The Root Network native non-fungible token uses the following format:

0xAAAAAAAA[4-byte-collection-id]000000000000000000000000
tip

To make things easier, the @therootnetwork/evm provides a handy function to convert token asset ID to its equivalent contract address.

import { collectionIdToERC721Address } from "@therootnetwork/evm";

const COLLECTION_ID = 1;
const COLLECTION_CONTRACT_ADDRESS = collectionIdToERC721Address(COLLECTION_ID);

Solidity Interfaces

interface IERC721 is IERC165 {
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

function balanceOf(address owner) external view returns (uint256 balance);
function ownerOf(uint256 tokenId) external view returns (address owner);
function safeTransferFrom(address from, address to, uint256 tokenId) external;
function transferFrom(address from, address to, uint256 tokenId) external;
function approve(address to, uint256 tokenId) external;
function getApproved(uint256 tokenId) external view returns (address operator);
function setApprovalForAll(address operator, bool _approved) external;
function isApprovedForAll(address owner, address operator) external view returns (bool);
function safeTransferFrom(address from,address to,uint256 tokenId,bytes calldata data) external;
}
interface IERC721Metadata is IERC721 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function tokenURI(uint256 tokenId) external view returns (string memory);
}
interface TRN721 is IERC165 {
event MaxSupplyUpdated(uint32 maxSupply);
event BaseURIUpdated(string baseURI);

function totalSupply() external view returns (uint256);
function mint(address owner, uint32 quantity) external;
function setMaxSupply(uint32 maxSupply) external;
function setBaseURI(bytes calldata baseURI) external;
function ownedTokens(address who, uint16 limit, uint32 cursor) external view returns (uint32, uint32, uint32[] memory);
}
interface Ownable is IERC165 {
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

function owner() external view returns (address);
function renounceOwnership() external;
function transferOwnership(address owner) external;
}