Documentation Index
Fetch the complete documentation index at: https://docs.leokit.dev/llms.txt
Use this file to discover all available pages before exploring further.
Most utilities live under the leokit-sdk/utils and leokit-sdk/cdn subpath imports. They’re tree-shakeable — only what you import gets bundled.
Amount Math
import {
toBaseUnits,
fromBaseUnits,
formatAmount,
formatWithSeparators,
applySlippage,
addAmounts,
subtractAmounts,
multiplyAmounts,
divideAmounts,
percentageOf,
compareAmounts,
isPositive,
isZero,
parseAmount,
truncateDecimals,
getMinimumAmount,
} from "leokit-sdk/utils";
toBaseUnits("1.5", 18); // "1500000000000000000"
fromBaseUnits("1500000000000000000", 18); // "1.5"
formatAmount("1234.5678", 2); // "1234.57"
formatWithSeparators("1234567.89"); // "1,234,567.89"
applySlippage("1000", 150); // "985" (150 bps = 1.5%)
All amount helpers accept and return strings to avoid number precision loss. Internally they use bignumber.js.
Chain Helpers
import {
getChainFromNetwork,
getNetworkFromChain,
getNativeAsset,
isEvmChain,
isUtxoChain,
isCosmosChain,
getEvmChainId,
getChainFromEvmId,
getProtocolType,
EVM_CHAINS,
UTXO_CHAINS,
COSMOS_CHAINS,
} from "leokit-sdk/utils";
getNativeAsset("ETH"); // "ETH.ETH"
getNativeAsset("BTC"); // "BTC.BTC"
isEvmChain("ARB"); // true
getEvmChainId("ETH"); // 1
getChainFromEvmId(42161); // "ARB"
getProtocolType("ETH"); // "evm"
CHAIN_CONFIGS (from the main entry point) holds the full per-chain config used by the SDK — RPC URLs, explorer URLs, native asset, decimals.
import { CHAIN_CONFIGS, getChainConfig, getRpcUrl, getTxExplorerUrl } from "leokit-sdk";
const cfg = getChainConfig("ETH");
const rpc = getRpcUrl("ETH", "mainnet");
const url = getTxExplorerUrl("ETH", "0xabc...");
Asset Parsing
LeoKit asset IDs follow CHAIN.SYMBOL[-ADDRESS] (e.g. ETH.USDC-0xA0b...). Helpers:
import {
getParsedAsset,
getAssetContractAddress,
isNativeAsset,
isHiveEngineAsset,
constructAsset,
normalizeAddress,
NULL_ADDRESS,
} from "leokit-sdk/utils";
getParsedAsset("ETH.USDC-0xA0b...");
// { network: "ETH", symbol: "USDC", address: "0xA0b..." }
isNativeAsset("BTC.BTC"); // true
isNativeAsset("ETH.USDC-0xA0b..."); // false
getAssetContractAddress("ETH.USDC-0xA0b..."); // "0xA0b..."
constructAsset("ETH", "USDC", "0xA0b..."); // "ETH.USDC-0xA0b..."
normalizeAddress("ETH", "0xA0B86991C6218B36C1D19D4A2E9EB0CE3606EB48");
// → checksummed lowercase form
The full asset-format spec is at Asset Format.
Errors
import { LeoKitError, isLeoKitError, type ErrorCode } from "leokit-sdk/utils";
try {
await sdk.executeSwap(quote);
} catch (err) {
if (isLeoKitError(err)) {
console.log(err.code, err.statusCode, err.message);
} else {
throw err;
}
}
The full ErrorCode catalog is at Error Codes. LeoKitError mirrors the backend’s error class so you get matching codes on both sides.
Events
The LeoKitClient is itself an EventEmitter. For your own internal pub/sub, the SDK exposes the same primitive:
import { EventEmitter, createEventEmitter, type LeoKitEvents } from "leokit-sdk/utils";
const bus = createEventEmitter<{ ready: void; error: Error }>();
const off = bus.on("ready", () => console.log("ready"));
bus.emit("ready");
off(); // unsubscribe
Built-in LeoKitEvents shape: error, transaction, walletChange, connectionChange. Type-safe on/off/emit.
CDN Icons
import { getAssetIcon, getNetworkIcon, getWalletIcon, getProtocolIcon } from "leokit-sdk/cdn";
getAssetIcon("ETH.USDC-0xA0b..."); // "https://cdn.leokit.dev/assets/eth/usdc.png"
getNetworkIcon("ETH"); // "https://cdn.leokit.dev/networks/eth.png"
getWalletIcon("metamask"); // "https://cdn.leokit.dev/wallets/metamask.png"
getProtocolIcon("thorchain"); // "https://cdn.leokit.dev/protocols/thorchain.png"
The CDN is also exposed as LEOKIT_CDN_BASE_URL if you want to compose URLs yourself. Custom CDN bases can be set via cdnUrl in LeoKitConfig.
EVM-Specific
import { normalizeHexValue } from "leokit-sdk/utils";
normalizeHexValue("0x1"); // "0x1"
normalizeHexValue("0x01"); // "0x1"
normalizeHexValue("0X0123"); // "0x123"
Useful when comparing eth_chainId values across providers that disagree on padding.