Guías

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…c1a2

Resuelve 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 salidaVeredictoSignificado
0validtodas las comprobaciones requeridas pasaron
1failedfalló una comprobación atribuible al registro (integridad, estructura o firma)
2unverifiablesin fallo del registro, pero una comprobación requerida no se pudo ejecutar (red o política)
3pendingaún no hay suficientes confirmaciones: ningún resultado de un registro pendiente es definitivo
4error 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 \
  --json

Si 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-stdin

Es 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.