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.