Auf dieser Seite
Bitcoin (PSBT)
Verarbeitung von PSBT-Daten zum Offline-Signieren mit animierten UR-Codes.
Datentypen
- UR-Typ für Anfrage/Antwort:
crypto-psbt - Siehe auch: Basis-API (UR-Grundelemente und -Strukturen)
Ablauf
- Mit Ihrem Wallet-Backend eine unsignierte PSBT erstellen
- PSBT → UR kodieren (
crypto-psbt) und als animierten QR-Code anzeigen - Das Gerät scannt → gibt die signierte PSBT zurück als
crypto-psbt - Finalisieren und übertragen
Tipp: Die PSBT-Größe innerhalb praktisch nutzbarer QR-Grenzen halten; bei Bedarf auf mehrere Frames aufteilen.
Beispiele
Installieren Sie @keystonehq/bc-ur-registry und @ngraveio/bc-ur. Die Beispiele benötigen eine Buffer-Implementierung. Prüfen Sie die PSBT-Unterstützung auf Zielgerät und Zielfirmware.
Die Wallet liefert die unsignierten Transaktionsdaten sowie den tatsächlichen Kontopfad und Master-Fingerabdruck, die vom Gerät exportiert wurden. Der QR-Renderer sollte nextFrame() zeitgesteuert aufrufen und anhalten, sobald der Signierdialog geschlossen wird. Diese Ausschnitte kodieren und dekodieren den Transport; sie reichen keine Transaktion ein.
Unsignierte PSBT → animierten QR-Code kodieren
import { CryptoPSBT } from '@keystonehq/bc-ur-registry';
const psbtBytes = Buffer.from(unsignedPsbtBase64, 'base64');
const req = new CryptoPSBT(psbtBytes);
const encoder = req.toUREncoder(200);
const nextFrame = () => encoder.nextPart(); // Call from your QR animation timer.Animierten QR-Code → signierte PSBT dekodieren
import { URDecoder } from '@ngraveio/bc-ur';
import { CryptoPSBT } from '@keystonehq/bc-ur-registry';
const dec = new URDecoder();
// For each scanned frame string from camera:
// dec.receivePart(frameString)
if (dec.isError()) throw new Error('QR decoding failed');
if (dec.isSuccess()) {
const ur = dec.resultUR();
if (ur.type !== 'crypto-psbt') throw new Error('Expected crypto-psbt');
const psbt = CryptoPSBT.fromCBOR(ur.cbor);
const signedPsbt = psbt.getPSBT(); // Buffer of PSBT (signed or partially signed)
// Check that the unsigned transaction, inputs, and outputs match the original PSBT.
// Verify signatures before finalizing and broadcasting with your backend.
}Zuletzt aktualisiert am