Guides
NFTs on Portaldot
Mint with Portaldot's native Nfts pallet. The media is stored by Portaldot too, so no part of the NFT depends on a pinning service.
One signature
Mint as NFT on a file sends one utility.batchAll:
nfts.createandnfts.setCollectionMetadatathe first time. Your PotDrive collection is tagged so later mints reuse it.nfts.mint(collection, item, you).nfts.setMetadata(collection, item, json), with the metadata written straight into chain state.
item metadata (≤ 256 bytes, the pallet's StringLimit)
{"name":"Field Notes","image":"ipfs://bafykbzace…","url":"https://potdrive.anshverma.tech/f/bafykbzace…","mime":"image/png","by":"PotDrive"}image points at a CID that Portaldot's own validators hold and prove. Anyone can resolve it through any Portaldot node's bitswap_v1_get, or through the gateway.
Deposits
| Collection | 1 tPOT (once) |
| Item | 0.1 tPOT |
| Metadata | 0.1 tPOT + 0.06 tPOT per byte |
Deposits are held, not spent, while the collection and item exist. When we checked on 17 October 2026, no Nfts collection existed on the V3 testnet yet.
From code
mint.ts
const plan = await planMint(api, owner, { name: "Field Notes", image: `ipfs://${cid}` });
await send(api, api.tx.utility.batchAll(mintCalls(api, owner, plan)), { address: owner, signer });
const mine = await ownedNfts(api, owner);