درخت مرکل چیست؟ راهنمای مبتدیان برای این مؤلفه بلاک چین

درختان مرکل یکی از اجزای اساسی بلاک چین هستند که زیربنای عملکرد آن ها هستند. آنها امکان تأیید کارآمد و ایمن ساختارهای داده بزرگ و در مورد بلاک چین ها، مجموعه داده های بالقوه بی حد و حصر را فراهم می کنند.

پیاده سازی درختان مرکل در بلاک چین اثرات متعددی دارد. این اجازه می دهد تا آنها را مقیاس بندی کنند و در عین حال معماری مبتنی بر هش را برای آنها برای حفظ یکپارچگی داده ها و روشی پیش پا افتاده برای تأیید یکپارچگی داده ها فراهم می کند.

توابع هش رمزنگاری فناوری زیربنایی هستند که به درختان مرکل اجازه کار می دهند، بنابراین ابتدا مهم است که بدانیم توابع هش رمزنگاری چیست.

حکم سریع: درختان مرکل ساختارهای داده‌ای متشکل از هش‌های رمزنگاری هستند که امکان تأیید صحت کارآمد و نقشه‌برداری مجموعه داده‌های بزرگ را فراهم می‌کنند و آنها را به جزء جدایی ناپذیر سیستم‌هایی مانند زنجیره‌های بلوکی و کنترل نسخه توزیع‌شده تبدیل می‌کنند.


حقایق سریع

نکات کلیدیتوضیحات:
توابع هش رمزنگاریتوابع هش که ورودی با هر اندازه ای را می گیرند و مقدار هش با طول ثابت را خروجی می کنند. در درختان مرکل استفاده می شود.
ساختار درخت مرکلساختار داده درختی که در آن هر گره غیر برگ هش از گره های فرزند خود است. نقشه برداری کارآمد و تأیید مجموعه داده های بزرگ را فعال می کند.
هش ریشههش در بالای درخت مرکل که نمایانگر هش کل درخت است. به عنوان اثر انگشت برای مجموعه داده کامل عمل می کند.
مدارک مرکلبدون نیاز به مجموعه داده کامل، فقط هش ریشه، تأیید یکپارچگی و موقعیت داده در درخت را مجاز کنید.
پیاده سازی در بیت کویندرختان مرکل معاملات را در بلوک ذخیره می کنند. هش ریشه ذخیره شده در هدر بلوک به گره های SPV اجازه می دهد تا تراکنش ها را تأیید کنند.
سایر پیاده سازی های بلاک چیندر بسیاری از بلاک چین ها مانند اتریوم که از درختان مرکل پاتریشیا پیچیده تر استفاده می کند، استفاده می شود.
سیستم های توزیع شدهبه سیستم‌های کنترل نسخه مانند Git و IPFS اجازه دهید به راحتی داده‌های به اشتراک گذاشته شده بین همتایان را تأیید کنند.

توابع هش رمزنگاری

به بیان ساده، تابع هش هر تابعی است که برای نگاشت داده‌هایی با اندازه دلخواه (ورودی) به خروجی با اندازه ثابت استفاده می‌شود. یک الگوریتم هش برای ورودی داده اعمال می شود و خروجی با طول ثابت حاصل به عنوان هش نامیده می شود.

بسیاری از الگوریتم های هش به طور گسترده در دسترس عموم هستند و می توانند بر اساس نیاز شما انتخاب شوند.

هش حاصل از ورودی دلخواه نه تنها از نظر طول ثابت است، بلکه برای ورودی کاملا منحصر به فرد است و خود تابع نیز قطعی است. یعنی مهم نیست که چند بار تابع را روی یک ورودی اجرا کنید، خروجی همیشه یکسان خواهد بود.

به عنوان مثال، اگر مجموعه داده های زیر را به عنوان ورودی داشته باشید، خروجی های حاصل برای هر ورودی منحصر به فرد هستند. توجه کنید که چگونه در مثال دوم و سوم، با وجود اینکه تفاوت ورودی ها تنها یک کلمه است، خروجی های حاصل کاملاً متفاوت است.

