خرید رمزارز
اطلاعات بازار
معاملات
فیوچرز
خدمات مالی
رویداد
بیشتر
ورود

چگونه می توان بررسی کرد که آیا دارایی های من در درخت مرکل است یا خیر

درخت مرکل چیست
درخت مرکل (درخت مرکل)، که به عنوان درخت هش شناخته می‌شود، یک ساختار داده و معمولاً یک درخت باینری است که مقدار هش را لایه به لایه، از نود برگ تا نود ریشه بالایی با یک روش منحصر به فرد محاسبه می‌کند.
تعریف درخت مرکل کوینکس
اطلاعات نود
اطلاعات ذخیره شده در هر نود درختی شامل موارد زیر است: 1. مقدار هش نود. 2. تعداد رمزارز هایی که توسط اسنپ شات دارایی های کاربر پوشش داده می شوند (به عنوان مثال BTC، ETH، USDT را در نظر بگیرید).
مقدار هش{"BTC":"موجودی BTC","ETH":"موجودی ETH","USDT":"موجودی USDT"}
3d101072de66342c711e369e1e98f48c89c412e7246918ae6466a5c72e73003d{"BTC":"1.023","ETH":"0.56","USDT":"20.2343322"}
قوانین هش
نود برگ
hash = SHA256(nonce + balances)
به عنوان مثال:
hash = SHA256('79b0319c0003e6b5f149525a6677f1bcb7851e9bd7bf05c7089576d38dd95efa{"BTC":"1.023","ETH":"0.56","USDT":"20.2343322"}')
در میان آنها، کوینکس یک نانس منحصر به فرد را به هر کاربر اختصاص می دهد، که می تواند در داده های حسابرسی پرس و جو شود، در حالی که "موجودی ها" یک رشته json است که از تعداد رمزارزهای های تحت پوشش اسنپ شات دارایی های کاربر تشکیل شده است، مانند:{"BTC":"1.023","ETH":"0","USDT":"20.2343322"}، قوانین زیر را دنبال کنید:
۱. رشته json در قالب فشرده و بدون خطوط جدید و فاصله است.
۲. 0 نامعتبر را در انتهای مقدار رمزارز را حذف کنید و ۸ رقم دقت داشته باشید
۳. نام رمزارزها بر اساس حروف الفبا مرتب شده اند.
نود مادر
hash = SHA256(h1 + h2 + balances)
h1: مقدار هش نود فرزند سمت چپ
h1: مقدار هش نود فرزند سمت راست
· موجودی: موجودی نود بچه در سمت چپ + موجودی نود بچه در سمت راست، با جمع موجودی همان دارایی
به عنوان مثال:
نود بچه در سمت چپ:
3d101072de66342c711e369e1e98f48c89c412e7246918ae6466a5c72e73003d{"BTC":"1.023","ETH":"0.56","USDT":"20.2343322"}
نود بچه در سمت راست:
e9fcf13c9cdae1dfab4c2ea60d8acb62603b5f8430e265bf4b3f901fc4e45fe9{"BTC":"0.48","USDT":"100.24534"}
هش نود مادر:
hash = SHA256(3d101072de66342c711e369e1e98f48c89c412e7246918ae6466a5c72e73003d3d101072de66342c711e369e1e98f48c89c412e7246918ae6466a5c72e73003d{"BTC":"1.023","ETH":"0.56","USDT":"20.2343322"})
قوانین پرکننده نود
ساختن یک درخت مرکل کامل (باینری کامل) به 2^n داده نود برگ نیاز دارد، با این حال، تعداد واقعی داده ها ممکن است کافی نباشد. در این مورد، اگر یک نود k یک نود خواهر یا برادر نداشته باشد، پر کننده به طور خودکار یک نود پرکننده 'k ایجاد می کند، و در این نود خواهر یا برادر hash(k') = hash(k)، و تعداد رمزارزها در نود 'k به طور کامل صفر خواهد شد.
به عنوان مثال. گره K:
3d101072de66342c711e369e1e98f48c89c412e7246918ae6466a5c72e73003d{"BTC":"1.023","ETH":"0.56","USDT":"20.2343322"}
هش نود مادر:
hash = SHA256(3d101072de66342c711e369e1e98f48c89c412e7246918ae6466a5c72e73003d3d101072de66342c711e369e1e98f48c89c412e7246918ae6466a5c72e73003d{"BTC":"1.023","ETH":"0.56","USDT":"20.2343322"})
قوانین اعتبارسنجی
۱. اصول اعتبار سنجی: طبق تعریف درخت مرکل، مقدار هش نود مادر از نود برگ خود کاربر محاسبه می شود تا زمانی که مقدار هش نود ریشه به دست آید و بعد با مقدار نود ریشه مقایسه می شود. اگر این دو برابر باشند، تأییدیه معتبر است. درغیر این صورت، اعتبارسنجی ناموفق است.
۲. برای مثال، متن json زیر ابتدا هش نود برگ را بر اساس داده های خود محاسبه می کند و سپس هش نود مادر را با هر نود خواهر یا برادر در مسیر محاسبه می کند و نتیجه هش نود پایانی باید با هش نود ریشه برابر باشد. (لطفاً توجه داشته باشید که وقتی نود خواهر یا برادر خالی نمایش داده می شود، به این معناست که هیچ نود خواهر یا برادر وجود ندارد و هش نود مادر طبق قوانین پرکننده نود محاسبه می شود)
داده های مسیر درخت مرکل (متن 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"
        }
    ]
}
نحوه اعتبارسنجی
۱. وارد حساب کوینکس خود شوید، روی "گواهی ذخایر" کلیک کنید، وارد صفحه جدید شوید و روی "کپی کردن حسابرسی من" کلیک کنید.
۲. داده های حسابرسی کپی شده را در یک فایل متنی، مانند merkle_proof_file.json جایگذاری کنید.
۳. دانلود [ابزار امنیتی اپن سورس] ارایه شده توسط کوینکس
۴. ابزار اعتبارسنجی را از حالت فشرده خارج کنید و فایل از حالت فشرده خارج شده و «merkle_proof_file.json» را در یک پوشه مانند «~/Downloads/proof-of-Reserves» قرار دهید.
۵. برنامه ترمینال (MacOS: Terminal App؛ Windows: Terminal یا PowerShell) را باز کنید، «cd ~/Downloads/proof-of-reserves» را وارد کنید و به دایرکتوری بالا بروید.
۶. دستور زیر را برای اعتبارسنجی داده های خود وارد کنید:
MacOS / Linux:
./proof-of-reserves -f merkle_proof_file.json
Windows:
./proof-of-reserves.exe -f merkle_proof_file.json
۷. اگر اعتبار سنجی تأیید شود، اعلان به صورت «Merkle tree path validation passed» نمایش داده می شود. در غیر این صورت، اعلان به صورت «Merkle tree path validation failed» نمایش داده می شود.
شما همچنین می‌توانید به دستورالعمل‌های ارائه‌شده در این سند و [کد منبع ابزار تأیید اوپن سورس ] به منظور ایجاد ابزار تأیید خود مراجعه کنید.