در دنیای بلاکچین، شبکههای غیرمتمرکز برای حفظ یکپارچگی و امنیت خود باید از تکنولوژی و الگوریتمهای خاصی استفاده کنند. یکی از این تکنولوژیها، درخت مرکل است.
درک این الگوریتم در نگاه اول ممکن است ترسناک باشد چرا که اغلب از سیستمهای پیچیدهای استفاده میکنند که بیشتر شبیه به جادو است.
درخت مرکل که نام آن را در بسیاری از بلاکچینهای امروزی مشاهده میکنیم، یکی از ابزارهایی است که در دنیای بلاکچین و ارز دیجیتال بیتکوین، کارایی خود را به اثبات رسانده است.
عناوین مطلب:
در ادامه این مقاله شما با ماهیت درخت مرکل در بلاکچین و کاربردهای آن آشنا خواهید شد. البته تا حد ممکن از آوردن اصطلاحات فنی پیچیده پرهیز خواهد شد با این حال گاها اجتناب ناپذیر است.
درخت مرکل (Merkle-Tree) چیست؟
درخت مرکل در علوم کامپیوتر به عنوان یک ساختار داده برای تایید اطلاعات و همگام سازی استفاده میشود.
در دنیای بلاکچینها، درخت مرکل میتواند رمزنگاری قدرتمندی را برای کریپتو کارنسیهای فعال به ارمغان داشته باشد.
قبل از این که به تعریف فنی با اصطلاحات ریاضی پیچیده آن بپردازیم لازم است به کلیات درخت مرکل (Merkle Tree) نگاهی داشته باشیم.
در کریپتو کارنسیها، درخت مرکل یک پایگاه داده است که برای جداسازی ایمن دادههای بلاکهای زنجیره به کار میرود.
درخت مرکل این اطمینان را به ما میدهد که دادههای یک بلاک مورد دستکاری و ویرایش قرار نگرفته و آسیبی به آنها وارد نشده است.
با توجه به ماهیت دنبالهدار دادههای زنجیره بلاکچین، درخت مرکل حتی به ما میگوید آیا دادهای از بین رفته است یا خیر.
به طور خلاصه، درخت مرکل در بلاکچین به ما کمک میکند تا با مدیریت موثر دادهها بتوانیم یک تراکنش مشخص را بدون دانلود کل بلاکچین مورد نظر تایید کنیم.
این روش کاملا قابل اتکا و ایمن است که نتیجه استفاده از توابع رمزنگاری هش در این ساختار داده است.
اکنون باید به تعریف دقیقتر آن از نظر آکادمیک نگاه کنیم. درخت مرکل یک ساختار داده ریاضی برپایه Hash است که با خلاصه داده تراکنشهای موجود در یک بلاک مطابقت دارد.
درخت مرکل روشی است که میتوان دادهها را با دقت بالا در یک محیط غیرمتمرکز مورد بررسی قرار داد.
در نتیجه چنین عملکردی، درخت مرکل در بلاکچین میتواند دادههای زنجیره را به شکل ایمنتر و موثرتری مورد استفاده قرار دهد.
این ساختار دادهای معمولا در شبکههای همتا به همتا (P2P) استفاده میشود چرا که دادههای به اشتراک گذاشته شده باید به صورت مستقل مورد تایید و ارزیابی قرار گیرند.
سازنده درخت مرکل کیست؟
آقای Ralph Merkle، یک دانشمند کامپیوتر که به خاطر کار خود در زمینه رمزنگاری برپایه کلید عمومی شهرت زیادی کسب کرده است در یک مقاله در سال 1987، این ساختار داده را اختراع کرد.
او در این مقاله، درخت مرکل را تحت عنوان “یک تابع برپایه امضای دیجیتال با تکیهبر رمزنگاری متعارف” معرفی کرد. جالب است بدانید الگوریتمهای کریپتوگرافی هش نیز توسط او توسعه یافتند.
بیشتر بخوانید: کریپتوگرافی (Cryptography) چیست و چه کاربردی در کریپتو دارد؟
ساختار درخت مرکل چگونه است؟
در بین برنامه نویسان کامپیوتر گاهی از درخت مرکل با عنوان درخت هش (Hash Tree) یاد میشود که یک ساختار درختی باینری دارد.
در این ساختار، هش دادههای تراکنشها در ردیف کف ساختار قرار میگیرند که به آنها Leaf Nodes گفته میشود.
هشهای بین این تراکنشها نیز با نام Non-Leaf Nodes شناخته میشود. در بالای این درخت نیز یک هش قرار گرفته است که Root نام دارد.
با این که عمده پیاده سازیهای درخت مرکل به صورت باینری(هر نود این درخت شامل دو نود زیرمجموعه است) اجرا میشود اما گاهی اوقات میتوانند نودهای زیرمجموعه بیشتری داشته باشند.
بیشتر بخوانید: فول نود (Full Node) چیست و چه مزایایی دارد؟
وقتی به ساختار درخت مرکل نگاه کنید، متوجه میشویم که همه تراکنشها به صورت گروههای جفتی طبقهبندی شدهاند.
هر جفت تراکنش زیر یک نود با هش مخصوص قرار گرفته است. در این درخت، تراکنشهای یک بلاک، پایینترین لایه آن را شکل میدهند و براساس تراکنشهای اضافه شده، سطوح بالایی به صورت پلهای شکل میگیرد.
بیشتر بخوانید: راهنمای جامع انواع نود بیتکوین و وظیفه آنها در شبکه
در ادامه به بررسی هر یک از نودهای تشکیل دهنده این درخت میپردازیم:
نودهای Leaf
هر کدام از این نودها در واقع هشهای هر تراکنش در یک بلاک است که با عنوان شناسه تراکنش (TXID) شناخته میشود.
از این هش برای جستجوی یک تراکنش در اکسپلورر یک شبکه مانند بیتکوین یا اتریوم استفاده میشود.
نودهای Non-Leaf
برای ایجاد یک لایه نودهای Non-Leaf در بالای نودهای Leaf، نودهای زیرمجموعه به صورت جفتی هش میشوند. برای مثال در تصویر قبل، هش A و B، تشکیل دهنده هش نود Non-Leaf هستند.
دلیل این که به آنها Non-Leaf گفته میشود این است که هشهای این نودها شامل شناسه تراکنش نیست. در لایه نودهای Non-Leaf، تعداد آنها نصف نودهای Leaf است.
وقتی به سمت بالای درخت مرکل در بلاکچین حرکت میکنیم، نودهای Non-leaf نیز به صورت جفتی هش میشوند.
در نتیجه چنین ساختاری، با حرکت به سمت بالا، تعداد نودهای موجود نصف میشود تا جایی که فقط دو نود Non-Leaf نماینده کل درخت خواهند بود.
این دو نود، ریشه درخت مرکل را ایجاد میکنند که آخرین هش این درخت است.
ریشه (Root) درخت مرکل
بلاکچین بیتکوین را در نظر بگیرید، در این شبکه، هشهای همه تراکنشها با هم ترکیب میشوند و یک هش یکتا ایجاد میکنند که این هش نیز در هدر هر بلاک ذخیره میشود.
بنابراین در هر بلاک زنجیره بیتکوین، ما یک هش یکتا داریم که مانند امضای دیجیتال همه تراکنشهای موجود در آن بلاک خاص است و قابل تغییر نیست.
این ساختار دقیقا همان ریشه درخت مرکل است که به آن هش ریشه نیز گفته میشود.
نودهای Leaf که حاوی شناسه (یا همان هش) تراکنشهای شبکه بیتکوین هستند از نظر جایگاه در کف این درخت قرار دارند که میتوان با تکیهبر ریشه درخت آنها تایید کرد.
فرض کنید یکی از ماینرهای بیتکوین یکی از بلاکهای زنجیره را دستکاری کند. مثلا یک تراکنش با وجه 10 بیتکوین به مقصد کیف پول خود ایجاد کند.
در این حالت، وقتی ریشه درخت مرکل (هدر بلاک) را با هشهای داخل هر بلاک مطابقت دهیم، میتوان دستکاری شدن آن بلاک را به راحتی تشخیص داد.
به این دلیل که مجموع هشهای تراکنشهای آن بلاک، دیگر هش ریشه درخت مرکل را تولید نمیکند و نتیجه متفاوت است.
قبلتر گفتیم درخت مرکل معمولا از نوع باینری است. اما سیستم چیدمان باینری چه اهمیتی دارد؟
در سیستم باینری دو دویی، نه تنها نودهای زیر مجموعه جفت است بلکه تعداد کل آنها نیز همیشه باید زوج باشد. در غیر این صورت نمیتوان هشهای لایههای بالا را به درستی ایجاد کرد.
وقتی تعداد نودهای Leaf درخت مرکل فرد باشد، هر چه به سمت ریشه حرکت کنیم، هش قبلی دوباره تکرار میشود و این موضوع کارایی ساختار درخت را از بین میبرد. اما راهکار چیست؟
در شبکههای بلاکچینی مانند بیتکوین، هر گاه تعداد تراکنشهای درخت فرد باشد، هش قبلی برای تشکیل عدد زوج دوبل میشود.
درخت مرکل چگونه کار میکند؟
اکنون که با ساختار درخت مرکل در بلاکچین آشنا شدهایم، لازم است بدانیم این ساختار اطلاعات چگونه کار میکند و چرا در بلاکچین اهمیت زیادی دارد.
در هنگام مطالعه درخت مرکل در بلاکچین باید بدانید هدف اصلی این ساختار داده صرفا تقسیم دادههای بزرگ به قطعات کوچکتر است.
در اینجا نیز به جای بررسی کل یک بلاکچین چند ترابایتی، هر بلاک تراکنشهای آن مورد بررسی و تایید قرار میگیرد.
ساختار درختی، هر تراکنش را با ایجاد یک اثر انگشت کوچک مورد بررسی قرار میدهد. این موضوع سهولت تایید در دسترس بودن تراکنشهای یک بلاک را برای کاربران به همراه دارد.
در ساختار درخت مرکل، هشهای تراکنشها به صورت جفتی کنار هم قرار میگیرند و سپس با ترکیب آنها، تا جایی سطوح به سمت بالا حرکت میکند که فقط یک هش باقی بماند. به هش آخر، ریشه مرکل گفته میشود.
به خاطر داشته باشید درخت مرکل از پایین به بالا ایجاد میشود. در پایین این درخت، تراکنشهای یک بلاک قرار دارند که هر کدام از آنها دارای یک هش یکتا است.
هر هش تراکنش که در اینجا به آن نود Leaf گفته میشود بیانگر دادههای تراکنش است.
در سطوح بالاتر، دیگر خبری از هش تراکنشها نیست و فقط نودهای Non-Leaf قرار دارند که از ترکیب باینری جفتی هشها تشکیل شدهاند.
برای درک بهتر درخت مرکل به این مثال و نحوه چیدمان تراکنشها توجه کنید. فرض کنید ما یک درخت مرکل داریم که در آن 4 تراکنش وجود دارد و از D0 تا D3 نام گذاری شدهاند:
هر تراکنش قبل از این که در یک نود Leaf ذخیره شود، یک هش یکتا از سوی شبکه دریافت میکند. زمانی که تراکنشهای مورد نظر ما هشهای خود را دریافت کنند، در ساختار مرکل آنها را از N0 تا N3 نام گذاری میکنیم.
اکنون ما چهار نود Leaf متوالی داریم که اگر آنها را به صورت جفت کنار هم قرار دهیم یک هش جدید از آنها ساخته میشود.
برای مثال با کنار هم قرار دادن هش N0 و N1، ما یک هش جدید با نام N4 دریافت میکنیم. اگر هش N2 و N3 کنار هم قرار گیرند نیز هش N5 ایجاد میشود.
اکنون ما دو هش از نوع Non-leaf داریم که باید برای به دست آوردن ریشه مرکل آنها را دوباره هش کنیم. یک بار دیگر با هش N4 و N5، به ریشه مرکل (Merkle Root) دست پیدا میکنیم.
در این مثال ما از نمونه دادههای کوچک استفاده کردهایم. در نمونههای واقعی، یک بلاک شبکه بیتکوین حاوی 2000 تراکنش است که به صورت جفتی کنار هم قرار میگیرند و روند مذکور ادامه پیدا میکند.
در نهایت ریشه مرکل مسئول خلاصه کردن دادههای مربوط به هشهای تراکنش هر بلاک است. مقدار ریشه مرکل در هدر بلاک ذخیره میشود که به آن هش بلاک نیز گفته میشود.
وقتی به کل این سیستم نگاه کنیم، متوجه خواهیم شد درخت مرکل تکنیکی است که میتواند یکپارچگی دادهها را به شکل قابل توجه حفظ کند.
در این سیستم اگر زمانی کوچکترین اطلاعات یک تراکنش تغییر کند، کل درخت مرکل نیز تغییر خواهد کرد که این موضوع دستکاری شدن یک بلاک را نشان میدهد.
درخت مرکل چه مزایایی دارد؟
درخت مرکل در بلاکچین و شبکههای غیرمتمرکز مزایای زیادی برای پلتفرمهای کریپتو کارنسی به همراه دارد که از جمله آن میتوان به امکان تایید تراکنشها و تشخیص دستکاری آنها اشاره کرد.
در ادامه به بررسی دقیق مزایای درخت مرکل خواهیم پرداخت. اما قبل از آن باید به خاطر داشته باشید این روش فقط مختلف ارزهای دیجیتال نیست و در بلاکچینهای غیرمتمرکز در حوزههای دیگر نیز کاربرد دارد:
فرایند تایید داده کارآمد
با توجه به ساختار درخت مرکل، حفظ یکپارچگی تراکنشها آسان است.
این موضوع به صورت عملی در تایید آنها نیز موثر است. به دلیل ساختار مناسب دادهها، در فرآیند تایید داده، از حافظه کمی استفاده میشود و قدرت محاسباتی مورد نیاز آن نیز به شکل چشمگیری کاهش پیدا میکند.
برای درک این موضوع ابتدا باید به منشا اصلی چالشهای بلاکچینها نگاهی بیندازیم.
هر بلاکچین از صدها هزار بلاک تشکیل شده است که با افزایش تعداد کاربران و فعالیت شبکه، نرخ تولید این بلاکها به شکل چشمگیری در حال رشد است.
هر بلاک نیز شامل چند هزار تراکنش است که بسته به معماری بلاکچین، تایید آنها دو چالش بزرگ را به همراه دارد. چالش اول حافظه مورد نیاز است.
فرض کنید برای این که یک نود بتواند اعتبار یک بلاک را مورد تایید قرار دهد، باید یک بلاک داده را به همراه همه دادههای آن در حافظه خود بارگیری کند که این موضوع به حافظه زیادی نیاز خواهد داشت.
در چالش دوم، پردازش چند هزار تراکنش یک بلاک برای تایید آنها بدون استفاده از یک ساختار داده مناسب، نیازمند قدرت پردازش زیادی است که این موضوع باعث افزایش هزینهها و عدم کارایی بلاکچین میشود.
اگر از ساختار درخت مرکل استفاده نکنیم، هر نود یک شبکه بلاکچینی باید به محض انتشار یک تراکنش جدید، یک نسخه کامل آن را در هارد درایو کامپیوتر خود ذخیره کند.
در این لحظه، هر نود پس از دریافت تراکنش جدید باید تراکنشهای موجود را خط به خط بررسی کند تا از مطابقت آن با نسخه ثبت شده در شبکه مطمئن شود.
بیشتر بخوانید: سازماندهی مجدد زنجیره (Chain Reorganization) در بلاکچین چیست؟
در این فرایند، نود اعتبارسنج مورد نظر ما باید از دنبالهدار بودن همه تراکنشهای ثبت شده و مطابقت آنها با نسخههای در دست خود مطمئن شود.
اگر یک نود، سایر تراکنشهای ثبت شده در بلاک را بررسی نکند، امنیت شبکه با خطر بزرگی مواجه خواهد شد.
در زمان نوشتن این مقاله، حجم بلاکچین بیتکوین 435 گیگابایت است و لحظه لحظه به حجم دادههای آن اضافه میشود.
اگر یک نود بخواهد با هر بار دریافت یک تراکنش جدید، کل تراکنشهای موجود در بلاک را مورد بررسی و مطابقت قرار دهد، به نظر شما چقدر قدرت سخت افزاری و پردازشی نیاز دارد؟
اما در طرف دیگر، با استفاده از درخت مرکل، ما یک راه حل کارآمد نه تنها برای کاهش حجم دادههای مورد ارزیابی داریم بلکه نحوه تحلیل و اعتبارسنجی آنها نیز ایمن خواهد بود.
با تکیهبر درخت مرکل، هر هش جدید وارد یک دفتر میشود که دادههای آن از شواهد و مدارک تایید آن جداسازی میشوند.
در این روش، یک نود اعتبارسنج بدون دانستن کل شناسه تراکنشهای موجود در یک بلاک، میتواند با تکیهبر ریشه درخت مرکل، شناسه یک تراکنش خاص را تایید کند.
بیشتر بخوانید: خروجی خرج نشده تراکنش (UTXO) چیست؟
اگر بخواهیم آن را به شکل سادهتر بیان کنیم، باید گفت در درخت مرکل، بدون این که کل دادههای مورد نیاز یک بلاک را دانلود کنید، میتوانید با بررسی هش سطوح بالاتر از وجود یک تراکنش مطمئن شوید.
در نتیجه چنین سیستمی، نیاز به قدرت پردازش به شکل چشمگیری کاهش پیدا کرده است.
افزایش سرعت پردازش
برای توزیع و پردازش تراکنشها معمولا دو روش کلی وجود دارد:
روش اول این است که هر تراکنش پس از تایید هر نود، به نود دیگری برای دریافت تایید ارسال شود. به این روش، تایید خطی گفته میشود.
مسلما این روش سرعت بلاکچین را به شکل قابل توجهی کاهش خواهد داد و دیگر نمیتوان انتظار انجام تراکنشهای با سرعت بالا را در آن داشت.
اما روش دوم این است که یک تراکنش در بین همه نودهای اعتبارسنج توزیع شود. در این حالت هر نود اعتبارسنج در هر لحظه بر روی تراکنش متفاوتی کار میکند که باعث سرعت بالای تایید تراکنشها خواهد شد.
روش دوم فقط با استفاده از درخت مرکل امکان پذیر است چرا که سرعت تایید دادهها در آن بسیار بالا است.
استفاده از کیف پول کریپتویی
روش تایید پرداخت ساده (SPV) به یک نود این امکان را میدهد تا بدون دانلود کردن کل بلاکچین یا دادههای یک بلاک، یک تراکنش را تایید کند. در اینجا نیز این روش فقط به لطف درخت مرکل امکان پذیر است.
لازم است بدانید با تکیهبر درخت مرکل ارائه یک نسخه سبک از کلاینت بلاکچین امکان پذیر شده است. امروز این نسخه را با نام کیف پول کریپتو میشناسند و از آن برای ارسال و دریافت تراکنشها استفاده میشود.
بیشتر بخوانید: بهترین کیف پولهای فول نود (Full Node) بیتکوین
تشخیص دستکاری
همانطور که قبلا نیز به این موضوع اشاره شده بود، ساختار هش مورد استفاده در درخت مرکل این امکان را به ماینرها (یا نودهای اعتبارسنج) یک شبکه میدهد تا به آسانی دستکاری تراکنشها را تشخیص دهند.
برای هر بلاک زنجیره بلاکچین، یک هش یکتا تولید میشود که برای ایجاد آن از ریشه درخت مرکل استفاده خواهد شد.
در یک بلاکچین، تراکنشها در بلاکها ذخیره میشوند و هر بلاک مانند هر حلقه زنجیر به دیگری متصل است. این اتصال از طریق هش بلاک قبل میسر میشود که میتوان ابتدا و انتهای زنجیره را تشخیص داد.
زمانی که اطلاعات یک تراکنش تغییر کند، هش یکتای آن نیز تغییر خواهد کرد. این موضوع بطور مستقیم باعث نامعتبر شدن بلاک حاوی تراکنش خواهد شد، زیرا هش نهایی با هش موجود در هدر بلاک ریشه مرکل تطابق ندارد.
اگر نود مورد نظر این خطا را نادیده بگیرد، هش بلاک بعدی نیز از روی هش این بلاک دستکاری شده تولید میشود که بیانگر نامعتبر شدن زنجیره بلاکها یا بلاکچین خواهد شد.
زمانی که تعدادی از نودها این روند اشتباه را ادامه دهند، شبکه بلاکچین دچار فورک خواهد شد اما این موضوع بحث اصلی این مقاله نیست اما دانستن آن به درک روند فورک بلاکچینها و تغییر زنجیره کمک میکند.
بیشتر بخوانید: مفهوم فورک در ارزهای دیجیتال چیست؟
وجود درخت مرکل در ساختار یک بلاک این امکان را به ما میدهد تا به آسانی نسخه اصلی را از دستکاری شده تشخیص دهیم.
در واقع پس از اضافه شدن یک بلاک به زنجیره، دادههای آن مطلقا غیرقابل تغییر (Immutable) هستند.
اما مزایای درخت مرکل فقط به جلوگیری از دستکاری تراکنش محدود نمیشود و این روش یکی از بزرگترین مشکلات دنیای مالی را نیز حل کرده است.
دوبار خرج کردن (Double-Spending) چالشی است که درخت مرکل توانسته به خوبی آن را مدیریت کند.
در این حالت، اگر یک کاربر بخواهد داراییهای خود را دوباره خرج کند، در نتیجه این تراکنش متقلبانه، یک هش برای او ایجاد میشود.
اما داستان از آنجایی جالب میشود که هش تولید شده دقیقا با هش قبلی موجود در بلاکچین یکسان است و این مسئله باعث رد شدن تراکنش خواهد شد.
دلیل اهمیت درخت مرکل در بلاکچین چیست؟
تا اینجای مقاله در مورد نحوه کار و مزایای درخت مرکل برای بلاکچین آشنا شدهاید. در اینجا فقط به جمع بندی موارد گفته شده میپردازیم.
ضرورت استفاده از درخت مرکل در تکنولوژی بلاکچین اثبات شده است. این ساختار داده میتواند فرایند تایید تراکنشها را در یک محیط غیرمتمرکز با سرعت بالا انجام دهد.
استفاده از درخت مرکل در بلاکچین این قابلیت را به توسعه دهندگان میدهد تا بتوانند به راحتی حجم زیادی از داده را فشرده کرده و اطلاعات غیرضروری را در فرایند استفاده حذف کنند.
با تکیهبر هشها در درخت مرکل، نه تنها اصالت اطلاعات حفظ میشود بلکه میتوان با انتقال سریع آنها در بین کامپیوترهای یک شبکه، از تایید دادهها اطمینان حاصل کرد.
به طور کلی، مهمترین ویژگیهای درخت مرکل در بلاکچین به شرح زیر هستند:
- ساختار سبک و با حجم کم
- مقیاس پذیری موثر
- کارآمد
- تایید وجود تراکنشها در یک بلاک خاص
- احراز پرداخت پایه
اثبات مرکل (Merkle Proof) چیست؟
روش اثبات درخت مرکل، برشی از درخت مرکل است برای اثبات چیزی که استفاده میشود.
در این حالت برش برداشته شده حاوی آرایه یا دنبالهای از نودهای داده است.
برخی از بلاکچینها یا پروتکلهای مالی برای اثبات چیزی از روش اثبات مرکل (Merkle proof) استفاده میکنند.
همانطور که میدانید، درخت مرکل در بلاکچین برای اثبات یک بلاک استفاده میشود اما در روش اثبات مرکل، فقط از نودهای مرتبط با یک هش خاص استفاده خواهد شد.
فرض کنید میخواهیم یک تراکنش خاص را در شبکه تایید کنیم. در این حالت شناسه تراکنش را که یک کد هش یکتا است را در درخت مرکل جستجو میکنیم.
در این موقعیت به جای برداشتن کل درخت مرکل که شامل هزاران تراکنش و هشهای مختلف است، ما فقط برشی از شاخه مربوطه برمیداریم.
با سقوط صرافی FTX به دلیل کمبود نقدینگی، اخیرا از این روش اثبات برای تایید موجودی رزرو صرافیهای ارز دیجیتال استفاده میشود.
به روش اثبات موجودی کاربران و صرافی با تکیهبر ساختار داده درخت مرکل، اثبات رزرو (PoR) گفته میشود.
بیشتر بخوانید: الگوریتم اثبات ذخیره (PoR) شفافیت را به صرافیها می آورد!
اثبات رزرو درخت مرکل چگونه کار میکند؟
فرض کنید یک صرافی متمرکز میخواهد با تکیهبر روش اثبات رزرو POR، موجودی خود و کاربران را اثبات کند.
در این حالت، نودهای Leaf به همراه اطلاعات موجودی یک کاربر خاص فعال در صرافی تا سطح نودهای آخر در درخت مرکل نمایش داده میشود.
در تصویری که در ادامه مشاهده میکنید، فرض کنید دایره بنفش نماینده کاربری است که باید برای آن اثبات ارائه دهیم.
در اینجا ما سهم کاربران نارنجی درخت مرکل را سطح به سطح محاسبه و اسناد اثبات را به ترتیب ارتفاع کاربر ارائه میدهیم.
در این روش اثبات، حفظ داده دو بخش مهم درخت اهمیت زیادی دارد.
- نودهای والد بالایی کاربری که هنوز اطلاعات آن استخراج نشده
- و ارائه نود ریشه که به آن ریشه مرکل میگویند.
تصور کنید یک صرافی بیش از 10 میلیون کاربر ثبت نام شده داشته باشد. در این حالت ارتفاع درخت مرکل به صورت Log2 (10,000,000) محاسبه خواهد شد که در مجموع درخت ما 24 سطح خواهد بود.
از آنجایی که درخت مرکل کاملا باینری است، ما میتوانیم همه اطلاعات مربوط به نود والد را صرفا با جمع زدن نودهای چپ و راست پایین آن محاسبه کنیم.
در این روش محاسبه، دو فاکتور مهم را باید در اطلاعات به دست آمده حفظ کنیم.
اول اطلاعات موجودی و دوم اطلاعات هش کاربر مورد نظر است. اطلاعات موجودی یک نود والد را فقط میتوان بین نودهای چپ و راست تقسیم کرد. این موضوع برای کل درخت صدق میکند.
در این روش اثبات، فقط دادههای مربوط به موجودی، سلسله مراتب دادهها و هش نودهای کودک برای هر نود درخت قابل ارائه خواهند بود. البته هر نود اطلاعات کلی مربوط نودهای چپ و راست پایین خود را حفظ میکند.
در این مرحله برای به دست آوردن تاییدیه از درخت مرکل باید به برشی از درخت مثل نودهای B و D نگاه کنیم. در این مثال، موجودی این نودها باید براساس تقسیم و جمعهای انجام شده درست باشد.
همچنین هش به دست آمده از این نود باید نماینده جمع دو هش نود پایین باشد.
وقتی یک کاربر بخواهد وجود داراییهای خود در یک صرافی متمرکز را اثبات کند، با جستجوی اطلاعات خود (معمولا هش کاربری) در این درخت باید به موجودی خود برسد.
لازم به ذکر است تعداد انگشت شماری از صرافیها از این روش پشتیبانی میکنند.
کاربردهای درخت مرکل در بلاکچین
درخت مرکل و روش اثبات مرکل در دنیای بلاکچین به شکل چشمگیری مورد استفاده قرار میگیرد.
ارزهای دیجیتال و پلتفرمهای کریپتو کارنسی مختلف از این ساختار داده برای تسریع بلاکچین خود بهره میبرند.
با سقوط صرافی FTX، روند استفاده از اثبات مرکل برای تایید داراییهای رزرو صرافیهای متمرکز شدت گرفته است.
این صرافیها باید بدون ارائه اطلاعات حساس از کاربران خود، موجودی و بدهیهای خود را به صورت عمومی منتشر کنند تا نقدینگی آنها مورد بررسی قرار گیرد.
در ادامه این بخش به بررسی مهمترین کاربریهای درخت مرکل در بلاکچین میپردازیم:
بیتکوین
بیتکوین به عنوان اولین کریپتو کارنسی توانست الگوریتم و تکنولوژیهای زیادی را معرفی کند.
در بلاکچین بیتکوین نیز از درخت مرکل در بخشهای مختلفی استفاده میشود که روی هم رفته به یکپارچگی این بلاکچین کمک میکنند.
اگر به بلاکهای بیتکوین دقت کنیم، در کل بدنه بلاک و هدر آن درخت مرکل قابل مشاهده است. هر تراکنش در این بلاکچین یک هش یکتا دارد که در داخل درخت مرکل در پایینترین سطح قرار میگیرد.
ریشه مرکل در بخش استخراج بیتکوین و تایید بلاکها نیز کاربرد دارد.
استخراج
بلاکهای بیتکوین دارای یک هدر هستند که این هدر شامل دادههای متا و لیست کامل تراکنشهای ذخیره شده در بلاک است.
این لیست معمولا بزرگتر از بخش هدر بلاک است به همین دلیل گاهی به آن بدنه بلاک نیز گفته میشود.
ماینرهای مکانیزم اثبات کار (POW)، دادهها را برای ایجاد یک خروجی خاص با شرایط منحصر به فرد هش میکنند.
این هش برای تایید یک بلاک اهمیت بالایی دارد. عملیات استخراج بسیار زمانبر و پرهزینه است و در این فرایند یک ماینر میلیاردها بار سعی میکند یک بلاک معتبر را جستجو کند.
در هر تلاش، یک عدد در هدر بلاک تغییر میکند و هش جدید از روی آن ساخته میشود. به خاطر داشته باشید با این که هزاران تراکنش مجزا را میتوان در یک بلاک قرار داد، اما هر تراکنش باید هش یکتای خاص خود را داشته باشد.
در اینجا درخت مرکل به ماینرها اجازه میدهد تا فرایند ساخت و تایید بلاک را به شکل بهینهتری انجام دهند.
زمانی که عملیات استخراج آغاز میشود، تنها کاری که لازم است انجام شود، وارد شدن یک تراکنش و هش آن به درخت مرکل است. پس از آن، هش ریشه مرکل را میتوان در هدر بلاک قرار داد.
در این حالت، تنها کاری که ماینر باید انجام دهد، هش کردن بلاک است.
بیشتر بخوانید: هش ریت (Hashrate) چیست و چه کاربردی در ارزهای دیجیتال دارد؟
تایید اعتبار
از دیگر کاربردهای این روش میتوان به تایید اعتبار یک داده یا تراکنش اشاره کرد.
در اینجا نیز دوباره بیتکوین را در نظر بگیرید، در نسخه نودهای سبک این شبکه، از شاخصی به نام اهرم استفاده شده است.
زمانی که یک نود در یک دستگاه ضعیف با منابع محدود اجرا میشود، مسلما کاربر نمیتواند هش و جزییات همه تراکنشهای یک بلاک خاص را دانلود کند.
به جای دانلود کل دادههای بلاک، از روش اثبات مرکل استفاده میشود.
اثبات مرکل به کاربر میگوید یک تراکنش خاص در بلاک مورد نظر وجود دارد. در اینجا با کاهش تعداد هشهای مورد نیاز در فرایند تایید تراکنش، این فرایند به شکل چشمگیری تسریع و بهینهتر انجام خواهد شد.
اتریوم
بلاکچینهای زیادی از درخت مرکل استفاده میکنند اما در اینجا فقط به دو نمونه بیتکوین و اتریوم میپردازیم.
شبکه اتریوم نیز از یک نسخه ویرایش شده درخت مرکل استفاده میکند که به آن Merkle Patricia گفته میشود. هر بلاک موجود در بلاکچین اتریوم شامل سه درخت مرکل است.
این روش کاملا برخلاف درخت مرکل باینری مورد استفاده در شبکه بیتکوین است.
هر یک از این سه شاخه اهداف خاص خود را دارند. ریشه اول برای هر تراکنش استفاده میشود. ریشه دوم نیز وضعیت تراکنش را نشان میدهد. ریشه سوم برای رسید تراکنشها استفاده میشود.
در این شبکه، یک کاربر میتواند با نگاه کردن به ریشه مرکل تشخیص دهد یک تراکنش در کدام بلاک قرار گرفته و مقدار موجودی آنها چقدر است.
هایپر لجر فابریک
وقتی به بستر هایپر لجر فابریک (HyperLedger Fabric) نگاه کنیم، این پلتفرم بلاکچین از درخت مرکل برای محاسبه هش دادههای بلاک استفاده میکند.
مقدار هش نشان دهنده طول یک درخت مرکل است. در این پلتفرم نیز ساختار و نحوه استفاده از مرکل دقیقا مشابه شبکه بیتکوین است.
تفاوت درخت ورکل و درخت مرکل چیست؟
در هنگام مطالعه درخت مرکل، با ساختار داده دیگری به نام درخت ورکل مواجه میشویم. قبل از مقایسه درخت مرکل و ورکل، باید به بررسی ماهیت درخت ورکل بپردازیم.
درخت ورکل (Verkle Tree) نیز مشابه درخت مرکل به شما اجازه میدهد تا حجم زیادی از دادهها را برای ایجاد یک شاهد کوچک از هر ایتم دادهای اضافه شده به درخت، حذف کرده و در نهایت از هشهای موجود در جهت دسترسی به ریشه درخت بهره ببرید.
به عبارت دیگر، درخت ورکل نیز حجم زیاد دادهها را دریافت و فقط از هشهای آنها استفاده میکند.
در این درخت، ترکیب نودها، هشهای سطوح بالا را شکل میدهند اما از نظر اجرا کمی متفاوت از درخت مرکل عمل میکند.
مهمترین ویژگی درخت ورکل کارامدی آنها در حجم اثبات است. در یک درخت ورکل، برای ایجاد اثبات فقط 150 بایت داده برای یک درخت با میلیارد ورودی کافیست.
اما در طرف دیگر، در درخت مرکل، حجم داده مورد نیاز برای رسیدن به این اثبات 1 کیلوبایت است.
تفاوت دیگر درخت ورکل در روش توصیف آن برای اطلاعات است. در این درخت از سیستم تعهد چند جملهای (Polynomial Commitment) متکی بر توابع Polynomial استفاده میشود.
سوالات متداول
آیا درخت مرکل قابل تغییر است؟
درخت مرکل چیست؟
درخت مرکل یک ساختار داده ریاضی برپایه Hash است که با خلاصه داده تراکنشهای موجود در یک بلاک مطابقت دارد. Merkle-Tree روشی است که میتوان دادهها را با دقت بالا در یک محیط غیرمتمرکز مورد بررسی و تایید قرار داد.
درخت مرکل در کدام بلاکچینها استفاده شده است؟
بلاکچین بیتکوین و اتریوم در زمره اولین بلاکچینهای بزرگی هستند که به صورت کاربردی از این روش (Merkle Tree) استفاده میکنند.
آیا درخت مرکل قابل تغییر است؟
هر بلاک زنجیره بلاکچین معمولا از ساختار داده مرکل برای سازماندهی اطلاعات استفاده میکند. در صورتی که هش یکی از ورودیهای درخت مرکل تغییر کند، کل درخت تحت تاثیر آن تغییر خواهد کرد. از این رو، درخت مرکل غیرقابل تغییر است چرا که یکی از اهداف آن جلوگیری از دستکاری دادهها است.
نتیجه گیری
درخت مرکل (Merkle Tree) توانسته کارایی خود را در کریپتو کارنسیها به صورت عملی به اثبات برساند. معمولا ساختار درخت مرکل باینری است که در آن هر شاخه، از دو نود زیرمجموعه تشکیل شده است.
درخت مرکل در بلاکچین به ما کمک میکند تا فرایند تایید تراکنشها را با سرعت بالایی انجام دهیم. بدون استفاده از این ساختار، فرایند تایید تراکنش و بلاکها زمانبر و پرهزینه هستند چرا که حجم زیادی از داده باید در شبکه منتقل شود.
بیتکوین و اتریوم بهترین نمونه بارز استفاده از درخت مرکل در شبکههای غیرمتمرکز هستند.
قصد خرید یا فروش ارز دیجیتال در ایران را دارید؟ در این سایت میتوانید با اطمینان و با چند کلیک خرید کنید:
نام | ویژگیها | امتیاز | لینک ثبتنام |
---|---|---|---|
نوبیتکس |
| ||
صرافی خارجی MEXC |
|