Skip to Content

标识符(Identifiers)

connectId 用于路由请求,deviceId 将请求绑定到设备当前种子,passphraseState 将请求绑定到隐藏钱包。这些值不能互相替代。

标识符参考

字段用途获取位置使用方式
connectId传输路由标识成功的 searchDevices().payload 条目设备和钱包方法的第一个参数;重连后重新枚举。
serialNo可用时表示物理设备身份初始化后的发现结果,或 getDeviceState().payload.identity.serialNo跨 USB/BLE 展示或关联同一台设备,不作为路由标识。
deviceId当前种子生命周期内的身份getDeviceState().payload.identity.deviceId,或成功的 openWalletSession钱包方法的第二个参数,用于发现重置、恢复或钱包变化。
passphraseState隐藏钱包指纹成功打开隐藏钱包后的 openWalletSession 结果每次隐藏钱包地址/签名请求都传入,与 deviceId 一起保存。
uuid已废弃的兼容标识部分设备或搜索结果物理身份优先用 serialNo,路由用 connectId;初始化前可能为空。
固件 session_id内部解锁句柄由 SDK Core 管理不读取、不记录、不持久化,也不在公开调用中传入。
name、label、deviceType显示与能力信息发现结果或设备状态不是唯一标识,也不能证明协议或钱包身份。

connectId —— 路由用的 key

同一台物理设备在 USB 与 BLE 下有不同的 connectId。按传输分别保存连接记录。连接标识不保证等于物理序列号:硬件身份尚不可用时,USB 描述符可能先提供路由路径。

将它视为不透明值。BLE 格式取决于宿主平台,例如 Android 地址或 iOS 外设 UUID;不要将其转换为另一种传输的格式,也不要把它当作设备真实性证明。

searchDevices 可能返回 connectId: null。先选择具有可用连接标识的候选设备,再调用设备方法。

deviceId —— 钱包身份检查

const state = await HardwareSDK.getDeviceState(connectId); if (!state.success) throw new Error(state.payload.error); const deviceId = state.payload.identity.deviceId; if (!deviceId) throw new Error('Device has no wallet identity'); const address = await HardwareSDK.evmGetAddress(connectId, deviceId, { path: "m/44'/60'/0'/0/0", useEmptyPassphrase: true, showOnOneKey: true, }); if (!address.success) throw new Error(address.payload.error);

同一种子上的标准钱包与隐藏钱包共享种子生命周期内的 deviceId。隐藏钱包还需要自己的 passphraseState。

遇到 DeviceCheckDeviceIdError 时,停止操作并刷新设备状态。更新已有绑定前,应让用户确认目标钱包;静默替换缓存 ID 可能让后续请求进入另一个钱包。

device_id(蛇形)vs deviceId(驼峰)

device_id 是 Protocol V1 getFeatures() 结果中的旧字段。新代码应读取支持两个协议族的 getDeviceState() 中的规范化字段 identity.deviceId。初始化前的发现结果可能包含 deviceId: null。

隐藏钱包绑定

const opened = await HardwareSDK.openWalletSession(connectId, { mode: 'select-hidden', }); if (!opened.success) throw new Error(opened.payload.error); if (opened.payload.walletType !== 'hidden' || !opened.payload.passphraseState) { throw new Error('A hidden wallet was not opened'); } const address = await HardwareSDK.evmGetAddress(connectId, opened.payload.deviceId, { path: "m/44'/60'/0'/0/0", passphraseState: opened.payload.passphraseState, showOnOneKey: true, }); if (!address.success) throw new Error(address.payload.error);

只有响应成功后才保存绑定。将它作为与钱包相关的应用数据妥善保护;不要保存密码短语本身或固件会话句柄。

省略 passphraseState 不会把调用绑定到目标隐藏钱包。隐藏钱包使用验证过的指纹,标准钱包使用 useEmptyPassphrase: true,两者不能同时传入。

绑定不匹配时停止操作,让用户重新选择目标钱包。不要覆盖绑定后自动重放签名请求。

各方法的 ID 要求

调用形态示例
SDK 生命周期,不接收连接位置参数init、searchDevices、on/off、dispose
设备操作或钱包选择,传 connectIdgetDeviceState、openWalletSession、deviceSettings、deviceVerify
钱包操作,传 connectId + deviceIdevmGetAddress、btcSignTransaction、solSignTransaction
隐藏钱包操作钱包操作的参数中额外传入 passphraseState

部分方法为了兼容允许省略标识符,请遵循具体方法的公开签名。多设备应用应明确选择设备。UI 响应使用独立的请求关联身份;按 UI 事件说明转发事件中的 responseCorrelation。

参考

最后更新于