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}`);
}
from kaleido_sdk import KaleidoClient

client = KaleidoClient.create(
    base_url="https://api.regtest.kaleidoswap.com"
)

assets = await client.maker.list_assets()
pairs = await client.maker.list_pairs()

print(f"Assets: {len(assets.assets)}")
print(f"Pairs: {len(pairs.pairs)}")

for pair in pairs.pairs[:5]:
    print(f"{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}`);
from kaleido_sdk import KaleidoClient, Layer, PairQuoteRequest, SwapLegInput

client = KaleidoClient.create()

quote = await client.maker.get_quote(
    PairQuoteRequest(
        from_asset=SwapLegInput(asset_id="BTC", layer=Layer.BTC_LN, amount=100000),
        to_asset=SwapLegInput(asset_id="USDT", layer=Layer.RGB_LN),
    )
)

print(f"RFQ ID: {quote.rfq_id}")
print(f"Price: {quote.price}")
print(f"From: {quote.from_asset.amount} {quote.from_asset.ticker}")
print(f"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);
from kaleido_sdk import (
    CreateSwapOrderRequest,
    KaleidoClient,
    Layer,
    PairQuoteRequest,
    ReceiverAddressFormat,
    SwapCompletionOptions,
    SwapLegInput,
)

client = KaleidoClient.create()

quote = await client.maker.get_quote(
    PairQuoteRequest(
        from_asset=SwapLegInput(asset_id="BTC", layer=Layer.BTC_LN, amount=100000),
        to_asset=SwapLegInput(asset_id="USDT", layer=Layer.RGB_LN),
    )
)

order = await client.maker.create_swap_order(
    CreateSwapOrderRequest(
        rfq_id=quote.rfq_id,
        from_asset=quote.from_asset,
        to_asset=quote.to_asset,
        receiver_address={
            "address": "demo-receiver-address",
            "format": ReceiverAddressFormat.BOLT11,
        },
    )
)

final_order = await client.maker.wait_for_swap_completion(
    order.id,
    SwapCompletionOptions(
        timeout=300.0,
        poll_interval=2.0,
        on_status_update=lambda status: print(f"Status: {status}"),
    ),
)

print(final_order.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);
from kaleido_sdk import KaleidoClient, Layer, PairQuoteRequest, SwapLegInput, SwapRequest

client = KaleidoClient.create(
    base_url="https://api.signet.kaleidoswap.com"
)

quote = await client.maker.get_quote(
    PairQuoteRequest(
        from_asset=SwapLegInput(asset_id="BTC", layer=Layer.BTC_LN, amount=4_100_000),
        to_asset=SwapLegInput(asset_id="USDT", layer=Layer.RGB_LN),
    )
)

swap = await client.maker.init_swap(
    SwapRequest(
        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,
    )
)

print(swap.payment_hash)
print(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);
from kaleido_sdk import KaleidoClient

client = KaleidoClient.create(
    base_url="https://api.signet.kaleidoswap.com"
)

client.maker.enable_websocket("wss://api.signet.kaleidoswap.com/ws/my-client-id")

stop = await client.maker.stream_quotes_by_ticker(
    "BTC",
    "USDT",
    100000,
    lambda quote: print(quote.price),
    poll_interval=2.0,
)

stop()

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);
}
from kaleido_sdk import KaleidoClient

client = KaleidoClient.create(
    node_url="http://localhost:3001"
)

if client.has_node():
    node_info = await client.rln.get_node_info()
    balance = await client.rln.get_btc_balance()

    print(node_info.pubkey)
    print(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.5"
from kaleido_sdk import to_smallest_units, to_display_units, get_sdk_name, get_version

print(to_smallest_units(0.001, 8))  # 100000
print(to_display_units(100000, 8))  # 0.001
print(get_sdk_name())               # "kaleido-sdk"
print(get_version())                # "0.1.5"