本页目录
btcDeriveContextHash
在设备上为选定的比特币密钥、应用、上下文和网络派生 32 字节的 Babylon 上下文哈希。响应中的 secret 是供应用使用的敏感值。
SDK 1.2.8-alpha.6 已提供此方法。需要 Classic 1s 或 Classic 1s Pure 固件 3.21.0 及以上版本,且使用 Protocol V1。其他设备系列和 Protocol V2 不支持此方法。
const result = await HardwareSDK.btcDeriveContextHash(connectId, deviceId, params);调用前准备
- 初始化 SDK 并选择设备。
- 注册 UI 事件处理器,并明确选择目标钱包会话。
- 调用前,获得用户对请求应用及其来源的授权。
appName由调用方传入;应用需要确认是哪个网站或应用在请求访问。
参数
connectIdstring必填设备发现返回的连接标识。
deviceIdstring必填getDeviceState 或 openWalletSession 返回的钱包标识。
params.pathstring | number[]必填已连接比特币密钥的 BIP32 路径,至少包含 3 个路径分量。脚本类型由路径推断。使用已连接密钥的路径,不要使用内部 IKM 派生路径。
params.appNamestring必填1–64 个 ASCII 字符,匹配 [a-z0-9-]。
params.contextstring必填小写、偶数长度且不带 0x 前缀的十六进制字符串,表示 1–1024 字节。上下文不能为空。SDK 将解码后的字节发送给设备。
params.networkstring必填只能是 bitcoin-mainnet、bitcoin-testnet、bitcoin-signet 或 bitcoin-regtest。Testnet3 和 testnet4 均使用 bitcoin-testnet。网络不会从路径推断。
调用示例
此代码片段假定 SDK 已初始化,并已选择标准钱包。请将示例中的 path、appName、context 和 network 替换为用户授权的值。下方上下文仅为十六进制编码数据的示例。
const result = await HardwareSDK.btcDeriveContextHash(connectId, deviceId, {
path: "m/84'/0'/0'/0/0",
appName: 'babylon-example',
context: '48656c6c6f',
network: 'bitcoin-mainnet',
useEmptyPassphrase: true,
});
if (result.success === false) throw new Error(result.payload.error);
const secret = result.payload.secret;
// Use only for the approved application and context. Do not log or persist it.示例通过 useEmptyPassphrase: true 明确选择标准钱包。对于隐藏钱包,请传入确认已连接比特币账户时使用的同一个 passphraseState。正常的 PIN、passphrase 和设备确认流程仍然适用。
响应
读取 payload 前,先检查 success。成功时,payload.secret 是 64 个字符的小写十六进制字符串(32 字节)。下方标签页展示的是响应类型,并非真实敏感值。
成功
type SuccessResponse = {
success: true;
payload: {
secret: string; // 64 lowercase hexadecimal characters (32 bytes)
};
};错误与敏感值处理
无效的 path、appName、context 或 network 会在发送派生命令前返回 CallMethodInvalidParameter(405)。不支持的设备系列或 Protocol V2 返回 DeviceNotSupportMethod(415);低于 3.21.0 的固件需要升级。
在设备上取消会返回标准的 success: false 响应。停止当前请求,处理 payload.error 和 payload.code 后,再决定是否重新调用。
SDK 会向应用返回真实的 secret。请将其作为敏感值处理,不要写入日志、遥测、剪贴板或持久化存储。派生在设备上执行,内部钱包密钥不会被导出。