Skip to Content
硬件接入概念Protocol V1 与 V2
本页目录

Protocol V1 与 V2

Hardware SDK 1.2.0 在设备侧使用两套传输协议,对接入方仍然是同一套 JavaScript API。不要用 USB PID、蓝牙名或产品字符串判断协议。

Protocol V1Protocol V2
当前机型Classic、Mini、Touch、ProPro 2、Neo
SDK 如何识别连接后的实时响应连接后的实时 Ping / 协议探测
公开方法现有 Hardware SDK 方法同样的方法,由 Core 做映射
调用规则实践上必须按设备串行必须按设备串行
固件升级firmwareUpdateV2 / firmwareUpdateV3firmwareUpdateV4
链方法V1+V2 系列 + 仅 V1 系列只有 V1+V2 系列
设备快照getDeviceState(getFeatures 已废弃)相同

Stellar、Alephium、Nexa、Dynex、Nervos、SCDO、Benfen、Neo 链是仅 V1。Pro 2 / Neo 不支持。完整矩阵:链支持。机型 USB / BLE / Air-Gap:设备。

如何识别协议

SDK 只认当前连接上的实时响应。不要用下面这些东西判断 V1 / V2:

  • USB PID / VID
  • BLE 广播名
  • 产品字符串或外观

如果要持久化上次结果,必须按 connectId 分别绑定(同一台设备的 USB 和 BLE 是两个端点)。公开字段是设备对象上的 connectProtocol。

在调用上传入 connectProtocol 表示严格期望:SDK 不会悄悄切到另一种协议。

什么没变

  • HardwareSDK.init({ env }) 选的是传输(USB / BLE / 底层插件),不是 Protocol V1 / V2。
  • searchDevices → connectId → getDeviceState → 链方法。
  • PIN、passphrase、按键确认仍然走 UI_EVENT。只有输入类请求才调用 uiResponse。见 Core API Guide。

不要做的事

  • 不要在同一设备上重叠两个业务调用。
  • 断开或超时后,不要自动重放签名、擦除或固件升级。
  • 不要从响应里取出固件 session_id 并存下来。钱包身份是 deviceId + passphraseState。见 钱包会话。
  • 不要调用 Protocol V2 内部命令(DeviceSessionGet、DeviceInfoGet 等)。它们不是公开 CoreApi。

设备状态

请用 getDeviceState。getFeatures 只支持 Protocol V1(Classic / Mini / Touch / Pro);Pro 2 / Neo 会在兼容投影之前被协议门禁拒绝。getDeviceState 在 V1 和 V2 上仍会带一份 Features 形状的快照。

const state = await HardwareSDK.getDeviceState(connectId); if (!state.success) throw new Error(state.payload.error);

只有需要刷新设置或固件分区时才传 scope: 'settings' 或 scope: 'firmware'。返回值始终是完整快照。

下一步

最后更新于