概览
KaleidoSwap 扩展会把标准钱包提供方注入浏览器页面,DApp 在获得用户授权后即可调用钱包能力。它沿用与其他浏览器钱包(例如 Alby)相同的提供方约定,因此大多数现有的 WebLN、WebBTC 和 Nostr 应用无需为 KaleidoSwap 做任何专门集成即可使用。 扩展注入以下对象:window.webln— 面向 Lightning 的 WebLN 提供方(发票、支付、消息签名、keysend、LNURL)。window.webbtc— 面向链上比特币的 WebBTC 提供方(地址、PSBT 签名、BIP-322 消息签名、广播)。window.nostr— 完整的 NIP-07 提供方,用于 Nostr 事件签名与加密。window.bitcoin— Bitcoin Wallet Standard 提供方(Unisat/OKX/Leather 风格),部分 DApp 会探测它来获取链上账户。window.rgb— KaleidoSwap 专有的 RGB 资产提供方:发行、接收、发送和跟踪资产;接入闪电节点后还可通过闪电网络收付资产。
工作原理
- KaleidoSwap 扩展的内容脚本被注入网页
- 内容脚本加载注入脚本,添加
window.webln、window.webbtc、window.nostr、window.bitcoin和window.rgb - DApp 调用这些提供方上的方法
- 请求被路由到 KaleidoSwap 扩展的后台 service worker
- 敏感操作会触发确认或权限提示
提供方就绪事件
提供方安装完成后,注入脚本会派发就绪事件(同时提供带冒号和不带冒号两种写法,以兼容各类 SDK):webln:ready/weblnReadywebbtc:ready/webbtcReadynostr:readybitcoin:readyrgb:ready
错误码
每个提供方在拒绝时都会抛出带code 属性的 Error,DApp 可据此区分用户的”拒绝”与钱包故障:
window.rgb 只使用 WebRGB 规范定义的错误代码,因此在该提供方上,POPUP_CLOSED 和 REQUEST_INTERRUPTED 会以 INTERNAL_ERROR 返回。
WebLN 提供方
window.webln 遵循 WebLN 规范,可用于:
- 请求节点信息
- 创建闪电发票
- 发送闪电支付
- 签名和验证消息
- 发送 keysend 支付
- 处理 LNURL 请求
- 读取余额详情
支持的方法
用法示例
WebBTC 提供方
window.webbtc 是链上比特币提供方,可以:
- 返回接收地址
- 签名并终结 PSBT
- 签名消息(BIP-322)
- 广播原始交易
- 发送链上支付
支持的方法
部分 DApp 会探测
window.bitcoin(Bitcoin Wallet Standard 提供方),替代或同时配合 window.webbtc 使用。它基于同一套钱包密钥暴露 connect()、requestAccounts()、getAccounts()、getPublicKey()、signMessage()、signPsbt()、pushPsbt()、sendBitcoin() 和 disconnect()。PSBT 确认
批准signPsbt、finalizePsbt 或 pushPsbt 绝不是盲签:确认提示会解码 PSBT,在你批准之前展示目标地址、金额和网络费用。如果无法从 PSBT 中解码出金额,提示会改为给出明确警告。

RGB 提供方
window.rgb 把钱包的 RGB 运行时暴露给 DApp——无节点的 RGB 钱包或已连接的 RGB 闪电节点,取决于钱包的配置——让应用无需自建 RGB 后端即可发行、接收、发送和跟踪 RGB 资产。每个涉及资金的调用都会在扩展弹窗中确认,连接提示还允许用户把某个来源限制在特定能力范围内(发行资产受独立的 issueAsset 能力控制)。
window.rgb 从扩展 0.3.0 起提供,0.2.0 构建中不存在;请用 rgb:ready 事件做特性检测,不要假定它一定存在。WebRGB 0.4 的方法(witnessReceive、createUtxos、cancelReceive、getBtcBalance、refresh、getAssetMetadata、signPsbt、signMessage)从扩展 0.4.0 起提供;调用前请先检查 getInfo().methods。TypeScript 支持
@kaleidorg/webrgb 包提供 window.rgb 的类型声明、提供方发现机制、一个内存版模拟钱包,以及一套一致性检查。该仓库中的 SPEC.md 就是本提供方所实现的接口契约。
postMessage 边界离开钱包,因此页面捕获到的是一个携带 code 的普通 Error——请用 isProviderError(err) 判断,不要用 instanceof。
从 0.3.0 起,listAssets() 与 listTransfers() 始终返回数组;包中的 toAssetArray() / toTransferArray() 可兼容那些把数组包起来的钱包。
在没有扩展的情况下开发
@kaleidorg/webrgb/mock 是一个内存版提供方,它执行与真实提供方相同的规则——enable() 之前返回 NOT_ENABLED,对不在 getInfo().methods 中的方法返回 METHOD_NOT_SUPPORTED,并且确认环节可以设置为拒绝——因此在没有安装钱包的情况下也能开发和测试 DApp。
@kaleidorg/webrgb/conformance 只使用只读调用来检查钱包是否符合规范,因此不会弹出任何确认。
提供方发现
window.rgb 只有一个位置,只能由一个钱包占据,因此扩展还会以 EIP-6963 的方式宣告自身:它在加载时派发 rgb:announceProvider,并在页面派发 rgb:requestProvider 时作出响应,事件携带 { info: { uuid, name, rdns }, provider },其 rdns 为 com.kaleidoswap.extension。
window.rgb 仍然有效,requestProvider() 会采用最先到达的那一个。
支持的方法
用法示例
RGB 闪电网络
当钱包的 RGB 运行时是闪电节点时,getInfo().protocol 为 "RGB_LN",methods 中还会列出 makeLnInvoice 和 payLnInvoice。在无节点的 RGB 钱包上,两者都会以 METHOD_NOT_SUPPORTED 拒绝。
payLnInvoice 都会提示确认。
事件
{ assetId, transferId, status, kind, amount, recipientId, txid }。事件由后台轮询推送,只要有已订阅的来源保持标签页打开,就会大约每分钟运行一次,因此无需循环调用 listTransfers()——但也不要期待分钟以内的延迟。
Nostr 提供方(NIP-07)
KaleidoSwap 扩展在window.nostr 上注入完整的 NIP-07 提供方,Nostr 网页应用可以请求钱包公钥、签名事件,以及加密或解密私信。Nostr 身份由钱包助记词派生(若已设置,则使用导入的身份)。
支持的方法
用法示例
window.nostr 在该页面剩余的生命周期内不再弹出提示,钱包也会在 10 分钟内记住对该站点的拒绝。被关闭或未回答的提示只会短暂退避,不会记为拒绝。
Nostr Connect(NIP-46)
除了页面内的 NIP-07 签名,扩展还可以为支持 NIP-46(nsecBunker)的 Nostr 应用充当远程签名器。在设置 > Nostr > Nostr Connect(Settings > Nostr > Nostr Connect)中生成bunker:// 连接字符串,粘贴到客户端应用中,签名请求随后会通过 Nostr 中继传输,并在扩展中批准。活跃的 NIP-46 会话会出现在已连接应用(Connected Apps)中,可在那里查看和撤销。

