Auf dieser Seite
btcDeriveContextHash
Leiten Sie auf dem Gerät einen 32-Byte-Babylon-Kontexthash für den ausgewählten Bitcoin-Schlüssel, die Anwendung, den Kontext und das Netzwerk ab. Die Antwort enthält einen sensiblen secret-Wert zur Verwendung in Ihrer Anwendung.
Verfügbar im SDK 1.2.8-alpha.6. Erfordert Classic 1s oder Classic 1s Pure mit Firmware 3.21.0 oder neuer und Protocol V1. Andere Gerätefamilien und Protocol V2 werden nicht unterstützt.
const result = await HardwareSDK.btcDeriveContextHash(connectId, deviceId, params);Vor dem Aufruf
- Initialisieren Sie das SDK und wählen Sie ein Gerät aus.
- Registrieren Sie UI-Ereignishandler und wählen Sie die gewünschte Wallet-Sitzung ausdrücklich aus.
- Holen Sie vor dem Aufruf die Zustimmung des Benutzers für die anfragende Anwendung und deren Ursprung ein.
appNamewird vom Aufrufer angegeben; Ihre Anwendung muss feststellen, welche Website oder Anwendung Zugriff anfordert.
Parameter
connectIdstringerforderlichDie bei der Gerätesuche zurückgegebene Verbindungskennung.
deviceIdstringerforderlichDie von getDeviceState oder openWalletSession zurückgegebene Wallet-Identität.
params.pathstring | number[]erforderlichBIP32-Pfad des verbundenen Bitcoin-Schlüssels mit mindestens 3 Komponenten. Der Skripttyp wird aus dem Pfad abgeleitet. Verwenden Sie den Pfad des verbundenen Schlüssels, nicht den internen IKM-Ableitungspfad.
params.appNamestringerforderlich1–64 ASCII-Zeichen, die [a-z0-9-] entsprechen.
params.contextstringerforderlichHexadezimalzeichenfolge in Kleinbuchstaben mit gerader Länge und ohne 0x-Präfix, die 1–1024 Bytes darstellt. Ein leerer Kontext ist ungültig. Das SDK sendet die dekodierten Bytes an das Gerät.
params.networkstringerforderlichGenau bitcoin-mainnet, bitcoin-testnet, bitcoin-signet oder bitcoin-regtest. Testnet3 und testnet4 verwenden beide bitcoin-testnet. Das Netzwerk wird nicht aus dem Pfad abgeleitet.
Optionale gemeinsame Parameter
Beispiel
Dieses Fragment setzt ein initialisiertes SDK und eine ausgewählte Standard-Wallet voraus. Ersetzen Sie die Beispielwerte path, appName, context und network durch die vom Benutzer genehmigten Werte. Der folgende Kontext ist ein Beispiel für hexadezimal kodierte Daten.
const result = await HardwareSDK.btcDeriveContextHash(connectId, deviceId, {
path: "m/84'/0'/0'/0/0",
appName: 'babylon-example',
context: '48656c6c6f',
network: 'bitcoin-mainnet',
useEmptyPassphrase: true,
});
if (result.success === false) throw new Error(result.payload.error);
const secret = result.payload.secret;
// Use only for the approved application and context. Do not log or persist it.Das Beispiel wählt mit useEmptyPassphrase: true ausdrücklich die Standard-Wallet aus. Übergeben Sie für eine versteckte Wallet denselben passphraseState, der bei der Bestätigung des verbundenen Bitcoin-Kontos verwendet wurde. Der normale Ablauf für PIN, Passphrase und Gerätebestätigung gilt weiterhin.
Antwort
Prüfen Sie success, bevor Sie den Inhalt der Antwort lesen. Bei Erfolg ist payload.secret eine Hexadezimalzeichenfolge aus 64 Kleinbuchstaben und Ziffern (32 Bytes). Die folgenden Tabs zeigen Antworttypen, keine echten geheimen Werte.
Erfolg
type SuccessResponse = {
success: true;
payload: {
secret: string; // 64 lowercase hexadecimal characters (32 bytes)
};
};Fehler und Umgang mit dem Secret
Ein ungültiger Wert für path, appName, context oder network führt vor dem Senden des Ableitungsbefehls zu CallMethodInvalidParameter (405). Nicht unterstützte Gerätefamilien oder Protocol V2 führen zu DeviceNotSupportMethod (415); Firmware unter 3.21.0 muss aktualisiert werden.
Ein Abbruch am Gerät liefert die Standardantwort success: false. Beenden Sie die Anfrage und behandeln Sie payload.error und payload.code, bevor Sie einen weiteren Aufruf versuchen.
Das SDK gibt den tatsächlichen secret-Wert an Ihre Anwendung zurück. Behandeln Sie ihn als sensibel: Halten Sie ihn aus Protokollen, Telemetrie, Zwischenablage und dauerhaftem Speicher fern. Die Ableitung läuft auf dem Gerät; der interne Wallet-Schlüssel wird nicht exportiert.