Ayuda · 38
Comprobar que la información de un lote no cambió
Cada versión de la información de un lote tiene una huella registrada en el registro. Cualquiera puede recalcularla a partir de la información publicada y compararla, sin cuenta y sin depender de A-REX.
Cuando se registra un lote, A-REX publica su información (producto, cantidad, código de lote, origen, fechas) y guarda una huella de ella en el registro. La huella es un código corto calculado a partir del contenido exacto: si cambia una letra o un dígito, deja de coincidir. Así, un comprador, un auditor o una autoridad puede comprobar, sin cuenta y sin depender de A-REX, que la información que lee es la que registró tu empresa, y desde cuándo.
La huella muestra que la información no cambió después de registrarse. No muestra que lo declarado sea cierto: el registro guarda quién declaró qué, y cuándo.
Qué cubre la huella
- Todos los campos de la información publicada del lote, tal como se registraron.
- Una sola versión. Una corrección publica una versión nueva con su propia huella, registrada con la corrección; la versión anterior y su huella quedan registradas y se pueden seguir comprobando. Consulta Corregir la información de un lote.
- No los archivos de los certificados: cada uno tiene su propia huella. Consulta Certificados.
Dónde la muestra la consola
- Abre el lote desde Lotes.
- Abre Detalles técnicos al final de la página del lote. El valor largo que empieza con
0x, justo encima de Abrir el registro público, es la huella registrada para el lote. - Abrir el registro público abre la información publicada, que cualquiera puede leer. Su dirección web termina con la misma huella.
Los propietarios y administradores también la encuentran en Lotes (técnico), en la página de cada lote.
Cómo la comprueba cualquiera
- Descarga la información publicada desde su dirección pública, la que abre Abrir el registro público. No contiene datos personales.
- Ponla en su forma estándar, la forma canónica de RFC 8785: los campos en un orden fijo y sin espacios de más, para que la misma información dé siempre el mismo texto.
- Calcula la huella de ese texto con el método keccak-256.
- Compárala con la huella registrada para el lote. El mismo valor significa que la información es la registrada. Cualquier otro valor significa que la copia difiere de lo registrado.
Tus desarrolladores o auditores pueden hacerlo con unas pocas líneas de código; la sección siguiente muestra cómo.
Para desarrolladores y auditores
Esta sección usa términos técnicos. La huella es el metadataHash del batch, que aparece como
Hash de metadatos en Detalles técnicos: el keccak256 de la serialización canónica RFC 8785
(JCS) del documento de metadatos, calculado sobre sus bytes UTF-8 (AREX-CORE §3.5). El documento se
sirve en GET /m/{empresa}/{metadataHash}.json de la API de A-REX, el uri del batch en la cadena,
una vez que el batch está en el registro (los borradores responden 404). La respuesta es el propio
texto canónico, legible desde cualquier origen.
En JavaScript (Node 18 o posterior), con el paquete canonicalize (RFC 8785) y viem:
import canonicalize from 'canonicalize';
import { keccak256, toBytes } from 'viem';
const url = 'https://API_HOST/m/fazenda-boa-vista/0x5c1e…9a2b.json'; // Abrir el registro público
const recorded = '0x5c1e…9a2b'; // Hash de metadatos del lote
const doc = await (await fetch(url)).json();
const computed = keccak256(toBytes(canonicalize(doc)));
console.log(computed === recorded.toLowerCase() ? 'sin cambios' : 'distinto');
Con ethers v6 el último paso es keccak256(toUtf8Bytes(canonicalize(doc))). Canonicalizar importa
cuando compruebas una copia que se reformateó (con sangría, claves reordenadas): el archivo publicado
ya es canónico, así que sus bytes tal cual dan el mismo valor.
Desde la línea de comandos, con cast de Foundry:
curl -s "https://API_HOST/m/fazenda-boa-vista/0x5c1e…9a2b.json" -o lot.json
cast keccak "$(cat lot.json)"
Para comparar con el propio registro en lugar de con lo que muestra la consola, lee el batch del contrato del token (Contrato del token, ID del token y Red en Detalles técnicos):
cast call "$TOKEN" "batchOf(uint256)((address,uint64,uint8,bytes32,bytes32,uint64,uint64,bytes32,bytes32,string))" "$TOKEN_ID" --rpc-url "$RPC_URL"
El noveno valor de la tupla es metadataHash y el décimo es uri. Después de una corrección,
batchOf devuelve la versión corregida, y cada evento BatchMetadataUpdated(id, metadataHash, uri)
registra una versión. Los documentos declaran schemaVersion 1.0.0, 1.1.0 o 1.2.0 (A-REX escribe
1.2.0); la comprobación es la misma para todos. Validar el documento contra su esquema es otro paso:
cualquier validador de JSON Schema 2020-12 con schema/batch-metadata.schema.json del estándar, o
POST /v1/metadata/validate con una clave de API.