Skip to main content

API Reference Overview

Complete API reference for the Hoosat JavaScript/TypeScript SDK.

Core Modules​

The Hoosat SDK provides 8 core modules for interacting with the Hoosat blockchain:

HoosatClient​

Main client for connecting to Hoosat nodes and querying blockchain data.

Key Features:

  • Node connection management
  • Blockchain queries (blocks, DAG info, network stats)
  • Balance and UTXO queries
  • Transaction submission
  • Multi-node failover support

Quick Example:

const client = new HoosatClient({
host: '54.38.176.95',
port: 42420
});

const balance = await client.getBalance(address);

HoosatCrypto​

Cryptographic operations for key management and transactions.

Key Features:

  • Key pair generation (ECDSA secp256k1)
  • Wallet import/export
  • Address generation
  • Transaction signing
  • BLAKE3 hashing

Quick Example:

const wallet = HoosatCrypto.generateKeyPair('mainnet');
console.log('Address:', wallet.address);

HoosatTxBuilder​

Fluent transaction builder with automatic change calculation.

Key Features:

  • Chainable API
  • Automatic change calculation
  • Input/output management
  • Built-in validation
  • Spam protection compliance

Quick Example:

const builder = new HoosatTxBuilder();

builder
.addInput(utxo, wallet.privateKey)
.addOutput(recipientAddress, amount)
.setFee(feeEstimate.totalFee)
.addChangeOutput(wallet.address);

const signedTx = builder.sign();

Fee Calculation​

Automatic minimum fee calculation using MASS-based formula.

Key Features:

  • Automatic fee calculation via client.calculateMinFee()
  • Manual calculation via HoosatCrypto.calculateMinFee()
  • MASS-based formula (HTND compatible)
  • Payload size support
  • No dynamic fee estimation

Quick Example:

// Automatic (recommended)
const minFee = await client.calculateMinFee(wallet.address);

// Or manual
const minFee = HoosatCrypto.calculateMinFee(
2, // inputs
2 // outputs
);

HoosatUtils​

Utility functions for validation, conversion, and formatting.

Key Features:

  • Amount conversion (HTN ↔ sompi)
  • Address validation
  • Network detection
  • Amount formatting
  • Private key validation

Quick Example:

// Convert HTN to sompi
const sompi = HoosatUtils.amountToSompi('1.5');

// Validate address
if (HoosatUtils.isValidAddress(address)) {
// Process address
}

HoosatEventManager​

Real-time event streaming and WebSocket management.

Key Features:

  • UTXO change monitoring
  • Block notifications
  • Virtual DAG updates
  • Automatic reconnection
  • Multi-subscription support

Quick Example:

await client.events.subscribeToUtxoChanges([address]);

client.events.on(EventType.UtxoChange, (notification) => {
console.log('Balance changed!');
});

HoosatQR​

QR code generation and payment URI handling.

Key Features:

  • Payment request QR codes
  • Address QR codes
  • URI encoding/decoding
  • Customizable styling
  • Mobile wallet integration

Quick Example:

const qr = await HoosatQR.generatePaymentQR({
address: merchantAddress,
amount: HoosatUtils.amountToSompi('1.5'),
label: 'My Store',
message: 'Order #12345'
});

HoosatSigner​

Message signing and verification for authentication.

Key Features:

  • Cryptographic message signing
  • Signature verification
  • Address ownership proofs
  • Authentication challenges
  • Authorization tokens

Quick Example:

const signature = HoosatSigner.signMessage(message, wallet.privateKey);

const isValid = HoosatSigner.verifyMessage(
message,
signature,
wallet.address
);

Type Definitions​

Common Types​

// Network type
type HoosatNetwork = 'mainnet' | 'testnet';

// Key pair
interface KeyPair {
address: string;
publicKey: Buffer;
privateKey: Buffer;
}

// API result wrapper
interface BaseResult<T> {
ok: boolean;
result?: T;
error?: string;
}

// UTXO entry
interface UtxoForSigning {
outpoint: {
transactionId: string;
index: number;
};
utxoEntry: {
amount: string;
scriptPublicKey: {
scriptPublicKey: string;
version: number;
};
blockDaaScore: string;
isCoinbase: boolean;
};
}

// Transaction
interface Transaction {
version: number;
inputs: TransactionInput[];
outputs: TransactionOutput[];
lockTime: string;
subnetworkId: string;
gas: string;
payload: string;
}

Event Types​

enum EventType {
UtxoChange = 'utxo_change',
BlockAdded = 'block_added',
VirtualDagChanged = 'virtual_dag_changed'
}

interface UtxoChangeNotification {
address: string;
added: UtxoEntry[];
removed: UtxoEntry[];
}

interface BlockAddedNotification {
blockHash: string;
blockHeader: BlockHeader;
}

Fee Calculation​

The SDK uses MASS-based minimum fee calculation:

// Automatic fee calculation
const minFee: string = await client.calculateMinFee(
address: string,
payloadSize?: number
);

// Manual fee calculation
const minFee: string = HoosatCrypto.calculateMinFee(
inputsCount: number,
outputsCount: number,
payloadSize?: number
);

Module Comparison​

ModulePurposeCommon Use Cases
HoosatClientBlockchain queriesCheck balance, get UTXOs, submit transactions, calculate fees
HoosatCryptoKey managementGenerate wallets, sign transactions, calculate fees, hash data
HoosatTxBuilderBuild transactionsSend payments, consolidate UTXOs, batch transfers
HoosatUtilsValidation & conversionValidate addresses, convert amounts, format data
HoosatEventManagerReal-time monitoringTrack balance changes, monitor blocks
HoosatQRPayment requestsGenerate QR codes, handle payment URIs
HoosatSignerAuthenticationProve ownership, sign messages, verify signatures

Quick Start Examples​

Check Balance​

import { HoosatClient, HoosatUtils } from 'hoosat-sdk';

const client = new HoosatClient({
host: '54.38.176.95',
port: 42420
});

const result = await client.getBalance(address);

if (result.ok) {
const htn = HoosatUtils.sompiToAmount(result.result.balance);
console.log(`Balance: ${htn} HTN`);
}

Send Transaction​

import {
HoosatClient,
HoosatCrypto,
HoosatTxBuilder,
HoosatUtils
} from 'hoosat-sdk';

const client = new HoosatClient({ host: '54.38.176.95', port: 42420 });
const wallet = HoosatCrypto.importKeyPair(process.env.WALLET_PRIVATE_KEY!);

// Get UTXOs
const utxosResult = await client.getUtxosByAddresses([wallet.address]);
const utxos = utxosResult.result.utxos;

// Calculate minimum fee
const minFee = await client.calculateMinFee(wallet.address);

// Build and sign transaction
const builder = new HoosatTxBuilder();

for (const utxo of utxos) {
builder.addInput(utxo, wallet.privateKey);
}

builder
.addOutput(recipientAddress, HoosatUtils.amountToSompi('1.0'))
.setFee(minFee)
.addChangeOutput(wallet.address);

const signedTx = builder.sign();

// Submit
const result = await client.submitTransaction(signedTx);

if (result.ok) {
console.log('TX ID:', result.result.transactionId);
}

Monitor Balance​

import { HoosatClient, EventType, HoosatUtils } from 'hoosat-sdk';

const client = new HoosatClient({ host: '54.38.176.95', port: 42420 });

await client.events.subscribeToUtxoChanges([address]);

client.events.on(EventType.UtxoChange, (notification) => {
let change = 0n;

for (const utxo of notification.added) {
change += BigInt(utxo.utxoEntry.amount);
}

for (const utxo of notification.removed) {
change -= BigInt(utxo.utxoEntry.amount);
}

console.log('Balance changed by:', HoosatUtils.sompiToAmount(change), 'HTN');
});

Error Handling​

All SDK methods use a consistent error handling pattern:

interface BaseResult<T> {
ok: boolean;
result?: T;
error?: string;
}

// Usage
const result = await client.getBalance(address);

if (result.ok) {
// Success - use result.result
console.log('Balance:', result.result.balance);
} else {
// Error - check result.error
console.error('Error:', result.error);
}

Benefits:

  • Type-safe error handling
  • No thrown exceptions for API calls
  • Explicit success/failure checking
  • Detailed error messages

Constants​

Network Prefixes​

const MAINNET_PREFIX = 'hoosat:';
const TESTNET_PREFIX = 'hoosattest:';

Unit Conversion​

const SOMPI_PER_HTN = 100000000n;  // 1 HTN = 100,000,000 sompi

Dust Threshold​

const DUST_THRESHOLD = 1000n;  // 1000 sompi

Address Versions​

const ADDRESS_VERSION_SCHNORR = 0x00;
const ADDRESS_VERSION_ECDSA = 0x01;
const ADDRESS_VERSION_P2SH = 0x08;

Spam Protection Limits​

const MAX_RECIPIENT_OUTPUTS = 2;   // Max recipients per transaction
const MAX_TOTAL_OUTPUTS = 3; // Max total outputs (recipients + change)

Next Steps​