Marchés
Spot
Futures
Finance
Promotion
Plus
Zone des débutants
Connectez-vous

Comment vérifier si mes actifs sont dans l'arbre de Merkle ?

Qu'est-ce que l'Arbre de Merkle
L'arbre de Merkle (Merkle Tree), également connu sous le nom d'arbre de hachage, est une structure de données et généralement un arbre binaire, qui calcule la valeur de hachage couche par couche, du nœud de la feuille au nœud supérieur de la racine d'une manière spécifique.
Définition de l'arbre de Merkle CoinEx
Informations sur les nœuds
Les informations stockées dans chaque nœud de l'arbre comprennent : 1. La valeur de hachage du noeud. 2. Le nombre de pièces couvertes par les snapshots des actifs de l'utilisateur (prenez BTC, ETH, USDT comme exemples).
Valeur du hachage{"BTC":"Balance BTC","ETH":"Balance ETH","USDT":"Balance USDT"}
3d101072de66342c711e369e1e98f48c89c412e7246918ae6466a5c72e73003d{"BTC":"1.023","ETH":"0.56","USDT":"20.2343322"}
Règles de hachage
Nœud feuille
hash = SHA256(nonce + balances)
Ex.
hash = SHA256('79b0319c0003e6b5f149525a6677f1bcb7851e9bd7bf05c7089576d38dd95efa{"BTC":"1.023","ETH":"0.56","USDT":"20.2343322"}')
Parmi eux, CoinEx attribuera un nonce unique à chaque utilisateur, qui peut être interrogé dans les données d'audit, tandis que les "soldes" sont une chaîne json composée du nombre de pièces couvertes par le snapshot des actifs de l'utilisateur, comme : {"BTC" : "1.023", "ETH" : "0", "USDT" : "20.2343322"}, suivez les règles ci-dessous :
1. La chaîne json est dans un format compact sans nouvelles lignes ni espaces.
2. Supprimez le 0 non valide à la fin du montant de la pièce, et conservez 8 chiffres de précision.
3. Les noms des pièces sont triés par ordre alphabétique.
Nœud parent
hash = SHA256(h1 + h2 + balances)
h1 : La valeur de hachage du nœud inferieur de gauche
· h2: La valeur de hachage du nœud inferieur du côté droit
· balances: Les soldes du Child Node de gauche + les soldes du Child Node de droite, en additionnant les soldes du même actif.
Ex.
Child Node à gauche :
3d101072de66342c711e369e1e98f48c89c412e7246918ae6466a5c72e73003d{"BTC":"1.023","ETH":"0.56","USDT":"20.2343322"}
Nœud enfant à droite :
e9fcf13c9cdae1dfab4c2ea60d8acb62603b5f8430e265bf4b3f901fc4e45fe9{"BTC":"0.48","USDT":"100.24534"}
Hash du nœud parent :
hash = SHA256(3d101072de66342c711e369e1e98f48c89c412e7246918ae6466a5c72e73003d3d101072de66342c711e369e1e98f48c89c412e7246918ae6466a5c72e73003d{"BTC":"1.023","ETH":"0.56","USDT":"20.2343322"})
Règles du nœud de remplissage
La construction d'un arbre de Merkle complet (binaire complet) nécessite 2^n données de nœud de feuille, cependant, le nombre réel de données peut ne pas être suffisant ou pair. Dans ce cas, si un noeud k n'a pas de noeud frère, le remplissage génère automatiquement un noeud frère k', et ce noeud frère hash(k') = hash(k), et le nombre de pièces dans le noeud k' sera entièrement fixé à zéro.
Par exemple, le noeud K :
3d101072de66342c711e369e1e98f48c89c412e7246918ae6466a5c72e73003d{"BTC":"1.023","ETH":"0.56","USDT":"20.2343322"}
Hash du nœud parent :
hash = SHA256(3d101072de66342c711e369e1e98f48c89c412e7246918ae6466a5c72e73003d3d101072de66342c711e369e1e98f48c89c412e7246918ae6466a5c72e73003d{"BTC":"1.023","ETH":"0.56","USDT":"20.2343322"})
Règles de validation
1. Principes de validation : Selon la définition de l'arbre de Merkle, la valeur de hachage du nœud parent est calculée à partir du nœud feuille de l'utilisateur lui-même, jusqu'à obtenir la valeur de hachage du nœud racine, et la valeur de hachage du nœud racine est comparée. Si les deux sont égales, la validation est approuvée ; dans le cas contraire, la validation échoue.
2. Par exemple, le texte json suivant calcule d'abord le hachage du nœud feuille sur la base des données personnelles, puis calcule le hachage du nœud parent avec chaque nœud frère sur le chemin, et le hachage de nœud résultant doit être égal au hachage du nœud racine, avec les équilibres équivalents. (Veuillez noter qu'il n'y a pas de nœud frère lorsque le nœud frère affiche vide, et le hachage du nœud parent est calculé selon les règles du nœud de remplissage)
Données du chemin de l'arbre de Merkle (texte json) :
{
    "root": {
        "balances": {
            "CET": "14373493.24153457",
            "ETH": "104543541.61407674",
            "USDC": "2419089.97192761",
            "USDT": "4836955256.81519091"
        },
        "hash": "c01a6c3b0fedde2a066f8a38968e40420c0b0742bb4ccda571a4349fb1c64f18"
    },
    "self": {
        "balances": {
            "USDT": "3990000"
        },
        "nonce": "9885b5df557ba3cec41a74347719a8a37d5792a1cf7f0e216510d60dd1b1fc95"
    },
    "path": [
        {
            "balances": {
                "CET": "10000.01994324",
                "USDC": "40000",
                "USDT": "1004.13066254"
            },
            "hash": "01f94322a74bee4431b809406997cee575bed3b85ef36b4ba3b2ff9dd140f99a",
            "pos": "left"
        },
        {
            "balances": {
                "CET": "1000",
                "ETH": "0.90765244",
                "USDT": "143151.30772787"
            },
            "hash": "c99051749a3a83e60d1338454382044f9d7236928cfdc4b7fca1a7cc7450c7a6",
            "pos": "left"
        },
        {
            "balances": {
                "CET": "548800.95984406",
                "ETH": "50000.00001068",
                "USDC": "9986.281143",
                "USDT": "62752.29303779"
            },
            "hash": "173a9a7ef562f1b537def5d58167d7402c8e268b1423c5f8e1d806cd0c524344",
            "pos": "left"
        },
        {
            "balances": {
                "CET": "10023.01105146",
                "ETH": "9900.74253772",
                "USDT": "22516389.78119662"
            },
            "hash": "d79bd6c7a1536db199747061c119f98f86d99f9c7a8350fe63c6314ef3e8a24c",
            "pos": "right"
        },
        {
            "balances": {
                "CET": "5393361.46905487",
                "ETH": "23711.51394236",
                "USDC": "201404.61667184",
                "USDT": "230211961.3159725"
            },
            "hash": "115551fd3f85328d32858cc6d1bea9c1274984b0f8abba8140752f9d55e48277",
            "pos": "left"
        },
        {
            "balances": {
                "CET": "1554146.8440552",
                "ETH": "100.0040003",
                "USDC": "160006.6",
                "USDT": "11201397.46983634"
            },
            "hash": "7b92897456af56f473b75d5e009be090726ad64694fd27971dc46f2631db51d8",
            "pos": "right"
        },
        {
            "balances": {
                "CET": "4712634.46013087",
                "ETH": "91469.27009748",
                "USDC": "1002463.00913027",
                "USDT": "830313049.62523756"
            },
            "hash": "0905786187f2c582902b84175813b063c31755a2930b25dee7ba005f7c8a7cf9",
            "pos": "right"
        },
        {
            "balances": {
                "CET": "2143526.47745487",
                "ETH": "104368359.17583576",
                "USDC": "1005229.4649825",
                "USDT": "3738515550.89151969"
            },
            "hash": "41dc5da7477fab3ac6fe233a1bf1bec0d26d0f5dea679b5d91f2f09c488fcb2f",
            "pos": "right"
        }
    ]
}
Comment valider
1. Connectez-vous à votre compte CoinEx, cliquez sur "Preuve de réserve", entrez dans la page, et cliquez sur "Copier mon audit".
2. Collez les données d'audit copiées dans un fichier texte, tel que merkle_proof_file.json.
3. Téléchargez [l'outil de vérification open source ]fourni par CoinEx.
4. Dézippez l'outil de validation, et mettez le fichier décompressé et merkle_proof_file.json dans le même dossier, tel que ~/Downloads/proof-of-reserves
5. Ouvrez le terminal (MacOS : Terminal App ; Windows : Terminal ou PowerShell), entrez cd ~/Downloads/proof-of-reserves et allez dans le répertoire ci-dessus.
6. Saisissez la commande suivante pour valider vos données :
MacOS / Linux:
./proof-of-reserves -f merkle_proof_file.json
Windows:
./proof-of-reserves.exe -f merkle_proof_file.json
7. Si la validation est approuvée, l'invite affichera Validation du chemin de l'arbre de Merkle réussie. Dans le cas contraire, l'invite affichera le message suivant : " La validation du chemin de l'arbre de Merkle a échoué ".
Vous pouvez également vous référer aux instructions données dans ce document et au [Code source de l'outil de vérification open source] pour créer votre propre outil de vérification.