このページの内容
最初のデバイスを接続
Hardware SDK 1.2.x をインストールし、デバイスを接続して最初のアドレスを確認します。
このページは初回実行の手順です。動作したらトランスポートガイドを選び、続いて Core API ガイドで PIN、パスフレーズ、イベント、署名について確認してください。
Hardware SDK 1.2.0 は Protocol V1 (Classic / Mini / Touch / Pro) と Protocol V2 (Pro 2 / Neo) を同じ JavaScript API で扱います。init() でプロトコルを選択するわけではありません。
- 設定済みの OneKey デバイスとデータ通信対応 USB ケーブル
- デスクトップ版 Chrome や Edge などの WebUSB 対応ブラウザー
- HTTPS オリジン、または開発用の localhost
1. パッケージを選択
| 実行環境 | パッケージ | 次のガイド |
|---|---|---|
| ブラウザー / デスクトップの WebUSB | @onekeyfe/hd-common-connect-sdk | WebUSB |
| React Native BLE | @onekeyfe/hd-ble-sdk | React Native BLE |
| Android / iOS / Flutter のネイティブブリッジ | @onekeyfe/hd-common-connect-sdk (env: 'lowlevel') | ネイティブ BLE |
| ブラウザーの iframe ホストのみ | @onekeyfe/hd-web-sdk | プラグインの iframe ホスト |
npm
npm i --save-exact @onekeyfe/[email protected] @onekeyfe/[email protected] @onekeyfe/[email protected]このコマンドは公開済みの 1.2.x パッケージを選択し、正確なバージョンを保存します。SDK、core、shared は同じリリースに揃え、ロックファイルをコミットしてください。@onekeyfe/hd-web-sdk を埋め込む場合は connectSrc を省略し、インストール済みパッケージに合わせてください。
2. 一度だけ初期化
import HardwareSDK from '@onekeyfe/hd-common-connect-sdk';
const initialized = await HardwareSDK.init({
env: 'webusb',
debug: false,
fetchConfig: true,
});
if (!initialized) throw new Error('SDK initialization failed');アプリの入り口で init() を一度呼び出します。同じ実行環境で @onekeyfe/hd-web-sdk と @onekeyfe/hd-common-connect-sdk を併用しないでください。
3. 検索、識別、アドレスの取得
保護された呼び出しの前に UI イベントハンドラーを登録し、ロック中のデバイスで PIN 入力を完了できるようにします。WebUSB では、検出前にユーザーの接続ボタンからデバイスを許可してください:
import { ONEKEY_WEBUSB_FILTER } from '@onekeyfe/hd-shared';
// Run directly in the Connect button handler.
if (!navigator.usb) throw new Error('WebUSB is unavailable in this browser');
await navigator.usb.requestDevice({ filters: ONEKEY_WEBUSB_FILTER });続いてデバイスを検出します。この例では候補が 1 台だけである必要があります。複数のデバイスが見つかった場合は、ユーザーに 1 台を選択してもらってから続行してください。
const devices = await HardwareSDK.searchDevices();
if (!devices.success || !devices.payload.length) {
throw new Error('No OneKey device found');
}
// Select explicitly in the application when more than one device is available.
if (devices.payload.length !== 1) throw new Error('Select exactly one device before continuing');
const { connectId } = devices.payload[0];
if (!connectId) throw new Error("Missing connectId");
const state = await HardwareSDK.getDeviceState(connectId);
if (state.success === false) 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 === false) throw new Error(address.payload.error);
console.log(address.payload.address);payload を読み取る前に、必ず success を確認します。useEmptyPassphrase: true は最初の呼び出しを標準ウォレットに固定し、残っている隠しウォレットセッションによってアドレスが知らないうちに変わるのを防ぎます。
getDeviceState() は V1/V2 共通の読み取り API です。getFeatures() は Protocol V1 のみです。Pro 2 と Neo では getDeviceState() を使用する必要があります。
WebUSB には HTTPS とユーザー操作が必要です。BLE には OS の Bluetooth 権限が必要です。
デバイスとウォレットのサポート
- SDK は実際のデバイスから Protocol V1 と V2 を検出します。USB PID、BLE 名、製品文字列で分岐させないでください。参照: Protocol V1 と V2.
- Pro 2 と Neo は Classic / Pro と同じメソッドを使用します。デバイスごとの違いは次に記載しています: デバイス.
openWalletSessionでウォレットを開くか切り替えます。getPassphraseStateは非推奨です。ウォレットセッションを参照してください。
次へ
ETHEREUM と EVM最初のトランザクションに署名パラメーター、手数料の種類、署名レスポンス。- すでに 1.1.x を使用している場合: Hardware SDK 1.2 へのアップグレード
- PIN / パスフレーズの UI イベントを接続: Core API ガイド
- 実際のプラットフォームで接続: トランスポート
- 切断を処理: 切断と再接続
- 各デバイスの対応チェーン: 対応チェーン
- トランザクションに署名: 署名者ガイド
- ファームウェア: ファームウェア更新
- ハードウェアなしで試す: プレイグラウンド