Anleitungen

Anleitungen · Teil 3 von 6

Einen Datensatz verifizieren

Die Verifizierung ist die Seite von Label 309, für die Sie niemandes Erlaubnis brauchen. Mit einer Cardano-Transaktionsreferenz können Sie einen Datensatz selbst bestätigen, anhand der öffentlichen Blockchain und über einen Explorer Ihrer Wahl. Es ist kein Login erforderlich, und das Ergebnis hängt in keiner Weise davon ab, wer den Datensatz veröffentlicht hat.

Mit dem CLI

Installieren Sie das cardanowall-Binary und richten Sie es dann auf eine Transaktion:

cardanowall verify 3b9f…c1a2

Das Tool löst die Transaktion über einen öffentlichen Cardano-Explorer auf, validiert den Datensatz strukturell, prüft vorhandene Signaturen zur Urheberschaft, bestätigt, dass der Datensatz endgültig in die Blockchain aufgenommen wurde, und gibt ein Ergebnis aus. Das Ergebnis ist einer von vier Zuständen, und der Exit-Code trägt es unverändert weiter, sodass es sich direkt in CI einbinden lässt:

Exit-CodeErgebnisBedeutung
0validjede erforderliche Prüfung bestanden
1failedeine dem Datensatz zurechenbare Prüfung scheiterte (Integrität, Struktur oder Signatur)
2unverifiablekein Datensatzfehler, aber eine erforderliche Prüfung ließ sich nicht ausführen (Netzwerk oder Richtlinie)
3pendingnoch nicht genügend Bestätigungen – kein Ergebnis eines ausstehenden Datensatzes ist endgültig
4CLI-Eingabefehler (falsche Argumente oder fehlende erforderliche Eingabe)

Die Trennung zwischen failed und unverifiable ist beabsichtigt: Ein failed-Ergebnis ist stets dem Datensatz selbst zurechenbar, sodass kein sich fehlverhaltender Explorer eines fabrizieren kann; unverifiable bedeutet, dass der Verifizierer eine Prüfung aus Gründen außerhalb des Datensatzes nicht abschließen konnte – ein nicht erreichbares Gateway, ein auf einer Deny-Liste stehender Host oder eine Abruf-Obergrenze.

Mit --json erhalten Sie einen maschinenlesbaren Bericht, und Sie behalten jeden einzelnen Netzwerkschritt unter Ihrer Kontrolle, indem Sie auf Ihre eigene Infrastruktur verweisen:

cardanowall verify 3b9f…c1a2 \
  --cardano-gateway https://your-koios-instance/api/v1 \
  --threshold 20 \
  --json

Ist der Datensatz an Sie versiegelt, übergeben Sie dem Verifizierer Ihren Schlüssel; er entschlüsselt dann die Nutzdaten und berechnet den Klartext-Hash neu:

cardanowall verify 3b9f…c1a2 --secret-key-stdin

Ziehen Sie --secret-key-stdin, --secret-key-file oder die Umgebungsvariable CARDANOWALL_RECIPIENT_KEY einem bloßen --secret-key-Flag vor, damit der Schlüssel nicht in Ihrer Shell-History landet.

Mit dem TypeScript-SDK

Der Verifizierer, den das CLI nutzt, ist im SDK enthalten. Er braucht weder einen Client noch eine Basis-URL noch einen Schlüssel: Die Verifizierung ist gateway-unabhängig.

import { verifyTx } from '@cardanowall/sdk-ts/verifier';

const report = await verifyTx({ txHash: '3b9f…c1a2' });

console.log(report.verdict); // 'valid' | 'pending' | 'unverifiable' | 'failed'

if (report.verdict !== 'valid') {
  console.error(report.issues, report.signatures);
}

verifyTx liefert einen vollständigen VerifyReport zurück: das Ergebnis und exitCode, die ermittelte block_time und confirmationDepth, die issues-Liste aus Struktur- und Verifizierer-Prüfungen, die items- und merkle-Prüfergebnisse pro Element, die optionalen signatures sowie ein auditTrail-Protokoll jeder ausgehenden Anfrage, die er gestellt hat. So können Sie sich selbst überzeugen, dass er nie den Aussteller kontaktiert hat.

Um einen an Sie versiegelten Datensatz zu verifizieren, übergeben Sie dem Verifizierer Ihren geheimen Schlüssel. Der Schlüsselbund gilt global für den gesamten Lauf: Jeder übergebene Schlüssel wird gegen jedes versiegelte Element probiert, es gibt also keinen Index pro Element:

const report = await verifyTx({
  txHash: '3b9f…c1a2',
  decryption: [{ recipientSecretKey: mySecretKey }],
});

Mit dem Python-SDK

cardanowall-sdk ist ein byteidentischer Zwilling des TypeScript-Verifizierers: dieselben Prüfungen, dasselbe Ergebnis.

import asyncio
import cardanowall

report = asyncio.run(cardanowall.verify_tx(cardanowall.VerifyTxInput(tx_hash="3b9f…c1a2")))
print(report.verdict)

Mit dem Rust-SDK

Das cardanowall-Crate enthält denselben Verifizierer. verify_tx ist synchron, arbeitet also mit einem blockierenden Transport, und liefert denselben VerifyReport zurück:

use cardanowall::verifier::{verify_tx, Verdict, VerifyTxInput};

let report = verify_tx(&VerifyTxInput::new("3b9f…c1a2"));

println!("{}", report.verdict.as_str()); // "valid" | "pending" | "unverifiable" | "failed"

if report.verdict != Verdict::Valid {
    eprintln!("{:?}", report.issues);
    eprintln!("{:?}", report.record_signatures);
}

Um einen an Sie versiegelten Datensatz zu verifizieren, hängen Sie Ihren geheimen Schlüssel an. Der Schlüsselbund gilt global für den gesamten Lauf: Jeder Schlüssel wird gegen jedes versiegelte Element probiert, ein Berechtigungsnachweis trägt also keinen Element-Index. Die Eingabefelder sind öffentlich, sodass Sie auf VerifyTxInput::new aufbauen können:

use cardanowall::verifier::{verify_tx, Decryption, VerifyTxInput};

let mut input = VerifyTxInput::new("3b9f…c1a2");
input.decryption = Some(vec![Decryption::Recipient {
    recipient_secret_key: my_secret_key, // Vec<u8>
}]);

let report = verify_tx(&input);

Warum dafür kein Vertrauen nötig ist

Jede Prüfung läuft auf Basis öffentlicher Daten und eines Explorers Ihrer Wahl. Wer den Datensatz veröffentlicht hat, kann das Ergebnis nicht beeinflussen. Und selbst wenn diese Stelle morgen verschwände, würde Ihre Verifizierung weiterhin genau so funktionieren.