Skip to content

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].

ts
api.tx.sft.create_collection(collection_name: Bytes, collection_owner: Option<SeedPrimitivesSignatureAccountId20>, metadata_scheme: Bytes, royalties_schedule: Option<SeedPrimitivesNftRoyaltiesSchedule>)
ArgumentTypeDoc
collection_nameBytesBoundedVec<u8, T::StringLimit>
collection_ownerOption&lt;SeedPrimitivesSignatureAccountId20&gt;Option<T::AccountId>
metadata_schemeBytesMetadataScheme
royalties_scheduleOption&lt;SeedPrimitivesNftRoyaltiesSchedule&gt;Option<RoyaltiesSchedule<T::AccountId>>

Call index: 0

Sft.create_token ​

See [Pallet::create_token].

ts
api.tx.sft.create_token(collection_id: u32, token_name: Bytes, initial_issuance: u128, max_issuance: Option<u128>, token_owner: Option<SeedPrimitivesSignatureAccountId20>)
ArgumentTypeDoc
collection_idu32CollectionUuid
token_nameBytesBoundedVec<u8, T::StringLimit>
initial_issuanceu128Balance
max_issuanceOption&lt;u128&gt;Option<Balance>
token_ownerOption&lt;SeedPrimitivesSignatureAccountId20&gt;Option<T::AccountId>

Call index: 1

Sft.mint ​

See [Pallet::mint].

ts
api.tx.sft.mint(collection_id: u32, serial_numbers: Vec<(u32,u128)>, token_owner: Option<SeedPrimitivesSignatureAccountId20>)
ArgumentTypeDoc
collection_idu32CollectionUuid
serial_numbersVec&lt;(u32,u128)&gt;BoundedVec<(SerialNumber, Balance), T::MaxSerialsPerMint>
token_ownerOption&lt;SeedPrimitivesSignatureAccountId20&gt;Option<T::AccountId>

Call index: 2

Sft.transfer ​

See [Pallet::transfer].

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

Call index: 3

Sft.burn ​

See [Pallet::burn].

ts
api.tx.sft.burn(collection_id: u32, serial_numbers: Vec<(u32,u128)>)
ArgumentTypeDoc
collection_idu32CollectionUuid
serial_numbersVec&lt;(u32,u128)&gt;BoundedVec<(SerialNumber, Balance), T::MaxSerialsPerMint>

Call index: 4

Sft.set_owner ​

See [Pallet::set_owner].

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

Call index: 5

Sft.set_max_issuance ​

See [Pallet::set_max_issuance].

ts
api.tx.sft.set_max_issuance(token_id: (u32,u32), max_issuance: u128)
ArgumentTypeDoc
token_id(u32,u32)TokenId
max_issuanceu128Balance

Call index: 6

Sft.set_base_uri ​

See [Pallet::set_base_uri].

ts
api.tx.sft.set_base_uri(collection_id: u32, metadata_scheme: Bytes)
ArgumentTypeDoc
collection_idu32CollectionUuid
metadata_schemeBytesMetadataScheme

Call index: 7

Sft.set_name ​

See [Pallet::set_name].

ts
api.tx.sft.set_name(collection_id: u32, collection_name: Bytes)
ArgumentTypeDoc
collection_idu32CollectionUuid
collection_nameBytesBoundedVec<u8, T::StringLimit>

Call index: 8

Sft.set_royalties_schedule ​

See [Pallet::set_royalties_schedule].

ts
api.tx.sft.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: 9

Sft.toggle_public_mint ​

See [Pallet::toggle_public_mint].

ts
api.tx.sft.toggle_public_mint(token_id: (u32,u32), enabled: bool)
ArgumentTypeDoc
token_id(u32,u32)TokenId
enabledboolbool

Call index: 10

Sft.set_mint_fee ​

See [Pallet::set_mint_fee].

ts
api.tx.sft.set_mint_fee(token_id: (u32,u32), pricing_details: Option<(u32,u128)>)
ArgumentTypeDoc
token_id(u32,u32)TokenId
pricing_detailsOption&lt;(u32,u128)&gt;Option<(AssetId, Balance)>

Call index: 11

Sft.set_utility_flags ​

See [Pallet::set_utility_flags].

ts
api.tx.sft.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

Sft.set_token_name ​

See [Pallet::set_token_name].

ts
api.tx.sft.set_token_name(token_id: (u32,u32), token_name: Bytes)
ArgumentTypeDoc
token_id(u32,u32)TokenId
token_nameBytesBoundedVec<u8, T::StringLimit>

Call index: 13

Sft.set_token_transferable_flag ​

See [Pallet::set_token_transferable_flag].

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

Call index: 14

Sft.set_token_burn_authority ​

See [Pallet::set_token_burn_authority].

ts
api.tx.sft.set_token_burn_authority(token_id: (u32,u32), burn_authority: {"_enum":["CollectionOwner","TokenOwner","Both","Neither"]})
ArgumentTypeDoc
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].

