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.