@ckb-ccc/xverse

将 Xverse 及兼容 SATS Connect 的钱包接入 CKB,并通过统一的 Signer 接口实现 Bitcoin 签名。

在 GitHub 上编辑

@ckb-ccc/xverseXverse Wallet 及任意兼容 SATS Connect 的 Bitcoin 钱包集成至 CCC。它基于 SATS Connect RPC 协议提供 SignerBtc 实现,并通过 window.btc_providers 支持多钱包发现。

如果你使用的是 @ckb-ccc/connector-react@ckb-ccc/ccc,Xverse 已内置其中,无需单独安装。

安装

@ckb-ccc/xverse npm version@ckb-ccc/xverse npm downloads per week
npm install @ckb-ccc/xverse
yarn add @ckb-ccc/xverse
pnpm add @ckb-ccc/xverse

依赖:

说明
@ckb-ccc/core基础类型——SignerClientTransaction

架构

与其他只检测单一全局 Provider 的钱包包不同,@ckb-ccc/xverse 通过读取 window.btc_providers 数组同时发现多个兼容 SATS Connect 的钱包。

入口:getXverseSigners

getXverseSigners(client, preferredNetworks?)window.btc_providers 读取数据,为每个发现的钱包返回一个 { wallet, signerInfo }[] 数组条目:

每个 Provider 条目包含钱包元数据(nameicon),SignersController 据此为每个钱包显示独立条目。

Signer

Signer 继承自 ccc.SignerBtc,所有钱包交互均通过 SATS Connect RPC 协议完成。

核心方法

方法说明
connect()若尚未连接,调用 wallet_requestPermissions
disconnect()清除缓存的地址
isConnected()尝试调用 getBalance,成功则返回 true
getBtcAccount()通过 getAddresses 返回支付地址
getBtcPublicKey()从支付地址中返回公钥
signMessageRaw(message)通过 signMessage 使用 ECDSA 协议签名
onReplaced(listener)accountChangenetworkChange 事件触发时调用

连接与地址缓存

Signer 缓存已解析的地址以避免重复 RPC 调用,调用 disconnect() 时缓存失效:

网络偏好

CKB 网络默认 BTC 网络
主网(ckbbtc
测试网(cktbtcTestnet

签名流程

账户变更检测

Signer 通过 SATS Connect 事件 API 实现 onReplaced()

  • 监听 "accountChange"——用户切换了 BTC 账户
  • 监听 "networkChange"——用户切换了 BTC 网络

通过 provider.addListener() 返回清理函数,确保监听器正确移除。

SATS Connect RPC 方法

方法说明
wallet_requestPermissions请求钱包连接权限
getAddresses按用途(Payment、Ordinals 等)获取地址列表
getBalance获取钱包余额(用于连接状态检查)
signMessage使用 ECDSA 或 BIP-322 签名消息

集成模式

@ckb-ccc/xverse 遵循 CCC 中其他钱包包相同的集成约定:

  • Factory 函数——getXverseSigners 返回支持多钱包的 { wallet, signerInfo }[] 数组。
  • Provider 检测——读取 window.btc_providers 数组。
  • 多钱包发现——为每个 Provider 创建独立的 Signer 条目,附带各自的钱包名称和图标。
  • 优雅降级——无可用的 SATS Connect 钱包时返回空数组。

最后更新于

目录