
UAL: un identificador único y una URL descentralizada para productos
GEDITOKEl problema: identificar de forma única sin imponer un “corsé” operativo
En el ecosistema del DPP, una recomendación habitual es GS1 Digital Link, un estándar para expresar identificadores GS1 (como GTIN) dentro de una URL, habilitando que un código 2D (QR, DataMatrix) conecte un producto con información online. (gs1.org)
GEDITOK soporta GS1 Digital Link cuando es necesario o deseable. Pero, en la práctica, existen muchos casos donde:
- la empresa no está asociada a GS1;
- la empresa sí está asociada, pero no necesita (o no puede justificar) crear un GTIN para cada variante, componente, lote o unidad;
- el coste, la operativa interna o la estructura de catálogo hace que GTIN sea útil “a nivel comercial”, pero no sea el mejor vehículo para el nivel de granularidad y eventos que requiere una trazabilidad moderna.
Y aun así, estas empresas siguen necesitando algo esencial: un identificador único y un enlace único para el producto, que cualquier usuario pueda escanear en un QR y que lleve, de forma inequívoca y transparente, a todas las características e historial del producto.
La propuesta de GEDITOK: UAL (Universal Asset Link)
Para cubrir ese hueco, en GEDITOK hemos elaborado una propuesta pública llamada UAL (Universal Asset Link): una forma estandarizada de componer URLs que identifican productos (y, especialmente, unidades concretas) apoyándose en identificadores criptográficos nativos de blockchain, evitando depender de un organismo central.
La propuesta puede consultarse aquí (repositorio público para forks y contribuciones):
https://github.com/geditok/UAL/blob/main/README_ES.md
La idea central es simple:
-
Un producto (o una unidad) se representa como un asset anclado a una blockchain (EVM, Solana, Polkadot, Cosmos, etc.).
-
Ese asset tiene identificadores nativos (contrato, tokenId, mint, etc.).
-
La URL UAL incluye lo necesario para:
- saber en qué red está,
- saber qué asset es,
- y quién lo resuelve (qué dominio devuelve la información).
¿Qué significa “resolver” y por qué importa?
Una URL UAL siempre apunta a un resolver: un dominio HTTPS que, al recibir la URL, devuelve la información del producto.
- Para humanos: una página web (HTML) con la ficha y el historial.
- Para sistemas: JSON o JSON-LD (datos estructurados).
Esto permite que la misma URL sea útil para:
- consumidores,
- distribuidores,
- reparadores,
- auditores,
- y autoridades (cuando aplique).
La nomenclatura UAL explicada en 30 segundos
La forma base es:
https://{resolver-domain}/ual/v1/{caip2}/{assetRef}
1) https://{resolver-domain}
- Siempre HTTPS por seguridad y confianza.
{resolver-domain}es el dominio del servicio que “traduce” la identidad on-chain a información legible.
2) /ual/v1/
- Identifica el estándar (ual) y su versión (v1).
- Así, si en el futuro hay mejoras incompatibles, puede existir
/ual/v2/sin romper lo anterior.
3) {caip2}: identificador de red (multi-chain)
Para que la URL funcione en múltiples blockchains, UAL utiliza identificadores de red en formato CAIP-2, que siguen el patrón namespace:reference. Por ejemplo, en EVM se usa el namespace eip155 y como referencia el chainId. (GitHub)
Ejemplos:
eip155:1→ Ethereum mainneteip155:11155111→ Sepolia
4) {assetRef}: referencia del activo (qué producto/unidad es)
Aquí es donde UAL identifica el producto o la unidad.
Caso EVM (muy común): contrato + tokenId (NFT)
UAL define una rama pragmática para NFTs en EVM:
-
ERC-721:
nft/erc721/{contractAddress}/{tokenId} -
ERC-1155:
nft/erc1155/{contractAddress}/{tokenId}
Así, una unidad concreta queda identificada por:
- el smart contract (dirección), y
- el tokenId (entero).
Caso no-EVM (o casos complejos): escape hatch CAIP-19
No todas las redes tienen el mismo modelo de “contrato + tokenId”. Para mantener UAL realmente multi-chain, existe una forma genérica basada en CAIP-19:
asset/{caip19}
Eso permite representar activos de otros ecosistemas sin “forzar” un molde EVM.
Un ejemplo real: identificar un tokenId en Sepolia
Supongamos un producto tokenizado como NFT ERC-721 en Sepolia, con tokenId 1234:
https://resolver.geditok.eu/ual/v1/eip155:11155111/nft/erc721/0xAbCDEF0123456789aBCdef0123456789ABCDef01/1234
¿Qué te garantiza esto?
- Qué red:
eip155:11155111(Sepolia) - Qué activo:
nft/erc721/…/1234 - Quién lo resuelve:
resolver.geditok.eu - Qué versión de estándar:
ual/v1
De esta manera, el QR impreso en un producto puede llevar a una ficha inequívoca, verificable y con trazabilidad.
“Granularity: item” y Schema.org: hablar el idioma del consumidor (y de los buscadores)
Cuando hablamos de unidades (granularidad item), no basta con identificar el activo: es importante describirlo con semántica ampliamente adoptada. Por eso, en UAL proponemos que, para granularity=item, el resolver pueda incluir campos de Schema.org IndividualProduct, que describe precisamente una instancia individual identificable (por ejemplo, por número de serie). (schema.org)
Esto permite que:
- la información sea interoperable,
- los integradores lo entiendan rápidamente,
- y puedas mapear a un “pasaporte” de producto con campos estándar (marca, fabricante, serial, fechas, etc.).
Conclusión: un estándar abierto para ampliar la trazabilidad, no para sustituir lo que ya funciona
UAL no pretende “combatir” GS1 Digital Link. GS1 Digital Link es valioso en muchos contextos, y de hecho es un estándar formal para llevar identificadores GS1 a la web. (gs1.org)
UAL nace para un escenario igual de real: empresas que quieren (o necesitan) trazabilidad avanzada y URLs únicas sin depender obligatoriamente de GTIN o de afiliaciones que no encajan en su operativa. Y, sobre todo, para aprovechar que las blockchains ya aportan un sistema de identificación criptográfico, global y resistente a puntos únicos de fallo.
Si te interesa revisar la propuesta, implementarla o mejorarla, el repositorio está abierto para contribuciones:
https://github.com/geditok/UAL/blob/main/README_ES.md