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

MetadataExplanation

title

Example: "Key to Paras", the first minted NFT will have "Key to Paras #1" as the title

media

IPFS hash of an image or GIF

reference

IPFS hash of JSON document

copies

This will determined how many NFTs can be minted

Royalty

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: 'https://rpc.testnet.near.org',
		walletUrl: 'https://wallet.testnet.near.org',
		appName: 'Paras Testnet',
		contractName: `paras-token-v2.testnet`
	}

	try {
		// Initializing nearAPI
		// Login and init contract
		const keyStore = new nearAPI.keyStores.UnencryptedFileSystemKeyStore(
			`${process.env.HOME}/.near-credentials/`
		)

		const connection = await nearAPI.connect({
			deps: {
				keyStore: keyStore,
			},
			...config,
		})

		const account_id = 'orang.testnet'
		const account = await connection.account(account_id)

		const contract = await new nearAPI.Contract(
			account,
			config.contractName,
			{
				changeMethods: [
					'nft_create_series'
				],
			}
		)

		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(
			formattedParams,
			300000000000000, //	attached GAS
			"8540000000000000000000"
		)

		console.log(ret)
	} catch (err) {
		throw err
	}
}

main()

Last updated