Tokenización & Árbol de Merkle

Tokenización

Albert Palau
4 min readJan 24, 2018

Con el auge de las blockchains, la tokenización se ha convertido también en una palabra de moda pero, ¿qué es exactamente la tokenización? ¿cómo funciona? En este artículo veremos una posible implementación de la tokenización para entender mejor estos conceptos.

Wikipedia define la tokenización como [1]:

El proceso de substituir un dato por un elemento equivalente no sensible, referido como token, que no tiene un valor o significado extrínseco o explotable.

Árbol de Merkle

O Merkle tree, de su nombre en inglés, son estructuras de datos en árbol:

Que permiten agrupar varios elementos (tokens) en un único token. Esto, en el mundo blockchain, es muy útil ya que el espacio de almacenamiento es muy caro, como se mostró en el artículo de tipos de almacenamientos.

Tokenizando y persistiendo en la blockchain

Imaginemos que tenemos los siguientes 4 ejemplos de Ricardian contract, es decir, contratos en texto escrito válidos legalmente (podrían ser imágenes de estos contratos o cualquier otra representación como, por ejemplo, archivos digitales):

Contrato 1

… REUNIDOS De una parte, como parte vendedora por representación: DON Pepito, mayor de edad, estado civil casado, vecino de Maria, con D.N.I. nº 123123H….

Contrato 2

… REUNIDOS De una parte, como parte vendedora por representación: DON Manolo, mayor de edad, estado civil soltero, vecino de Pedro, con D.N.I. nº 321321H….

Contrato 3

… REUNIDOS De una parte, como parte vendedora por representación: DON Benito, mayor de edad, estado civil casado, vecino de Carmen, con D.N.I. nº 565984J….

Contrato 4

… REUNIDOS De una parte, como parte vendedora por representación: DON Pepito, mayor de edad, estado civil casado, vecino de Maria, con D.N.I. nº 123123P….

El primer paso sería tokenizarlo, por ejemplo, con la función Keccak de 256 bits de salida:

Tokenización de contratos

Esto nos daría los siguientes tokens por contrato:

token 1: ‘0xe0a59e97e85fdd11c2ed7d4d607d4632770e63dffd9f28d1a1780f80005127ee’

token 2: ‘0x9f4d318a47980b4f003a7fccb4a7d13ccfb0d6ab2ab5a25172b6fa48136c00ef’

token 3: ‘0xa3e82b0389c12cf1c76ea8ce1d71dcf9a0345aab36b21c041f07ad4840e6acaa’

token 4: ‘0xc8ff867cfbde1d8fb7d4b73b0c4d423e03ca0d098f92d9e2b24dfcad45193e32’

Una vez tenemos estos tokens podríamos enviarlos, uno a uno, adjuntos a una transacción a la blockchain, pero esto tendría el inconveniente de pagar 4 veces la comisión de la red. También podríamos enviarlos en una misma transacción separados por comas, pero la comisión también sería proporcional (o exponencial en algunos casos [2]) al tamaño que queremos guardar. Como hemos visto en la descripción de los árboles de Merkle, podríamos unificar estos tokens en uno sólo y evitar así pagar por más espacio.

La estructura de datos que queremos construir sería:

Árbol de Merkle de 4 elementos

Donde:

A = ‘0x8688714f3ac7ef110d06bd0eb1a9bedff07f237573a2a96386d668f70db48f99’

B = ‘0x819713be8cf0a84437ac4721711e103cc8077b0a93ba11bb6c1a9e7fb93166e8’

T = ‘0x99c07c4f09e938203e430288b884954a80054a709ceb6cc55f9a095b1e9ed5b8’

El token T, ahora sí, lo enviaríamos a la blockchain para persistir y asegurar su inmutabilidad. No obstante, ahora nos surge otro reto, ¿cómo puede una de las partes demostrar, por ejemplo, que el contrato 1 ha sido introducido en el token T?

Demostrando la inclusión del contrato en el token de la blockchain

Para demostrar la inclusión de cualquier contrato, se debe de guardar:

  • El contrato original
  • Los tokens necesarios para construir un camino hacia la raíz del árbol

Es decir, si yo quiero guardar una prueba de que el contrato 1 ha sido introducido en el token T, custodiaré:

  • contrato original del cual derivaré el token1 y enseñaré, en lenguaje jurídico, el texto con la firma digital de los intervinientes
  • token2
  • token B

Con estos tres elementos, puedo demostrar que el contrato 1 ha sido introducido en el token T sin necesidad de conocer el contenido del resto de los contratos.

Un tercero que quiera validar la inclusión, y sólo disponga del token T almacenado en la blockchain, únicamente deberá de reconstruir el árbol con las 3 piezas de información citadas anteriormente y validar el hash resultante con T.

¿hash(hash(hash(contrato_original) + token2) + B) == T?

Si sí, el contrato 1 en lengua jurídica ha sido incluido, tal cual, en la blockchain representado en el token T.

Conclusión

Las blockchains suelen ser lentas y costosas de operar, sin embargo, proveen de unas capacidades operativas para el intercambio prometedoras. La metodología expuesta, permite beneficiarnos de las ventajas de las blockchains de manera eficiente y segura. De hecho, es el método que usa Bitcoin (y Ethereum de forma similar pero con Merkle Patricia Tree) para generar la cabecera del bloque e incluir todas las transacciones en un tamaño pre-fijado.

Referencias:

  1. https://en.wikipedia.org/wiki/Tokenization_(data_security)
  2. https://medium.com/@albpalau/desarrollando-sobre-ethereum-tipos-de-almacenamientos-5b4bc0b63c3a

Fuente del autor:

https://www.lascriptomonedas.website/general/tokenizacion/

--

--

Albert Palau

A person who never made a mistake never tried anything new. Blockchain & Open source believer