Guías · Parte 3 de 6
Verificar un registro
La verificación es la mitad de Label 309 que no pide permiso a nadie. A partir de una referencia de transacción de Cardano, puede confirmar un registro usted mismo, contra la cadena pública y mediante el explorador que elija. No hay inicio de sesión, y el resultado no depende en nada de quien lo publicó.
Con la CLI
Instale el binario cardanowall y apúntelo a una transacción:
cardanowall verify 3b9f…c1a2Resuelve la transacción a través de un explorador público de Cardano, valida estructuralmente el registro, comprueba cualquier firma de autoría, confirma que el registro está consolidado y muestra un veredicto. El veredicto es uno de cuatro estados, y el código de salida lo lleva tal cual, así que se integra directamente en CI:
| Código de salida | Veredicto | Significado |
|---|---|---|
0 | valid | todas las comprobaciones requeridas pasaron |
1 | failed | falló una comprobación atribuible al registro (integridad, estructura o firma) |
2 | unverifiable | sin fallo del registro, pero una comprobación requerida no se pudo ejecutar (red o política) |
3 | pending | aún no hay suficientes confirmaciones: ningún resultado de un registro pendiente es definitivo |
4 | — | error de entrada de la CLI (argumentos incorrectos o falta una entrada requerida) |
La separación entre failed y unverifiable es deliberada: un veredicto failed
siempre es atribuible al propio registro, de modo que ningún explorador que se
comporte mal puede fabricarlo; unverifiable significa que el verificador no pudo
completar una comprobación por motivos ajenos al registro: una pasarela que no
pudo alcanzar, un host en lista de denegación o un tope de recuperación.
Añada --json para un informe legible por máquina, y mantenga cada salto de red
bajo su control apuntando a su propia infraestructura:
cardanowall verify 3b9f…c1a2 \
--cardano-gateway https://your-koios-instance/api/v1 \
--threshold 20 \
--jsonSi el registro está sellado para usted, entregue su clave al verificador y este descifrará la carga útil y recalculará el hash del texto plano:
cardanowall verify 3b9f…c1a2 --secret-key-stdinEs preferible usar --secret-key-stdin, --secret-key-file o la variable de
entorno CARDANOWALL_RECIPIENT_KEY antes que un --secret-key directo, para que
la clave nunca acabe en el historial del shell.
Con el SDK de TypeScript
El verificador que usa la CLI viene incluido en el SDK. No necesita cliente, ni URL base, ni clave: la verificación es independiente de la pasarela:
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 devuelve un VerifyReport completo: el veredicto y el exitCode, el
block_time y la confirmationDepth resueltos, la lista issues (estructural y
del verificador), los resultados de comprobación por elemento items y merkle,
las signatures opcionales y un registro auditTrail de cada solicitud saliente
que realizó, de modo que pueda comprobar usted mismo que nunca contactó con quien
publicó el registro.
Para verificar un registro sellado para usted, entregue su clave secreta al verificador. El conjunto de claves es global a la ejecución: cada clave que pase se prueba contra cada elemento sellado, así que no hay índice por elemento:
const report = await verifyTx({
txHash: '3b9f…c1a2',
decryption: [{ recipientSecretKey: mySecretKey }],
});Con el SDK de Python
cardanowall-sdk es un gemelo byte por byte del verificador de TypeScript: las
mismas comprobaciones, el mismo veredicto:
import asyncio
import cardanowall
report = asyncio.run(cardanowall.verify_tx(cardanowall.VerifyTxInput(tx_hash="3b9f…c1a2")))
print(report.verdict)Con el SDK de Rust
El crate cardanowall lleva el mismo verificador. verify_tx es síncrono
(gestiona un transporte bloqueante) y devuelve el mismo 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);
}Para verificar un registro sellado para usted, adjunte su clave secreta. El
conjunto de claves es global a la ejecución: cada clave se prueba contra cada
elemento sellado, así que una credencial no lleva índice de elemento. Los campos de
entrada son públicos, así que constrúyalo sobre 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);Por qué esto no requiere confianza
Cada comprobación se ejecuta a partir de datos públicos y de un explorador de su elección. Quienes publicaron el registro no pueden influir en el resultado, y si desaparecieran mañana, su verificación seguiría funcionando exactamente igual.