Creating new NFT series

Creating new NFT series

Creating a new NFT series requires function call to the paras token contract. The media and reference must be an IPFS hash OR an absolute URL.
type TokenMetadata = {
title: string|null, // ex. "Arch Nemesis: Mail Carrier" or "Parcel #5055"
description: string|null, // free-form description
media: string|null, // URL to associated media, preferably to decentralized, content-addressed storage
media_hash: string|null, // Base64-encoded sha256 hash of content referenced by the `media` field. Required if `media` is included.
copies: number|null, // number of copies of this set of metadata in existence when token was minted.
issued_at: number|null, // When token was issued or minted, Unix epoch in milliseconds
expires_at: number|null, // When token expires, Unix epoch in milliseconds
starts_at: number|null, // When token starts being valid, Unix epoch in milliseconds
updated_at: number|null, // When token was last updated, Unix epoch in milliseconds
extra: string|null, // anything extra the NFT wants to store on-chain. Can be stringified JSON.
reference: string|null, // URL to an off-chain JSON file with more info.
reference_hash: string|null // Base64-encoded sha256 hash of JSON from reference field. Required if `reference` is included.
// Create new series
// Arguments
// * `token_metadata`: approved account to transfer
// * `price`: initial price, null for "not for sale"
// * `royalty`: map of accountId with royalty percentage
function nft_create_series(
token_metadata: TokenMetadata,
price: string|null,
royalty: HashMap<AccountId, U128>,
): TokenSeriesJson

Important metadata

Example: "Key to Paras", the first minted NFT will have "Key to Paras #1" as the title
IPFS hash of an image or GIF
IPFS hash of JSON document
This will determined how many NFTs can be minted


Royalty will be divided by 10000, so for 10% royalty, you have to write 1000.
(1000 / 10000 = 0.1)

Using near-cli

near call --accountId projectp.testnet paras-token-v1.testnet nft_create_series '{"creator_id":"projectp.testnet","token_metadata":{"title":"Dark","media":"bafybeifdbvb6yzajogbe4dbn3bgxoli3sp7ol7upfmu2givpvbwufydthu","reference":"bafybeifvzitvju4ftwnkf7w7yakz7i5colcey223uk2ui4t5z3ss7l2od4","copies":100},"price":"1000000000000000000000000","royalty":{"projectp.testnet":100}}' --depositYocto 8540000000000000000000

Using javascript

const nearAPI = require('near-api-js')
const main = async () => {
const config = {
networkId: 'testnet',
nodeUrl: '',
walletUrl: '',
appName: 'Paras Testnet',
contractName: `paras-token-v2.testnet`
try {
// Initializing nearAPI
// Login and init contract
const keyStore = new nearAPI.keyStores.UnencryptedFileSystemKeyStore(
const connection = await nearAPI.connect({
deps: {
keyStore: keyStore,
const account_id = 'orang.testnet'
const account = await connection.account(account_id)
const contract = await new nearAPI.Contract(
changeMethods: [
const formattedParams = {
token_metadata: {
title: 'Dark',
media: 'bafybeifdbvb6yzajogbe4dbn3bgxoli3sp7ol7upfmu2givpvbwufydthu',
reference: 'bafybeifvzitvju4ftwnkf7w7yakz7i5colcey223uk2ui4t5z3ss7l2od4',
copies: 100
price: null,
royalty: {
[account_id]: 1000
const ret = await contract.nft_create_series(
300000000000000, // attached GAS
} catch (err) {
throw err