Skip to main content

1) Install

npm install @satsterminal-sdk/bridge
# or via suite
npm install satsterminal-sdk

2) Initialize the client

import { BridgeSDK } from "@satsterminal-sdk/bridge";
// or: import { createBridgeClient } from "@satsterminal-sdk/bridge";

const bridge = new BridgeSDK({
  apiKey: process.env.API_KEY!,
  baseUrl: process.env.BRIDGE_BASE_URL, // optional override
});

3) Runes -> Spark (mint wRunes)

Request a BTC deposit address scoped to the user + rune + nonce, then submit a proof after the user deposits.
const btcDeposit = await bridge.spark.runes.getBTCDepositAddress({
  userPublicKey: "0x...",
  runeId: "840000:3",
  amount: "1000000", // strings (u64)
});

const { requestId } = await bridge.spark.runes.bridgeRunes({
  btcAddress: "bc1...",              // user's BTC address used for the deposit
  bridgeAddress: btcDeposit.address, // issued deposit address (single-use)
  txid: "<deposit-txid>",
  vout: 0,
});
The bridge waits for 1 BTC confirmation before minting.

4) Track activity

const activity = await bridge.spark.runes.getActivity("0x...");

activity.forEach((item) => {
  console.log(item.txid, item.status, item.confirmations);
});
Common statuses
  • address_issued: deposit/exit address generated
  • waiting_for_confirmations: deposit seen, waiting for 1 conf (BTC) or balance check (Spark)
  • ready_for_mint: verified, about to mint/burn
  • minted: Spark mint completed (Runes -> Spark)
  • spent: BTC payout built/sent (Spark -> Runes)
  • pending / failed: still processing or terminal failure