Querying Blockchain Data
NibiJS
includes a NibiruQuerier
class for querying blockchain data. This class allows developers to query token balances, block details, oracle prices, staking delegations, and more. The NibiruQuerier
makes accessing blockchain data straightforward, enabling developers to efficiently build dApps on the Nibiru blockchain. With NibiruQuerier
, nearly all blockchain data can be queried. Below are some basic examples, but many more queries are possible. Note that these queries can also be accessed via NibiruTxClient
.
Getting Started with NibiruQuerier
First, import the necessary classes and establish a connection to the blockchain.
import { Chain, NibiruQuerier, Testnet } from "@nibiruchain/nibijs";
const connectToQuerier = async () => {
/**
* A "Chain" object exposes all endpoints for a Nibiru node, such as the
* gRPC server, Tendermint RPC endpoint, and REST server.
*
* The most important endpoint for nibijs is "Chain.endptTM", the Tendermint RPC.
**/
const chain: Chain = Testnet(1);
const querier = await NibiruQuerier.connect(chain.endptTm);
return querier;
};
Querying Token Balances
All Token Balances
Retrieve all token balances for a given address.
const queryAllBalances = async (querier, address) => {
const allBalances = await querier.getAllBalances(address);
console.log("All Balances:", allBalances);
return allBalances;
};
// Usage
const querier = await connectToQuerier();
const address = "your_nibi_address"; // Replace with your Nibiru address
const allBalances = await queryAllBalances(querier, address);
Single Token Balance
Retrieve the balance of a specific token for a given address.
const queryBalance = async (querier, address, denom) => {
const balance = await querier.getBalance(address, denom);
console.log(`${denom} Balance:`, balance);
return balance;
};
// Usage
const querier = await connectToQuerier();
const address = "your_nibi_address"; // Replace with your Nibiru address
const balance = await queryBalance(querier, address, "unibi");
Querying Block Information
Latest Block Height
Get the height of the latest block.
const queryLatestHeight = async (querier) => {
const latestHeight = await querier.getHeight();
console.log("Latest Block Height:", latestHeight);
return latestHeight;
};
// Usage
const querier = await connectToQuerier();
const latestHeight = await queryLatestHeight(querier);
Block Details by Height
Get details of a block by its height.
const queryBlockByHeight = async (querier, height) => {
const block = await querier.tm.block(height);
console.log("Block Details:", block);
return block;
};
// Usage
const querier = await connectToQuerier();
const latestHeight = await queryLatestHeight(querier);
const block = await queryBlockByHeight(querier, latestHeight);
Latest Block Details
Get details of the latest block.
const queryLatestBlock = async (querier) => {
const latestBlock = await querier.getBlock();
console.log("Latest Block Details:", latestBlock);
return latestBlock;
};
// Usage
const querier = await connectToQuerier();
const latestBlock = await queryLatestBlock(querier);
Advanced Queries with Nibiru Extensions
Oracle Price Exchange Rate
Get the exchange rate between UNIBI and UUSDT.
const queryOraclePrice = async (querier, pair) => {
const price = await querier.nibiruExtensions.oracle.exchangeRate(pair);
console.log(`Oracle Price (${pair}):`, price);
return price;
};
// Usage
const querier = await connectToQuerier();
const oraclePrice = await queryOraclePrice(querier, "unibi:uusdt");
All IBC Channels
Retrieve all IBC channels.
const queryAllIBCChannels = async (querier) => {
const channels = await querier.nibiruExtensions.ibc.channel.allChannels();
console.log("All IBC Channels:", channels);
return channels;
};
// Usage
const querier = await connectToQuerier();
const allIBCChannels = await queryAllIBCChannels(querier);
Staking Delegations
Get all staking delegations for a given address.
const queryDelegations = async (querier, address) => {
const delegations = await querier.nibiruExtensions.staking.delegatorDelegations(address);
console.log("Delegations:", delegations);
return delegations;
};
// Usage
const querier = await connectToQuerier();
const address = "your_nibi_address"; // Replace with your Nibiru address
const delegations = await queryDelegations(querier, address);
Unbonding Staking Delegations
Get all unbonding staking delegations for a given address.
const queryUnbondingDelegations = async (querier, address) => {
const unbondingDelegations = await querier.nibiruExtensions.staking.delegatorUnbondingDelegations(address);
console.log("Unbonding Delegations:", unbondingDelegations);
return unbondingDelegations;
};
// Usage
const querier = await connectToQuerier();
const address = "your_nibi_address"; // Replace with your Nibiru address
const unbondingDelegations = await queryUnbondingDelegations(querier, address);