Skip to main content

Market Data

import { KaleidoClient } from 'kaleido-sdk';

const client = KaleidoClient.create({
  baseUrl: 'https://api.regtest.kaleidoswap.com',
});

const [assets, pairs] = await Promise.all([
  client.maker.listAssets(),
  client.maker.listPairs(),
]);

console.log(`Assets: ${assets.assets.length}`);
console.log(`Pairs: ${pairs.pairs.length}`);

for (const pair of pairs.pairs.slice(0, 5)) {
  console.log(`${pair.base.ticker}/${pair.quote.ticker}`);
}

Request a Quote

import { KaleidoClient, Layer } from 'kaleido-sdk';

const client = KaleidoClient.create();

const quote = await client.maker.getQuote({
  from_asset: { asset_id: 'BTC', layer: Layer.BTC_LN, amount: 100000 },
  to_asset: { asset_id: 'USDT', layer: Layer.RGB_LN },
});

console.log(`RFQ ID: ${quote.rfq_id}`);
console.log(`Price: ${quote.price}`);
console.log(`From: ${quote.from_asset.amount} ${quote.from_asset.ticker}`);
console.log(`To: ${quote.to_asset.amount} ${quote.to_asset.ticker}`);

Create a Swap Order

This mirrors the order-based flow that is implemented in the SDK today: request a quote, create an order, then poll for status.
import { KaleidoClient, Layer, ReceiverAddressFormat } from 'kaleido-sdk';

const client = KaleidoClient.create();

const quote = await client.maker.getQuote({
  from_asset: { asset_id: 'BTC', layer: Layer.BTC_LN, amount: 100000 },
  to_asset: { asset_id: 'USDT', layer: Layer.RGB_LN },
});

const order = await client.maker.createSwapOrder({
  rfq_id: quote.rfq_id,
  from_asset: quote.from_asset,
  to_asset: quote.to_asset,
  receiver_address: {
    address: 'demo-receiver-address',
    format: ReceiverAddressFormat.BOLT11,
  },
});

const finalOrder = await client.maker.waitForSwapCompletion(order.id, {
  accessToken: order.access_token,
  timeout: 300000,
  pollInterval: 2000,
  onStatusUpdate: (status) => console.log(`Status: ${status}`),
});

console.log(finalOrder.status);

Atomic Swap Initialization

import { KaleidoClient, Layer } from 'kaleido-sdk';

const client = KaleidoClient.create({
  baseUrl: 'https://api.signet.kaleidoswap.com',
});

const quote = await client.maker.getQuote({
  from_asset: { asset_id: 'BTC', layer: Layer.BTC_LN, amount: 4100000 },
  to_asset: { asset_id: 'USDT', layer: Layer.RGB_LN },
});

const swap = await client.maker.initSwap({
  rfq_id: quote.rfq_id,
  from_asset: quote.from_asset.asset_id,
  from_amount: quote.from_asset.amount,
  to_asset: quote.to_asset.asset_id,
  to_amount: quote.to_asset.amount,
});

console.log(swap.payment_hash);
console.log(swap.swapstring);

WebSocket Streaming

import { KaleidoClient } from 'kaleido-sdk';

const client = KaleidoClient.create({
  baseUrl: 'https://api.signet.kaleidoswap.com',
});

client.maker.enableWebSocket('wss://api.signet.kaleidoswap.com/ws/my-client-id');

const stop = await client.maker.streamQuotesByTicker(
  'BTC',
  'USDT',
  100000,
  (quote) => console.log(quote.price),
  { pollInterval: 2000 }
);

setTimeout(() => stop(), 10000);

RLN Operations

import { KaleidoClient } from 'kaleido-sdk';

const client = KaleidoClient.create({
  nodeUrl: 'http://localhost:3001',
});

if (client.hasNode()) {
  const nodeInfo = await client.rln.getNodeInfo();
  const balance = await client.rln.getBtcBalance();

  console.log(nodeInfo.pubkey);
  console.log(balance);
}

Utilities

import { toSmallestUnits, toDisplayUnits, getSdkName, getVersion } from 'kaleido-sdk';

console.log(toSmallestUnits(0.001, 8)); // 100000
console.log(toDisplayUnits(100000, 8)); // 0.001
console.log(getSdkName());              // "kaleido-sdk"
console.log(getVersion());              // "0.1.2"