درختهای سینتکس انتزاعی درهم سازی شده (Merklized Abstract Syntax Trees یا MAST) یک به روزرسانی پیشنهادی برای بیت کوین است که تراکنشهای با حجم کمتر، حریم خصوصی بیشتر و قراردادهای هوشمند بزرگتر را امکان پذیر میسازند. در این مقاله به بررسی اصول اولیه MAST و مزایای بالقوه آن میپردازیم و بعضی از پروپوزالهای کنونی که MAST را به پروتکل بیت کوین میافزایند را توضیح خواهیم داد.
مشکل دادههای اسکریپت استفاده نشده
ساتوشی ناکاموتو به بیت کوین یک ویژگی جالب داده است که در وایت پیپر اصلی توضیح داده نشده است. ناکاموتو به جای ملزم کردن بیت کوینها به دریافت با کلید عمومی و خرج کردن آن با امضای دیجیتال، به کاربران قابلیت نوشتن برنامههایی به اسم اسکریپت را داده است که به عنوان امضاها و کلیدهای عمومی پویا و دینامیک عمل خواهند کرد.
هنگامی که اسکریپتی را مشخص میکنید، پروتکل بیت کوین به سایر افراد اجازه استفاده از بیت کوینهای شما را نمیدهد مگر آنکه آن اسکریپت مقدار True به خود بگیرد. این موضوع به شما امکان میدهد تا محدودیتهایی به اسم موانع تعیین کند، موانعی نظیر درخواست امضای تراکنش خرج کردن بیت کوین توسط کلید خصوصی شما.
موانع پیچیدهتری نظیر این مثال نیز امکان پذیر هستند: آلیس میخواهد بتواند بیت کوینهای خود را در هر زمانی که مدنظر خودش است خرج کند، اما اگر بیت کوینهای او طی ۳ ماه خرج نشوند (برای مثال فوت شده باشد) میخواهد تا برادرانش به اسم باب و چارلی بیت کوینهای او را داشته باشند تا تصمیم بگیرند که این کوینها را چگونه خرج کنند.
اسکریپت مانع زیر که شرایط فوق را توضیح میدهد نه تنها شامل کلید عمومی آلیس است، بلکه شامل چندین منطق شرطی، تایم اوت (مدت زمان مورد نظر) و کلیدهای عمومی باب و چارلی نیز میشود.
در پروتکل کنونی بیت کوین، هنگام خرج کردن بیت کوینهای آلیس، تمام اطلاعات فوق باید به بلاک چین افزوده شود. این اطلاعات شامل بخشهایی از اسکریپت است که در خرج کردنهای معمولی وجود ندارد.
دادههای استفاده نشده مانع موجود باعث افزایش حجم تراکنشها، کاهش حریم خصوصی به دلیل افشای اطلاعات بیش از حد و محدودسازی قراردادهای هوشمند بر اساس حجم آنها به جای هزینه تایید میشود. MAST با حذف نیاز به حضور مستقیم بخشهای استفاده نشده اسکریپت در بلاک چین، به دنبال بهبود این شرایط است.
منشأ MAST
ایده موجود در MAST از دو مفهوم درختهای سینتکس انتزاعی و درختهای مرکل نشات میگیرد. درختهای سینتکس انتزاعی (AST) روشی برای توضیح برنامه است که طی آن، برنامه به بخشهای مجزا تقسیم میشود و تحلیل و بهینه سازی آن نیز آسانتر خواهد شد. برای ایجاد AST، هر تابع به وابستههای خود متصل میشود تا تمام وابستهها بررسی و مپینگ (mapping) شوند. در تصویر زیر، AST مثال فوق توضیح داده شده است:
از طرف دیگر، درختهای مرکل به شما امکان میدهند تا بدون حضور مجموعه، بررسی کنید که آیا هر عامل، عضوی از مجموعه است یا خیر. برای مثال، کیف پول های بیت کوین SPV بدون دانلود کردن کل بلاک، با بررسی این موضوع که هر تراکنش دریافت شده عضوی از بلاک هستند یا خیر، از درختهای مرکل برای ذخیره پهنای باند استفاده میکنند.
برای ایجاد کردن درخت مرکل، هر عضو به طور جداگانه هش میشوند و شناساگر منحصربهفردی برای آن عضو تولید میشود. سپس هر کدام از این شناساگرها با شناساگر دیگری جفت شده و مجددا هش میشوند و شناساگر منحصربهفرد دیگری برای جفت جدید ایجاد میشود.
این مرحله تا زمانی تکرار میشود که فقط یک شناساگر به اسم ریشه مرکل (Merkle Root) باقی بماند. شناساگر باقی مانده، کل مجموعه را در چند بایت اطلاعات شناسایی میکند.
برای بررسی این موضوع که عضوی خاص بخشی از مجموعه است یا خیر، فردی که کل مجموعه را در اختیار دارد، فقط شناساگر مورد نظر را به شما ارائه میدهد تا آن عضو خاص را به ریشه مرکل کل مجموعه متصل کنید. این مدرک که بیان میکند عضو مورد نظر متعلق به مجموعه است، اثبات مرکل خوانده میشود.
به طور خلاصه، روش موجود در ASTها به ما امکان میدهد تا برنامه را به بخش های مجزا تقسیم کنیم و درختهای مرکل به ما امکان میدهند تا بررسی کنیم که آیا بخشهای مجزا متعلق به کل برنامه هستند یا خیر، بدون آن که کل برنامه حاضر باشد. این موضوع، اساس MAST است که به خرج کننده امکان میدهد تا بخشهای استفاده نشده مانع را اثبات مرکل جایگزین کند تا حجم تراکنشها کاهش و حریم خصوصی افزایش یابد و قراردادهای هوشمند بزرگتر امکان پذیر شوند.
مثالی از MAST
مثال فوق خود را به اسکریپتهای فرعی جداگانه تقسیم میکنیم که برای هر کدام، دو پیامد احتمالی وجود خواهد داشت:
- آلیس میتواند بیت کوینهای خود را در هر زمانی خرج کند.
- پس از ۳ ماه که بیت کوینهای آلیس خرج نشد، باب و چارلی میتوانند توافق کنند که بیت کوینهای آلیس را چگونه خرج کنند.
درخت مرکل بر اساس این دو اسکریپت فرعی مستقل ایجاد میکنیم:
ریشه مرکل برای این درخت به طور منحصربهفرد، مانع آلیس را به صورت داده ۳۲ بایتی شناسایی میکند. سپس آلیس از مانع جایگزین استفاده میکند که میگوید خرج کننده باید اثبات مرکل متصل به ریشه مرکل یکی از دو اسکریپت فرعی را ارائه دهد و اسکریپت فرعی مورد نظر نیز باید مقدار True را داشته باشد.
سپس اثبات مرکل با اسکریپت فرعی به یکی از دو صورت زیر و بر اساس اینکه کدام اسکریپت فرعی را میخواهیم استفاده کنیم نشان داده میشود:
مزیت اول: تراکنشهای کم حجمتر
بررسی مزایای MAST را با این موضوع شروع میکنیم که چگونه به کاربران موانع پیچیده امکان ایجاد تراکنشهای کوچکتر و کم حجمتر را میدهد.
در مثال بخش قبل، از مانعی استفاده کردیم که دو اسکریپت فرعی داشت: آلیس سرمایه خود را خرج کند یا باب و چارلی ۳ ماه منتظر بمانند و سپس سرمایه آلیس را خرج کنند.
نسخه دیگری از این مثال را در نظر بگیرید که اسکریپت فرعی سوم میگوید پس از ۳ ماه و یک روز، دن و رابرت میتوانند سرمایه مورد نظر را خرج کنند، یا اسکریپت فرعی چهارمی که میگوید پس از ۳ ماه و دو روز، فرد و جرج میتوانند سرمایه را خرج کنند و الی آخر.
این شرایط، قابلیت ایجاد کردن نمودار ساده زیر را به ما میدهد که تعداد اسکریپتهای فرعی و تعداد موانع مورد نیاز برای اضافه شدن به بلاک چین با وجود MAST یا بدون حضور آن را نشان میدهد:
نمودار زیر نیز همان نمودار فوق در مقیاس لگاریتمی است:
اگرچه MAST در شروع، اندکی گرانتر از اسکریپت بدون MAST برای دو اسکریپت فرعی است، اما اسکریپت بدون MAST به صورت خطی گرانتر میشود، در حالی که هزینه اسکریپت MAST فقط به صورت لگاریتمی افزایش مییابد.
اگر ذخیره حجم ذخیره سازی هدف اصلی ما باشد، این اسکریپت را میتوان بهینهتر کرد. برای بسیاری از موانع، خرج کنندگان بیشتر تمایل به استفاده از یک شرط دارند. برای مثال، آلیس امیدوار است که مدت طولانی زندگی کند، بنابراین درخت مرکل خود را طوری میسازد تا شرط خرج کردن او همواره نزدیک به قسمت فوقانی درخت و سایر شرطها در قسمت پایین قرار داشته باشند.
این موضوع به ما، دو حجم متفاوت از اثبات مرکل MAST میدهد. یکی برای بهترین حالت که طی آن آلیس زنده است و بیت کوینهای خود را خرج میکند، و دیگری برای مواردی است که آلیس زنده نباشد و افراد دیگر به خرج کردن بیت کوینهای او بپردازند. این دو را بر روی نمودار قبل پیاده میکنیم.
میتوان مشاهده کرد که آلیس همواره از مقدار بایت و به عبارت دیگر حجم یکسانی در بهترین مورد استفاده میکند و تفاوتی ندارد که چند ذینفع به موانع خود اضافه میکند. هم چنین سایر خرج کنندگان فقط حجم اندکی بیشتر از مورد قبلی استفاده میکنند.
آلیس هر موردی را انتخاب کند، MAST میتواند موانع با چند اسکریپت فرعی را بسیار کوچکتر کند و حجم تراکنشها را کاهش دهد تا کاربران کارمزد کمتری بپردازند و بلاکها بتوانند تعداد تراکنش بیشتری در خود جای دهند.
مزیت دوم: حریم خصوصی بیشتر
از آنجایی که با جزییات به بررسی مثال آلیس پرداختهایم، تمام جزییات مانع موجود را میدانید. اما تصور کنید تمام چیزی که مشاهده کردید، اطلاعاتی است که هنگام خرج کردن بیت کوینها توسط آلیس به بلاک چین افزوده شده است:
فقط با وجود این نکته، متوجه نخواهید شد که آیا پس از آلیس کسی میتواند به سرمایه دسترسی داشته باشد و چه شرایطی میتواند مقدار خرج کردنها را محدود کند. ممکن است با استفاده از MAST حدس بزنید که شرایط دیگری وجود داشته است، اما این صرفا یک حدس است.
در مقابل، اگر تمام چیزی که مشاهده کردید، شاخه دیگری بوده باشد (درخت سمت راست فوق)، متوجه نخواهید شد که سرمایهها قبل از اتمام زمان قابل خرج کردن بودند و آیا یک فرد میتوانست آن را خرج کند یا خیر. مجددا در این مورد نیز میتوانید حدس بزنید که شاید شرایط دیگری وجود داشته است، اما نمیتوانید از این موضوع مطمئن باشید.
قابلیت خصوصی نگه داشتن شرایط مانع استفاده نشده میتواند برای بعضی از کاربران نظیر کسب و کارهایی که میخواهند مفاد قرارداد هوشمند خود را تا حد امکان از رقبای خود پنهان کنند بسیار مهم باشد. این موضوع مخالف با بعضی از آلتکوین هایی است که مدعی هستند به طور ویژه برای قراردادهای هوشمند طراحی شدهاند اما هیچگونه حریم خصوصی برای طرفین قرارداد فراهم نمیکنند.
حریم خصوصی هم چنین میتواند مزیتی دیگر برای تمام کاربران بیت کوین و حتی کاربرانی که حریم خصوصی برای آنها مهم نیست ارائه دهد.
فرض کنید آلیس تنها فردی است که از الگوی مانع غیر MAST از بخش اول این مقاله استفاده میکند. از آنجایی که مانع کامل به صورت عمومی است، تمام کاربران میتوانند خرج کردنهای آلیس را فقط با بررسی مواردی که این الگو استفاده شده است رصد کنند و حریم خصوصی آلیس را از بین ببرند.
هر نکتهای که باعث شود شناسایی کاربران آسان شود، باعث میشود که بیت کوین این کاربران با سایر افراد متفاوت باشد که به آن عدم تعویض پذیری میگویند. اگر کسی بداند که مانع آلیس به چه شکل است، میتواند ماینرها را مجبور کند تا تراکنشهای آلیس را استخراج نکنند و از خرج کردن بیت کوینهای آلیس جلوگیری کند.
گفتنی است MAST به تنهایی نمیتواند این موضوع را به طور کل اصلاح کند؛ زیرا آلیس (یا باب و چارلی) همچنان باید بخشی از مانع را هنگام خرج کردن بیت کوین آلیس مشخص کنند، اما این موضوع امکان پذیر است که موانع پیچیده متفاوتی بتوانند به تعداد کمتری از موانع MAST تبدیل شوند.
برای مثال، خرج کردن پیش فرض آلیس مشابه با خرج کردن پیش فرض تمام تراکنشهایی است فقط به یک امضا نیاز دارند، بنابراین تراکنشهای مبتنی بر MAST آلیس با سایر تراکنشهای تک امضایی مبتنی بر MAST ترکیب میشوند. این موضوع باعث بازیابی حریم خصوصی آلیس و افزایش تعویض پذیری او و سایر افرادی میشود که از موانع مبتنی بر MAST استفاده میکنند.
این مزیت ویژه MAST با سایر ویژگیهای پیشنهاد شده که حریم خصوصی و تعویض پذیری کاربران بیت کوین را بهبود میبخشد ترکیب میشود. این ویژگیها، موانع پیچیدهای که به یک امضای دیجیتال نیاز دارند را امکان پذیر میسازد.
مزیت ۳: قراردادهای هوشمند بزرگتر
بیت کوین دارای ۳ سقف حجم بایت مختلف است که بر اساس نوع ساختار مانع اعمال میشود: سقف ۱۰,۰۰۰ بایتی که در جولای ۲۰۱۰ برای اسکریپتهای خالی افزوده شده است، سقف ۵۲۰ بایتی برای P2SH و سقف ۱۰,۰۰۰ بایتی برای سگویت (Segwit). این سه سقف حجم را در نمودار زیر مشاهده میکنید.
میتوانیم مشاهده کنیم که MAST حتی در مثال ساده ما نیز داشتن چندین شاخه شرطی بیشتر نسبت سایر مکانیزمها را امکان پذیر میسازد.
MAST به حدی مقیاس پذیری را بهبود میبخشد که حتی اگر تمام انرژی موجود در جهان را در اختیار داشته باشید، باز هم فقط میتوانید یک درخت مرکل متوازن ایجاد کنید که حجم اثبات مرکل آن ۸۴۴۸ بایت خواهد بود. در عین حال، حتی اثبات مرکل به این حجم نیز میتواند کمتر از یک میلی ثانیه توسط نود کامل تایید شود.
امکان پذیر ساختن MAST : روشهای دارای چند هدف
تاکنون دو روش در فهرست توسعه دهندگان بیت کوین برای امکان پذیر ساختن استفاده از MAST در پروتکل بیت کوین ارائه شده است که هر دوی آنها پروپوزالهای پیش نویس هستند که با تغییر مواجه خواهند شد.
پروپوزال اول BIP114 است که توسط جیسون لائو (Jason Lau) ارائه شده است. این پروپوزال از ویژگی افزونه مبتنی بر سگویت استفاده میکند که اجرا و استفاده آدرسهای اصلی سگویت (bech32) در ریشه مرکل مانع MAST را امکان پذیر میسازد. خرج کنندگان سپس میتوانند یک اسکریپت فرعی از درخت مرکل انتخاب کنند.
پروپوزال دوم، دو BIP است که هنوز شماره گذاری نشدهاند و توسط مارک فریدنباخ (Mark Friedenbach) ارائه شده است. این پروپوزال، انعطاف پذیری زبان اسکریپت را به روشی افزایش میدهد که به برنامه نویس ها امکان میدهد تا اسکریپتهایی بنویسند که میتوانند موانع مبتنی بر MAST را تایید کنند.
اگر این پروپوزال پیاده سازی شود، استفاده از اثباتهای مرکل در هر سه نوع اسکریپت کنونی بیت کوین (bare، سگویت و P2SH) امکان پذیر خواهد شد.
هر دو پروپوزال دارای نقاط ضعف و قوت خود هستند، اما هیچ کدام از آنها مزایای گفته شده را ارائه نخواهند کرد.
نتیجه گیری
پس از توضیح مزایای MAST و مرور کوتاه دو پروپوزال که میتوانند MAST را در بیت کوین در دسترس قرار دهند، احتمالا این سوال برای شما پیش خواهد آمد که چه زمانی میتوانیم از MAST استفاده کنیم. متاسفانه جواب این پرسش مشخص نیست.
مسیر تبدیل شدن ایده به پروپوزال و پیاده سازی کامل، تبدیل شدن به سافت فورک و فعال سازی سافت فورک چندان مستقیم و بیدردسر نیست. اتفاقات پیرامون سگویت که تقریبا دو سال طول کشید گویای این نکته است.
اما به نظر میرسد که ایده اصلی موجود در MAST چیزی است که جامعه فنی بیت کوین حمایت قوی از آن میکند و توسعه دهندگان علاقمند به MAST به کار کردن بر روی آن ادامه خواهند داد، مگر آنکه ثابت شود MAST بلااستفاده است.