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…c1a2Das 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-Code | Ergebnis | Bedeutung |
|---|---|---|
0 | valid | jede erforderliche Prüfung bestanden |
1 | failed | eine dem Datensatz zurechenbare Prüfung scheiterte (Integrität, Struktur oder Signatur) |
2 | unverifiable | kein Datensatzfehler, aber eine erforderliche Prüfung ließ sich nicht ausführen (Netzwerk oder Richtlinie) |
3 | pending | noch nicht genügend Bestätigungen – kein Ergebnis eines ausstehenden Datensatzes ist endgültig |
4 | — | CLI-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 \
--jsonIst 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-stdinZiehen 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.