Skip to Content
硬件接入概念钱包会话
本页目录

钱包会话

本页说的是硬件钱包会话:设备当前解锁的是哪一套种子 / passphrase 上下文。

它不是 Agent Wallet 会话。Agent Wallet 是 OneKey GUI 上的产品。Classic / Pro / Pro 2 / Neo 都有硬件会话,和是否使用 Agent Wallet 无关。

公开身份

钱包绑定只持久化这一对字段:

字段含义能否持久化
deviceId当前种子生命周期(Features / DeviceState 里的 device_id)可以
passphraseState隐藏钱包指纹。标准钱包为 null隐藏钱包需要
固件 session_id设备侧已解锁句柄不要存。 Core 内部持有

如果在隐藏钱包上漏传 passphraseState,地址和签名 API 可能在标准钱包上成功,而且不报错。要么显式传 useEmptyPassphrase: true,要么传真正的 passphraseState。

1.2.0 推荐 API

新接入请用 openWalletSession 打开钱包:

import { OpenWalletSessionMode } from '@onekeyfe/hd-core'; // Standard wallet const standard = await HardwareSDK.openWalletSession(connectId, { mode: OpenWalletSessionMode.Standard, }); if (!standard.success) throw new Error(standard.payload.error);

或者让用户选择隐藏钱包。以下流程与标准钱包示例二选一,不要连续执行:

// Choose this flow instead of the standard-wallet example. const hidden = await HardwareSDK.openWalletSession(connectId, { mode: OpenWalletSessionMode.SelectHidden, }); if (!hidden.success) throw new Error(hidden.payload.error); if (hidden.payload.walletType !== 'hidden' || !hidden.payload.passphraseState) { throw new Error('A hidden wallet was not opened'); }

保存 payload.deviceId、payload.walletType、payload.passphraseState。之后的地址 / 签名调用带上这些值。Core 会在该方法内部恢复所需的钱包上下文。不要在每次签名前都再开一次 Session。

openWalletSession 没有 resume-hidden。传入 mode: 'resume-hidden' 会返回 CallMethodInvalidParameter。读出已存绑定,带到下一笔地址 / 签名即可。

已废弃的兼容 API

getPassphraseState 已废弃。现有应用可以继续用它,并在每次调用上带 initSession / useEmptyPassphrase / passphraseState。Core 仍会映射到 Protocol V1 和 V2。新代码请用 openWalletSession。

不要在同一次调用里混用 openWalletSession({ mode }) 和 useEmptyPassphrase / initSession。

Attach-to-PIN

部分 Pro / Pro 2 可以把隐藏钱包绑到专用 PIN。公开 API 仍然返回 walletType: 'hidden' 和 passphraseState。不要为 Attach-to-PIN 再实现一套会话协议。

如果 SDK 返回 DeviceCheckUnlockTypeError,当前解锁方式到不了你要的钱包。先锁上设备,让用户用目标 PIN 解锁;不要对着同一绑定死循环重试。

下一步

最后更新于