Openloop SDK

仕様書

バージョン v0.1.1 | 最終更新 2026-05-07
株式会社ハウディ・クリプト 代表取締役社長 浅田 一憲


アーキテクチャ概要

Openloop SDK とは

Openloop SDK は、Openloop ハードウェアウォレットとの通信を行う 多言語ライブラリ です。

言語 / 形式 主な配布物 用途
TypeScript / npm @openloop/sdk-core, @openloop/transport-* Web dApp、Node.js / Electron、React Native
Swift / SPM OpenloopShared (openloop-connect/packages/mobile/ios/OpenloopShared/) iOS Native (Credential Provider Extension、ネイティブ iOS アプリ)
Kotlin / Maven (将来) Android Native
C# / NuGet (将来) Windows Native

ライセンスについて: Openloop SDK の使用には、株式会社ハウディ・クリプトとのライセンス契約が必要です。ご要望に応じて SDK のカスタマイズも可能ですので、お気軽に info@haudi.co.jp までお問い合わせください。

最も重要な原則: 秘密鍵はデバイス内に保持され、外部に出ることはありません。SDK は APDU(Application Protocol Data Unit)コマンドの送受信のみを行います。署名はすべてデバイス内のセキュアエレメントで実行されます。

レイヤー構成

Diagram 0

Ctap2App (TS) / Ctap2Builder (Swift): WebAuthn/FIDO2 passkey 用のレイヤ。CTAP2 メッセージを F0 B0 APDU tunnel で FW に転送します。Connect モバイルアプリの Credential Provider が iOS では Swift、Android では React Native (TS) でこれを使用しています。

各レイヤーの役割

レイヤー 役割
dApp ユーザーインターフェース、トランザクション構築
App Class チェーン固有の APDU コマンド構築・レスポンス解析
ITransport デバイスとの物理的通信(USB/BLE/WebSocket 等)
Device 秘密鍵管理、署名実行、ユーザー承認

セキュリティモデル

SDK が行うこと

SDK が行わないこと

デバイス側のセキュリティ

対応チェーン

チェーン App クラス 楕円曲線 BIP44 coin_type
Ethereum (EVM) EthereumApp secp256k1 60'
Bitcoin BitcoinApp secp256k1 0' (mainnet), 1' (testnet)
Solana SolanaApp Ed25519 501'
TRON TronApp secp256k1 195'
XRP Ledger XrpApp Ed25519 / secp256k1 144'

EVM 互換チェーン

EthereumApp は Ethereum だけでなく、EVM 互換チェーンで使用できます。signPersonalMessagesignTypedDatachainId パラメータでチェーンを指定します。

Transport 接続方式

SDK は 6 種類の接続方式を提供し、幅広いプラットフォームをカバーします。

Transport パッケージ ユースケース
WebHID (USB) @openloop/transport-webhid Chrome/Edge デスクトップ
Web Bluetooth @openloop/transport-webble Chrome/Edge + Android
LocalWS @openloop/transport-local 全ブラウザ(Connect 経由)
Safari Extension @openloop/transport-safari iOS Safari
USB HID (native) @openloop/transport-usb Node.js / Electron
BLE (Swift) OpenloopShared (SPM) iOS Native (Credential Provider 等)
WalletConnect @openloop/sdk-core 内蔵 全ブラウザ(リモート署名)

詳細は Transport 選択ガイド を参照してください。

パッケージ一覧

npm パッケージ (TypeScript)

パッケージ 説明 依存関係
@openloop/sdk-core コアライブラリ(App, Types, Errors, Constants, WcTransport, Ctap2App なし
@openloop/transport-webhid WebHID (USB) Transport sdk-core
@openloop/transport-webble Web Bluetooth Transport sdk-core
@openloop/transport-local LocalWS Transport sdk-core
@openloop/transport-safari Safari Extension Transport sdk-core (peer)
@openloop/transport-usb Native USB HID Transport sdk-core (peer), node-hid
@openloop/transport-ble React Native BLE Transport sdk-core, react-native-ble-plx

Swift Package (iOS Native)

Module 説明
OpenloopShared BLE manager + APDU transport + CTAP2 builder。iOS Credential Provider Extension と Connect 本体が共通利用

ローカル参照: openloop-connect/packages/mobile/ios/OpenloopShared/Package.swift

依存関係の図

Diagram 1

sdk-core はブラウザ API やネイティブモジュールに依存しない純粋な TypeScript パッケージです。各 Transport パッケージがプラットフォーム固有の実装を提供します。Swift Package OpenloopShared は TypeScript 系とは独立した iOS 専用実装です (将来 Kotlin / C# 等も同様に独立)。

APDU プロトコル概要

SDK とデバイス間の通信は APDU(Application Protocol Data Unit)コマンドで行われます。

コマンド構造

[CLA] [INS] [P1] [P2] [Lc] [Data...]
フィールド サイズ 説明
CLA 1 byte クラスバイト(0xE0: Ledger 互換, 0xF0: Openloop 独自)
INS 1 byte 命令コード
P1 1 byte パラメータ 1(チャンキング制御等)
P2 1 byte パラメータ 2(曲線選択等)
Lc 1 byte データ長
Data Lc bytes コマンドデータ

レスポンス構造

[Data...] [SW1] [SW2]
フィールド サイズ 説明
Data 可変 レスポンスデータ
SW1-SW2 2 bytes ステータスワード(0x9000 = 成功)

CLA バイト

CLA 用途
0xE0 Ledger 互換コマンド(ETH, BTC getAddress, SOL, TRON, XRP)
0xF0 Openloop 独自コマンド(chain_id 対応署名, PSBT, BTC xpub)

詳細な APDU ステータスワードは エラー処理 を参照してください。

次のステップ