Skip to content

Nft pallet ​

Derived from live runtime metadata on TRN root (pallet index 17, captured 2026-05-02). For prose-style documentation see Nft on the curated reference side.

Pallet index
17
Calls
18
Events
19
Errors
31
Storage items
8
Constants
3

Calls (extrinsics) ​

Nft.claim_unowned_collection ​

See [Pallet::claim_unowned_collection].

ts
api.tx.nft.claim_unowned_collection(collection_id: u32, new_owner: [u8;20])
ArgumentTypeDoc
collection_idu32CollectionUuid
new_owner[u8;20]T::AccountId

Call index: 0

Nft.set_owner ​

See [Pallet::set_owner].

ts
api.tx.nft.set_owner(collection_id: u32, new_owner: [u8;20])
ArgumentTypeDoc
collection_idu32CollectionUuid
new_owner[u8;20]T::AccountId

Call index: 1

Nft.set_max_issuance ​

See [Pallet::set_max_issuance].

ts
api.tx.nft.set_max_issuance(collection_id: u32, max_issuance: u32)
ArgumentTypeDoc
collection_idu32CollectionUuid
max_issuanceu32TokenCount

Call index: 2

Nft.set_base_uri ​

See [Pallet::set_base_uri].

ts
api.tx.nft.set_base_uri(collection_id: u32, base_uri: Bytes)
ArgumentTypeDoc
collection_idu32CollectionUuid
base_uriBytesVec<u8>

Call index: 3

Nft.create_collection ​

See [Pallet::create_collection].

ts
api.tx.nft.create_collection(name: Bytes, initial_issuance: u32, max_issuance: Option<u32>, token_owner: Option<SeedPrimitivesSignatureAccountId20>, metadata_scheme: Bytes, royalties_schedule: Option<SeedPrimitivesNftRoyaltiesSchedule>, cross_chain_compatibility: {"xrpl":"bool"})
ArgumentTypeDoc
nameBytesBoundedVec<u8, T::StringLimit>
initial_issuanceu32TokenCount
max_issuanceOption&lt;u32&gt;Option<TokenCount>
token_ownerOption&lt;SeedPrimitivesSignatureAccountId20&gt;Option<T::AccountId>
metadata_schemeBytesMetadataScheme
royalties_scheduleOption&lt;SeedPrimitivesNftRoyaltiesSchedule&gt;Option<RoyaltiesSchedule<T::AccountId>>
cross_chain_compatibility{"xrpl":"bool"}CrossChainCompatibility

Call index: 4

Nft.toggle_public_mint ​

See [Pallet::toggle_public_mint].

ts
api.tx.nft.toggle_public_mint(collection_id: u32, enabled: bool)
ArgumentTypeDoc
collection_idu32CollectionUuid
enabledboolbool

Call index: 5

Nft.set_mint_fee ​

See [Pallet::set_mint_fee].

ts
api.tx.nft.set_mint_fee(collection_id: u32, pricing_details: Option<(u32,u128)>)
ArgumentTypeDoc
collection_idu32CollectionUuid
pricing_detailsOption&lt;(u32,u128)&gt;Option<(AssetId, Balance)>

Call index: 6

Nft.mint ​

See [Pallet::mint].

ts
api.tx.nft.mint(collection_id: u32, quantity: u32, token_owner: Option<SeedPrimitivesSignatureAccountId20>)
ArgumentTypeDoc
collection_idu32CollectionUuid
quantityu32TokenCount
token_ownerOption&lt;SeedPrimitivesSignatureAccountId20&gt;Option<T::AccountId>

Call index: 7

Nft.transfer ​

See [Pallet::transfer].

ts
api.tx.nft.transfer(collection_id: u32, serial_numbers: Vec<u32>, new_owner: [u8;20])
ArgumentTypeDoc
collection_idu32CollectionUuid
serial_numbersVec&lt;u32&gt;BoundedVec<SerialNumber, T::TransferLimit>
new_owner[u8;20]T::AccountId

Call index: 8

Nft.burn ​

See [Pallet::burn].

ts
api.tx.nft.burn(token_id: (u32,u32))
ArgumentTypeDoc
token_id(u32,u32)TokenId

Call index: 9

Nft.set_name ​

See [Pallet::set_name].

ts
api.tx.nft.set_name(collection_id: u32, name: Bytes)
ArgumentTypeDoc
collection_idu32CollectionUuid
nameBytesBoundedVec<u8, T::StringLimit>

