The NFI (Non-Fungible Intelligence) pallet allows for enabling NFI compatibility on new or existing collections. Once enabled, when an NFI-compatible NFT/SFT is minted, our trusted relayer will automatically generate the NFI data, storing the resulting NFIData on-chain. Note: There may be an additional charge for NFTs minted with NFI enabled. See the MintFee section below. 0.5% of the mint fee is sent to the Vortex for redistribution to network participants.

Pallet Calls


Enable NFI

Enables NFI compatibility on a collection. Caller must be the collection owner Namespace:
api.tx.nfi.enableNfi
Type:
function enableNfi(
  collection_id: u32,
  sub_type: SeedPrimitivesNfiNFISubType
)

Manual Data Request

Users can manually request NFI data if it does not already exist on a token. This can be used to manually request data for pre-existing tokens in a collection that has had NFI enabled Caller must be either the token owner or the collection owner Note. the mint fee will need to be paid for any manual request Namespace:
api.tx.nfi.manualDataRequest
Type:
function manualDataRequest(
  token_id: (u32,u32),
  sub_type: SeedPrimitivesNfiNFISubType
)

Submit NFI Data

Submit NFI data to the chain. Caller must be the registered relayer. NFI must be enabled for the collection Namespace:
api.tx.nfi.submitNfiData
Type:
function submitNfiData(
  token_id: (u32,u32),
  data_item: SeedPrimitivesNfiNFIDataType
)

Set Fee Details (Sudo Only)

Set the NFI mint fee which is paid per token by the minter. Setting fee_details to None removes the mint fee Namespace:
api.tx.nfi.setFeeDetails
Type:
function setFeeDetails(
  sub_type: SeedPrimitivesNfiNFISubType,
  fee_details: Option<SeedPrimitivesNfiFeeDetails>
)

Set Relayer (Sudo Only)

Set the relayer address. This address is able to submit the NFI data back to the chain. Caller must be sudo Namespace:
api.tx.nfi.setRelayer
Type:
function setRelayer(
  relayer: SeedPrimitivesSignatureAccountId20,
)

Set Fee To (Sudo Only)

Set the ‘FeeTo’ account. Caller must be sudo Namespace:
api.tx.nfi.setFeeTo
Type:
function setFeeTo(
  fee_to: Option<SeedPrimitivesSignatureAccountId20>,
)

Pallet Storage


Relayer

Stores the permission enabled relayer account Namespace:
api.query.nfi.relayer
Type:
function relayer(): Option<SeedPrimitivesSignatureAccountId20>

Mint Fee

Stores the extra mint fee that is charged for NFI enabled tokens Namespace:
api.query.nfi.mintFee
Type:
function mintFee(
  SeedPrimitivesNfiNFISubType
): SeedPrimitivesNfiFeeDetails

NFI Data

Stores the NFI Data linked to a token Namespace:
api.query.nfi.nfiData
Type:
function nfiData(
  (u32,u32), // token_id
  SeedPrimitivesNfiNFISubType
): SeedPrimitivesNfiDataType

NFI Enabled

Whether or not NFI is enabled for a collection Namespace:
api.query.nfi.nfiEnabled
Type:
function nfiEnabled(
  u32, // collection_id
  SeedPrimitivesNfiNFISubType
): boolean

Fee To

The Fee To address that collects network fees Namespace:
api.query.nfi.feeTo
Type:
function feeTo(): Option<SeedPrimitivesSignatureAccountId20>

Pallet Events


Data Request

Request for new NFI data creation Namespace:
api.events.nfi.DataRequest
Type:
type DataRequest = {
  sub_type: SeedPrimitivesNfiNFISubType,
  caller: SeedPrimitivesSignatureAccountId20,
  collection_id: u32,
  serial_numbers: Vec<u32>
}

Data Set

A new NFI storage item has been set Namespace:
api.events.nfi.DataSet
Type:
type DataSet = {
  sub_type: SeedPrimitivesNfiNFISubType,
  token_id: (u32,u32),
  data_item: SeedPrimitivesNfiNFIDataType
}

Data Removed

NFI storage has been removed for a token Namespace:
api.events.nfi.DataRemoved
Type:
type DataRemoved = {
  token_id: (u32,u32)
}

Fee Details Set

New fee details have been set Namespace:
api.events.nfi.FeeDetailsSet
Type:
type FeeDetailsSet = {
  sub_type: SeedPrimitivesNfiNFISubType,
  fee_details: SeedPrimitivesNfiFeeDetails
}

Fee To Set

The network fee receiver address has been updated Namespace:
api.events.nfi.FeeToSet
Type:
type FeeToSet = {
  account: SeedPrimitivesSignatureAccountId20
}

Mint Fee Paid

Additional mint fee has been paid to the receiver address Namespace:
api.events.nfi.MintFeePaid
Type:
type MintFeePaid = {
  sub_type: SeedPrimitivesNfiNFISubType,
  who: SeedPrimitivesSignatureAccountId20,
  asset_id: u32,
  total_fee: u128
}

NFI Enabled

NFI compatibility enabled for a collection Namespace:
api.events.nfi.NfiEnabled
Type:
type NfiEnabled = {
  sub_type: SeedPrimitivesNfiNFISubType,
  collection_id: u32,
}

Relayer Set

A new relayer has been set Namespace:
api.events.nfi.RelayerSet
Type:
type RelayerSet = {
  account: SeedPrimitivesSignatureAccountId20
}

Pallet Errors


Invalid Mint Fee

The mint fee must be a valid integer above 0 Namespace:
api.errors.nfi.InvalidMintFee

Not Enabled

NFI storage is not enabled for this collection Namespace:
api.errors.nfi.NotEnabled

Not Relayer

The caller is not the relayer and does not have permission to perform this action Namespace:
api.errors.nfi.NotRelayer

Not Collection Owner

The caller is not the collection owner and does not have permission to perform this action Namespace:
api.errors.nfi.NotCollectionOwner

Not Token Owner

The caller is not the token owner and does not have permission to perform this action Namespace:
api.errors.nfi.NotTokenOwner

No Token

The token does not exist Namespace:
api.errors.nfi.NoToken

Pallet Constants


Network Fee Percentage

Percentage of sale price to charge for network fees Namespace:
api.consts.nfi.NetworkFeePercentage
Type:
type NetworkFeePercentage = Permill

Max Data Length

Maximum length of data stored per token Namespace:
api.consts.nfi.MaxDataLength
Type:
type MaxDataLength = u32