این بسیار مهم است زیرا امکان "اثرانگشت" داده ها را فراهم می کند.

یک تابع هش رمزنگاری، تصویر از ویکی پدیا

از آنجایی که طول خروجی (مجموع هش در مثال) همیشه همان است که توسط الگوریتم هش استفاده شده تعیین می‌شود، حجم عظیمی از داده‌ها را می‌توان تنها از طریق هش به دست آمده شناسایی کرد.

با سیستم هایی که حاوی مقادیر زیادی داده هستند، مزایای ذخیره و شناسایی داده ها با خروجی طول ثابت می تواند صرفه جویی زیادی در ذخیره سازی ایجاد کند و به افزایش کارایی کمک کند.

در بلاک چین ها از الگوریتم های هش برای تعیین وضعیت بلاک چین استفاده می شود.

بلاک چین ها لیست های پیوند خورده ای هستند که حاوی داده ها و یک اشاره گر هش است که به بلوک قبلی اشاره می کند و زنجیره ای از بلوک های متصل را ایجاد می کند، از این رو "بلاک چین" نامیده می شود.

هر بلوک از طریق یک اشاره گر هش به یکدیگر متصل می شود که هش داده های داخل بلوک قبلی به همراه آدرس بلوک قبلی است. با پیوند دادن بلوک‌های داده در این قالب، هر هش حاصل از بلوک قبلی، کل وضعیت بلاک چین را نشان می‌دهد، زیرا همه داده‌های هش شده بلوک‌های قبلی در یک هش هش می‌شوند.

این (در مورد الگوریتم SHA-256) با یک خروجی (هش) مانند زیر نشان داده می شود:

b09a57d476ea01c7f91756adff1d560e579057ac99a28d3f30e259b30ecc9dc7

هش بالا اثر انگشت کل وضعیت بلاک چین قبل از آن است. وضعیت بلاک چین قبل از بلوک جدید (به عنوان داده هش شده) ورودی است و هش حاصل خروجی است.

اگرچه استفاده از هش رمزنگاری بدون درخت مرکل امکان پذیر است، اما بسیار ناکارآمد است و مقیاس پذیر نیست. استفاده از هش برای ذخیره داده ها در یک بلوک در قالب سری، زمان بر و دست و پا گیر است.

همانطور که خواهید دید، درختان مرکل امکان تفکیک ناچیز یکپارچگی داده ها و همچنین نقشه برداری از آن داده ها را در کل درخت با استفاده از اثبات های مرکل فراهم می کنند.


Merkle Trees و Merkle Proofs

درختان مرکل که به افتخار رالف مرکل، که این مفهوم را در سال 1979 به ثبت رساند، نامگذاری شده‌اند، اساساً درخت‌های ساختار داده هستند که هر گره غیربرگی هش از گره‌های فرزند مربوطه است.

گره های برگ پایین ترین ردیف گره های درخت هستند. در ابتدا ممکن است درک آن دشوار به نظر برسد، اما اگر به شکل رایج زیر نگاه کنید، درک آن بسیار آسان تر خواهد شد.

درخت هش

نمونه ای از درخت هش باینری، تصویر از ویکی پدیا

نکته مهم، توجه کنید که چگونه گره‌های غیربرگی یا «شاخه‌ها» (که با هاش 0-0 و هش 0-1 نشان داده می‌شوند) در سمت چپ، هش‌های L1 و L2 فرزندان مربوطه خود هستند. علاوه بر این، توجه کنید که چگونه شاخه Hash 0 هش فرزندان به هم پیوسته خود است، شاخه های Hash 0-0 و Hash 0-1.

