Sft pallet
Derived from live runtime metadata on TRN root (pallet index 43, captured 2026-05-02). For prose-style documentation see Sft on the curated reference side.
- Pallet index
43- Calls
- 21
- Events
- 20
- Errors
- 27
- Storage items
- 8
- Constants
- 6
Calls (extrinsics)
Sft.create_collection
See [
Pallet::create_collection].
api.tx.sft.create_collection(collection_name: Bytes, collection_owner: Option<SeedPrimitivesSignatureAccountId20>, metadata_scheme: Bytes, royalties_schedule: Option<SeedPrimitivesNftRoyaltiesSchedule>)| Argument | Type | Doc |
|---|---|---|
collection_name | Bytes | BoundedVec<u8, T::StringLimit> |
collection_owner | Option<SeedPrimitivesSignatureAccountId20> | Option<T::AccountId> |
metadata_scheme | Bytes | MetadataScheme |
royalties_schedule | Option<SeedPrimitivesNftRoyaltiesSchedule> | Option<RoyaltiesSchedule<T::AccountId>> |
Call index: 0
Sft.create_token
See [
Pallet::create_token].
api.tx.sft.create_token(collection_id: u32, token_name: Bytes, initial_issuance: u128, max_issuance: Option<u128>, token_owner: Option<SeedPrimitivesSignatureAccountId20>)| Argument | Type | Doc |
|---|---|---|
collection_id | u32 | CollectionUuid |
token_name | Bytes | BoundedVec<u8, T::StringLimit> |
initial_issuance | u128 | Balance |
max_issuance | Option<u128> | Option<Balance> |
token_owner | Option<SeedPrimitivesSignatureAccountId20> | Option<T::AccountId> |
Call index: 1
Sft.mint
See [
Pallet::mint].
api.tx.sft.mint(collection_id: u32, serial_numbers: Vec<(u32,u128)>, token_owner: Option<SeedPrimitivesSignatureAccountId20>)| Argument | Type | Doc |
|---|---|---|
collection_id | u32 | CollectionUuid |
serial_numbers | Vec<(u32,u128)> | BoundedVec<(SerialNumber, Balance), T::MaxSerialsPerMint> |
token_owner | Option<SeedPrimitivesSignatureAccountId20> | Option<T::AccountId> |
Call index: 2
Sft.transfer
See [
Pallet::transfer].
api.tx.sft.transfer(collection_id: u32, serial_numbers: Vec<(u32,u128)>, new_owner: [u8;20])| Argument | Type | Doc |
|---|---|---|
collection_id | u32 | CollectionUuid |
serial_numbers | Vec<(u32,u128)> | BoundedVec<(SerialNumber, Balance), T::MaxSerialsPerMint> |
new_owner | [u8;20] | T::AccountId |
Call index: 3
Sft.burn
See [
Pallet::burn].
api.tx.sft.burn(collection_id: u32, serial_numbers: Vec<(u32,u128)>)| Argument | Type | Doc |
|---|---|---|
collection_id | u32 | CollectionUuid |
serial_numbers | Vec<(u32,u128)> | BoundedVec<(SerialNumber, Balance), T::MaxSerialsPerMint> |
Call index: 4
Sft.set_owner
See [
Pallet::set_owner].
api.tx.sft.set_owner(collection_id: u32, new_owner: [u8;20])| Argument | Type | Doc |
|---|---|---|
collection_id | u32 | CollectionUuid |
new_owner | [u8;20] | T::AccountId |
Call index: 5
Sft.set_max_issuance
See [
Pallet::set_max_issuance].
api.tx.sft.set_max_issuance(token_id: (u32,u32), max_issuance: u128)| Argument | Type | Doc |
|---|---|---|
token_id | (u32,u32) | TokenId |
max_issuance | u128 | Balance |
Call index: 6
Sft.set_base_uri
See [
Pallet::set_base_uri].
api.tx.sft.set_base_uri(collection_id: u32, metadata_scheme: Bytes)| Argument | Type | Doc |
|---|---|---|
collection_id | u32 | CollectionUuid |
metadata_scheme | Bytes | MetadataScheme |
Call index: 7
Sft.set_name
See [
Pallet::set_name].
api.tx.sft.set_name(collection_id: u32, collection_name: Bytes)| Argument | Type | Doc |
|---|---|---|
collection_id | u32 | CollectionUuid |
collection_name | Bytes | BoundedVec<u8, T::StringLimit> |
Call index: 8
Sft.set_royalties_schedule
See [
Pallet::set_royalties_schedule].
api.tx.sft.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: 9
Sft.toggle_public_mint
See [
Pallet::toggle_public_mint].
api.tx.sft.toggle_public_mint(token_id: (u32,u32), enabled: bool)| Argument | Type | Doc |
|---|---|---|
token_id | (u32,u32) | TokenId |
enabled | bool | bool |
Call index: 10
Sft.set_mint_fee
See [
Pallet::set_mint_fee].
api.tx.sft.set_mint_fee(token_id: (u32,u32), pricing_details: Option<(u32,u128)>)| Argument | Type | Doc |
|---|---|---|
token_id | (u32,u32) | TokenId |
pricing_details | Option<(u32,u128)> | Option<(AssetId, Balance)> |
Call index: 11
Sft.set_utility_flags
See [
Pallet::set_utility_flags].
api.tx.sft.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
Sft.set_token_name
See [
Pallet::set_token_name].
api.tx.sft.set_token_name(token_id: (u32,u32), token_name: Bytes)| Argument | Type | Doc |
|---|---|---|
token_id | (u32,u32) | TokenId |
token_name | Bytes | BoundedVec<u8, T::StringLimit> |
Call index: 13
Sft.set_token_transferable_flag
See [
Pallet::set_token_transferable_flag].
api.tx.sft.set_token_transferable_flag(token_id: (u32,u32), transferable: bool)| Argument | Type | Doc |
|---|---|---|
token_id | (u32,u32) | TokenId |
transferable | bool | bool |
Call index: 14
Sft.set_token_burn_authority
See [
Pallet::set_token_burn_authority].
api.tx.sft.set_token_burn_authority(token_id: (u32,u32), burn_authority: {"_enum":["CollectionOwner","TokenOwner","Both","Neither"]})| Argument | Type | Doc |
|---|---|---|
token_id | (u32,u32) | TokenId |
burn_authority | {"_enum":["CollectionOwner","TokenOwner","Both","Neither"]} | TokenBurnAuthority |
Call index: 15
Sft.burn_as_collection_owner
See [
Pallet::burn_as_collection_owner].
api.tx.sft.burn_as_collection_owner(token_owner: [u8;20], collection_id: u32, serial_numbers: Vec<(u32,u128)>)| Argument | Type | Doc |
|---|---|---|
token_owner | [u8;20] | T::AccountId |
collection_id | u32 | CollectionUuid |
serial_numbers | Vec<(u32,u128)> | BoundedVec<(SerialNumber, Balance), T::MaxSerialsPerMint> |
Call index: 16
Sft.issue_soulbound
See [
Pallet::issue_soulbound].
api.tx.sft.issue_soulbound(collection_id: u32, serial_numbers: Vec<(u32,u128)>, token_owner: [u8;20])| Argument | Type | Doc |
|---|---|---|
collection_id | u32 | CollectionUuid |
serial_numbers | Vec<(u32,u128)> | BoundedVec<(SerialNumber, Balance), T::MaxSerialsPerMint> |
token_owner | [u8;20] | T::AccountId |
Call index: 17
Sft.accept_soulbound_issuance
See [
Pallet::accept_soulbound_issuance].
api.tx.sft.accept_soulbound_issuance(collection_id: u32, issuance_id: u32)| Argument | Type | Doc |
|---|---|---|
collection_id | u32 | CollectionUuid |
issuance_id | u32 | IssuanceId |
Call index: 18
Sft.set_additional_data
See [
Pallet::set_additional_data].
api.tx.sft.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: 19
Sft.create_token_with_additional_data
See [
Pallet::create_token_with_additional_data].
api.tx.sft.create_token_with_additional_data(collection_id: u32, token_name: Bytes, initial_issuance: u128, max_issuance: Option<u128>, token_owner: Option<SeedPrimitivesSignatureAccountId20>, additional_data: Bytes)| Argument | Type | Doc |
|---|---|---|
collection_id | u32 | CollectionUuid |
token_name | Bytes | BoundedVec<u8, T::StringLimit> |
initial_issuance | u128 | Balance |
max_issuance | Option<u128> | Option<Balance> |
token_owner | Option<SeedPrimitivesSignatureAccountId20> | Option<T::AccountId> |
additional_data | Bytes | BoundedVec<u8, T::MaxDataLength> |
Call index: 20
Events
Sft.CollectionCreate
A new collection of tokens was created
| Field | Type | Doc |
|---|---|---|
collection_id | u32 | |
collection_owner | [u8;20] | |
metadata_scheme | Bytes | |
name | Bytes | |
royalties_schedule | Option<SeedPrimitivesNftRoyaltiesSchedule> | |
origin_chain | {"_enum":["Ethereum","Root","XRPL"]} |
Sft.PublicMintToggle
Public minting was enabled/disabled for a collection
| Field | Type | Doc |
|---|---|---|
token_id | (u32,u32) | |
enabled | bool |
Sft.Mint
Token(s) were minted
| Field | Type | Doc |
|---|---|---|
collection_id | u32 | |
serial_numbers | Vec<u32> | |
balances | Vec<u128> | |
owner | [u8;20] |
Sft.MintFeePaid
Payment was made to cover a public mint
| Field | Type | Doc |
|---|---|---|
who | [u8;20] | |
token_id | (u32,u32) | |
payment_asset | u32 | |
payment_amount | u128 | |
token_count | u128 |
Sft.MintPriceSet
A mint price was set for a collection
| Field | Type | Doc |
|---|---|---|
token_id | (u32,u32) | |
payment_asset | Option<u32> | |
mint_price | Option<u128> |
Sft.OwnerSet
A new owner was set
| Field | Type | Doc |
|---|---|---|
collection_id | u32 | |
new_owner | [u8;20] |
Sft.MaxIssuanceSet
Max issuance was set
| Field | Type | Doc |
|---|---|---|
token_id | (u32,u32) | |
max_issuance | u128 |
Sft.BaseUriSet
Base URI was set
| Field | Type | Doc |
|---|---|---|
collection_id | u32 | |
metadata_scheme | Bytes |
Sft.NameSet
Name was set
| Field | Type | Doc |
|---|---|---|
collection_id | u32 | |
collection_name | Bytes |
Sft.TokenNameSet
Token name was set
| Field | Type | Doc |
|---|---|---|
token_id | (u32,u32) | |
token_name | Bytes |
Sft.RoyaltiesScheduleSet
Royalties schedule was set
| Field | Type | Doc |
|---|---|---|
collection_id | u32 | |
royalties_schedule | {"entitlements":"Vec<(SeedPrimitivesSignatureAccountId20,Permill)>"} |
Sft.TokenCreate
A new token was created within a collection
| Field | Type | Doc |
|---|---|---|
token_id | (u32,u32) | |
initial_issuance | u128 | |
max_issuance | Option<u128> | |
token_name | Bytes | |
token_owner | [u8;20] |
Sft.Transfer
A token was transferred
| Field | Type | Doc |
|---|---|---|
previous_owner | [u8;20] | |
collection_id | u32 | |
serial_numbers | Vec<u32> | |
balances | Vec<u128> | |
new_owner | [u8;20] |
Sft.Burn
A token was burned
| Field | Type | Doc |
|---|---|---|
collection_id | u32 | |
serial_numbers | Vec<u32> | |
balances | Vec<u128> | |
owner | [u8;20] |
Sft.UtilityFlagsSet
Utility flags were set for a collection
| Field | Type | Doc |
|---|---|---|
collection_id | u32 | |
utility_flags | {"transferable":"bool","burnable":"bool","mintable":"bool"} |
Sft.TokenTransferableFlagSet
Token transferable flag was set
| Field | Type | Doc |
|---|---|---|
token_id | (u32,u32) | |
transferable | bool |
Sft.TokenBurnAuthoritySet
| Field | Type | Doc |
|---|---|---|
token_id | (u32,u32) | |
burn_authority | {"_enum":["CollectionOwner","TokenOwner","Both","Neither"]} |
Sft.PendingIssuanceCreated
A pending issuance for a soulbound token has been created
| Field | Type | Doc |
|---|---|---|
collection_id | u32 | |
issuance_id | u32 | |
serial_numbers | Vec<u32> | |
balances | Vec<u128> | |
token_owner | [u8;20] |
Sft.Issued
Soulbound tokens were successfully issued
| Field | Type | Doc |
|---|---|---|
token_owner | [u8;20] | |
serial_numbers | Vec<u32> | |
balances | Vec<u128> |
Sft.AdditionalDataSet
Some additional data has been set for a token
| Field | Type | Doc |
|---|---|---|
token_id | (u32,u32) | |
additional_data | Option<Bytes> |
Errors
Sft.NameInvalid
Given collection or token name is invalid (invalid utf-8, empty)
Sft.NoToken
The token does not exist
Sft.NotCollectionOwner
Origin is not the collection owner and is not permitted to perform the operation
Sft.RoyaltiesInvalid
Total royalties would exceed 100% of sale or an empty vec is supplied
Sft.NoCollectionFound
The collection does not exist
Sft.InsufficientBalance
The user does not own enough of this token to perform the operation
Sft.InvalidQuantity
The specified quantity must be greater than 0
Sft.InvalidMaxIssuance
Max issuance needs to be greater than 0 and initial_issuance Cannot exceed MaxTokensPerCollection
Sft.InvalidNewOwner
Caller can not be the new owner
Sft.InvalidAdditionalData
The additional data cannot be an empty vec
Sft.MaxIssuanceAlreadySet
The max issuance has already been set and can't be changed
Sft.MaxIssuanceReached
The collection max issuance has been reached and no more tokens can be minted
Sft.MaxOwnersReached
The max amount of owners per token has been reached
Sft.Overflow
The operation would cause a numeric overflow
Sft.PublicMintDisabled
This collection has not allowed public minting
Sft.TokenLimitExceeded
The number of tokens have exceeded the max tokens allowed
Sft.MintUtilityBlocked
Minting has been disabled for tokens within this collection
Sft.TransferUtilityBlocked
Transfer has been disabled for tokens within this collection
Sft.BurnUtilityBlocked
Burning has been disabled for tokens within this collection
Sft.BurnAuthorityAlreadySet
The burn authority for has already been and can't be changed
Sft.TokenAlreadyIssued
Attempted to set burn authority for a token that has already been issued
Sft.PendingIssuanceLimitExceeded
The number of pending issuances has exceeded the max for a collection
Sft.NoBurnAuthority
Attempted to issue a soulbound token where the burn authority has not been set
Sft.InvalidPendingIssuance
Attempted to accept an issuance that does not exist, or is not set for the caller
Sft.CannotUpdateTokenUtility
Attempted to update the token utility flags for a soulbound token
Sft.InvalidBurnAuthority
Attempted to burn a token from an account that does not adhere to the token's burn authority
Sft.SerialNumbersNotUnique
The SerialNumbers attempting to be transferred are not unique
Storage
Sft.SftCollectionInfo
Map from collection to its information
await api.query.sft.sftCollectionInfo(key1)- Key:
u32(hasher: Twox64Concat) - Returns:
{"collectionOwner":"SeedPrimitivesSignatureAccountId20","collectionName":"Bytes","metadataScheme":"Bytes","royaltiesSchedule":"Option<SeedPrimitivesNftRoyaltiesSchedule>","originChain":"SeedPrimitivesNftOriginChain","nextSerialNumber":"u32"}
Modifier: Optional
Sft.PublicMintInfo
Map from collection to its public minting information
await api.query.sft.publicMintInfo(key1)- Key:
(u32,u32)(hasher: Twox64Concat) - Returns:
{"enabled":"bool","pricingDetails":"Option<(u32,u128)>"}
Modifier: Optional
Sft.UtilityFlags
Map from a collection to additional utility flags
await api.query.sft.utilityFlags(key1)- Key:
u32(hasher: Twox64Concat) - Returns:
{"transferable":"bool","burnable":"bool","mintable":"bool"}
Modifier: Default
Sft.TokenUtilityFlags
Map from a token_id to transferable and burn authority flags
await api.query.sft.tokenUtilityFlags(key1)- Key:
(u32,u32)(hasher: Twox64Concat) - Returns:
{"transferable":"bool","burnAuthority":"Option<SeedPalletCommonUtilsTokenBurnAuthority>"}
Modifier: Default
Sft.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.sft.additionalTokenData(key1)- Key:
(u32,u32)(hasher: Twox64Concat) - Returns:
Bytes
Modifier: Default
Sft.TokenInfo
Map from token to its token information, including ownership information
await api.query.sft.tokenInfo(key1)- Key:
(u32,u32)(hasher: Twox64Concat) - Returns:
{"tokenName":"Bytes","maxIssuance":"Option<u128>","tokenIssuance":"u128","ownedTokens":"Vec<(SeedPrimitivesSignatureAccountId20,PalletSftSftTokenBalance)>"}
Modifier: Optional
Sft.PendingIssuances
await api.query.sft.pendingIssuances(key1)- Key:
u32(hasher: Twox64Concat) - Returns:
{"nextIssuanceId":"u32","pendingIssuances":"Vec<(SeedPrimitivesSignatureAccountId20,Vec<PalletSftSftPendingIssuance>)>"}
Modifier: Default
Sft.NextIssuanceId
The next available incrementing issuance ID, unique across all pending issuances
await api.query.sft.nextIssuanceId()Returns: u32
Modifier: Default
Constants
Sft.PalletId
This pallet's Id, used for deriving a sovereign account ID
Type: [u8;8]
SCALE-encoded value: 0x7366746f6b656e73
Sft.StringLimit
The maximum length of a collection or token name, stored on-chain
Type: u32
SCALE-encoded value: 0x32000000
Sft.MaxDataLength
The maximum length of the stored additional data for a token
Type: u32
SCALE-encoded value: 0x64000000
Sft.MaxTokensPerSftCollection
Max tokens that a collection can contain
Type: u32
SCALE-encoded value: 0x40420f00
Sft.MaxSerialsPerMint
Max tokens that can be minted in one transaction
Type: u32
SCALE-encoded value: 0xe8030000
Sft.MaxOwnersPerSftToken
Max unique owners that can own an SFT token
Type: u32
SCALE-encoded value: 0x40420f00
wss://root.rootnet.live/archive/ws · captured 2026-05-02