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


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


Last updated