Comment vérifier les actifs dans l’arbre de Merkle OKX (Arbre de Merkle V1) ?
Qu’est-ce qu’un arbre de Merkle ?
Un arbre de Merkle (ou arbre de hachage) est une structure de données présentant généralement une arborescence binaire. Celui-ci fait appel à des fonctions prédéfinies pour calculer la valeur de hachage des nœuds de façon ascendante, jusqu’au nœud racine au sommet de l’arbre.
Informations des nœuds
Chaque nœud de l’arbre contient les informations suivantes :
La valeur de hachage du nœud.
Le montant en devise crypto d’un utilisateur enregistré lors de l’instantané d’audit (BTC, ETH ou USDT, par exemple).
valeur de hachage,{"BTC":"BTC amount","ETH":"ETH amount","USDT":"USDT amount"} be324cf06aee0616b4ec20c3,{"BTC":"1.023","ETH":"0","USDT":"20.2343322"}
Règle de hachage
Nœuds feuilles (hors nœuds de remplissage)
hash=SHA256(nonce+balances)
OKX attribuera un nonce unique à chaque utilisateur, qui peut être trouvé sur la page d’audit de l’utilisateur ; balances est une chaîne json composée des actifs des utilisateurs et leurs montants, capturés par l’instantané d’audit, par exemple : {"BTC":"1.023","ETH":"0","USDT":"20.2343322"} (Remarque : les zéros en bout de nombre sont retirés et les nombres sont exprimés avec 8 décimales pour plus de précision)
Nœuds parents
Hachage d’un nœud parent = SHA256(h1 + h2 + (montant en BTC h1 + montant en BTC h2) + (montant en ETH h1 + montant en ETH h2) + (montant en USDT h1+ montant en USDT h2) + hauteur)
h1 = Hachage du nœud enfant gauche du nœud actuel ; h2 = Hachage du nœud enfant droit du nœud actuel ; audit_id = ID de l’audit en cours ; height= Hauteur du nœud h1 (ou h2) Définition de la hauteur : hauteur du nœud feuille inférieur = 1 ; hauteur d’un nœud parent = hauteur de son nœud enfant + 1 ; le nœud racine correspond à la hauteur maximale.
Règle des nœuds de remplissage
La création d’un arbre de Merkle complet (entièreté de l’arborescence binaire) demande 2^n nœuds feuilles. Toutefois, les données réelles peuvent ne pas répondre à ces exigences et être en nombre impair. Le cas échéant, et si le nœud k n’a pas de nœuds frères, un nœud frère k’ sera automatiquement généré. Ce dernier fera office de nœud de remplissage. Ainsi, hachage(k’) = hachage(k), les montants d’actifs étant fixés à 0 pour toutes les devises. Imaginons
Hachage | Soldes |
---|---|
h1 | {"BTC": 1, "ETH": 1,"USDT": 1} |
h2 | {"BTC": 1, "ETH": 2,"USDT": 3} |
h3 | {"BTC": 1, "ETH": 2,"USDT": 4} |
Dans le cadre de cet exemple, le nœud de remplissage h4 = h3, et les soldes sont stockés dans le nœud sous la forme {"BTC": 0, "ETH": 0,"USDT": 0} comme le montre l’image ci-dessous (nœud vert) :
Hachage d’un nœud parent = SHA256(h1 + h2 + (montant en BTC h1 + montant en BTC h2) + (montant en ETH h1 + montant en ETH h2) + (montant en USDT h1+ montant en USDT h2) + hauteur). Donc : h6 = SHA256 (h3 + h4 + (1 + 0) + (2 + 0) +(4 + 0) + hauteur)
Comment vérifier que mes actifs sont inclus dans l’arbre de Merkle OKX ?
Théorie de vérification
En se basant sur la définition de l’arbre de Merkle OKX, il est possible de calculer la valeur de hachage d’un nœud parent de façon ascendante en partant de ses nœuds enfants gauche et droit, jusqu’à obtenir la valeur de hachage du nœud racine. Vous pouvez alors comparer la valeur de hachage du nœud racine ainsi calculée avec celle que vous avez obtenue à partir du nœud racine du chemin de l’arbre de Merkle. Si les deux sont identiques, la vérification est un succès. Dans le cas contraire, c’est un échec.
Revenons à notre exemple : si l’on se réfère à l’image et au texte JSON ci-dessous, en se basant sur le nœud h3 propre à l’utilisateur et le nœud frère h4 fourni, il est possible de calculer le hachage de leur nœud parent h6. Et ainsi de suite avec le nœud h6 et son nœud frère h5, qui permettent de calculer le hachage de leur nœud parent h7. Il suffit ensuite de comparer la valeur de hachage de h7 avec la valeur du nœud racine de l’arbre de Merkle et de déterminer si elles sont identiques ou non pour terminer le processus de vérification.
Texte JSON des données du chemin de l’arbre de Merkle :
{ "self": { "balances": { "BTC": "1", "ETH": "1", "USDT": "1" }, "nonce": "aa8442ee975df827dc14e527e3ea01db71fe5a6cfe867d77f6a4148fc492743c", "hash": "ca080cc4b04630c9e667e3177be7b093af743101a300cd737dd2da6dbe801be6", "type": 1, "height": 1 }, "path": [{ "balances": { "BTC": "1", "ETH": "2", "USDT": "3" }, "hash": "7d16e6b5203299b85498aa35b964c83903a933d549f99ff3ca8b20c243c2be3e", "type": 2, "height": 1 }, { "balances": { "BTC": "1", "ETH": "2", "USDT": "4" }, "hash": "4d6376b3a51693be961dd402b620c3f2536cb3f7275629fa23e2d1c6c7b319db", "type": 2, "height": 2 }, { "balances": { "BTC": "3", "ETH": "5", "USDT": "8" }, "hash": "af1787033e8d32d600e2e40dc616c1f8d4271e1c182ed57b6e9585e1ac5aa959", "type": 3, "height": 3 }] }
Étapes de vérification
Pour vérifier si le solde d’actifs de votre compte a été inclus sous forme de feuille de Merkle, connectez-vous à votre compte OKX, cliquez sur Actifs rendez-vous dans Audits pour consulter les derniers audits. Cliquez sur Afficher les détails pour afficher vos données d’audit
Vous pouvez également vérifier vous-même que vos actifs figurent dans l’arbre de Merkle, en suivant la procédure indiquée dans notre guide. Pour obtenir les données nécessaires à une vérification manuelle, cliquez sur Copier les données
Sélectionner Copier les données pour le processus de vérification manuelle
Après avoir cliqué sur ce bouton, ouvrez un éditeur de texte (le bloc-notes, par exemple), collez-y ces données et enregistrez le tout sous forme de fichier JSON.
Étapes à suivre :
Sur Mac :
Ouvrez le terminal et saisissez la commande touch merkle_proof_file.json pour créer un fichier JSON. Par défaut, le fichier est enregistré sur le bureau
Pour le retrouver, vous pouvez ouvrir le Finder et rechercher merkle_proof_file.json. Ouvrez le fichier JSON, collez les données copiées et sauvegardez
Sur Windows :
Faites un double-clic pour ouvrir l’éditeur de texte (le bloc-notes, par exemple), collez-y les données et enregistrez le tout sous forme de fichier JSON. Dans le cas présent, nous nommerons le fichier merkle_proof_file.json. Voici à quoi ressemble le texte JSON des données du chemin de l’arbre de Merkle :
{ "self": { "balances": { "BTC": "1", "ETH": "1", "USDT": "1" }, "nonce": "aa8442ee975df827dc14e527e3ea01db71fe5a6cfe867d77f6a4148fc492743c", "hash": "ca080cc4b04630c9e667e3177be7b093af743101a300cd737dd2da6dbe801be6", "type": 1, "height": 1 }, "path": [{ "balances": { "BTC": "1", "ETH": "2", "USDT": "3" }, "hash": "7d16e6b5203299b85498aa35b964c83903a933d549f99ff3ca8b20c243c2be3e", "type": 2, "height": 1 }, { "balances": { "BTC": "1", "ETH": "2", "USDT": "4" }, "hash": "4d6376b3a51693be961dd402b620c3f2536cb3f7275629fa23e2d1c6c7b319db", "type": 2, "height": 2 }, { "balances": { "BTC": "3", "ETH": "5", "USDT": "8" }, "hash": "af1787033e8d32d600e2e40dc616c1f8d4271e1c182ed57b6e9585e1ac5aa959", "type": 3, "height": 3 }] }Téléchargez l’outil de vérification open source d’OKX (MerkleValidator)
Placez l’outil de vérification open source d’OKX (MerkleValidator) et le fichier de données (merkle_proof_file.json) dans le même dossier. Dans notre cas, nous mettons l’outil ainsi que le fichier de données dans le dossier Téléchargements (nommé proof-of-reserves), comme indiqué ci-dessous :
Ouvrez l’application de terminal (Terminal sur Mac, invite de commande sur Windows)
Exécutez la commande et localisez le répertoire du dossier de téléchargement. Dans le cas présent, il s’agira de la commande suivante : cd ~/Téléchargements/proof-of-reserves
Saisissez la commande ci-dessous et appuyez sur Entrée pour lancer la vérification : Sur Mac : ./MerkleValidator --merkle_proof_file merkle_proof_file.json Sur Windows : MerkleValidator.exe --merkle_proof_file merkle_proof_file.json Remarque : Si vous êtes sur Mac et que vous recevez le message d’erreur « Impossible d’ouvrir [l’outil] car le développeur ne peut pas être vérifié », rendez-vous dans Préférences système > Sécurité et confidentialité > Sécurité > Sélectionnez App Store et développeurs identifiés dans la section Sécurité pour autoriser [l’outil]
Vérifier le résultat Si les données passent la vérification avec succès, le message Merkle tree path validation passed (validation du chemin de l’arbre de Merkle réussie) s’affiche comme ci-après :
En cas d’échec de la vérification, vous verrez s’afficher le message Merkle tree path validation failed (échec de la validation du chemin de l’arbre de Merkle) ci-dessous :
Vous pouvez également vous inspirer du code de l’outil de vérification open source d’OKX (MerkleValidator) et de la définition de l’arbre de Merkle OKX pour créer votre propre programme. Dans ce cas, vous utiliserez les données obtenues à l’étape 2 pour vérifier que vos actifs sont bien enregistrés dans l’arbre de Merkle issu de l’instantané d’audit