Call index: 10

Nft.set_royalties_schedule ​

See [Pallet::set_royalties_schedule].

ts
api.tx.nft.set_royalties_schedule(collection_id: u32, royalties_schedule: {"entitlements":"Vec<(SeedPrimitivesSignatureAccountId20,Permill)>"})
ArgumentTypeDoc
collection_idu32CollectionUuid
royalties_schedule{"entitlements":"Vec&lt;(SeedPrimitivesSignatureAccountId20,Permill)&gt;"}RoyaltiesSchedule<T::AccountId>

Call index: 11

Nft.set_utility_flags ​

See [Pallet::set_utility_flags].

ts
api.tx.nft.set_utility_flags(collection_id: u32, utility_flags: {"transferable":"bool","burnable":"bool","mintable":"bool"})
ArgumentTypeDoc
collection_idu32CollectionUuid
utility_flags{"transferable":"bool","burnable":"bool","mintable":"bool"}CollectionUtilityFlags

Call index: 12

Nft.set_token_transferable_flag ​

See [Pallet::set_token_transferable_flag].

ts
api.tx.nft.set_token_transferable_flag(token_id: (u32,u32), transferable: bool)
ArgumentTypeDoc
token_id(u32,u32)TokenId
transferableboolbool

Call index: 13

Nft.issue_soulbound ​

See [Pallet::issue_soulbound].

ts
api.tx.nft.issue_soulbound(collection_id: u32, quantity: u32, token_owner: [u8;20], burn_authority: {"_enum":["CollectionOwner","TokenOwner","Both","Neither"]})
ArgumentTypeDoc
collection_idu32CollectionUuid
quantityu32TokenCount
token_owner[u8;20]T::AccountId
burn_authority{"_enum":["CollectionOwner","TokenOwner","Both","Neither"]}TokenBurnAuthority

Call index: 14

Nft.accept_soulbound_issuance ​

See [Pallet::accept_soulbound_issuance].

ts
api.tx.nft.accept_soulbound_issuance(collection_id: u32, issuance_id: u32)
ArgumentTypeDoc
collection_idu32CollectionUuid
issuance_idu32u32

Call index: 15

Nft.set_additional_data ​

See [Pallet::set_additional_data].

ts
api.tx.nft.set_additional_data(token_id: (u32,u32), additional_data: Option<Bytes>)
ArgumentTypeDoc
token_id(u32,u32)TokenId
additional_dataOption&lt;Bytes&gt;Option<BoundedVec<u8, T::MaxDataLength>>

Call index: 16

Nft.mint_with_additional_data ​

See [Pallet::mint_with_additional_data].

ts
api.tx.nft.mint_with_additional_data(collection_id: u32, token_owner: Option<SeedPrimitivesSignatureAccountId20>, additional_data: Bytes)
ArgumentTypeDoc
collection_idu32CollectionUuid
token_ownerOption&lt;SeedPrimitivesSignatureAccountId20&gt;Option<T::AccountId>
additional_dataBytesBoundedVec<u8, T::MaxDataLength>

Call index: 17

Events ​

Nft.CollectionCreate ​

A new collection of tokens was created

FieldTypeDoc
collection_uuidu32
initial_issuanceu32
max_issuanceOption&lt;u32&gt;
collection_owner[u8;20]
metadata_schemeBytes
nameBytes
royalties_scheduleOption&lt;SeedPrimitivesNftRoyaltiesSchedule&gt;
origin_chain{"_enum":["Ethereum","Root","XRPL"]}
compatibility{"xrpl":"bool"}

Nft.PublicMintToggle ​

Public minting was enabled/disabled for a collection

FieldTypeDoc
collection_idu32
enabledbool

Nft.Mint ​

Token(s) were minted

FieldTypeDoc
collection_idu32
startu32
endu32
owner[u8;20]

Nft.MintFeePaid ​

Payment was made to cover a public mint

FieldTypeDoc
who[u8;20]
collection_idu32
payment_assetu32
payment_amountu128
token_countu32

Nft.MintPriceSet ​

A mint price was set for a collection

FieldTypeDoc
collection_idu32
payment_assetOption&lt;u32&gt;
mint_priceOption&lt;u128&gt;

Nft.BridgedMint ​

Token(s) were bridged

