¿Cómo verifico los activos del árbol de Merkle de OKX? Árbol de Merkle (versión 2)
Válido para el periodo de auditoría después de marzo de 2023
¿Qué es un árbol de Merkle?
Un Árbol de Merkle (o árbol hash) es una estructura de datos, que normalmente es un árbol binario. Utiliza funciones predefinidas para calcular el valor hash de un nodo de abajo hacia arriba, hasta el nodo raíz superior del árbol.
Información del nodo
En cada nodo del árbol almacena la siguiente información:
Valor hash del nodo
Cantidad de criptomonedas de un usuario capturada por la instantánea de auditoría (tomemos como ejemplo BTC, ETH y USDC).
valor hash,{"BTC":"BTC amount","ETH":"ETH amount","USDT":"USDT amount"} be324cf06aee0616b4ec20c3,{"BTC":"1.023","ETH":"0","USDT":"20.2343322"} |
Regla de hash
Nodos hoja (excepto nodos padding)
hash=SHA256(nonce+saldos) |
OKX asignará un nonce único para cada usuario, que se puede encontrar en la página de auditoría del usuario; saldos es una cadena json compuesta por los activos de los usuarios y los importes que fueron capturados en la instantánea de la auditoría. Por ejemplo: {"BTC":"1.023","ETH":"0","USDT":"20.2343322"} (Nota: es necesario quitar los ceros finales y dejar 8 decimales de precisión).
Nodos principales
hash de un nodo principal = SHA256(h1+h2+(h1 importe BTC+h2 importe BTC)+(h1 importe ETH+h2 importe ETH)+(h1 importe USDC+h2 importe USDC)+altura) |
h1Hash del nodo secundario izquierdo del nodo actual, h2 Hash del nodo secundario derecho del nodo actual, audit_id =ID de la auditoría actual, altura =la altura del nodo h1 (o h2) Definición de altura: altura del nodo hoja inferior=1, altura de un nodo principal = altura de su nodo secundario + 1, el nodo raíz tiene la altura máxima
Regla de división de nodos
Para proteger la privacidad de los clientes, OKX dividirá aleatoriamente los activos de los usuarios en dos nodos, con el rango aleatorio entre 0 y 1. Por ejemplo, si los activos de un usuario son: {"BTC": "10.2", "ETH": "4", "USDT": "5"} y el número aleatorio es 0,6, los activos del usuario se dividirán en 60 % y 40 %.
Durante la generación posterior del árbol de Merkle, los nodos hoja divididos se mezclarán aleatoriamente para distribuirlos a diferentes posiciones en el árbol.
Regla de los nodos padding
Para construir un árbol de Merkle completo (un árbol binario completo), se necesitan 2^n nodos hoja, pero los datos reales pueden no cumplir ese requisito y también puede haber un número impar de datos. En tales circunstancias, si el nodo k no tiene nodos hermanos, se generará automáticamente un nodo hermano k' como nodo de padding, de modo que hash(k')=hash(k), y los importes de los activos se fijarán en 0 para todas las monedas. Por ejemplo,
Hash | Saldo |
---|---|
h1 | {"BTC": 1, "ETH": 1,"USDT": 1} |
h2 | {"BTC": 1, "ETH": 2,"USDT": 3} |
h3 | {"BTC": 1, "ETH": 2,"USDT": 4} |
En este ejemplo, el nodo padding h4=h3, y los saldos almacenados en el nodo son {"BTC": 0, "ETH": 0,"USDT": 0} como se muestra en la Imagen 1 (nodo verde):
Imagen 1
hash de un nodo principal = SHA256(h1+h2+(h1 importe BTC+h2 importe BTC)+(h1 importe ETH+h2 importe ETH)+(h1 importe USDC+h2 importe USDC)+altura) |
Así: h6 = SHA256(h3 + h4 + (1+0)+(2+0)+(4+0)+ altura)
¿Cómo puedo verificar si mis activos están incluidos en el árbol de Merkle de OKX?
Teoría de la verificación
Según la definición del árbol de Merkle de OKX, puedes calcular el valor hash de un nodo padre avanzando desde abajo, usando los valores hash de sus nodos hijos izquierdo y derecho. Al final, obtendrás el valor hash del nodo raíz. A continuación, puedes comparar este valor hash calculado del nodo raíz con el obtenido del nodo raíz de la ruta del árbol de Merkle. Si coinciden, la verificación se lleva a cabo correctamente; de lo contrario, falla. Ejemplo: consulta la Imagen 1 y el texto siguiente, basándose en el nodo propio del usuario h3 y proporcionando su nodo hermano h4, se puede calcular el hash de su nodo padre h6, y proporcionando el nodo hermano h5 de h6, se puede calcular el hash de su nodo padre h7, y luego comparar el valor hash de h7 con el recogido en el nodo raíz de la ruta del árbol de Merkle y ver si son idénticos para completar el proceso de verificación. Texto de datos de la ruta del árbol de Merkle:
h7,3,{"BTC":"3","ETH":"5","USDT":"8"} h6,2,{"BTC":"1","ETH":"2","USDT":"4"} h5,2,{"BTC":"2","ETH":"3","USDT":"4"} h4,1,{"BTC":"0","ETH":"0","USDT":"0"} h3,1,{"BTC":"1","ETH":"2","USDT":"4"} h2,1,{"BTC":"1","ETH":"2","USDT":"3"} h1,1,{"BTC":"1","ETH":"1","USDT":"1"} |
Nota: OKX ha introducido la instantánea de activos netos al generar el árbol de Merkle. Una deuda (por ejemplo, el capital negativo) se registrará en la instantánea si el usuario ha tomado prestados activos. Puedes consultar aquí para obtener más información.
Pasos de verificación
1. Inicia sesión en tu cuenta de OKX, ve a Activo > Auditorías para ver las auditorías recientes, selecciona Detalles para ver tus datos de auditoría.
Selecciona Activos y Ver detalles para comprender mejor la auditoría de datos
2. También puedes verificar manualmente tus activos en el árbol de Merkle seleccionando Copiar datos
Selecciona Copiar datos para la verificación manual
3. Abre un editor de texto (por ejemplo, el bloc de notas), pega y guarda la cadena json como archivo json.
Pasos
Mac: Abre el terminal, introduce el comando touch merkle_proof_file.json y se creará un archivo json. El archivo se guarda en el escritorio del sistema de manera predeterminada. Puedes abrir Finder y buscar merkle_proof_file.json para encontrar este archivo. Abre este archivo JSON, pega los datos copiados y guárdalos.
Windows: Haz doble clic para abrir un editor de texto (por ejemplo, bloc de notas), pega los datos y guárdalos como un archivo json. En nuestro caso, nombraremos el archivo "merkle_proof_file.json". El texto json de los datos de la ruta del árbol de Merkle aparece a continuación: { "hash": "7e5a588806ff1de23f81e3a092860de43367fb4ea5503a53d95a5bc36d77e0c2", "nodes": [ { "balances": { "BTC": "0.49997703", "ETH": "0", "USDT": "16.62437479" }, "hash": "4087972e6b4bd3897c19f76b94b27db8eaf19f0d27d1b73e18297c18c850c3c1" }, { "balances": { "BTC": "0.40002297", "ETH": "0", "USDT": "12.18752303" }, "hash": "da14bd34c8d933781b8ec20a7e16109d0d650306b049da52c755437c4f7ec5e5" } ], "nonce": "b6f6ea7584742839791ab923f4f1980d7ca3ff7c5d3f3fd9cc2a18c598503553", "totalBalances": { "BTC": "0.9", "ETH": "0", "USDT": "28.81189782" } }
4. Descargar los archivos "Árbol de Merkle completo" en el reporte de responsabilidad y descomprime el archivo descargado para obtener un "archivo del árbol de Merkle completo".
Selecciona Descargar para obtener el reporte
Descarga la herramienta de verificación de código abierto de OKX (MerkleValidator)
Guarda la herramienta de verificación de código abierto de OKX (MerkleValidator) y el archivo de datos (merkle_proof_file.json) en la misma carpeta. full-liabilities-merkle-tree.txt) en la misma carpeta. En nuestro caso: colocamos la herramienta y el archivo de datos en la carpeta Descargas, con el nombre proof-of-reserves, como se muestra a continuación:
7. Ejecuta el comando y busca el directorio de la carpeta descargada. En nuestro caso, introduce el comando: cd ~/Descargas/proof-of-reserve
8. Escribe el siguiente comando y pulsa para iniciar la verificación:
Mac ./MerkleValidator --merkle_file full-liabilities-merkle-tree.txt --user_info_file merkle_proof_file.json
Windows MerkleValidator.exe --merkle_file full-liabilities-merkle-tree.txt --user_info_file merkle_proof_file.json
Nota: Si estás usando Mac y ves "no se pueden abrir las herramientas porque no se puede verificar el desarrollador", ve a Preferencias del sistema > Seguridad y privacidad > General > Haz clic en el bloqueo para realizar cambios > Permitir aplicaciones descargadas desde App Store y desarrolladores identificados
9. Comprueba el resultado Si se aprueba la verificación, el resultado Validación de la ruta del árbol de Merkle superada se mostrará a continuación:
Si la verificación falla, el resultado es Error en la validación de la ruta del árbol de Merkle se mostrará a continuación:
10. También puedes consultar el código de Herramienta de verificación de código abierto de OKX (MerkleValidator) y Definición del árbol de Merkle de OKX, escribe un programa tú mismo para verificar que tus activos están capturados por el árbol de Merkle construido a partir de la instantánea de auditoría, utilizando los datos de la ruta del árbol de Merkle recogidos en el paso 2.