Calls

burn

Burn a token 🔥 Caller must be the token owner Namespace
api.tx.sft.burn
Type
function burn(
  collection_id: u32,
  serial_numbers: Vec<(u32,u128)>
)

createCollection

Create a new collection to group multiple semi-fungible tokens Tokens can be created within the collection by calling create_token collection_name - the name of the collection collection_owner - the collection owner, defaults to the caller metadata_scheme - The off-chain metadata referencing scheme for tokens in this royalties_schedule - defacto royalties plan for secondary sales, this will apply to all tokens in the collection by default. The collectionUuid used to store the SFT CollectionInfo is retrieved from the NFT pallet. This is so that CollectionUuids are unique across all collections, regardless of if they are SFT or NFT collections. Namespace
api.tx.sft.createCollection
Type
function createCollection(
  collection_name: Bytes,
  collection_owner: Option<SeedPrimitivesSignatureAccountId20>,
  metadata_scheme: Bytes,
  royalties_schedule: Option<SeedPrimitivesNftRoyaltiesSchedule>
)

createToken

Create additional tokens for an existing collection These tokens act similar to tokens within an ERC1155 contract Each token has individual issuance, max_issuance, Namespace
api.tx.sft.createToken
Type
function createToken(
  collection_id: u32,
  token_name: Bytes,
  initial_issuance: u128,
  max_issuance: Option<u128>,
  token_owner: Option<SeedPrimitivesSignatureAccountId20>
)

createTokenWithAdditionalData

Create additional tokens for an existing collection with additional data. These tokens act similar to tokens within an ERC1155 contract. Each token has individual issuance, max_issuance, and additional data. Namespace
api.tx.sft.createTokenWithAdditionalData
Type
function createTokenWithAdditionalData(
  collection_id: u32,
  token_name: Bytes,
  initial_issuance: u128,
  max_issuance: Option<u128>,
  token_owner: Option<SeedPrimitivesSignatureAccountId20>,
  additional_data: Bytes
)

mint

Mints some balances into some serial numbers for an account This acts as a batch mint function and allows for multiple serial numbers and quantities to be passed in simultaneously. Must be called by the collection owner collection_id - the SFT collection to mint into serial_numbers - A list of serial numbers to mint into quantities - A list of quantities to mint into each serial number token_owner - The owner of the tokens, defaults to the caller Namespace
api.tx.sft.mint
Type
function mint(
  collection_id: u32,
  serial_numbers: Vec<(u32,u128)>,
  token_owner: Option<SeedPrimitivesSignatureAccountId20>
)

setBaseUri

Set the base URI of a collection (MetadataScheme) Caller must be the current collection owner Namespace
api.tx.sft.setBaseUri
Type
function setBaseUri(
  collection_id: u32,
  metadata_scheme: Bytes
)

setMaxIssuance

Set the max issuance of a collection Caller must be the current collection owner Namespace
api.tx.sft.setMaxIssuance
Type
function setMaxIssuance(
  token_id: (u32,u32),
  max_issuance: u128
)

setMintFee

Namespace
api.tx.sft.setMintFee
Type
function setMintFee(
  token_id: (u32,u32),
  pricing_details: Option<(u32,u128)>
)

setName

Set the name of a collection Caller must be the current collection owner Namespace
api.tx.sft.setName
Type
function setName(
  collection_id: u32,
  collection_name: Bytes
)

setOwner

Set the owner of a collection Caller must be the current collection owner Namespace
api.tx.sft.setOwner
Type
function setOwner(
  collection_id: u32,
  new_owner: SeedPrimitivesSignatureAccountId20
)

setRoyaltiesSchedule

Set the royalties schedule of a collection Caller must be the current collection owner Namespace
api.tx.sft.setRoyaltiesSchedule
Type
function setRoyaltiesSchedule(
  collection_id: u32,
  royalties_schedule: SeedPrimitivesNftRoyaltiesSchedule
)

togglePublicMint

Namespace
api.tx.sft.togglePublicMint
Type
function togglePublicMint(
  token_id: (u32,u32),
  enabled: bool
)

setTokenName

Namespace
api.tx.sft.setTokenName
Type
function setTokenName(
  token_id: (u32, u32),
  token_name: Bytes
)

transfer

Transfer ownership of an SFT Caller must be the token owner Namespace
api.tx.sft.transfer
Type
function transfer(
  collection_id: u32,
  serial_numbers: Vec<(u32,u128)>,
  new_owner: SeedPrimitivesSignatureAccountId20
)

setUtilityFlags

Set utility flags of a collection. This allows restricting certain operations on a collection such as transfer, burn or mint. Caller must be the collection owner.
  • collection_id - The id of the collection
  • utility_flags - An object containing the utility flags.
    CollectionUtilityFlags {
      transferable: bool,
      burnable: bool,
      mintable: bool,
    }
    
Namespace
api.tx.sft.setUtilityFlags
Type
function setUtilityFlags(
  collection_id: u32,
  utility_flags: CollectionUtilityFlags,
)

setTokenTransferableFlag

Set transferable flag on a token, allowing or disallowing transfers. Caller must be the collection owner. Namespace
api.tx.sft.setTokenTransferableFlag
Type
function setTokenTransferableFlag(
  token_id: (u32, u32),
  transferable: bool,
)

setTokenBurnAuthority

Set burn authority on a token. This value will be immutable once set. Caller must be the collection owner.
  • token_id -. The token id
  • burn_authority - The token burn authority. This value will dictate which account is allowed to burn the token.
    TokenBurnAuthority {
      /// The token can be burned by the collection_owner
      CollectionOwner,
      /// The token can be burned by the token_owner
      TokenOwner,
      /// The token can be burned by either token or collection owner
      Both,
      /// The token cannot be burned by anyone
      Neither,
    }
    
Namespace api.tx.sft.setTokenBurnAuthority Type
function setTokenBurnAuthority(
  token_id: (u32, u32),
  burn_authority: TokenBurnAuthority
)

setAdditionalData

Set additional data for a token. This allows collection owners or token owners to store custom data associated with specific tokens.
  • token_id - The token id to set additional data for
  • additional_data - Custom data to associate with the token
Namespace
api.tx.sft.setAdditionalData
Type
function setAdditionalData(
  token_id: (u32,u32),
  additional_data: Bytes
)

burnAsCollectionOwner

Burn a token as the collection owner. The burn authority must have already been set and set to either the collection owner or both.
  • token_owner - The account id of the token owner
  • collection_id - The collection id
  • serial_numbers - Array of serial number and the amount of tokens to burn
Namespace
api.tx.sft.burnAsCollectionOwner
Type
function burnAsCollectionOwner(
  token_owner: SeedPrimitivesSignatureAccountId20,
  collection_id: u32,
  serial_numbers: Vec<u32, u32>
)

issueSoulbound

Issue soulbound tokens. The issuance will be pending until the token owner accepts the issuance. The burn authority for the specified tokens must already have been set prior to attempting to issue the tokens.
  • token_owner - Account id of the token owner. The tokens will be burned for this account.
  • collection_id - The collection id to issue the tokens for
  • serial_numbers - List of token ids and the amount to issue
Namespace
api.tx.sft.issueSoulbound
Type
function issueSoulbound(
  colelction_id: u32,
  serial_numbers: Vec<(u32, u32)>,
  token_owner:
)

acceptSoulboundIssuance

Accept the issuance of a soulbound tokens
  • collection_id - The collection id
  • issuance_id - The issuance id. An issuance id is created and emitted on issuance. All pending issuances for an account can be retrieved by querying the collection’s pending issuances.
Namespace
api.tx.sft.acceptSoulboundIssuance
Type
function acceptSoulboundIssuance(
  collection_id: u32,
  issuance_idL u32
)

Storage

publicMintInfo

Map from collection to its public minting information Namespace
api.query.sft.publicMintInfo
Type
function publicMintInfo(
  (u32,u32)
): Option<SeedPalletCommonUtilsPublicMintInformation>

sftCollectionInfo

Map from collection to its information Namespace
api.query.sft.sftCollectionInfo
Type
function sftCollectionInfo(
  u32
): Option<PalletSftSftCollectionInformation>

tokenInfo

Map from token to its token information, including ownership information Namespace
api.query.sft.tokenInfo
Type
function tokenInfo(
  (u32,u32)
): Option<PalletSftSftTokenInformation>

utilityFlags

Map from a collection id to it’s utility flags Namespace
api.query.sft.utilityFlags
Type
function utilityFlags(u32): CollectionUtilityFlags

tokenUtilityFlags

Map from a token id to its utility flags Namespace
api.query.sft.tokenUtilityFlags
Type
type TokenUtilityFlags = {
	transferable: bool,
	burnAuthority: Option<TokenBurnAuthority>,
}

function tokenUtilityFlags(
  (u32, u32)
): TokenUtilityFlags

additionalData

Map from a token id to its additional data Namespace
api.query.sft.additionalData
Type
function additionalData(
  (u32, u32)
): Option<Bytes>

pendingIssuances

Map from a collection id to the collection’s pending issuances Namespace
api.query.sft.pendingIssuances
Type
type SftPendingIssuance = {
  issuanceId: u32;
  serial_numbers: Vec<(u32, u32)>
}

type CollectionPendingIssuances = {
  nextIssuanceId: u32;
  pendingIssuances: Vec(AccountId, PendingIssuance)
}

function pendingIssuances(
  u32
): CollectionPendingIssuances
Can be used to retrieve pending issuances for a particular account.
const collectionIssuances = await api.query.sft.pendingIssuances(collectionId);
const pendingIssuances =
  collectionIssuances.
    pendingIssuances.
    toJSON().
    find((p) => p[0] === accountId);

Events

BaseUriSet

Base URI was set Namespace
api.events.sft.BaseUriSet
Type
type BaseUriSet = {
  collection_id: u32,
  metadata_scheme: Bytes
}

Burn

A token was burned Namespace
api.events.sft.Burn
Type
type Burn = {
  collection_id: u32,
  serial_numbers: Vec<u32>,
  balances: Vec<u128>,
  owner: SeedPrimitivesSignatureAccountId20
}

CollectionCreate

A new collection of tokens was created Namespace
api.events.sft.CollectionCreate
Type
type CollectionCreate = {
  collection_id: u32,
  collection_owner: SeedPrimitivesSignatureAccountId20,
  metadata_scheme: Bytes,
  name: Bytes,
  royalties_schedule: Option<SeedPrimitivesNftRoyaltiesSchedule>,
  origin_chain: SeedPrimitivesNftOriginChain
}

MaxIssuanceSet

Max issuance was set Namespace
api.events.sft.MaxIssuanceSet
Type
type MaxIssuanceSet = {
  token_id: (u32,u32),
  max_issuance: u128
}

Mint

Token(s) were minted Namespace
api.events.sft.Mint
Type
type Mint = {
  collection_id: u32,
  serial_numbers: Vec<u32>,
  balances: Vec<u128>,
  owner: SeedPrimitivesSignatureAccountId20
}

MintFeePaid

Payment was made to cover a public mint Namespace
api.events.sft.MintFeePaid
Type
type MintFeePaid = {
  who: SeedPrimitivesSignatureAccountId20,
  token_id: (u32,u32),
  payment_asset: u32,
  payment_amount: u128,
  token_count: u128
}

MintPriceSet

A mint price was set for a collection Namespace
api.events.sft.MintPriceSet
Type
type MintPriceSet = {
  token_id: (u32,u32),
  payment_asset: Option<u32>,
  mint_price: Option<u128>
}

NameSet

Name was set Namespace
api.events.sft.NameSet
Type
type NameSet = {
  collection_id: u32,
  collection_name: Bytes
}

OwnerSet

A new owner was set Namespace
api.events.sft.OwnerSet
Type
type OwnerSet = {
  collection_id: u32,
  new_owner: SeedPrimitivesSignatureAccountId20
}

PublicMintToggle

Public minting was enabled/disabled for a collection Namespace
api.events.sft.PublicMintToggle
Type
type PublicMintToggle = {
  token_id: (u32,u32),
  enabled: bool
}

RoyaltiesScheduleSet

Royalties schedule was set Namespace
api.events.sft.RoyaltiesScheduleSet
Type
type RoyaltiesScheduleSet = {
  collection_id: u32,
  royalties_schedule: SeedPrimitivesNftRoyaltiesSchedule
}

TokenCreate

A new token was created within a collection Namespace
api.events.sft.TokenCreate
Type
type TokenCreate = {
  token_id: (u32,u32),
  initial_issuance: u128,
  max_issuance: Option<u128>,
  token_name: Bytes,
  token_owner: SeedPrimitivesSignatureAccountId20
}

Transfer

