درختان ورکل
درختان ورکل (ترکیب دو واژۀ «تعهد وکتور» و «درختان مرکل») نوعی ساختار دادهها است که در ارتقای گرههای اتریوم مورد استفاده قرار میگیرد. بر مبنای این ارتقا گرهها میتوانند بدون ذخیره کردن حجم وسیعی از دادههای حالت، همچنان بلوکها را تأیید کنند.
بیوضعیتی
درختان ورکل یک گام بنیادی در مسیر رسیدن به کلاینتهای بیحالت اتریوم است. کلاینتهای بیحالت آنهایی هستند که نیاز نیست برای تأیید و اعتباربخشی به بلوکهای ورودی، کل پایگاه دادۀ حالتها را ذخیره کنند. کلاینتهای بیحالت به جای ذخیرهسازی یک کپی محلی از حالت اتریوم جهت تأیید بلوکها، از یک «شاهد» برای دادههای حالت که همراه با بلوک از راه میرسد استفاده میکنند. شاهد عبارت است از مجموعهای از قطعههای مجزای دادههای حالت که برای اجرایی شدن برخی از مجموعه تراکنشها لازم است، و اثبات رمزنگاریشده که شاهد به واقع بخشی از یک مجموعه کامل از دادهها است. شاهد به جای پایگاه دادۀ حالتها مورد استفاده قرار میگیرد. برای اینکه این مکانیزم کارا باشد، شاهدها باید حجم بسیار اندکی داشته باشند تا بتوانند بهطور ایمن و به موقع در سرتاسر شبکه پخش شوند و اعتبارسنجها بتوانند آنها را در داخل یک اسلات 12 ثانیهای پردازش کنند. ساختار فعلی دادههای حالت مناسب نیست، چرا که حجم شاهدها بسیار زیاد است. درختان ورکل با کوچک کردن حجم شاهدها این مسئله را حل میکنند تا یکی از موانع اصلی سد راه کلاینتهای بیحالت برداشته شود.
شاهد چیست و چرا به آن نیاز داریم؟
تأیید اعتبار یک بلوک به معنای دوباره اجرا کردن تراکنشهای موجود در آن، اعمال تغییرات در ترای حالت اتریوم، و محاسبات هش ریشۀ جدید است. بلوک تأییدشده در واقع بلوکی است که هش ریشۀ حالت آن پس از محاسبه با هشی که همراه بلوک ارائه شده است یکی باشد (این نشان میدهد که پیشنهاددهندۀ بلوک محاسبات مورد ادعایش را واقعاً انجام داده است). درحال حاضر کلاینتهای اتریوم برای بروزرسانی حالت نیازمند دسترسی به کل ترای حالت هستند. این ترای نوع بزرگی از ساختار دادههاست که باید بهصورت محلی ذخیرهسازی شود. شاهد تنها شامل قطعاتی از کل دادههای حالت را که برای اجرای تراکنشها در یک بلوک نیاز است دربر دارد. سپس، اعتبارسنج میتواند فقط با همان قطعات، تأیید کند که پیشنهاددهندۀ بلوک تراکنشهای بلوک را اجرا و حالت را بهدرستی بهروزرسانی کرده است. با این حال، این روند مستلزم انتقال سریع شاهدها بین همتایان موجود در شبکه اتریوم است به طوری که توسط هر کدام از گرهها در یک اسلات 12 ثانیهای به روشی امن دریافت و پردازش شوند. اگر شاهد حجم زیادی داشته باشد، ممکن است دانلود آن و همپا شدن با زنجیره برای بعضی از گرهها خیلی زمان ببرد. این روند یک عامل متمرکزسازی محسوب میشود، چون فقط گرههایی که به اینترنت پرسرعتتر دسترسی دارند میتوانند در اعتبارسنجی بلوکها سهیم شوند. با استفاده از مکانیزم درختان ورکل دیگر نیازی نیست دادههای حالت را بر روی هارد خود ذخیره کنید؛ هر چیزی که برای تأیید اعتبار بلوک نیاز دارید در خود بلوک قرار گرفته است. متأسفانه، شاهدهایی که توسط ترایهای مرکل قابل تولید هستند حجم بالایی دارند و به همین خاطر از کلاینتهای بیحالت پشتیبانی نمیکنند.
چرا مکانیزم درختان ورکل شاهدهای کمحجمتری ایجاد میکنند؟
ساختار ترای مرکل شاهدهای بسیار بزرگی ایجاد میکند، آنقدر بزرگ که پخش امن آنها بین همتایان در داخل یک اسلات 12 ثانیهای میسر نمیشود. این بدان خاطر است که شاهد درواقع مسیری رابط بین دادهها (که در برگها نگه داشته میشود) به هش ریشه است. تأیید اعتبار دادهها نه تنها مستلزم داشتن تمام هشهای واسط است که هر برگ را به ریشه متصل میکنند، بلکه داشتن تمام گرههای «همخانواده» نیز ضروری است. هر گره در روند اثبات دارای گرههای همخانوادهای است که با آن هش میشود تا هش بعدی را در بالای ترای ایجاد کند. حجم این اطلاعات بسیار زیاد است. درختان ورکل با کاهش فاصله میان برگهای درخت و ریشه آن و همچنین مرتفع کردن نیاز به ارائه گرههای همخانوده برای تأیید هش ریشه، حجم شاهدها را کاهش میدهند. حتی با استفاده از طرح تعهد چندجملهای قدرتمند به جای تعهد وکتوری هشمحور، میتوان فضای مورد نیاز برای ذخیرهسازی را بهینهتر کرد. تعهد چندجملهای این امکان را فراهم میکند که شاهد، فارغ از تعداد برگهایی که ثابت میکند، اندازه ثابتی داشته باشند.
بر مبنای طرح تعهد چندجملهای، حجم شاهدها مدیریت میشود و به راحتی در شبکه همتا به همتا قابل انتقال است. این امر به کلاینتها اجازه میدهد تا تغییرات در حالت هر بلوک را با کمترین میزان دادهها تأیید کنند.
ساختار درخت ورکل چیست؟
درختان ورکل جفتهای (کلید،ارزش)
هستند که در آنها کلیدها عبارتند از عناصری با حجم 32 بایت که از یک ساقه 31 بایتی و یک پسوند تکبایتی تشکیل شدهاند. این کلیدها به گرههای افزونه و گرههای داخلی طبقهبندی میشوند. گرههای افزونه بازنمای یک ساقه منفرد 256 فرزندی با پسوندهای متمایز است. گرههای داخلی هم 256 فرزند دارند، اما آنها میتوانند جزء سایر گرههای افزونه باشند. تفاوت اصلی میان ساختار درخت ورکل و درخت مرکل این است که درخت ورکل مسطحتر است، یعنی تعداد گرههای واسط که یک برگ را به ریشه وصل میکنند کمتر است، و بنابراین به دادههای کمتری برای ایجاد یک اثبات نیاز است.
درباره ساختار درختان ورکل بیشتر بخوانید(opens in a new tab)
پیشرفت فعلی
در حال حاضر شبکههای تست درختان ورکل هماکنون برقرار و درحال اجراست، اما هنوز هم جای بهروزرسانیهایی اساسی روی کلاینتها دارد که برای پشتیبانی از درختان ورکل نیاز است. میتوانید با بهکارگیری قراردادها در شبکههای تست یا اجرای کلاینتهای شبکه تست، پیشرفت آن را سرعت دهید.
شبکه آزمایشی Verkle Gen Devnet 2 را کاوش کنید(opens in a new tab)
Condrieu Verkle Guillaume Ballet را تماشا کنید شبکه آزمایشی Condrieu Verkle را توضیح دهید(opens in a new tab)(توجه داشته باشید که شبکه آزمایشی Condrieu اثبات کار بود و اکنون توسط Verkle Gen Devnet 2 testnet جایگزین شده است).
بیشتر بخوانید
- درختان Verkle برای بیتابعیتی(opens in a new tab)
- Dankrad Feist درباره درختان ورکل روی PEEPanEIP توضیح میدهد(opens in a new tab)
- Guillaume Ballet درباره درختان ورکل در ETHGlobal توضیح میدهد(opens in a new tab)
- «چگونه درختان ورکل اتریوم را مختصر و مفید میکنند» از Guillaume Ballet در دِوکان 6(opens in a new tab)
- Piper Merriam از ETHDenver 2020 درباره کلاینتهای بیحالت میگوید(opens in a new tab)
- دانکارد فیست در پادکست Zero Knowledge درختان ورکل و بیحالتی را توضیح میدهد(opens in a new tab)
- Vitalik Buterin درباره درختان ورکل میگوید(opens in a new tab)
- Dankrad Feist درباره درختان ورکل میگوید(opens in a new tab)
- مستندات مربوط به EIP درختان ورکل(opens in a new tab)