Guias · Parte 3 de 6
Verificar um registro
A verificação é a metade do Label 309 que não pede permissão a ninguém. A partir de uma referência de transação Cardano, você mesmo pode confirmar um registro — diretamente na cadeia pública, por meio de um explorador de sua escolha. Não há login, e nenhum aspecto do resultado depende de quem o publicou.
Com a CLI
Instale o binário cardanowall e aponte-o para uma transação:
cardanowall verify 3b9f…c1a2Ele resolve a transação por meio de um explorador público do Cardano, valida estruturalmente o registro, confere eventuais assinaturas de autoria, confirma que o registro já foi liquidado e imprime um veredito. O veredito é um de quatro estados, e o código de saída o carrega literalmente — o que o torna diretamente aproveitável em CI:
| Código de saída | Veredito | Significado |
|---|---|---|
0 | valid | toda verificação obrigatória passou |
1 | failed | uma verificação atribuível ao registro falhou (integridade, estrutura ou assinatura) |
2 | unverifiable | nenhuma falha do registro, mas uma verificação obrigatória não pôde rodar (rede ou política) |
3 | pending | ainda não há confirmações suficientes — nenhum resultado de um registro pendente é definitivo |
4 | — | erro de entrada da CLI (argumentos inválidos ou entrada obrigatória ausente) |
A separação entre failed e unverifiable é proposital: um veredito failed é sempre atribuível ao próprio registro, de modo que nenhum explorador mal-intencionado consegue fabricá-lo; unverifiable significa que o verificador não conseguiu concluir uma verificação por motivos alheios ao registro — um gateway que ele não pôde alcançar, um host em lista de bloqueio ou um teto de busca.
Acrescente --json para obter um relatório legível por máquina e mantenha cada salto de rede sob seu controle apontando para a sua própria infraestrutura:
cardanowall verify 3b9f…c1a2 \
--cardano-gateway https://your-koios-instance/api/v1 \
--threshold 20 \
--jsonSe o registro estiver selado para você, forneça sua chave ao verificador, que vai descriptografar a carga útil e recalcular o hash do texto claro:
cardanowall verify 3b9f…c1a2 --secret-key-stdinPrefira --secret-key-stdin, --secret-key-file ou a variável de ambiente
CARDANOWALL_RECIPIENT_KEY em vez de um --secret-key direto, para que a chave nunca fique no histórico do shell.
Com o SDK TypeScript
O verificador que a CLI usa vem junto com o SDK. Ele não precisa de cliente, de URL base nem de chave — a verificação não depende de gateway algum:
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);
}O verifyTx retorna um VerifyReport completo: o veredito e o exitCode, o block_time e o confirmationDepth resolvidos, a lista de issues estruturais e do verificador, os resultados das verificações por item em items e em merkle, as signatures opcionais e um registro auditTrail de cada requisição de saída que ele fez — assim você mesmo pode comprovar que ele nunca entrou em contato com quem publicou.
Para verificar um registro selado para você, entregue sua chave secreta ao verificador. O chaveiro é global para a execução — toda chave que você passa é testada contra todos os itens selados, de modo que não há índice por item:
const report = await verifyTx({
txHash: '3b9f…c1a2',
decryption: [{ recipientSecretKey: mySecretKey }],
});Com o SDK Python
O cardanowall-sdk é um gêmeo byte a byte do verificador em TypeScript — as mesmas verificações, o mesmo veredito:
import asyncio
import cardanowall
report = asyncio.run(cardanowall.verify_tx(cardanowall.VerifyTxInput(tx_hash="3b9f…c1a2")))
print(report.verdict)Com o SDK Rust
O crate cardanowall traz o mesmo verificador. O verify_tx é síncrono — ele incorpora um transporte bloqueante — e retorna o mesmo 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 um registro selado para você, anexe sua chave secreta. O chaveiro é global para a execução — toda chave é testada contra todos os itens selados, de modo que uma credencial não carrega índice de item. Os campos de entrada são públicos, então construa 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 que isso dispensa confiança
Cada verificação é executada a partir de dados públicos e de um explorador de sua escolha. Quem publicou o registro não tem como influenciar o resultado — e, se essas pessoas sumissem amanhã, sua verificação continuaria funcionando exatamente da mesma forma.