ts
api.tx.sft.burn_as_collection_owner(token_owner: [u8;20], collection_id: u32, serial_numbers: Vec<(u32,u128)>)
ArgumentTypeDoc
token_owner[u8;20]T::AccountId
collection_idu32CollectionUuid
serial_numbersVec&lt;(u32,u128)&gt;BoundedVec<(SerialNumber, Balance), T::MaxSerialsPerMint>

Call index: 16

Sft.issue_soulbound ​

See [Pallet::issue_soulbound].

ts
api.tx.sft.issue_soulbound(collection_id: u32, serial_numbers: Vec<(u32,u128)>, token_owner: [u8;20])
ArgumentTypeDoc
collection_idu32CollectionUuid
serial_numbersVec&lt;(u32,u128)&gt;BoundedVec<(SerialNumber, Balance), T::MaxSerialsPerMint>
token_owner[u8;20]T::AccountId

Call index: 17

Sft.accept_soulbound_issuance ​

See [Pallet::accept_soulbound_issuance].

ts
api.tx.sft.accept_soulbound_issuance(collection_id: u32, issuance_id: u32)
ArgumentTypeDoc
collection_idu32CollectionUuid
issuance_idu32IssuanceId

Call index: 18

Sft.set_additional_data ​

See [Pallet::set_additional_data].

ts
api.tx.sft.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: 19

Sft.create_token_with_additional_data ​

See [Pallet::create_token_with_additional_data].

ts
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)
ArgumentTypeDoc
collection_idu32CollectionUuid
token_nameBytesBoundedVec<u8, T::StringLimit>
initial_issuanceu128Balance
max_issuanceOption&lt;u128&gt;Option<Balance>
token_ownerOption&lt;SeedPrimitivesSignatureAccountId20&gt;Option<T::AccountId>
additional_dataBytesBoundedVec<u8, T::MaxDataLength>

Call index: 20

Events ​

Sft.CollectionCreate ​

A new collection of tokens was created

FieldTypeDoc
collection_idu32
collection_owner[u8;20]
metadata_schemeBytes
nameBytes
royalties_scheduleOption&lt;SeedPrimitivesNftRoyaltiesSchedule&gt;
origin_chain{"_enum":["Ethereum","Root","XRPL"]}

Sft.PublicMintToggle ​

Public minting was enabled/disabled for a collection

FieldTypeDoc
token_id(u32,u32)
enabledbool

Sft.Mint ​

Token(s) were minted

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

Sft.MintFeePaid ​

Payment was made to cover a public mint

FieldTypeDoc
who[u8;20]
token_id(u32,u32)
payment_assetu32
payment_amountu128
token_countu128

Sft.MintPriceSet ​

A mint price was set for a collection

FieldTypeDoc
token_id(u32,u32)
payment_assetOption&lt;u32&gt;
mint_priceOption&lt;u128&gt;

Sft.OwnerSet ​

A new owner was set

FieldTypeDoc
collection_idu32
new_owner[u8;20]

Sft.MaxIssuanceSet ​

Max issuance was set

FieldTypeDoc
token_id(u32,u32)
max_issuanceu128

Sft.BaseUriSet ​

Base URI was set

FieldTypeDoc
collection_idu32
metadata_schemeBytes

Sft.NameSet ​

Name was set

FieldTypeDoc
collection_idu32
collection_nameBytes

Sft.TokenNameSet ​

Token name was set

FieldTypeDoc
token_id(u32,u32)
token_nameBytes

Sft.RoyaltiesScheduleSet ​

Royalties schedule was set

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

Sft.TokenCreate ​

A new token was created within a collection

FieldTypeDoc
token_id(u32,u32)
initial_issuanceu128
max_issuanceOption&lt;u128&gt;
token_nameBytes
token_owner[u8;20]

Sft.Transfer ​

A token was transferred

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

Sft.Burn ​

A token was burned

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

Sft.UtilityFlagsSet ​

Utility flags were set for a collection

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

Sft.TokenTransferableFlagSet ​

Token transferable flag was set

FieldTypeDoc
token_id(u32,u32)
transferablebool

Sft.TokenBurnAuthoritySet ​

FieldTypeDoc
token_id(u32,u32)
burn_authority{"_enum":["CollectionOwner","TokenOwner","Both","Neither"]}

Sft.PendingIssuanceCreated ​

A pending issuance for a soulbound token has been created

FieldTypeDoc
collection_idu32
issuance_idu32
serial_numbersVec&lt;u32&gt;
balancesVec&lt;u128&gt;
token_owner[u8;20]

Sft.Issued ​

Soulbound tokens were successfully issued

FieldTypeDoc
token_owner[u8;20]
serial_numbersVec&lt;u32&gt;
balancesVec&lt;u128&gt;

Sft.AdditionalDataSet ​

Some additional data has been set for a token

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

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

ts
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

ts
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

ts
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

ts
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.

ts
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

ts
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 ​

ts
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

ts
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

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.