FieldTypeDoc
collection_idu32
serial_numbersVec&lt;u32&gt;
owner[u8;20]

Nft.OwnerSet ​

A new owner was set

FieldTypeDoc
collection_idu32
new_owner[u8;20]

Nft.MaxIssuanceSet ​

Max issuance was set

FieldTypeDoc
collection_idu32
max_issuanceu32

Nft.BaseUriSet ​

Base URI was set

FieldTypeDoc
collection_idu32
base_uriBytes

Nft.NameSet ​

Name was set

FieldTypeDoc
collection_idu32
nameBytes

Nft.RoyaltiesScheduleSet ​

Royalties schedule was set

FieldTypeDoc
collection_idu32
royalties_schedule{"entitlements":"Vec&lt;(SeedPrimitivesSignatureAccountId20,Permill)&gt;"}

Nft.Transfer ​

A token was transferred

FieldTypeDoc
previous_owner[u8;20]
collection_idu32
serial_numbersVec&lt;u32&gt;
new_owner[u8;20]

Nft.Burn ​

A token was burned

FieldTypeDoc
token_owner[u8;20]
collection_idu32
serial_numberu32

Nft.CollectionClaimed ​

Collection has been claimed

FieldTypeDoc
account[u8;20]
collection_idu32

Nft.UtilityFlagsSet ​

Utility flags were set for a collection

FieldTypeDoc
collection_idu32
utility_flags{"transferable":"bool","burnable":"bool","mintable":"bool"}

Nft.TokenTransferableFlagSet ​

Token transferable flag was set

FieldTypeDoc
token_id(u32,u32)
transferablebool

Nft.PendingIssuanceCreated ​

A pending issuance for a soulbound token has been created

FieldTypeDoc
collection_idu32
issuance_idu32
token_owner[u8;20]
quantityu32
burn_authority{"_enum":["CollectionOwner","TokenOwner","Both","Neither"]}

Nft.Issued ​

Soulbound tokens were successfully issued

FieldTypeDoc
token_owner[u8;20]
startu32
endu32
burn_authority{"_enum":["CollectionOwner","TokenOwner","Both","Neither"]}

Nft.AdditionalDataSet ​

Some additional data has been set for a token

FieldTypeDoc
token_id(u32,u32)
additional_dataOption&lt;Bytes&gt;

Errors ​

Nft.CollectionNameInvalid ​

Given collection name is invalid (invalid utf-8, too long, empty)

Nft.NoAvailableIds ​

No more Ids are available, they've been exhausted

Nft.NotTokenOwner ​

Origin does not own the NFT

Nft.NoToken ​

The token does not exist

Nft.NotCollectionOwner ​

Origin is not the collection owner and is not permitted to perform the operation

Nft.PublicMintDisabled ​

This collection has not allowed public minting

Nft.TokenLocked ​

Cannot operate on a listed NFT

Nft.RoyaltiesInvalid ​

Total royalties would exceed 100% of sale or an empty vec is supplied

Nft.NoCollectionFound ​

The collection does not exist

Nft.InvalidMetadataPath ​

The metadata path is invalid (non-utf8 or empty)

Nft.InvalidNewOwner ​

The caller can not be the new owner

Nft.InvalidAdditionalData ​

The additional data cannot be an empty vec

Nft.TokenLimitExceeded ​

The number of tokens have exceeded the max tokens allowed

Nft.MintLimitExceeded ​

The quantity exceeds the max tokens per mint limit

Nft.InvalidMaxIssuance ​

Max issuance needs to be greater than 0 and initial_issuance Cannot exceed MaxTokensPerCollection

Nft.MaxIssuanceAlreadySet ​

The max issuance has already been set and can't be changed

Nft.MaxIssuanceReached ​

The collection max issuance has been reached and no more tokens can be minted

Nft.AttemptedMintOnBridgedToken ​

Attemped to mint a token that was bridged from a different chain

Nft.CannotClaimNonClaimableCollections ​

Cannot claim already claimed collections

Nft.CannotUpdateMetadata ​

Only Root originated NFTs that are not XLS-20 compatible can have their metadata updated

Nft.InitialIssuanceNotZero ​

Initial issuance on XLS-20 compatible collections must be zero

Nft.CollectionIssuanceNotZero ​

Total issuance of collection must be zero to add xls20 compatibility

Nft.BlockedMint ​

Token(s) blocked from minting during the bridging process

