Unique SDK indexer

This SDK provides a typed wrapper around Axios to interact with the Unique Network blockchain indexer API. Below are some real-world use cases to help you get started.

API Endpoints

SDK Initialization

To start using the SDK, initialize the UniqueIndexer client with the desired base URL:

import { UniqueIndexer } from '@unique-nft/sdk';

const indexerClient = UniqueIndexer({ baseUrl: 'https://api-unique.uniquescan.io/v2' });

Examples

Use Cases and Code Samples

Fetch the Last 5 Blocks

Retrieve the last 5 blocks from the blockchain in descending order by block number.

const getLastBlocks = async () => {
  const indexerClient = UniqueIndexer({baseUrl: 'https://api-unique.uniquescan.io/v2'});

  const blocks = await indexerClient.blocks({limit: 5, orderByNumber: 'desc'});

  console.log('Last blocks', blocks);
};

Fetch the First 5 Blocks of the Current Year

Retrieve the first 5 blocks from the blockchain in ascending order by block number, starting from January 1st of the current year.

const getFirstBlocksInThisYear = async () => {
  const indexerClient = UniqueIndexer({baseUrl: 'https://api-unique.uniquescan.io/v2'});
  const startDate = new Date(`${new Date().getFullYear()}-01-01`);

  const blocks = await indexerClient.blocks({limit: 5, orderByNumber: 'asc', timestampFrom: startDate});

  console.log('First blocks in this year', blocks);
};

Fetch a Single Block by Hash

Retrieve a single block from the blockchain using its hash.

const getSingleBlockByHash = async () => {
  const indexerClient = UniqueIndexer({baseUrl: 'https://api-unique.uniquescan.io/v2'});

  const block = await indexerClient.block({hashOrNumber: '0xd2fcbc0a3be6a34e93d4201ca9ffbeae18931471d62a2dcb3b1c4f4da180a6d0'});

  console.log('Single block by hash', block);
};

Fetch a Single Block by Number

Retrieve a single block from the blockchain using its number.

const getSingleBlockByNumber = async () => {
  const indexerClient = UniqueIndexer({baseUrl: 'https://api-unique.uniquescan.io/v2'});

  const block = await indexerClient.block({hashOrNumber: 333});

  console.log('Single block by number', block);
};

Fetch All Extrinsic Sections and Methods

Retrieve all available extrinsic sections and methods from the blockchain. This information is useful for filtering extrinsics.

const getAllExtrinsicSectionsAndMethods = async () => {
  const indexerClient = UniqueIndexer({baseUrl: 'https://api-unique.uniquescan.io/v2'});

  const extrinsics = await indexerClient.extrinsicSections();

  console.log('All extrinsic sections and methods', extrinsics);
};

Fetch Extrinsics by Section and Method

Retrieve extrinsics filtered by specific sections and methods.

const getExtrinsicsBySectionAndMethod = async () => {
  const indexerClient = UniqueIndexer({ baseUrl: 'https://api-unique.uniquescan.io/v2' });

  const balanceTransfers = await indexerClient.extrinsics({
    sectionIn: ['balances'],
    methodIn: ['transfer', 'transferAll', 'transferKeepAlive', 'transferAllowDeath'],
  });

  console.log('Extrinsics by section and method', balanceTransfers);
};

Fetch Extrinsics by Signer

Retrieve extrinsics filtered by the signer's address.

const getExtrinsicsBySigner = async () => {
  const indexerClient = UniqueIndexer({baseUrl: 'https://api-unique.uniquescan.io/v2'});

  const balanceTransfers = await indexerClient.extrinsics({ signerIn: ['5H684Wa69GpbgwQ7w9nZyzVpDmEDCTexhRNmZ7mkqM1Rt7dH'] });

  console.log('Extrinsics by signer', balanceTransfers);
};

Search Collections

Retrieve collections based on multiple search criteria such as name, description, admin, owner, sponsor, and various sorting options.

const searchCollections = async () => {
  const indexerClient = UniqueIndexer({ baseUrl: 'https://api-unique.uniquescan.io/v2' });

  const collections = await indexerClient.collections({
    nameLike: '%substra%',
    descriptionLike: '%First NFT collection%',
    adminIn: ['5F6TPxrxZBhhpvRA8Lu1PWjcpoeoEkAQ4TVALpaxgenTU3sM'],
    ownerIn: ['5H684Wa69GpbgwQ7w9nZyzVpDmEDCTexhRNmZ7mkqM1Rt7dH'],
    sponsorIn: ['5H684Wa69GpbgwQ7w9nZyzVpDmEDCTexhRNmZ7mkqM1Rt7dH'],
    isBurned: false,
    orderByCollectionId: 'asc',
    orderByLastTokenId: 'desc',
    orderByName: 'asc',
    orderByCreatedAtBlockNumber: 'asc',
    orderByUpdatedAtBlockNumber: 'asc',
  });

  console.log('Collections', collections);
};

Search NFTs

Retrieve NFTs based on various search criteria such as collection ID, token ID, ownership, royalty recipients, attributes, and sorting options.

const searchNfts = async () => {
  const indexerClient = UniqueIndexer({ baseUrl: 'https://api-unique.uniquescan.io/v2' });

  const nfts = await indexerClient.nfts({
    collectionIdIn: ['1', '0x17C4e6453cC49AAaaEaCA894E6D9683e00000001'],
    tokenIdIn: [1],
    isBurned: false,
    royaltyRecipientIn: ['5Gus5r7HSZv9ScdaTNVbFMBEsxMtc4cZBPTLfJJbLXQK8m9d'],
    attributeTraitTypeIn: ['traits'],
    attributeValueIn: ['Up Hair', 'Teeth Smile'],
    isBundle: false,
    ownerIn: ['5FZeTmbZQZsJcyEevjGVK1HHkcKfWBYxWpbgEffQ2M1SqAnP'],
    orderByCollectionId: 'asc',
    orderByTokenId: 'asc',
    orderByCreatedAtBlockNumber: 'asc',
  });

  console.log('NFTs', nfts);
};

Search Accounts

Retrieve accounts based on various search criteria such as address, mirror address, smart contract status, signer status, and whether the account is an Ethereum address.

const searchAccounts = async () => {
  const indexerClient = UniqueIndexer({ baseUrl: 'https://api-unique.uniquescan.io/v2' });

  const accounts = await indexerClient.accounts({
    addressIn: ['5H1La78VqPKMeyzL129N2E5PBeS8rdLqoKhsM5LGxS2Y8xtR'],
    mirrorIn: ['0xdA9bC709172FD24505D356000BF6524065E86B57'],
    isSmartContract: false,
    isSigner: true,
    isEthereum: false,
  });

  console.log('Accounts', accounts);
};

Fetch Event Sections

Retrieve all available event sections from the blockchain.

const eventsSections = async () => {
  const indexerClient = UniqueIndexer({ baseUrl: 'https://api-unique.uniquescan.io/v2' });
  const sections = await indexerClient.eventSections();

  console.log('Event sections', sections);
};

Search Events

Retrieve events from the blockchain based on specific criteria such as section, method, and block number range.

const searchEvents = async () => {
  const indexerClient = UniqueIndexer({ baseUrl: 'https://api-unique.uniquescan.io/v2' });

  const events = await indexerClient.events({
    sectionIn: ['balances'],
    methodIn: ['Transfer'],
    blockNumberFrom: 1000000,
    blockNumberTo: 2000000,
  });

  console.log('Events', events);
};