سگویت پیشنهادی برای تغییر ساختار دادههای تراکنش بیت کوین است. دلیل اصلی انجام این کار، بوجود آوردن شرایطی برای محافظت از انعطافپذیری (Malleability) تراکنشهاست. با این حال، این تغییر اجازه میدهد که سایر مزایا مانند افزایش ظرفیت بلاک (Block Capacity) و به طبع آن افزایش تعداد تراکنشها در یک بلوک شبکه بلاک چین بیت کوین را شاهد باشیم.
سگویت مخفف عبارت Segregated Witness (امضاهای جداسازی شده) است که توسط محبوبترین کلاینت مرجع بیت کوین موسوم به بیت کوین کور (Bitcoin core)، در آگوست 2017 پیشنهاد شد و بر روی بلاک چین بیت کوین اعمال گردید. برای درک اینکه سگویت چگونه کار میکند، ابتدا باید از ساختار تراکنشهای بیت کوین آگاه باشید.
ساختار تراکنش ها در بیت کوین
بر خلاف پولهای بدون پشتوانه غیر نقد و حسابهای بانکی، شبکه بلاک چین بیت کوین (پایگاه دادههای بیت کوین) حسابها و مقادیر آنها را نگهداری نمیکند. بلکه بلاک چین است که تراکنشها را ذخیره میکند. تراکنشها در بیت کوین از لیستی از ورودیها و خروجیها تشکیل شدهاند. هریک از خروجیهای تراکنشها در بیت کوین، دارای دو قطعه (مشخصه) داده است: یکی مقدار و دیگری نشانی گیرنده آن مقدار.
آدرسها از کلید عمومی مشتق شدهاند و بنابراین تنها صاحب کلید خصوصی مرتبط با آن کلید عمومی میتواند وجوه ذخیره شده در خروجی تراکنش را باز کند. برای باز بودن وجوه، صاحب کلید خصوصی باید تراکنشی را که وجوه را به آدرس جدید ارسال میکند، امضا نماید. یک نمونه ساده تراکنش بیت کوین تنها با یک ورودی و یک خروجی به صورت زیر است.
قطعات دادهای و امضا در تراکنش مزبور به شرح زیر هستند:
الف) قسمت ورودی تراکنش بیت کوین
۱. هش تراکنش فعلی و یا TXID
۲. تعداد ورودیها، که در تراکنش مزبور ۱ است.
۳. تعداد خروجیها، که در تراکنش مزبور ۱ است.
۴. مرجع (Refrence) به تراکنش قبلی (هش تراکنش قبلی)
۵. شماره index در آرایه خروجی تراکنش قبلی. اگر تراکنش قبلی چندین خروجی داشته باشد، این شماره نشان میدهد که هدف تراکنش جاری خرج کردن کدامین (چندمین) خروجی در تراکنش قبلی است.
۶. امضای (هش) تراکنش جاری به همراه خروجی تراکنش قبلی با کلید خصوصی مرتبط با کلید عمومی منتشر شده در خروجی تراکنش قبلی. همچنین کلید عمومی در تراکنش قبلی در این قسمت اضافه میشود. این قسمت از تراکنش حجم حافظه بسیار زیادی را به خود تخصیص میدهد و لذا مورد هدف طرح سگویت قرار گرفته است.
ب) در قسمت خروجی، قطعات دادهای به شرح زیر است:
۷. مقداری بیت کوین ارسالی به آدرس جدید
۸. کلید عمومی دریافت کننده که به صورت هش شده است.
۹. تبدیل base256 به base58 از کلید عمومی دریافت کننده، که نتیجه آن آدرس گیرنده بیت کوین جدید است.
۱۰. هش بلوکی که تراکنش جاری در آن بلوک جای دارد.
۱۱. شماره ترتیب بلوک در زنجیره بلوکی (بلاک چین)
۱۲. مهر زمانی بلوکی که تراکنش جاری در آن بلوک جای دارد.
یکی از قسمتهای بسیار مهم تراکنش بیت کوین، قطعه مربوط به امضاست (در بند شماره ۶ در تصویر). در این قسمت کل تراکنش جاری در کنار خروجی تراکنش قبلی و توسط کلید خصوصی مربوط به کلید عمومی در خروجی تراکنش قبلی، هش میشود. یکی از ویژگیهای بسیار مهم توابع هش، خروجی تابع هش متفاوت خواهد شد. یعنی جامعیت و یکپارچگی (Integrity) تراکنشها حتی در آرشیو تراکنشهای بیت کوین حفظ میشود. البته وظیفه بررسی و صحت سنجی این مهم، بر عهده ماینرهاست. لذا کوچکترین تغییر در قطعات دادهای و یا دادههای مربوط به امضا در تراکنش و یا تراکنشهای قبلی، به بهم ریختگی امضا نه تنها در تراکنش جاری، بلکه در بلوکی که تراکنش در آن مستقر است و به دنبال آن کل زنجیره بلوکی (Blockchain)، منجر خواهد شد. شکل زیر این موضوع را به وضوح نشان میدهد.
تنها دلیل این موضوع، قرارگیری قطعه مربوط به امضا، در درون تراکنش بیت کوین است که به طور ذاتی و خودکار سپر دفاعی مستحکمی را در برابر هکرها قرار داده است. این حمله کنندگان میتوانند حتی خودشان ماینر نیز باشند!
سگویت (SegWit) چگونه کار میکند؟
بعد از اینکه با چگونگی انجام تراکنشها در شبکه بیت کوین و ساختار بلاک در بلاک چین آن آشنا شدید، حالا باید بدانید که سگویت چگونه کار میکند. سگویت با جداسازی دادههای مربوط به امضای دیجیتال از تراکنشها، اندازهی بلاک را افزایش میدهد به همین علت است که نام آن از عبارت Segregate به معنی جدا کردن و witnesses به معنی تصدیقها یا همان امضاها گرفته شده است.
در ساختار داده تراکنشهای بیت کوین، امضا (کدی که باعث گشودن بیت کوینها میشود) در کنار هر ورودی قرار دارد. برهمین اساس این کد در سراسر دادههای تراکنشها در شبکه بیت کوین پخش شده و گسترش یافته است. لذا شناسه تراکنش و یا هش تراکنش (TXID) از کل دادههای تراکنش ایجاد میشود.
در سگویت پیشنهاد این است که کد بازکردن بیت کوینها (امضا) به انتهای دادههای تراکنش منتقل شود. سپس شناسه تراکنش و یا هش تراکنش از تمام دادههای تراکنش به استثنای کد باز کردن بیت کوینها، ایجاد خواهد شد. شکل زیر این تغییر را نشان میدهد.
در نتیجه شناسه تراکنش و یا هش تراکنش فقط تحت تاثیر جابهجا شدن بیت کوینها در تراکنش قرار میگیرد و دیگر توسط کد مورد نیاز برای گشودن و تایید تراکنش (یعنی امضاهای مورد استفاده برای باز کردن بیت کوینهای موجود به طوری که بتوان آنها را خرج کرد)، تغییر پیدا نخواهد کرد. بنابراین در اصل بخش اعتبار سنجی (کد باز کردن قفل و یا امضا) را از بخش موثر تراکنش یعنی مبالغ، جدا کردهایم.
مزایای سگویت
رفع چکشخواری تراکنشها یا به زبان ساده تر فراهم کردن شرایط محافظت از انعطافپذیری (Malleability) تراکنشها در شبکه بیت کوین، به این واقعیت اشاره دارد که TXID یک تراکنش را میتوان با تغییر امضا در تراکنش تغییر داد.
این بدان معناست که هنگامی که تراکنش خود را به شبکه ارسال میکنید، هر نود (گره) در شبکه توانایی تغییر TXID را قبل از ارسال آن به گره (نود) دیگر را دارد.
در نهایت تراکنش شما در یک TXID متفاوتی نسبت به آنچه شما انتظار داشتید تحویل شبکه بلاک چین میشود که این موضوع تا حدودی آزار دهنده خواهد بود. با این حال اگر کد باز کردن تراکنش شما یعنی امضا، دیگر بخشی از TXID نباشد، دیگر هیچ نودی قادر به تغییر TXID تراکنش شما نخواهد بود.
بنابراین به عبارت دیگر سگویت (SegWit)، TXID شما را قابل اعتماد میسازد. همچنین سگویت باعث افزایش ظرفیت بلوک میشود. با توجه به اینکه کد باز کردن وجوه (امضاها) از قسمت دادههای تراکنش به بیرون منتقل شدهاند، این بدان معنی است که محاسبه اندازه بلوک نیز تغییر میکند. در پروتکل اصلی بیت کوین محدودیت اندازه بلوک، برابر ۱ مگابایت است و تراکنشها در مقیاس بایت اندازه گیری میشدند.
در سگویت محدودیت اندازه بلوک دیگر با واحد بایت اندازهگیری نمیشود. به جای آن بلوکها و تراکنش ها با یک متریک و معیار جدید به نام "وزن" مورد سنجش قرار میگیرند. مقادیر در سیستم جدید به صورت زیر است:
یک بلوک دارای حداکثر وزن ۴,۰۰۰,۰۰۰ است. یک بایت معمولی در یک تراکنش دارای وزن ۴ است. همچنین یک بایت امضا در تراکنش دارای وزن ۱ است.
بنابراین اساس، محدودیت اندازه بلوک در ۴ ضرب میشود تا محدودیت وزنی جدیدی را به ما بدهد. هر بایت در تراکنش نیز در ۴ ضرب میشود تا وزن تراکنش را مشخص کند. با این حال دادههای مربوط به امضا را در عدد ۱ ضرب میکنیم، که به شما تخفیف 75 درصدی از مقدار فضای موجود در یک بلوک را میدهد. لذا میتوانید بگویید که دادههای مربوط به امضا یک چهارم فضای مورد استفاده را در بر میگیرد، که فضای بیشتری را در بلوک برای تراکنشها، آزاد میکند.
هر بلوک در حال حاضر میتواند بیش از ۱ میلیون بایت (۱ مگابایت) باشد. بنابراین در حالی که محدودیت اندازه بلوک افزایش نیافته است، تخفیف وزنی برای دادههای امضا به این معنی است که بلوکها معمولا از حد مجاز ۱ مگابایت عبور خواهند کرد. در SegWit تقریبا ۱.۸۱ مگابایت افزایش اندازه بلوک را شاهد هستیم. در حال حاضر حدود ۶۰ درصد از حجم بلوک را اطلاعات مربوط به امضا تراکنشها تشکیل میدهد. بنابراین اگر وزن یک بلوک ۱ مگابایتی را که بطور معمول شامل مقداری از دادههای مربوط به امضاست را محاسبه کنیم، به اعداد زیر میرسیم:
لذا اگر یک بلوک میتواند حداکثر ۴ میلیون واحد وزن داشته باشد، ما میتوانیم میزان افزایش در حجم بلوک را به صورت زیر نشان دهیم:
پس میتوان گفت که سگویت با یک تیر دو نشان میزند؛ فضای بلاک را خالیتر کرده و مشکل انعطافپذیری تراکنشها برطرف میکند. سگویت در واقع دادههای مربوط به امضای بخش اطلاعات ورودی را به بخش جداگانهای که در انتهای بلاک قرار دارد انتقال میدهد و به این ترتیب محاسبه شناسه تراکنش را بسیار آسانتر میکند و در نتیجه تا حد زیادی از حمله انعطافپذیری جلوگیری میکند. سگویت نه تنها این مشکل اساسی را از سر راه بیت کوین برداشت، بلکه زمینه را برای روی کار آمدن راهکارهای مقیاسپذیری لایهی دوم فراهم کرد. یکی از این راهکارها شبکهی لایتنینگ بود. با خارج شدن حجم عمدهای از تراکنشها از زنجیرهی اصلی و پردازش آنها بهصورت برونزنجیرهای، ظرفیت شبکه بهشکل چشمگیری افزایش مییابد.
بیشتر بخوانید:
بیت کوین چیست؟ همه چیز درمورد بیت کوین + ویدیو
بیت کوین چگونه کار می کند؟ + ویدیو
بیت کوین حباب اقتصادی است یا طلای دیجیتال؟
استخراج بیت کوین چگونه انجام می شود؟
هش ریت (Hash Rate) به زبان ساده
منبع: مرکز تحقیقات بلاکچین