Nostr Wallet Connect(NWC)
扩展也可以通过 Nostr Wallet Connect 把钱包暴露给外部应用:扫描配对二维码完成配对,再用按金额生效的预算限定它能做什么。通过 NWC 发起的 Zap 支付(NIP-57)会被校验,并与钱包交易记录关联。面向开发者
凡是不在同一浏览器中运行的网页之外的一切——移动应用、桌面客户端、机器人和后端——都应通过 NWC 集成。扩展充当 NIP-47 钱包服务;任何 NIP-47 客户端库都能与之配合,无需任何 KaleidoSwap 专有的实现。在设置 > Nostr > Wallet Connect(Settings > Nostr > Wallet Connect)中生成的配对字符串采用标准格式:1.0,支持 nip04 与 nip44_v2 加密,并支持以下方法:
每个已配对的客户端都有独立的消费预算,可在设置 > 已连接应用(Settings > Connected Apps)中查看和撤销。预算内的支付无需提示即可完成;超出预算的支付会打开与页面内提供方相同的确认窗口。
权限提示与已连接应用
当已连接的站点发起敏感请求时,KaleidoSwap 扩展会要求用户批准或拒绝该操作。连接提示会列出站点请求的能力(创建发票、发送闪电支付、签名消息、签名 PSBT、发送比特币、发行 RGB 资产、Nostr),站点只获得用户保留开启的那些能力;不带能力列表的批准不授予任何能力。每个提示都会注明发起请求的站点。- 更多请求需要批准: LNURL-auth、LNURL-withdraw 和 LNURL-channel 与其他请求一样经过站点权限和解锁检查,读取节点信息或地址也需要批准。站点不能切换钱包当前使用的账户。
- 站点支付会先校验: 闪电发票在预留任何支出额度之前会被完整解析(校验和、网络、到期时间)并验证,若发票所属网络与付款钱包不同则拒绝。只有在确定支付没有发出时,额度才会退还。
- Arkade: 站点不能从 Arkade 账户发起闪电支付(WebLN、LNURL、WebBTC),因为 Arkade 通过 Intents 交换支付闪电,而站点确认无法显示求解方费用和延迟的支付证明。请改用钱包的发送界面。
- 提示更可靠: 钱包在后台重启时审批窗口仍然有效;未回答就关闭的窗口会以
POPUP_CLOSED报告,而不是拒绝;钱包锁定时可以在提示中用通行密钥(passkey)解锁。 - 其他钱包照常工作: 注入的提供方是只读但可重新定义的,因此扩展不会替换其他钱包的
window.webln、webbtc、bitcoin、rgb或nostr。


Nostr 身份
KaleidoSwap 扩展从钱包助记词(或导入的身份)派生 Nostr 身份,并同时通过window.nostr 暴露给网页,以及在扩展设置中展示。
Nostr 密钥管理
你的 Nostr 密钥对在设置 > Nostr > Nostr 身份(Settings > Nostr > Nostr Identity)中管理:- 查看公钥(
npub) - 钱包处于解锁状态时查看/复制会话私钥
- 导入密钥,或把已导入的密钥恢复为从助记词派生的身份
nsec1… 或 64 位十六进制字符串);它会被加密存储,并在所有原本使用派生身份的场景中生效。
浏览器授权流程
KaleidoSwap 扩展让 DApp 授权始终由用户驱动:- 受信任的站点请求连接、支付、发票、资产或签名操作
- KaleidoSwap 扩展通过内容脚本和后台 service worker 转发请求
- 用户核对详情,批准或拒绝该操作
安全注意事项
申请测试版访问权限
申请加入 KaleidoSwap 扩展的封闭测试。