@ exodus/ 硬件- 钱包
这个功能是用于与硬件钱包设备交互的高度抽象.
| 特性 | 支助 |
|---|---|
| 同步公钥 | ✅ |
| 签名交易 | ✅ |
| 签名信件 | ✅ |
| 软件管理 | ❌ |
设备支持矩阵
| 制造商 | 设备模型 | 支助 |
|---|---|---|
| 编辑器 | 纳诺 S | ✅ |
| 编辑器 | 纳诺S+ | ✅ |
| 编辑器 | 纳诺X | ✅ |
| 编辑器 | 税 | ✅ |
| 色谱 | 一个 | ❌ |
| 色谱 | T级 | ❌ |
| 色谱 | 保险 3 | ❌ |
| 色谱 | 保险 5 | ❌ |
使用量
和IoC
import hardwareWallets from '@exodus/hardware-wallets'
ioc.use(hardwareWallets())
建筑
术语
可能需要一些术语来正确理解资产的各种“状态”之间的区别.
- 支持 资产:我们实施该装置所支持的所有资产.
- 已安装 资产:由我们实施后支持并由用户安装在设备上的所有资产.
- 可使用 资产: 由我们执行所支持、安装在装置上并在装置上打开的所有资产(铅管).
- 同步 资产:公共密钥已同步到钱包账户整合通道的所有资产.
scan({ assetName, accountIndexes, addressLimit, addressOffset })
这个 scan 函数在登入时用于从 addressOffset 每个账户索引 accountIndexes 从硬件钱包设备。 它使用网络API调用来取回相应的余额. 调用此功能不会使状态发生任何永久的改变,而且其状态都呈平时状态. 此功能可以让用户"扫描"账户,地址和余额,而无需完全承诺一个账户索引并同步它.
[叹息] 此函数只能在硬件钱包设备上载时使用.
sequenceDiagram
Consumer->>+HardwareWallets: scan({ assetName, accountIndexes, addressOffset })
HardwareWallets->>+HardwareWalletDevice: getAddress({ assetName, derivationPath })
HardwareWalletDevice-->>-HardwareWallets: address0
HardwareWallets->>+HardwareWalletDevice: getAddress({ assetName, derivationPath })
HardwareWalletDevice-->>-HardwareWallets: address1
HardwareWallets->>+Asset: api.getBalanceForAddress(address0)
Asset-->>-HardwareWallets: balance0
HardwareWallets->>+Asset: api.getBalanceForAddress(address1)
Asset-->>-HardwareWallets: balance1
HardwareWallets-->>-Consumer: First N addresses with balance <br> for given account indexes
sync({ accountIndex })
为给定的所有可用资产同步公钥( XPUBs / 公钥) accountIndex 从硬件钱包设备中临时存储,供将来使用。 硬件钱包设备可能在此方法调用后断开,并且仍然可以上载.
[叹息] 只能同步所支持资产的子集. 一些硬件钱包设备如Ledger不同时支持多个资产,因为特定资产应用程序必须在设备上安装并打开.
sequenceDiagram
participant Consumer
participant HardwareWallets
participant Device
participant BaseAsset
Consumer->>HardwareWallets: sync({ accountIndex })
activate HardwareWallets
HardwareWallets->>Device: listUseableAssetNames()
activate Device
Device-->>HardwareWallets: [assetName0, assetName1, ...]
deactivate Device
loop for each assetName
HardwareWallets->>BaseAsset: getSupportedPurposes({ compatibilityMode: 'ledger' })
activate BaseAsset
BaseAsset-->>HardwareWallets: [purpose0, purpose1, ...]
deactivate BaseAsset
loop for each purpose
alt getXPub is supported
HardwareWallets->>Device: getXPub({ assetName, derivationPath })
activate Device
Device-->>HardwareWallets: xpub
deactivate Device
HardwareWallets->>HardwareWallets: Store keyIdentifier and xpub
else getPublicKey instead
HardwareWallets->>Device: getPublicKey({ assetName, derivationPath })
activate Device
Device-->>HardwareWallets: publicKey
deactivate Device
HardwareWallets->>HardwareWallets: Store keyIdentifier and publicKey
end
end
end
HardwareWallets->>HardwareWallets: Generate random ID
HardwareWallets->>HardwareWallets: Store keys in syncedKeysMap with ID
HardwareWallets-->>Consumer: SyncedKeysId
deactivate HardwareWallets
addPublicKeysToWalletAccount({ walletAccount, syncedKeysId })
将公钥(XPUBS / 公钥)添加到已有的钱包账户中.
- 移动同步公钥( XPUBs / 公钥)
syncedKeysId从临时模拟对象映射到 awalletAccounts公用钥匙店 将储存在核聚变中. - 启动资产恢复程序并触发更新
txLogMonitor
sequenceDiagram
participant Consumer
participant HardwareWallets
participant PublicKeyStore
participant RestoreProgressTracker
participant TxLogMonitors
Consumer->>HardwareWallets: addPublicKeysToWalletAccount({ walletAccount, syncedKeysId })
activate HardwareWallets
HardwareWallets->>HardwareWallets: Retrieve keys from syncedKeysMap using syncedKeysId
Note right of HardwareWallets: Retrieves assetNames and keysToSync
loop for each key in keysToSync
HardwareWallets->>PublicKeyStore: add({ walletAccount, keyIdentifier, xpub, publicKey })
end
loop for each assetName in assetNames
HardwareWallets->>RestoreProgressTracker: restoreAsset(assetName)
HardwareWallets->>TxLogMonitors: update({ assetName, refresh: true })
end
deactivate HardwareWallets
HardwareWallets-->>Consumer: void
create({ syncedKeysId })
创建新的硬件钱包账户和呼叫 addPublicKeysToWalletAccount() 要同步新建的钱包账户的公共密钥.