A token was transferred Namespace
api.events.sft.Transfer
Type
type Transfer = {
  previous_owner: SeedPrimitivesSignatureAccountId20,
  collection_id: u32,
  serial_numbers: Vec<u32>,
  balances: Vec<u128>,
  new_owner: SeedPrimitivesSignatureAccountId20
}

UtilityFlagsSet

Utility flags were set for a collection Namespace
api.events.sft.UtilityFlagsSet
Type
type UtilityFlagsSet = {
  collection_id: u32,
  utility_flags: CollectionUtilityFlags,
}

TokenTransferableFlagSet

Token transferable flag was set Namespace
api.events.sft.TokenTransferableFlagSet
Type
type TokenTransferableFlagSet = {
  token_id: (u32, u32),
  transferable: bool,
}

AdditionalDataSet

Additional data was set for a token Namespace
api.events.sft.AdditionalDataSet
Type
type AdditionalDataSet = {
  token_id: (u32, u32),
  additional_data: Bytes
}

PendingIssuanceCreated

A pending issuance for a soulbound token has been created Namespace
api.events.sft.PendingIssuanceCreated
Type
PendingIssuanceCreated = {
  collection_id: u32,
  issuance_id: u32,
  serial_numbers: Vec<u32>,
  balances: Vec<u32>,
  token_owner: SeedPrimitivesSignatureAccountId20,
}

Issued

Soulbound tokens were successfully issued Namespace
api.events.sft.Issued
Type
type Issued = {
  token_owner: SeedPrimitivesSignatureAccountId20,
  serial_numbers: Vec<u32>,
  balances: Vec<u32>,
}

Errors

InsufficientBalance

The user does not own enough of this token to perform the operation Namespace
api.errors.sft.InsufficientBalance

InvalidMaxIssuance

Max issuance needs to be greater than 0 and initial_issuance Cannot exceed MaxTokensPerCollection Namespace
api.errors.sft.InvalidMaxIssuance

InvalidNewOwner

Caller can not be the new owner Namespace
api.errors.sft.InvalidNewOwner

InvalidQuantity

The specified quantity must be greater than 0 Namespace
api.errors.sft.InvalidQuantity

MaxIssuanceAlreadySet

The max issuance has already been set and can’t be changed Namespace
api.errors.sft.MaxIssuanceAlreadySet

MaxIssuanceReached

The collection max issuance has been reached and no more tokens can be minted Namespace
api.errors.sft.MaxIssuanceReached

MaxOwnersReached

The max amount of owners per token has been reached Namespace
api.errors.sft.MaxOwnersReached

NameInvalid

Given collection or token name is invalid (invalid utf-8, empty) Namespace
api.errors.sft.NameInvalid

NoCollectionFound

The collection does not exist Namespace
api.errors.sft.NoCollectionFound

NotCollectionOwner

Origin is not the collection owner and is not permitted to perform the operation Namespace
api.errors.sft.NotCollectionOwner

NoToken

The token does not exist Namespace
api.errors.sft.NoToken

Overflow

The operation would cause a numeric overflow Namespace
api.errors.sft.Overflow

PublicMintDisabled

This collection has not allowed public minting Namespace
api.errors.sft.PublicMintDisabled

RoyaltiesInvalid

Total royalties would exceed 100% of sale or an empty vec is supplied Namespace
api.errors.sft.RoyaltiesInvalid

InvalidAdditionalData

The additional data provided is invalid or exceeds the maximum allowed size Namespace
api.errors.sft.InvalidAdditionalData

Constants

maxOwnersPerSftToken

Max unique owners that can own an SFT token Namespace
api.consts.sft.maxOwnersPerSftToken
Type
type maxOwnersPerSftToken = u32

maxSerialsPerMint

Max tokens that can be minted in one transaction Namespace
api.consts.sft.maxSerialsPerMint
Type
type maxSerialsPerMint = u32

maxTokensPerSftCollection

Max tokens that a collection can contain Namespace
api.consts.sft.maxTokensPerSftCollection
Type
type maxTokensPerSftCollection = u32

palletId

This pallet’s Id, used for deriving a sovereign account ID Namespace
api.consts.sft.palletId
Type
type palletId = FrameSupportPalletId

stringLimit

The maximum length of a collection or token name, stored on-chain Namespace
api.consts.sft.stringLimit
Type
type stringLimit = u32