Unique SDK indexer

WARNING

The Unique SDK v2 is in alpha and may contain bugs or incomplete features. For production use or to access more stable functionality, please refer to the documentation for the previous version of the SDK.

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);
};