بیتکوین به عنوان پیشرفتهترین رمزارز، به مجموعهای از مفاهیم رمزنگاری برای تضمین امنیت و یکپارچگی در شبکه خود وابسته است. یکی از این مفاهیم مهم Merkle Tree است، که به عنوان یک درخت رمزنگاری عمل کرده و امکان تأیید مؤثر صحت دادهها را فراهم میآورد. در بالای این درخت، Merkle Root قرار دارد که به عنوان خلاصهای رمزنگاری شده از تمامی تراکنشها در یک بلوک عمل میکند. با این حال، در شرایطی که منابع محدود هستند، مانند دستگاههای موبایل، دانلود و بررسی کل بلاک میتواند غیرعملی باشد. برای حل این مشکل، بیتکوین از Merkle Proofs استفاده میکند تا تأیید کند که یک تراکنش خاص در بلوک وجود دارد، بدون اینکه نیاز به دانلود تمام تراکنشهای بلوک باشد.
Merkle Tree چیست؟
Merkle Tree یک ساختار دادهای درختی است که در آن هر برگ نمایانگر هش یک تراکنش است .این درخت در نهایت به Merkle Root ختم میشود. Merkle Root به عنوان اثر انگشت رمزنگاری شده از تمامی تراکنشهای بلوک عمل میکند. فرآیند این درخت با هش کردن دادههای تراکنشها در برگها آغاز شده و سپس هشهای مجاور با هم ترکیب میشوند تا گرههای والد را تشکیل دهند، و این روند ادامه مییابد تا در نهایت فقط ریشه مرکل باقی بماند.
چرا از Merkle Proofs استفاده میکنیم؟
در بیتکوین، تأیید یک تراکنش درون یک بلوک با استفاده از کل بلاک میتواند به منابع زیادی نیاز داشته باشد، بهویژه در دستگاههایی با حافظه و قدرت پردازش محدود. Simplified Payment Verification (SPV) در اینجا به کمک میآید. SPV این امکان را میدهد که تراکنشها بدون نیاز به دانلود کل دادههای تراکنش در بلوک، تأیید شوند. Merkle Proofs روشهایی هستند که با استفاده از آنها میتوان صحت وجود یک تراکنش خاص را در یک بلوک تأیید کرد. این برای مشتریان سبک، مانند کیف پولهای موبایل، بسیار مهم است زیرا به آنها این امکان را میدهد که تنها سرصفحههای بلوک را دانلود کنند و نیاز به دانلود کل زنجیره بلوکی نباشد.
Merkle Proofs چگونه کار میکنند؟
Merkle Proofs به ما این امکان را میدهد که تأیید کنیم آیا یک تراکنش خاص بخشی از یک بلوک است یا خیر، بدون نیاز به دانلود کل تراکنشهای آن بلوک. به جای این کار، با استفاده از Merkle Root، transaction hash و یک سری هشهای واسط، میتوانیم ریشه هش بلوک را محاسبه کرده و بررسی کنیم که آیا با Merkle Root ارائه شده مطابقت دارد یا خیر.
فرآیند تأیید تراکنش:
1. Transaction Hash: هش تراکنش مورد نظر ارائه میشود.
2. Merkle Root: Merkle Root بلوک شناخته شده است.
3. Intermediate Hashes : هشهای واسط لازم برای تأیید ارائه میشود.
4. Hash Pairing: این هشها جفت شده و دوباره هش میشوند تا به Merkle Root برسیم.
5. Verification: اگر هش نهایی با Merkle Root ارائه شده مطابقت داشته باشد، تراکنش تأیید شده است.
پیادهسازی JavaScript برای Merkle Proof
هدف این است که اثبات کنیم یک تراکنش خاص در بلوک وجود دارد، با استفاده از ساختار Merkle Tree مراحل در JavaScript شامل:
1. دریافت آخرین بلوک: دریافت بلوک جدیدترین، شامل Merkle Root و لیست تراکنشها.
2. انتخاب تراکنش: بهطور تصادفی یک تراکنش را انتخاب کنید تا اثبات شود که در بلوک وجود دارد.
3. تولید Merkle Proof: کد، اثبات را با ساختن فهرستی از هشها که برای تأیید تراکنش مورد نظر لازم است، تولید میکند.
4. تأیید Merkle Proof: پس از تولید اثبات، به تابع تأیید Merkle Proof داده میشود و محاسبات هش مجدداً انجام میشود تا مطمئن شویم Merkle Root محاسبه شده با Merkle Root ارائه شده مطابقت دارد.
بررسی کارایی و امنیت:
Merkle Proofs از نظر فضای ذخیرهسازی و منابع محاسباتی بسیار کارآمد هستند. آنها امکان تأیید تراکنشها را بدون نیاز به دانلود تمام دادههای تراکنش فراهم میآورند، که برای مشتریان موبایل یا سبک بسیار مفید است.
از نظر امنیت، تقلب در اثباتها به دلیل نیاز به یافتن hash collisions بسیار دشوار و عملی نیست. امنیت این سیستم به قدرت رمزنگاری تابع هش (در مورد بیتکوین، SHA-256) وابسته است.
سخن آخر
Merkle Proofs نقش مهمی در شبکه بیتکوین ایفا میکنند و به مشتریان سبک این امکان را میدهند که تراکنشها را بدون نیاز به دانلود کل زنجیره بلوکی تأیید کنند. با استفاده از ساختار درختی Merkle Tree ، Merkle Proofs تأیید تراکنشها را به شکلی امن و کارآمد فراهم میآورد. این روش به بهینهسازی عملکرد بلاکچین کمک میکند و آن را برای طیف وسیعتری از دستگاهها و کاربران قابل دسترستر میسازد.
منبع:teach yourself crypto