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].
api.tx.nft.claim_unowned_collection(collection_id: u32, new_owner: [u8;20])| Argument | Type | Doc |
|---|---|---|
collection_id | u32 | CollectionUuid |
new_owner | [u8;20] | T::AccountId |
Call index: 0
Nft.set_owner
See [
Pallet::set_owner].
api.tx.nft.set_owner(collection_id: u32, new_owner: [u8;20])| Argument | Type | Doc |
|---|---|---|
collection_id | u32 | CollectionUuid |
new_owner | [u8;20] | T::AccountId |
Call index: 1
Nft.set_max_issuance
See [
Pallet::set_max_issuance].
api.tx.nft.set_max_issuance(collection_id: u32, max_issuance: u32)| Argument | Type | Doc |
|---|---|---|
collection_id | u32 | CollectionUuid |
max_issuance | u32 | TokenCount |
Call index: 2
Nft.set_base_uri
See [
Pallet::set_base_uri].
api.tx.nft.set_base_uri(collection_id: u32, base_uri: Bytes)| Argument | Type | Doc |
|---|---|---|
collection_id | u32 | CollectionUuid |
base_uri | Bytes | Vec<u8> |
Call index: 3
Nft.create_collection
See [
Pallet::create_collection].
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"})| Argument | Type | Doc |
|---|---|---|
name | Bytes | BoundedVec<u8, T::StringLimit> |
initial_issuance | u32 | TokenCount |
max_issuance | Option<u32> | Option<TokenCount> |
token_owner | Option<SeedPrimitivesSignatureAccountId20> | Option<T::AccountId> |
metadata_scheme | Bytes | MetadataScheme |
royalties_schedule | Option<SeedPrimitivesNftRoyaltiesSchedule> | Option<RoyaltiesSchedule<T::AccountId>> |
cross_chain_compatibility | {"xrpl":"bool"} | CrossChainCompatibility |
Call index: 4
Nft.toggle_public_mint
See [
Pallet::toggle_public_mint].
api.tx.nft.toggle_public_mint(collection_id: u32, enabled: bool)| Argument | Type | Doc |
|---|---|---|
collection_id | u32 | CollectionUuid |
enabled | bool | bool |
Call index: 5
Nft.set_mint_fee
See [
Pallet::set_mint_fee].
api.tx.nft.set_mint_fee(collection_id: u32, pricing_details: Option<(u32,u128)>)| Argument | Type | Doc |
|---|---|---|
collection_id | u32 | CollectionUuid |
pricing_details | Option<(u32,u128)> | Option<(AssetId, Balance)> |
Call index: 6
Nft.mint
See [
Pallet::mint].
api.tx.nft.mint(collection_id: u32, quantity: u32, token_owner: Option<SeedPrimitivesSignatureAccountId20>)| Argument | Type | Doc |
|---|---|---|
collection_id | u32 | CollectionUuid |
quantity | u32 | TokenCount |
token_owner | Option<SeedPrimitivesSignatureAccountId20> | Option<T::AccountId> |
Call index: 7
Nft.transfer
See [
Pallet::transfer].
api.tx.nft.transfer(collection_id: u32, serial_numbers: Vec<u32>, new_owner: [u8;20])| Argument | Type | Doc |
|---|---|---|
collection_id | u32 | CollectionUuid |
serial_numbers | Vec<u32> | BoundedVec<SerialNumber, T::TransferLimit> |
new_owner | [u8;20] | T::AccountId |
Call index: 8
Nft.burn
See [
Pallet::burn].
api.tx.nft.burn(token_id: (u32,u32))| Argument | Type | Doc |
|---|---|---|
token_id | (u32,u32) | TokenId |
Call index: 9
Nft.set_name
See [
Pallet::set_name].
api.tx.nft.set_name(collection_id: u32, name: Bytes)| Argument | Type | Doc |
|---|---|---|
collection_id | u32 | CollectionUuid |
name | Bytes | BoundedVec<u8, T::StringLimit> |
Call index: 10
Nft.set_royalties_schedule
See [
Pallet::set_royalties_schedule].
api.tx.nft.set_royalties_schedule(collection_id: u32, royalties_schedule: {"entitlements":"Vec<(SeedPrimitivesSignatureAccountId20,Permill)>"})| Argument | Type | Doc |
|---|---|---|
collection_id | u32 | CollectionUuid |
royalties_schedule | {"entitlements":"Vec<(SeedPrimitivesSignatureAccountId20,Permill)>"} | RoyaltiesSchedule<T::AccountId> |
Call index: 11
Nft.set_utility_flags
See [
Pallet::set_utility_flags].
api.tx.nft.set_utility_flags(collection_id: u32, utility_flags: {"transferable":"bool","burnable":"bool","mintable":"bool"})| Argument | Type | Doc |
|---|---|---|
collection_id | u32 | CollectionUuid |
utility_flags | {"transferable":"bool","burnable":"bool","mintable":"bool"} | CollectionUtilityFlags |
Call index: 12
Nft.set_token_transferable_flag
See [
Pallet::set_token_transferable_flag].
api.tx.nft.set_token_transferable_flag(token_id: (u32,u32), transferable: bool)| Argument | Type | Doc |
|---|---|---|
token_id | (u32,u32) | TokenId |
transferable | bool | bool |
Call index: 13
Nft.issue_soulbound
See [
Pallet::issue_soulbound].
api.tx.nft.issue_soulbound(collection_id: u32, quantity: u32, token_owner: [u8;20], burn_authority: {"_enum":["CollectionOwner","TokenOwner","Both","Neither"]})| Argument | Type | Doc |
|---|---|---|
collection_id | u32 | CollectionUuid |
quantity | u32 | TokenCount |
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].
api.tx.nft.accept_soulbound_issuance(collection_id: u32, issuance_id: u32)| Argument | Type | Doc |
|---|---|---|
collection_id | u32 | CollectionUuid |
issuance_id | u32 | u32 |
Call index: 15
Nft.set_additional_data
See [
Pallet::set_additional_data].
api.tx.nft.set_additional_data(token_id: (u32,u32), additional_data: Option<Bytes>)| Argument | Type | Doc |
|---|---|---|
token_id | (u32,u32) | TokenId |
additional_data | Option<Bytes> | Option<BoundedVec<u8, T::MaxDataLength>> |
Call index: 16
Nft.mint_with_additional_data
See [
Pallet::mint_with_additional_data].
api.tx.nft.mint_with_additional_data(collection_id: u32, token_owner: Option<SeedPrimitivesSignatureAccountId20>, additional_data: Bytes)| Argument | Type | Doc |
|---|---|---|
collection_id | u32 | CollectionUuid |
token_owner | Option<SeedPrimitivesSignatureAccountId20> | Option<T::AccountId> |
additional_data | Bytes | BoundedVec<u8, T::MaxDataLength> |
Call index: 17
Events
Nft.CollectionCreate
A new collection of tokens was created
| Field | Type | Doc |
|---|---|---|
collection_uuid | u32 | |
initial_issuance | u32 | |
max_issuance | Option<u32> | |
collection_owner | [u8;20] | |
metadata_scheme | Bytes | |
name | Bytes | |
royalties_schedule | Option<SeedPrimitivesNftRoyaltiesSchedule> | |
origin_chain | {"_enum":["Ethereum","Root","XRPL"]} | |
compatibility | {"xrpl":"bool"} |
Nft.PublicMintToggle
Public minting was enabled/disabled for a collection
| Field | Type | Doc |
|---|---|---|
collection_id | u32 | |
enabled | bool |
Nft.Mint
Token(s) were minted
| Field | Type | Doc |
|---|---|---|
collection_id | u32 | |
start | u32 | |
end | u32 | |
owner | [u8;20] |
Nft.MintFeePaid
Payment was made to cover a public mint
| Field | Type | Doc |
|---|---|---|
who | [u8;20] | |
collection_id | u32 | |
payment_asset | u32 | |
payment_amount | u128 | |
token_count | u32 |
Nft.MintPriceSet
A mint price was set for a collection
| Field | Type | Doc |
|---|---|---|
collection_id | u32 | |
payment_asset | Option<u32> | |
mint_price | Option<u128> |
Nft.BridgedMint
Token(s) were bridged
| Field | Type | Doc |
|---|---|---|
collection_id | u32 | |
serial_numbers | Vec<u32> | |
owner | [u8;20] |
Nft.OwnerSet
A new owner was set
| Field | Type | Doc |
|---|---|---|
collection_id | u32 | |
new_owner | [u8;20] |
Nft.MaxIssuanceSet
Max issuance was set
| Field | Type | Doc |
|---|---|---|
collection_id | u32 | |
max_issuance | u32 |
Nft.BaseUriSet
Base URI was set
| Field | Type | Doc |
|---|---|---|
collection_id | u32 | |
base_uri | Bytes |
Nft.NameSet
Name was set
| Field | Type | Doc |
|---|---|---|
collection_id | u32 | |
name | Bytes |
Nft.RoyaltiesScheduleSet
Royalties schedule was set
| Field | Type | Doc |
|---|---|---|
collection_id | u32 | |
royalties_schedule | {"entitlements":"Vec<(SeedPrimitivesSignatureAccountId20,Permill)>"} |
Nft.Transfer
A token was transferred
| Field | Type | Doc |
|---|---|---|
previous_owner | [u8;20] | |
collection_id | u32 | |
serial_numbers | Vec<u32> | |
new_owner | [u8;20] |
Nft.Burn
A token was burned
| Field | Type | Doc |
|---|---|---|
token_owner | [u8;20] | |
collection_id | u32 | |
serial_number | u32 |
Nft.CollectionClaimed
Collection has been claimed
| Field | Type | Doc |
|---|---|---|
account | [u8;20] | |
collection_id | u32 |
Nft.UtilityFlagsSet
Utility flags were set for a collection
| Field | Type | Doc |
|---|---|---|
collection_id | u32 | |
utility_flags | {"transferable":"bool","burnable":"bool","mintable":"bool"} |
Nft.TokenTransferableFlagSet
Token transferable flag was set
| Field | Type | Doc |
|---|---|---|
token_id | (u32,u32) | |
transferable | bool |
Nft.PendingIssuanceCreated
A pending issuance for a soulbound token has been created
| Field | Type | Doc |
|---|---|---|
collection_id | u32 | |
issuance_id | u32 | |
token_owner | [u8;20] | |
quantity | u32 | |
burn_authority | {"_enum":["CollectionOwner","TokenOwner","Both","Neither"]} |
Nft.Issued
Soulbound tokens were successfully issued
| Field | Type | Doc |
|---|---|---|
token_owner | [u8;20] | |
start | u32 | |
end | u32 | |
burn_authority | {"_enum":["CollectionOwner","TokenOwner","Both","Neither"]} |
Nft.AdditionalDataSet
Some additional data has been set for a token
| Field | Type | Doc |
|---|---|---|
token_id | (u32,u32) | |
additional_data | Option<Bytes> |
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
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
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
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
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
await api.query.nft.nextCollectionId()Returns: u32
Modifier: Default
Nft.UtilityFlags
Map from a collection to additional utility flags
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.
await api.query.nft.additionalTokenData(key1)- Key:
(u32,u32)(hasher: Twox64Concat) - Returns:
Bytes
Modifier: Default
Nft.PendingIssuances
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
wss://root.rootnet.live/archive/ws · captured 2026-05-02