总览
交换 API 实现了 KaleidoSwap 桌面应用所使用的原子交换协议。交换通过闪电网络上的哈希时间锁定合约(HTLC)执行 —— 双方同时锁定资产,因此要么整笔交换全部完成,要么资金原路退回。不存在对手方风险。 使用这些接口端点需要具备:- 一个运行中的 RGB Lightning Node(RLN),用于将 HTLC 加入白名单并进行路由。
- 一条到做市方的 WebSocket 连接(或 REST
/market/quote接口端点),用于获取实时报价并生成rfq_id。
https://api.signet.kaleidoswap.com/api/v1(Signet)
获取节点信息
接口端点
GET /api/v1/swaps/nodeinfo
说明
获取做市方 RGB Lightning Node 的公开身份信息 —— 包括其公钥、所在网络和当前区块高度。该接口端点可安全轮询。响应结构
pubkey:做市方节点的公钥。network:该节点所在的比特币网络(例如Signet、Regtest、Mainnet)。block_height:该节点已同步到的当前区块高度。
响应示例
通过 WebSocket 获取实时报价
WebSocket 接口端点
说明
建立 WebSocket 连接,向做市方请求实时报价。该协议采用请求/响应模式:客户端发送一条消息,服务端针对该消息回复。它没有订阅机制 —— 想让价格保持新鲜,就在需要更新报价时再发一条quote_request。
连接
- 将
{client_id}替换为你的客户端的唯一标识符。
消息格式
仅支持两种 action:ping—— 心跳;服务端回复pong。quote_request—— 为两个资产之间的交换请求报价。
from_asset/to_asset(必填):资产标识符 —— 可以是BTC这类 ticker,也可以是 RGB 合约 ID。from_amount/to_amount:以该资产原始最小单位表示的数量。两者必须且只能提供其中一个 —— 正向报价用from_amount,反向报价用to_amount。from_layer/to_layer(可选):显式指定结算层(例如BTC_LN、RGB_LN)。省略时使用该交易对的默认路由。
响应格式
服务端对每条quote_request 回复一条 quote_response 消息,完整报价放在 data 中(结构与 REST POST /api/v1/market/quote 的响应相同):
字段说明
rfq_id:即request_for_quotation_id,由做市方为该报价生成的唯一标识符。这个 ID 对发起交换至关重要,必须在expires_at之前传给init接口端点。from_asset/to_asset:完整的腿规格,包含asset_id、name、ticker、layer、amount(最小单位)和precision。price:1 个完整单位的from_asset的价格,以to_asset的最小单位表示。fee:费用明细 ——base_fee、variable_fee、fee_rate、final_fee,以及费用计价所用的资产(fee_asset)和精度(fee_asset_precision)。timestamp:报价生成的时间(unix 时间)。expires_at:rfq_id过期的时间(unix 时间)。
补充说明:
- 请求失败时(交易对未知、路由不受支持、数量无效)返回的消息带有
error字段,而不是quote_response。 - WebSocket 连接会一直保持,直到客户端断开或发生网络错误;请定期发送
ping消息以维持连接健康。
发起交换
接口端点
POST /api/v1/swaps/init
说明
基于一份新鲜报价发起交换。该接口端点会锁定价格,并为执行做好准备。请求体
*如果资产是 BTC,数量应以**毫聪(msat)**为单位。其他资产的数量直接按该资产的原生单位提供,不考虑精度。
请求示例
响应结构
swapstring:待执行交换的字符串表示。payment_hash:与该交换关联的支付哈希。access_token:轮询/swaps/atomic/status所需的单笔交换 token。它只在发起时于此处返回一次 —— 请与支付哈希一起保存。
响应示例
补充说明
- RGB 资产的精度可通过做市方节点上的
/assetsAPI 获取。如果客户端持有同一资产,也可以通过节点 API 取得该精度。 - 在执行交换之前,该接口端点返回的 swapstring 需要通过客户端 RGB Lightning Node(RLN)的
/takerAPI 加入白名单。 - 在这个示例中,用户以 1,000 聪卖出,换取 0.5877 USDT(使用 RGB 资产
rgb:2NZGjyz-pJePUgegh-RLHbpx1Hy-iZMagWiZZ-qY4AxGymW-yCEYwwB)。
执行交换
接口端点
POST /api/v1/swaps/execute
说明
在交换已发起并通过校验后执行该交换。请求体
请求示例
响应结构
status:交换执行的状态码。message:关于本次执行的补充信息。
响应示例
查询交换状态
接口端点
POST /api/v1/swaps/atomic/status
说明
使用关联的payment_hash 以及 /swaps/init 返回的单笔交换 access_token,获取某笔原子交换的当前状态。
请求体
请求示例
响应
swap:包含该交换详细信息的对象。
响应示例
Swap 对象结构
qty_from(integer):卖出方向的资产数量。示例:30qty_to(integer):买入方向的资产数量。示例:10from_asset(string):卖出方向的 RGB 资产 ID。示例:rgb:2dkSTbr-jFhznbPmo-TQafzswCN-av4gTsJjX-ttx6CNou5-M98k8Zdto_asset(string):买入方向的 RGB 资产 ID。示例:rgb:2eVw8uw-8G88LQ2tQ-kexM12SoD-nCX8DmQrw-yLMu6JDfK-xx1SCfcpayment_hash(string):与该交换关联的唯一支付哈希。示例:7c2c95b9c2aa0a7d140495b664de7973b76561de833f0dd84def3efa08941664status(SwapStatus):该交换的当前状态。可能的取值:WaitingPendingSucceededExpiredFailed
requested_at(integer):交换被请求时的 Unix 时间戳。示例:1691160765initiated_at(integer):交换被发起时的 Unix 时间戳。示例:1691168512expires_at(integer):交换过期时的 Unix 时间戳。示例:1691172703completed_at(integer):交换完成时的 Unix 时间戳。示例:1691171075
补充说明
status字段实时反映交换的进展。- 请确保提供的
payment_hash准确无误,才能取回正确的交换状态。 access_token缺失或无效时统一返回404 Swap not found,因此无法用该接口端点探测已存在的支付哈希。- 与时间相关的字段均为 Unix 时间戳格式。
Swap对象中的SwapStatus字段可以是以下取值之一:Waiting:交换等待发起。Pending:交换已发起,正在进行中。Succeeded:交换已成功完成。Expired:交换在要求的时间内未完成。Failed:交换遇到错误,未能成功完成。
错误详情请参阅错误处理。