Saltar al contenido

La prueba de la existencia de la Cadena de Bloqueo con Tierion, RethinkDB y PubNub

Supongo que puedes estar pensando, pero ¿qué son estas raíces de Merkle, identificación de transacción y valores de prueba que Tierion está devolviendo? ¿Cómo puede todo esto actuar como una prueba de existencia? .

Bueno, en primer lugar, el resumen del archivo SHA256 es único. Necesitas tener exactamente el mismo archivo para generar el mismo hachís. (Sólo intenta comprobar el hash de un archivo, y luego añade un espacio para ver cómo el nuevo hash es completamente diferente). Esto prueba que el archivo existía al menos desde el momento en que se confirmó la transacción. De lo contrario, el hash que utilizamos no se habría generado.

La prueba de la existencia de la Cadena de Bloqueo con Tierion, RethinkDB y PubNub
La prueba de la existencia de la Cadena de Bloqueo con Tierion, RethinkDB y PubNub

Sobre el recibo de Tierion:

  • El valor de TargetHash es el hash del registro que desea verificar.
  • Este y otros hashes registrados se combinan en un árbol de Merkle.
  • Con el Árbol de Merkle, se calcula una raíz de merkle y se inserta en la cadena de bloqueo.

Con un árbol de Merkle, puedes probar que algo pertenece a un conjunto, sin tener que almacenar todo el conjunto.

Para validar un recibo, debe confirmar que targetHash es parte de un árbol Merkle, y que la raíz Merkle del árbol ha sido publicada en una transacción de Bitcoin.

Los recibos generados por Tierion se ajustan al estándar Chainpoint 2.0. Puedes saber más sobre este estándar y cómo se puede verificar un recibo en este libro blanco, pero en resumen aquí está el procedimiento:

  1. Concentrar el targetHash y el primer hash en la matriz de pruebas. La designación derecha o izquierda especifica en qué lado de la concatenación debe estar el valor del hash de prueba.
  2. Hágase un hachazo con el valor resultante.
  3. Concentrar el hash resultante con el siguiente hash en la matriz de pruebas, usando las mismas reglas de izquierda y derecha.
  4. Deshazte de ese valor y continúa el proceso hasta que hayas revisado cada elemento de la matriz de pruebas.
  5. El valor final del hash debe ser igual al valor de MerkleRoot si la prueba es válida, de lo contrario, la prueba es inválida.

Si tu objetivo, Hash, fuera el único elemento en el Árbol de Merkle, sería igual a MerkleRoot.

Veamos un ejemplo. Para verificar el hash de este recibo (691b6e0b3db43e22466734f7ec4b15d17687d5d8a92212fb99691e454cb9d9c4):

1234567891011121314151617{"@contexto": https://w3id. org/chainpoint/v2, "anclas":[{"sourceId": "e8e92ff3efcb2660922e8a870a4ebcda54c41978f0db3374b4c5d31173f0d720", "tipo": "BTCOpReturn"}], "merkleRoot": "a82c3e4b04bcdec045695129c50221b15eadd2bfff6b65533a17867c201bbde0", "prueba": {"derecho": "8b6aafc21661aed7ff5a7e8fce857ca0d2f4cef576c1c47c454d58a58ce4c09c"}], "targetHash": "691b6e0b3db43e22466734f7ec4b15d17687d5d8a92212fb99691e454cb9d9c4", "tipo": "ChainpointSHA256v2"}

javascript

Concatenamos el valor de TargetHash con el valor correcto de prueba de la siguiente manera:

1691b6e0b3db43e22466734f7ec4b15d17687d5d8a92212fb99691e454cb9d9c48b6aafc21661aed7ff5a7e8fce857ca0d2f4cef576c1c47c454d58a58ce4c09c

Luego, obtenemos el hash SHA-256 de esa cuerda para verificar que es igual al valor de MerkleRoot.

Como la prueba tiene un elemento, sólo tenemos que realizar esta operación. De lo contrario, tendríamos que repetir el proceso para cada valor de la prueba concatenándola a la izquierda o a la derecha del hash previamente calculado.

La trampa es que la generación de hash se hace con los valores binarios (como búferes de datos binarios en bruto) de targetHash y la prueba, en lugar de con sus representaciones de cadenas hexadecimales (las que se muestran), lo que significa que no podemos utilizar una calculadora en línea SHA256 para realizar las operaciones.

Por suerte, Tierion proporciona las siguientes herramientas para validar sus recibos:

Y aquí tienes un consejo. Si realmente quieres ver el código que hace la validación, echa un vistazo a la función validateProof(proof, targetHash, merkleRoot) de la biblioteca de Tierion para trabajar con árboles Merkle.

Ahora que has probado el valor de la MerkleRoot, toma el ID de la transacción de Bitcoin (propiedad sourceId de la matriz de anclas con el tipo BTCOpReturn) para revisar la transacción en un sitio online como https://blockchain.info/ o https://blockexplorer.com/.

La transacción debe incluir el valor de merkleRoot en la salida OP_RETURN. Si el valor está en la salida, la entrada es válida: