SNIP721 (Secret NFTs)

Learn how to send SNIP721s with SecretJS.

Secret Network Client Setup

import { SecretNetworkClient, Wallet } from "secretjs";

const wallet = new Wallet("Your mnemonic words go here");

const secretjs = new SecretNetworkClient({
  chainId: "pulsar-3",
  url: "https://api.pulsar3.scrttestnet.com",
  wallet: wallet,
  walletAddress: wallet.address,
});

Add Minter

const addMinterMsg = await secretjs.tx.snip721.addMinter(
  {
    contract_address: contractAddress,
    msg: { add_minters: { minters: [accounts[0].address] } },
    sender: accounts[0].address,
  },
  {
    gasLimit: 100_000,
  },
);

Mint SNIP721 Token

const mintMsg = await secretjs.tx.snip721.mint(
  {
    contract_address :contractAddress,
    sender: accounts[0].address,
    msg: {
      mint_nft: {
        token_id: "1",
      },
    },
  },
  {
    gasLimit: 200_000,
  },
);

Send SNIP721 Token

const txExec = await secretjs.tx.snip721.send(
  {
    sender: secretjs.address,
    contract_address: contractAddress,
    msg: {
      send_nft: {
        contract: accounts[1].address,
        token_id: "1",
      },
    },
  },
  {
    gasLimit: 50_000,
  },
);

Add Minter and Mint in a Single Transaction

const addMinterMsg = new MsgExecuteContract({
  sender: accounts[0].address,
  contract_address: contractAddress,
  // codeHash, // Test MsgExecuteContract without codeHash
  msg: { add_minters: { minters: [accounts[0].address] } },
  sentFunds: [],
});

const mintMsg = new MsgExecuteContract({
  sender: accounts[0].address,
  contract_address: contractAddress,
  code_hash: codeHash,
  msg: {
    mint_nft: {
      token_id: "1",
      owner: accounts[0].address,
      public_metadata: {
        extension: {
          image:
            "https://scrt.network/secretnetwork-logo-secondary-black.png",
          name: "secretnetwork-logo-secondary-black",
        },
      },
      private_metadata: {
        extension: {
          image:
            "https://scrt.network/secretnetwork-logo-primary-white.png",
          name: "secretnetwork-logo-primary-white",
        },
      },
    },
  },
  sentFunds: [],
});

const tx = await secretjs.tx.broadcast([addMinterMsg, mintMsg], {
  gasLimit: 5_000_000,
});

Query Tokens with Permit

let permit = await secretjs.utils.accessControl.permit.sign(accounts[0].address, "secretdev-1", "Test", [contractAddress], ["owner"], false)

let tokens2 = await secretjs.query.snip721.GetOwnedTokens({
  contract: { address: contractAddress, codeHash },
  owner: accounts[0].address,
  auth: { permit: permit },
});

Query Tokens with Viewing Key

await secretjs.tx.snip721.setViewingKey(
  {
    contract_address: contractAddress,
    sender: accounts[0].address,
    msg: {
      set_viewing_key: {
        key: "hello",
      },
    },
  },
  {
    gasLimit: 100_000,
  },
);

    let tokens = await secretjs.query.snip721.GetOwnedTokens({
  contract: { address: contractAddress, codeHash },
  owner: accounts[0].address,
  auth: { viewer: { viewing_key: "hello", address: accounts[0].address } },
});

Last updated