NodeJS

Node.js SDK

This SDK allows you to interact with UTxORPC compatible nodes, enabling operations such as fetching blocks, submitting transactions, and syncing with the latest blocks.

Prerequisites

Before you begin, ensure you have the following installed:

  • Node.js: Version 20.0 or higher.
  • npm: The Node.js package manager.

Installation

To install the UTxORPC Node.js SDK in your project, use the following command:

npm install @utxorpc/sdk --save

Overview

The SDK provides three primary clients for interacting with UTxORPC:

  1. CardanoSyncClient: Provides an interface for synchronizing chain data, fetching blocks, and tracking the tip of the blockchain.
  2. CardanoQueryClient: Provides an interface for submitting transactions and monitoring their progress through various stages in their lifecycle.
  3. CardanoSubmitClient: Provides an interface for querying the state of the ledger with the main goal of constructing new transactions.

Usage

Below are examples of how to use each of the clients in the SDK.

1. CardanoSyncClient

The CardanoSyncClient allows you to synchronize with the blockchain, follow the tip, and fetch specific blocks.

Example: Following the Tip

import { CardanoSyncClient } from "@utxorpc/sdk";
 
async function followTipExample() {
  const syncClient = new CardanoSyncClient({
    uri: "https://preview.utxorpc-v0.demeter.run",
    headers: {
      "dmtr-api-key": "dmtr_utxorpc1vc0m93rynmltysttwm7ns9m3n5cklws6"
    }
  });
 
  const tip = syncClient.followTip([
    { 
        slot: 54131816, 
        hash: "34c65aba4b299113a488b74e2efe3a3dd272d25b470d25f374b2c693d4386535" 
    },
  ]);
 
  for await (const event of tip) {
    console.log(event);
  }
}
 
followTipExample().catch(console.error);

Example: Fetching a Block

import { CardanoSyncClient } from "@utxorpc/sdk";
 
async function fetchBlockExample() {
  const syncClient = new CardanoSyncClient({
    uri: "https://preview.utxorpc-v0.demeter.run",
    headers: {
      "dmtr-api-key": "dmtr_utxorpc1vc0m93rynmltysttwm7ns9m3n5cklws6"
    }
  });
 
  const block = await syncClient.fetchBlock({
    slot: 54131816,
    hash: "34c65aba4b299113a488b74e2efe3a3dd272d25b470d25f374b2c693d4386535",
  });
 
  console.log(block);
}
 
fetchBlockExample().catch(console.error);

2. CardanoQueryClient

The CardanoQueryClient allows you to query blockchain data, including reading protocol parameters and searching UTXOs.

Example: Reading Blockchain Parameters

import { CardanoQueryClient } from "@utxorpc/sdk";
 
async function readParamsExample() {
  const queryClient = new CardanoQueryClient({
    uri: "https://preview.utxorpc-v0.demeter.run",
    headers: {
      "dmtr-api-key": "dmtr_utxorpc1vc0m93rynmltysttwm7ns9m3n5cklws6"
    }
  });
 
  const params = await queryClient.readParams();
  console.log(params);
}
 
readParamsExample().catch(console.error);

Example: Searching UTXOs by Address

import { CardanoQueryClient } from "@utxorpc/sdk";
 
async function searchUtxosByAddressExample() {
  const queryClient = new CardanoQueryClient({
    uri: "https://preview.utxorpc-v0.demeter.run",
    headers: {
      "dmtr-api-key": "dmtr_utxorpc1vc0m93rynmltysttwm7ns9m3n5cklws6"
    }
  });
 
  const utxos = await queryClient.searchUtxosByAddress(
    Buffer.from("705c87cbca3a88cbfee6f6ad820acea99f484b4830fc632610f2a30146", "hex")
  );
 
  utxos.forEach((utxo) => {
    console.log(utxo);
  });
}
 
searchUtxosByAddressExample().catch(console.error);

3. CardanoSubmitClient

The CardanoSubmitClient is used to submit transactions to the blockchain.

Example: Submitting a Transaction

import { CardanoSubmitClient } from "@utxorpc/sdk";
 
async function submitTxExample() {
  const submitClient = new CardanoSubmitClient({
    uri: "https://preview.utxorpc-v0.demeter.run",
    headers: {
      "dmtr-api-key": "dmtr_utxorpc1vc0m93rynmltysttwm7ns9m3n5cklws6"
    }
  });
 
  const txSample = "84a300d90102818258203dc5d9977e7b3d51acaea81031d2f461404536b2828549b73876a5980295f81b00018282581d60916c769efc6e2a3339594818a1d0c3998c29e3a6303d8711de8567591a004c4b4082581d60916c769efc6e2a3339594818a1d0c3998c29e3a6303d8711de8567591b0000000253bcffb3021a0002990da100d9010281825820526fa19e3694cda4f3c0d2fb2d2bb8768925eccc49a89d5f12b1972644ac769858403d6d6599193b17e67827cd9f48aaf35ac762c6fb0c5402c52724f307b69ff96f3f7e6c3fb107670c28679c148bf510f479c01a34b9d95d0dbb7e4ff6f3cb560af5f6";
  const txHash = await submitClient.submitTx(Buffer.from(txSample, "hex"));
 
  const txHashHex = Buffer.from(txHash).toString("hex");
  console.log(txHashHex);
}
 
submitTxExample().catch(console.error);

Conclusion

This SDK is designed to streamline the process of interacting with UTxORPC using Node.js. Whether you're syncing with the latest blockchain data, querying UTXOs, or submitting transactions, this SDK provides the necessary tools to build robust blockchain applications with ease.