# Kickstart: Integrate (nibijs)

A brief guide on Nibiru's APIs, docs, and resources to broadcast transactions and query the chain.

# Nibiru JS (nibijs): Installation

Copy # 1 - Install and use nvm for node version compatibility wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.6/install.sh | bash nvm use lts/hydrogen # node >= 18 # 2 - Package install yarn add @nibiruchain/nibijs@^0.21.43 # NOTE: You should use v1 or higher for mainnet. For network API guarantees, the # major and minor version of nibijs should version of the chain you're using. # I.e., 1.5.x and 1.5.y should be compatible. yarn install --check-files

# Nibiru JS (nibijs): Query and Tx Clients

Copy import { NibiruTxClient, NibiruQuerier, Chain, Testnet, newRandomWallet, } from "@nibiruchain/nibijs" /** * A "Chain" object exposes all endpoints for Nibiru node such as the * gRPC server, Tendermint RPC endpoint, and REST server. * * The most important one for nibijs is "Chain.endptTM", the Tendermint RPC. **/ const chain: Chain = Testnet() // Permanent testnet // ---------------- NibiruQuerier ---------------- const querier = await NibiruQuerier.connect(chain.endptTm) // ---------------- NibiruTxClient ---------------- // let signer = await newRandomWallet() // Signer: randomly generated let signer = await newSignerFromMnemonic("mnemonic here...") // Signer: in-practice const txClient = await NibiruTxClient.connectWithSigner( CHAIN.endptTm, signer )

# Nibiru JS (nibijs): Common Queries

Once you have the NibiruQuerier (called querier) connected, you can use the following:

Behavior Description
querier.getAllBalances(address) Return all token balances for the given address
querier.getBalance(address, denom) Return a single token balance for the given address
querier.tm.block(height) Return block details by height such as the block has, parent block hash, block height, timestamp, etc.
querier.getHeight() Return latest block height
querier.getBlock() Return latest block. Passing in the height as an argument is equivalent to querier.tm.block(height).
querier.getTxByHash(txHashHex) Request transaction details using the hexadecimal string for the transaction hash.
querier.getTxByHashSha(txHashSha) Request transaction details using its SHA-256 hash, endoed as an array of bytes (Uint8Array in TS, Vec<u8> in Rust).

# Transaction Hashes

The txHash returned in block results is a hexadecimal-encoded version of the SHA-256 cryptographic hash. If you have the tx hash in SHA-256 / bytes form, use getTxByHashSha. And if you have the hex string (more common form), use getTxByHash.

# BlockResponse.block.header from querier.tm.block(height)

Copy export interface Header { readonly version: Version; readonly chainId: string; readonly height: number; readonly time: ReadonlyDateWithNanoseconds; /** Block ID of the previous block. This is only `null` for block height 1. */ readonly lastBlockId: BlockId | null; /** Hashes of block data. */ readonly lastCommitHash: Uint8Array; readonly dataHash: Uint8Array; readonly validatorsHash: Uint8Array; readonly nextValidatorsHash: Uint8Array; readonly consensusHash: Uint8Array; /** This can be an empty string for height 1 and turn into "0000000000000000" later on 🤷 */ readonly appHash: Uint8Array; /** This is `sha256("")` when there no data */ readonly lastResultsHash: Uint8Array; /** This is `sha256("")` when there no data */ readonly evidenceHash: Uint8Array; readonly proposerAddress: Uint8Array; }

# Wallets

# Test Network Tokens (Faucet)

Web Faucet: app.nibiru.fi/faucet (opens new window)

# Running a Full Node

Please note that for mainnet, you’ll need the latest release from NiibiruChain/nibiru (opens new window) rather than the version used on testnet.