UTXO چیست؟ با خروجی خرج نشده تراکنش آشنا شوید
یکی از مفاهیم مهم در دنیای بلاک چین، نحوه انجام تراکنشها در شبکه است. UTXO یا خروجیهای خرج نشده تراکنش، سیستمی است که شبکه بیت کوین، لایت کوین، بیت کوین کش و بسیاری از ارزهای دیجیتال از آن برای مدیریت جابهجایی کوینها بین آدرسهای مختلف یا همان کیف پولهای دیجیتال استفاده میکنند. در نگاه اول اسم UTXO کمی گنگ به نظر میرسد، اما این سیستم بر اساس یک مفهوم کاملا ساده طراحی شده که در این مقاله به طور مفصل در مورد آن صحبت خواهیم کرد.
برای درک مطالب این مقاله حتما باید با تعاریف اولیه بلاک چین و شبکه بیت کوین آشنا باشید. اما برای درک بهتر موضوع، توضیح مختصری هم از ساختار تراکنشها در بلاک چین میدهیم. سپس به سراغ موضوع جذاب UTXO یا خروجی های خرج نشده تراکنش میرویم. تا پایان همراه ما باشید.
منظور از UTXO یا خروجیهای خرج نشده تراکنش چیست؟
عبارت UTXO کوتاهشده Unspent Transaction Output به معنی خروجی های خرج نشده تراکنش است. این اصطلاح به مقدار ارز دیجیتالی که بعد از هر تراکنش در کیف پول دیجیتال باقی میماند اشاره دارد. به بیان دیگر، UTXO مقدار ارز دیجیتالی باقیمانده از هر تراکنش در کیف پول مبدا و مقصد است که میتوان دوباره آن را خرج کرد.
شاید این سوال به ذهنتان خطور کند که این یک مسئله واضح است و همیشه میتوان باقیمانده موجودی را دوباره خرج کرد. درست است، اما از آنجایی انتقال کوینها در بلاک چینی مثل بیت کوین با سازوکار خاصی انجام میشود، ابتدا باید نگاهی به این سازوکار بیندازیم تا بتوانیم UTXO را درک کنیم.
نحوه انجام تراکنشها در بلاک چین بیت کوین (و بلاک چینهای مشابه)
نحوه انجام تراکنشها و جابهجایی ارزهای دیجیتال بین آدرسهای بلاک چینی، پیچیدگیهای زیادی دارد؛ باید توجه داشته باشیم که کریپتوکارنسیها هیچگاه در جایی به جز کیف پول ذخیره نمیشوند که آن هم یک آدرس عمومی روی شبکه بلاک چین است. جابهجایی یک ارز دیجیتال در قالب یک یا چند تراکنش صورت میگیرد و هر تراکنش از مقداری «ورودی» (inputs) و «خروجی» (outputs) تشکیل شده است. سپس با کمک «کلید خصوصی و عمومی» (Private and Public Key) عملیات ارسال انجام میشود.
به طور خلاصه، مراحل کار از این قرار است که کاربر برای ارسال مقداری ارز دیجیتال، آدرس مقصد (کلید عمومی مقصد)، مبلغ تراکنش (مقدار ارز دیجیتال) و کارمزد تراکنش را مشخص میکند. سپس به کمک کلید خصوصیِ خود تراکنش را امضا میکند. برای آشنایی با دنیای جذاب امضای دیجیتال میتوانید مقاله «امضای دیجیتال چیست؟» را مطالعه کنید.
تراکنش ارسالی کاربر به دست نودهای شبکه میرسد، آنها موجودی کیف پول مبدأ و صحت امضاها را بررسی میکنند و در صورت تأیید، تراکنش برای قرار گرفتن در بلاک و اضافه شدن به بلاک چین آماده میشود. پس از انجام کامل تراکنش، فرستنده و گیرنده با چک کردن موجودی کیف پولشان، از انتقال این مبلغ مطلع میشوند. در حقیقت چون بیت کوین و تمام کریپتوکارنسیها ماهیت فیزیکی ندارند، تنها موجودی باقیمانده کیف پولها مشخصکننده مقدار کوین هر فرد است.
نحوه عملکرد UTXO یا خروجیهای خرج نشده تراکنش
گفتیم که UTXO به مقدار خروجی از یک تراکنش گفته میشود که همچنان قابل خرج است، یعنی میتوان آن را به عنوان وروی یک تراکنش دیگر استفاده کرد. به بیان دیگر UTXOها مشخصکننده آغاز و پایان تراکنشها هستند. در ادامه عملکرد دقیق آنها را توضیح میدهیم.
شاید تا به حال تصور شما در مورد تراکنشهای بیت کوین این بوده که مثلا زمانی که علی میخواهد ۱ بیت کوین برای سارا ارسال کند، ۱ بیت کوین به صورت یکپارچه از کیف پول او کاسته و به کیف پول سارا اضافه میشود. انتقال این مقدار بیت کوین در نهایت همین نتیجه را رقم میزند اما نحوه انجام آن کاملا متفاوت است.
موجودی هر کیف پول در شبکه بیت کوین به صورت مجموع خروجی های خرج نشده تراکنشهای قبلی یا همان مجموع UTXOها ذخیره و نمایش داده میشود. فرض کنیم یک کیف پول به تازگی ساخته شده و به عنوان اولین تراکنش، ۱ بیت کوین برای آن ارسال شده است. این کیف پول در حال حاضر شامل یک UTXO به ارزش ۱ بیت کوین است.
اگر این کیف پول مقدار ۰.۵ بیت کوین خود را خرج کند، یعنی ۰.۵ بیت کوین به یک آدرس دیگر ارسال کند، سیستم ابتدا تمام UTXO لازم برای انجام تراکنش را به شبکه ارسال میکند، از این مقدار، ۰.۵ بیت کوین به مقصد و ۰.۵ بیت کوین به یک آدرس جدید ارسال و از آنجا مجدد به مقصد باز میگردد. این ۰.۵ بیت کوین برگشتی، در حقیقت همان خروجی خرج نشده تراکنش یا همان UTXO است که موجودی نهایی کیف پول مبدأ را بعد از هر تراکنش مشخص میکند.
بعد از انجام تراکنش مثال بالا، یک UTXO جدید در حساب مبدأ به ارزش ۰.۵ بیت کوین وجود خواهد داشت. اما در حساب مقصد چه خبر است؟ فرض کنیم کیف پول مقصد، قبل از این تراکنش شامل ۲ بیت کوین بوده که آن هم از UTXOهای متفاوتی مثلا به صورت ۱، ۰.۷ و ۰.۳ بیت کوین تشکیل شده باشد. (مجموع این UTXOها برابر ۲ بیت کوین است). نیم بیت کوین هم که برای آن ارسال شد، پس الان موجودی مقصد ۲.۵ بیت کوین است که در قالب ۴ خروجی خرج نشده ذخیره شده است. با پیگیری هم کدام از این UTXOها میتوان تکتک تراکنشها و انتقالات شبکه را ردیابی کرد.
حال اگر کیف پول مقصد بخواهد مثلا ۰.۲ بیت کوین خود را خرج کند، سیستم یکی از UTXOهای موجود مثلا ۰.۳ بیت کوین را برای شبکه ارسال میکند و میگوید که ۰.۲ آن را برای مقصد بعدی و ۰.۱ آن را به مبدا ارسال کند. به این ترتیب UTXO قبلی از بین رفته و دو UTXO جدید و قابل خرج کردن به وجود میآید. طبیعیست که در این مثال اگر به جای ۰.۳ بیت کوین بخواهیم ۲.۴ بیت کوین ارسال کنیم، سیستم به طور خودکار از چند UTXO موجود برای تأمین مقدار بیت کوین لازم استفاده میکند.
نکته قابل توجه این است که UTXOها را نمیتوان به مقدار کوچکتری تقسیم کرد و هر کدام از آنها فقط یکبار قابلیت خرجکردن دارند. پس در هر تراکنش، یک یا چند UTXO به طور کامل ارسال میشود و در صورت زیاد بودن، بخش اضافی به صورت UTXO جدید به مبدا برمیگردد. کارمزد تراکنش نیز از UTXO جدید کاسته میشود.
اهمیت سیستم UTXO در بلاک چین
پیادهسازی سیستم UTXO نقش مهمی در سادهسازی و پیگیری تراکنشها در بلاک چین دارد. در حقیقت به کمک این سیستم، به جای ردیابی تکتک تراکنشها، فقط کافیست مقدار سکههای خرج نشده تراکنش یا همان UTXOها را ردیابی کرد.
در شبکهای مثل بیت کوین، هر مقدار کوین یا بهتر بگوییم هر UTXO فقط یکبار قابلیت خرج کردن دارد و با خرج شدن آن، یک یا چند UTXO جدید به وجود میآیند و این روند مدام ادامه پیدا میکند. در حقیقت تمام موجودیهای فعلی و قابل خرج در تمام کیف پولها از یک تا چندین هزار UTXO تشکیل شدهاند. این موجودیها یا پاداشهای استخراج هستند که مستقیما به کیف پول واریز شدهاند و یا UTXOهای به وجود آمده در اثر انجام تراکنشهای قبلی هستند.
علاوهبراین، خروجیهای خرج نشده تراکنش، نقش مهمی در جلوگیری از «مشکل دوبار خرج کردن» (Double Spending) ایفا میکنند و باعث میشوند کوینهایی را که وجود ندارند نتوان خرج کرد. نودهای شبکه، سابقه تمام UTXOها را به صورت یک پایگاه داده نگهداری میکنند. اگر فردی بخواهد چیزی را خرج کند که در این پایگاه داده وجود نداشته باشد، تراکنش او توسط نودها رد خواهد شد.
مشکل سیستم UTXO
همانطور که گفتیم هر نود، یک نسخه از پایگاهداده UTXO در اختیار دارد که در اصطلاح به آنها Chainstate گفته میشود و بعد از تشکیل هر بلاک جدید، اطلاعات Chainstate نیز آپدیت میشود. این اطلاعات در «رم» (RAM) ذخیره میشوند و حجم آنها نقش مهمی در کارکرد نود شبکه خواهد داشت. با افزایش تعداد تراکنشها و اندازه کلی بلاک چین، پایگاهداده UTXO نیز در حال بزرگترشدن است. این باعث میشود که در دراز مدت، هزینه راهاندازی «نود کامل» (Full Node) در شبکهای مثل بیت کوین افزایش پیدا کند و در نتیجه افراد کمتری قادر به انجام این کار باشند که در نهایت باعث متمرکزتر شدن شبکه میشود.
در حال حاضر حجم هر بلاک در شبکه بیت کوین برابر با ۱ مگابایت است و سالانه بیش از ۱۰۰ میلیون تراکنش به این بلاک چین اضافه میشود. به ازای هر UTXO حدود ۵۰ بایت به این حجم اضافه میشود که این یعنی سالانه ۵۰ گیگابایت فضای بیشتر! البته محدود بودن حجم هر بلاک به ۱ مگابایت روی تولید UTXOها تأثیر دارد؛ یعنی در صورت افزایش حجم هر بلاک (که ممکن است برای افزایش مقیاسپذیری و سرعت شبکه مورد در آینده رخ دهد)، UTXOها نیز حجم بیشتری پیدا خواهند کرد و در مجموع راهاندازی نود در شبکه، کاری پرهزینهتر خواهد شد.
راه حلهای مشکل کمبود فضای ذخیره UTXOها
خوشبختانه چند راهحل کاربردی برای حل مشکل کمبود فضای ذخیره UTXO وجود دارد. نودها میتوانند اطلاعات UTXOها را به جای RAM، در هاردهای SSD یا دیگر هارددیسکها ذخیره کنند. البته سرعت حافظههای RAM تا هزار برابر بیشتر از حافظههای هارد است، اما تا زمانی که بتوانند زیر ۱۰ دقیقه، یعنی مدت زمان تشکیل هر بلاک در شبکه بیت کوین، این کار را انجام دهند، مشکلی پیش نخواهد آمد.
علاوه بر این، توسعهدهندههای بیت کوین بهطور مداوم در حال توسعه تراکنشهای شبکه و بهبود پایگاه داده UTXO هستند. همچنین راهحلهای بهبود مقایسپذیری مثل «سگویت» (Segwit) و… به طور غیرمستقیم در کاهش سرعت رشد پایگاه داده UTXO تأثیر مثبت دارند.
سخن پایانی
در این مقاله آموختیم که تراکنشها در بلاک چینی مثل بیت کوین (و شبکههای مشابه) در عمل چگونه انجام میشوند. به طور خلاصه میتوان اینطور گفت مدیریت موجودی و انتقال کوینهای کیف پولها بر اساس سیستم UTXO یا خروجیهای خرج نشده تراکنش انجام میشود. UTXOها در حقیقت بیت کوینها (یا رمزارزهایی) هستند که بعد از هر تراکنش، ایجاد شده و به کیف پول مقصد اضافه میشوند یا به کیف پول مبدا برمیگردند.
هر UTXO را فقط یکبار میتوان خرج کرد. زمانی که میخواهیم تراکنشی به شبکه ارسال کنیم، در حقیقت شبکه از UTXOهای قبلی موجود در کیف پولمان استفاده میکند. از آنجایی که نمیتوان UTXOها را به قسمتهای کوچکتری تبدیل کرد، آنها به صورت کامل به شبکه ارسال میشوند و مقدار اضافی آنها به صورت یک خروجی خرج نشده به کیف پول مبدا برمیگردد و قابل خرج است.
سیستم UTXO مدیریت حسابها در بلاک چین را سادهتر و امکان حملاتی مثل دوبار خرج کردن در شبکه را کاهش میدهد. مشکل این سیستم تامین فضای لازم برای ذخیره پایگاه داده UTXO است، زیرا نودهای شبکه این اطلاعات در RAM سیستم خود نگهداری میکنند.
برای دریافت مشاوره تخصصی رایگان از کارشناسان ما، اطلاعات خواسته شده رو تکمیل فرمایید.
درود . بسیار تا بسیار عالی