مثال بالا رایج ترین و ساده ترین شکل درخت مرکل است که به عنوان درخت مرکل باینری شناخته می شود. همانطور که می بینید، یک هش بالا وجود دارد که هش کل درخت است که به نام هش ریشه شناخته می شود. اساساً، درختان Merkle یک ساختار داده ای هستند که می توانند تعداد "n" هش را بگیرند و آن را با یک هش منفرد نشان دهند.

ساختار درخت امکان نگاشت کارآمد از مقادیر زیاد دلخواه را فراهم می کند و شناسایی آسان محل وقوع تغییرات در آن داده را امکان پذیر می سازد. این مفهوم، اثبات‌های Merkle را قادر می‌سازد، که با آن، کسی می‌تواند تأیید کند که هش داده‌ها در تمام طول درخت و در موقعیت صحیح بدون نیاز به نگاه کردن به کل مجموعه هش‌ها، سازگار است.

در عوض، آن‌ها می‌توانند تأیید کنند که یک تکه داده با هش ریشه سازگار است و تنها با بررسی زیرمجموعه کوچکی از هش‌ها به جای کل مجموعه داده، مطابقت دارد.

تا زمانی که هش ریشه به طور عمومی شناخته شده و قابل اعتماد باشد، برای هر کسی که می‌خواهد یک جستجوی کلید-مقدار در پایگاه داده انجام دهد این امکان وجود دارد که از یک اثبات Merkle برای تأیید موقعیت و یکپارچگی یک قطعه داده در یک پایگاه داده استفاده کند که دارای آن است. یک ریشه خاص

هنگامی که هش ریشه در دسترس باشد، درخت هش را می توان از هر منبع غیر قابل اعتماد دریافت کرد و یک شاخه از درخت را می توان در یک زمان با تأیید فوری صحت داده ها دانلود کرد، حتی اگر کل درخت هنوز در دسترس نباشد.

یکی از مهمترین مزایای ساختار درختی مرکل، توانایی احراز هویت خودسرانه مجموعه‌های بزرگ داده از طریق مکانیزم هش کردن مشابه است که برای تأیید مقادیر بسیار کمتر داده استفاده می‌شود.

این درخت برای توزیع مجموعه‌های بزرگی از داده‌ها در بخش‌های کوچک‌تر قابل مدیریت مفید است، جایی که مانع برای تأیید یکپارچگی به‌رغم اندازه کلی داده بزرگ‌تر به‌طور قابل‌توجهی کاهش می‌یابد.

هش ریشه را می توان به عنوان اثر انگشت برای کل مجموعه داده، از جمله کل پایگاه داده یا نشان دهنده کل وضعیت یک بلاک چین استفاده کرد. در بخش‌های بعدی، نحوه پیاده‌سازی درختان مرکل را بیت‌کوین و سایر سیستم‌ها مورد بحث قرار خواهیم داد.


درختان مرکل در بیت کوین

تابع هش رمزنگاری استفاده شده توسط بیت کوین الگوریتم SHA-256 است. این مخفف "Secure Hashing Algorithm" است که خروجی آن 256 بیت ثابت است. عملکرد اصلی درختان مرکل در بیت کوین ذخیره و در نهایت هرس تراکنش ها در هر بلوک است.

همانطور که قبلا ذکر شد، بلوک‌ها در زنجیره بلوکی از طریق هش‌های بلوک قبلی به هم متصل می‌شوند. در بیت کوین، هر بلوک شامل تمام تراکنش های درون آن بلوک و همچنین هدر بلوک است که شامل موارد زیر است:

  • مسدود کردن شماره نسخه
  • هش بلوک قبلی
  • TIMESTAMP
  • هدف دشواری معدن
  • غیرطبیعی
  • مرکل روت هش

تصویر زیر مربوط به وایت پیپر بیت کوین است و نحوه قرار گرفتن درخت مرکل در هر بلوک را نشان می دهد.

درخت مرکل

تراکنش‌ها توسط ماینرها در بلوک‌ها گنجانده می‌شوند و به عنوان بخشی از درخت Merkle هش می‌شوند، که منجر به ریشه Merkle می‌شود که در هدر بلوک ذخیره می‌شود. این طراحی دارای چندین مزیت متمایز است.

مهم‌تر از همه، همانطور که در کاغذ سفید ذکر شده است، این امکان وجود گره‌های تأیید پرداخت ساده (SPV) را فراهم می‌کند که به عنوان «مشتریان سبک وزن» نیز شناخته می‌شوند. این گره ها مجبور نیستند کل بلاک چین بیت کوین را دانلود کنند، فقط هدرهای بلوک طولانی ترین زنجیره را دانلود کنند.

گره‌های SPV می‌توانند با پرس‌وجو از گره‌های همتای خود به این امر دست یابند تا زمانی که متقاعد شوند که سربرگ‌های ذخیره‌شده بلوکی که روی آنها کار می‌کنند بخشی از طولانی‌ترین زنجیره هستند. سپس یک گره SPV می‌تواند وضعیت یک تراکنش را با استفاده از اثبات Merkle برای نگاشت تراکنش به یک درخت Merkle خاص با هش ریشه درخت Merkle مربوطه در یک هدر بلوکی که بخشی از طولانی‌ترین زنجیره است، تعیین کند.

علاوه بر این، پیاده‌سازی درختان مرکل توسط بیت‌کوین، امکان هرس بلاک چین را به منظور صرفه‌جویی در فضا فراهم می‌کند. این نتیجه تنها هش ریشه در هدر بلوک ذخیره می‌شود، بنابراین، بلوک‌های قدیمی را می‌توان با حذف شاخه‌های غیرضروری درخت مرکل هرس کرد و تنها آن‌هایی را که برای اثبات Merkle نیاز دارند، حفظ کرد.


پیاده سازی درختان مرکل در سایر بلاک چین ها و سیستم ها

اگرچه بیت کوین اولین بلاک چینی بود که درختان مرکل را پیاده سازی کرد، بسیاری از بلاک چین های دیگر ساختارهای درختی مرکل مشابه یا حتی نسخه های پیچیده تر را پیاده سازی کردند.

علاوه بر این، پیاده‌سازی درخت Merkle تنها به بلاک چین محدود نمی‌شود و برای انواع سیستم‌های دیگر نیز اعمال می‌شود.

اتریوم که شناخته‌شده‌ترین ارز دیجیتال دیگر است، همچنین نمونه‌ای عالی از پیاده‌سازی درخت مرکل متفاوت است. از آنجایی که اتریوم به‌عنوان پلتفرمی برای ساخت برنامه‌های بسیار پیچیده‌تر، کامل است، از نسخه پیچیده‌تری از درخت مرکل به نام درخت مرکل پاتریشیا استفاده می‌کند که در واقع ۳ درخت مرکل جداگانه است که برای سه نوع شی مورد استفاده قرار می‌گیرد. در اینجا می توانید اطلاعات بیشتری در مورد این درختان کسب کنید.

در نهایت، درختان Merkle جزء مهم سیستم های کنترل نسخه توزیع شده مانند Git و IPFS هستند. توانایی آنها برای اطمینان و تأیید آسانی از یکپارچگی داده های به اشتراک گذاشته شده بین رایانه ها در قالب P2P آنها را برای این سیستم ها ارزشمند می کند.


نتیجه

درختان مرکل جزء لاینفک زنجیره‌های بلوکی هستند و به طور موثر به آن‌ها اجازه می‌دهند تا با تغییرناپذیری قابل اثبات و یکپارچگی تراکنش کار کنند.

درک نقشی که آنها در شبکه های توزیع شده ایفا می کنند و فناوری زیربنایی آنها در توابع هش رمزنگاری برای درک مفاهیم اساسی در ارزهای دیجیتال بسیار مهم است زیرا آنها به سیستم های بزرگتر و پیچیده تر تبدیل می شوند.

منبع: https://blockonomi.com/merkle-tree/