Guide · Parte 3 di 6
Verificare un record
La verifica è la metà di Label 309 che non chiede il permesso a nessuno. Con il riferimento a una transazione Cardano, puoi confermare un record da solo, a partire dalla chain pubblica e tramite un explorer che scegli tu. Non c'è alcun login, e nulla del risultato dipende da chi ha pubblicato il record.
Con la CLI
Installa il binario cardanowall, poi puntalo a una transazione:
cardanowall verify 3b9f…c1a2Risolve la transazione tramite un explorer Cardano pubblico, esegue la validazione strutturale del record, controlla eventuali firme di paternità, conferma che il record sia definitivamente registrato e stampa un verdetto. Il verdetto è uno di quattro stati, e il codice di uscita lo trasporta tale e quale, così si inserisce direttamente in un job di CI:
| Codice di uscita | Verdetto | Significato |
|---|---|---|
0 | valid | ogni controllo richiesto è stato superato |
1 | failed | un controllo attribuibile al record è fallito (integrità, struttura o firma) |
2 | unverifiable | nessuna colpa del record, ma un controllo richiesto non ha potuto eseguirsi (rete o policy) |
3 | pending | conferme ancora insufficienti: da un record in attesa nessun esito è definitivo |
4 | — | errore di input della CLI (argomenti errati o input richiesto mancante) |
La distinzione tra failed e unverifiable è deliberata: un verdetto failed è sempre
attribuibile al record stesso, perciò nessun explorer malevolo può fabbricarne uno;
unverifiable significa che il verificatore non ha potuto completare un controllo per ragioni
esterne al record — un gateway irraggiungibile, un host in lista di blocco o un tetto al
recupero dei byte.
Aggiungi --json per un report leggibile da una macchina, e tieni ogni passaggio di rete
sotto il tuo controllo puntando alla tua infrastruttura:
cardanowall verify 3b9f…c1a2 \
--cardano-gateway https://your-koios-instance/api/v1 \
--threshold 20 \
--jsonSe il record è sigillato a te, consegna la tua chiave al verificatore: decifrerà il payload e ricalcolerà l'hash del testo in chiaro:
cardanowall verify 3b9f…c1a2 --secret-key-stdinPreferisci --secret-key-stdin, --secret-key-file o la variabile d'ambiente
CARDANOWALL_RECIPIENT_KEY rispetto al flag --secret-key nudo, così la chiave non finisce
mai nella cronologia della shell.
Con l'SDK TypeScript
Il verificatore usato dalla CLI è incluso nell'SDK. Non serve alcun client, nessun base URL e nessuna chiave: la verifica è indipendente dal gateway:
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 restituisce un VerifyReport completo: il verdetto e exitCode, il block_time
(l'orario del blocco) e la confirmationDepth risolti, l'elenco issues dei problemi
strutturali e del verificatore, i risultati dei controlli per items e merkle, le
signatures opzionali e un log auditTrail di ogni richiesta in uscita effettuata, così puoi
dimostrare a te stesso che non ha mai contattato chi ha pubblicato il record.
Per verificare un record sigillato a te, consegna al verificatore la tua chiave privata. Il portachiavi è globale all'esecuzione: ogni chiave che passi viene provata contro ogni elemento sigillato, perciò non c'è alcun indice per elemento:
const report = await verifyTx({
txHash: '3b9f…c1a2',
decryption: [{ recipientSecretKey: mySecretKey }],
});Con l'SDK Python
cardanowall-sdk è un gemello byte per byte del verificatore TypeScript: stessi controlli,
stesso verdetto:
import asyncio
import cardanowall
report = asyncio.run(cardanowall.verify_tx(cardanowall.VerifyTxInput(tx_hash="3b9f…c1a2")))
print(report.verdict)Con l'SDK Rust
Il crate cardanowall include lo stesso verificatore. verify_tx è sincrono (incorpora un
trasporto bloccante) e restituisce lo stesso VerifyReport:
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);
}Per verificare un record sigillato a te, allega la tua chiave privata. Il portachiavi è
globale all'esecuzione: ogni chiave viene provata contro ogni elemento sigillato, perciò una
credenziale non porta alcun indice di elemento. I campi di input sono pubblici, quindi
costruisci sopra VerifyTxInput::new:
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);Perché non serve fidarsi di nessuno
Ogni controllo si basa su dati pubblici e su un explorer che scegli tu. Chi ha pubblicato il record non può influenzare l'esito, e se domani sparisse, la tua verifica continuerebbe a funzionare esattamente allo stesso modo.