Nft.MintUtilityBlocked ​

Minting has been disabled for tokens within this collection

Nft.TransferUtilityBlocked ​

Transfer has been disabled for tokens within this collection

Nft.BurnUtilityBlocked ​

Burning has been disabled for tokens within this collection

Nft.PendingIssuanceLimitExceeded ​

The number of pending issuances has exceeded the max for a collection

Nft.InvalidPendingIssuance ​

Attempted to accept an issuance that does not exist, or is not set for the caller

Nft.CannotUpdateTokenUtility ​

Attempted to update the token utility flags for a soulbound token

Nft.InvalidBurnAuthority ​

Attempted to burn a token from an account that does not adhere to the token's burn authority

Nft.SerialNumbersNotUnique ​

The SerialNumbers attempting to be transferred are not unique

Storage ​

Nft.CollectionInfo ​

Map from collection to its information

ts
await api.query.nft.collectionInfo(key1)
  • Key: u32 (hasher: Twox64Concat)
  • Returns: {"owner":"SeedPrimitivesSignatureAccountId20","name":"Bytes","metadataScheme":"Bytes","royaltiesSchedule":"Option<SeedPrimitivesNftRoyaltiesSchedule>","maxIssuance":"Option<u32>","originChain":"SeedPrimitivesNftOriginChain","nextSerialNumber":"u32","collectionIssuance":"u32","crossChainCompatibility":"SeedPrimitivesNftCrossChainCompatibility"}

Modifier: Optional

Nft.TokenInfo ​

Map from a token to its information, including owner, lock_status and utility_flags

ts
await api.query.nft.tokenInfo(key1, key2)
  • Key: (u32,u32) (hashers: Twox64Concat, Twox64Concat)
  • Returns: {"owner":"SeedPrimitivesSignatureAccountId20","lockStatus":"Option<SeedPrimitivesNftTokenLockReason>","utilityFlags":"SeedPalletCommonUtilsTokenUtilityFlags"}

Modifier: Optional

Nft.OwnedTokens ​

All tokens owned by a single account

ts
await api.query.nft.ownedTokens(key1, key2)
  • Key: (SeedPrimitivesSignatureAccountId20,u32) (hashers: Blake2_128Concat, Twox64Concat)
  • Returns: Vec<u32>

Modifier: Optional

Nft.PublicMintInfo ​

Map from collection to its public minting information

ts
await api.query.nft.publicMintInfo(key1)
  • Key: u32 (hasher: Twox64Concat)
  • Returns: {"enabled":"bool","pricingDetails":"Option<(u32,u128)>"}

Modifier: Optional

Nft.NextCollectionId ​

The next available incrementing collection id

ts
await api.query.nft.nextCollectionId()

Returns: u32

Modifier: Default

Nft.UtilityFlags ​

Map from a collection to additional utility flags

ts
await api.query.nft.utilityFlags(key1)
  • Key: u32 (hasher: Twox64Concat)
  • Returns: {"transferable":"bool","burnable":"bool","mintable":"bool"}

Modifier: Default

Nft.AdditionalTokenData ​

Map from a token_id to additional token data. Useful for assigning extra information to a token outside the collection metadata.

ts
await api.query.nft.additionalTokenData(key1)
  • Key: (u32,u32) (hasher: Twox64Concat)
  • Returns: Bytes

Modifier: Default

Nft.PendingIssuances ​

ts
await api.query.nft.pendingIssuances(key1)
  • Key: u32 (hasher: Twox64Concat)
  • Returns: {"nextIssuanceId":"u32","pendingIssuances":"Vec<(SeedPrimitivesSignatureAccountId20,Vec<PalletNftPendingIssuance>)>"}

Modifier: Default

Constants ​

Nft.PalletId ​

This pallet's Id, used for deriving a sovereign account ID

Type: [u8;8]
SCALE-encoded value: 0x6e66746f6b656e73

Nft.StringLimit ​

The maximum length of a collection name, stored on-chain

Type: u32
SCALE-encoded value: 0x32000000

Nft.MaxDataLength ​

The maximum length of the stored additional data for a token

Type: u32
SCALE-encoded value: 0x64000000

Source: live chain metadata from wss://root.rootnet.live/archive/ws · captured 2026-05-02

Curated independently by Codeology. Source-attributed reference for The Root Network. Not affiliated with Futureverse / TRN Labs.