UTXO چیست؟ آشنایی با مفهوم خروجی خرج‌نشده تراکنش

UTXO چیست؟ آشنایی با مفهوم خروجی خرج‌نشده تراکنش

UTXO چیست؟ آشنایی با مفهوم خروجی خرج‌نشده تراکنش

UTXO مخفف عبارت Unspent Transaction Output به‌معنای «خروجی خرج‌نشده تراکنش» است. این اصطلاح هیچ پیشینه‌ای در زبان انگلیسی ندارد و تولد آن به دنیای بیت کوین برمی‌گردد. به‌بیان ساده، هر UTXO مانند یک اسکناس نقدی عمل می‌کند که ارزشی را (به‌صورت بیت کوین) در خود ذخیره می‌کند و فقط یک‌ بار می‌توان آن را خرج کرد. بنابراین هر تراکنش بیت کوین، (حداقل) یک UTXO را مصرف کرده و یک یا چند UTXO جدید را ایجاد می‌کند. UTXO اصطلاحی کاملاً فنی است و از بطن کد شبکه بیت‌ کوین نشئت گرفته است. همین اصطلاح عجیب‌وغریب، تقریباً مهم‌ترین مفهومی است که دانستن آن برای کسی که می‌خواهد کمی بیشتر از جزئیات بیت‌ کوین بداند و عضو تأثیرگذارتری در این شبکه باشد لازم است. تعریفی که در بالا ارائه کردیم، توضیح ساده‌ای از مفهوم UTXO بود و جنبه‌های فنی آن را در بر نمی‌گرفت. برای درک بهتر جنبه‌های فنی UTXO، آن را به بخش‌های کوچک‌تر تقسیم می‌کنیم. سپس هر بخش را به‌صورت جداگانه توضیح می‌دهیم تا در پایان با جمع‌بندی توضیحات، به مفهوم دقیق این عبارت برسیم. برای این کار، از بزرگ‌ترین جزء این سیستم و از موتور محرک شبکه بیت کوین، یعنی فناوری «بلاک چین» شروع می کنیم و سپس اجزای کوچک‌تر را یک‌به‌یک بررسی می‌کنیم.

بلاک چین چیست؟

ماشین بیت کوین از ساختارهای ریاضی مشخصی تشکیل شده است. منظور از این ساختارها، مفاهیم انتزاعی ریاضی هستند که هریک معنای خاص خود را دارند. هر ساختار می‌تواند شامل داده‌هایی خام باشد و یا اینکه خود از ساختارهای کوچک‌تر تشکیل شود. پروتکل بیت کوین داده‌های درون هر ساختار را با توجه به معنی آنها تفسیر می‌کند و به کار می‌بندد. بیایید از باشکوه‌ترین و برجسته‌ترین ساختار داده سال‌های اخیر، یعنی بلاک چین شروع کنیم. بلاک چین از دو کلمه بلاک (Block) به معنی بلوک و چین (Chain) به معنی زنجیره تشکیل شده است. پس همان‌ طور که از نامش پیداست، بلاک چین یک زنجیره از بلوک‌هاست. هر یک از بلاک‌ها هم شامل یک ساختار ریاضی و تشکیل‌دهنده یک ساختار بزرگ‌تر هستند. بلاک چین بزرگ‌ترین ساختار موجود در پروتکل بیت کوین است. در زمان نگارش این مقاله، بلاک چین بیت‌ کوین چیزی حدود ۳۷۰ گیگابایت حجم دارد و از یک فهرست بسیار طولانی از بلاک‌ها تشکیل می‌شود.
تغییرات حجم داده‌های بلاک چین بیت کوین
تغییرات حجم داده‌های بلاک چین بیت کوین از سال ۲۰۰۹ تاکنون؛ منبع: blockchain.com
هر بلاک شامل دو ساختار است که یکی از آنها سربرگ (Header) و دیگری فهرست تراکنش‌ها (‌Transaction List‌) نام دارد. بخش سربرگ یا هدر، دربرگیرنده اطلاعات کلی و اصلی مربوط به هر بلاک است. علاوه بر این، خروجی رمزنگاری‌شده یا همان هش بلاک قبلی هم در سربرگ بلاک‌های جدید قرار می‌گیرد. هش بلاک قبلی در واقع به بلاک قبلی در زنجیره (یا بلاک والد) اشاره دارد. به این ترتیب، هر بلاک به بلاک قبلی خود و بلاک قبلی نیز به بلاک قبل‌تر خود اشاره می‌کند و این زنجیره به همین شکل ادامه دارد تا به اولین بلاک ایجاد شده یا همان بلاک جنسیس برسد.
این روند اشاره به بلاک قبلی، یک ساختار زنجیره‌ای از بلاک‌ها ایجاد می‌کند که در حقیقت همان بلاک چین است. در واقع بلاک چین چیزی بیش از یک فهرست پیوند‌دهنده بلاک‌ها به یکدیگر نیست و مزیت اصلی آن، تغییرناپذیری داده‌هاست. چراکه با تغییر محتوای هر بلاک، هش خروجی آن به‌طرز غیرقابل پیش‌بینی تغییر می‌کند و از آنجا که بلاک‌ها از طریق هش به یکدیگر متصل هستند، هش تمامی بلاک‌های بعدی زنجیره هم نامعتبر خواهد شد. این ایده به‌ظاهر ساده، یکی از پایه‌های امنیت شبکه بلاک چین است. شکل زیر داده‌های موجود در بلاک شماره ۱۰ بلاک چین بیت کوین را نشان می‌دهد. بخش Summary (خلاصه)، داده‌های موجود در سربرگ را مشخص می‌کند و بخش زیر آن نیز شامل داده‌های مربوط به تراکنش‌هاست.
داده‌های موجود در بلاک شماره ۱۰ بلاک چین بیت کوین
برای مشاهده سایز اصلی، روی عکس کلیک کنید.
در قسمت Timestamp (برچسب زمانی) بلاک، می‌بینیم که این بلاک در تاریخ ۹ ژانویه ۲۰۰۹ (۲۰ دی ۱۳۸۷) استخراج شده است. این تاریخ نشان می‌دهد که احتمالاً ساتوشی ناکاموتو (خالق بیت کوین) شخصاً این بلاک را استخراج کرده است. در فهرست تراکنش‌ها نیز تنها یک تراکنش با ارزش ۵۰ بیت کوین وجود دارد که نشان می‌دهد بیت کوین‌ها به یک آدرس ارسال شده‌اند. این تراکنش، یک تراکنش کوین بیس بوده است؛ به این معنی که یک ماینر این بیت کوین‌ها را در ازای استخراج بلاک، به‌عنوان پاداش دریافت کرده است. در آن زمان کسی جز ساتوشی ناکاموتو در شبکه نبوده که بتواند این تعداد بیت کوین را معامله کند. بنابراین تنها احتمالی که وجود دارد این است که این تراکنش، مربوط به دریافت پاداش استخراج بوده است. در این تراکنش، ۵۰ بیت کوین به‌عنوان پاداش حل معمای اثبات کار به ماینر داده شده است. اکنون که ایده اصلی پشت بلاک‌های بلاک چین بیت کوین را می‌دانیم، بیایید یک قدم جلوتر برویم و بر روی مفهوم «تراکنش» تمرکز کنیم.

رابطه UTXO و تراکنش در بلاک چین

تراکنش‌ها در شبکه بلاک چین، دارای ساختارهای کوچک‌تری هستند که هر یک معنا و کاربردی متفاوت دارند.
رابطه UTXO و تراکنش در بلاک چین
رابطه UTXO و تراکنش در بلاک چین
اولین ساختار، «نسخه تراکنش» (Transaction Version) است. نسخه هر تراکنش در واقع شماره‌ای است که نوع تراکنش را به شبکه معرفی می‌کند. نودها هم با خواندن شماره نسخه هر تراکنش، می‌توانند مجموعه قوانینی را که برای تأیید این تراکنش خاص استفاده می‌شود، شناسایی و استفاده کنند. آخرین ساختار تراکنش‌ها، «قفل زمانی» (Time Lock /Lock Time) است. این ساختار مشخص می‌کند که آیا یک تراکنش می‌تواند بلافاصله وارد بلاک چین شود یا پس از گذشت مدتی مشخص اجازه ورود به بلاک چین را پیدا خواهد کرد. در میان دو ساختار معرفی‌شده در بالا، فهرستی از ورودی‌ها (Input) و خروجی‌ها (Output) قرار دارند. مفهوم «ورودی» و «خروجی»، مهم‌ترین موضوعات موردبحث ما در این مقاله هستند. خروجی هر تراکنش از یک قفل (Lock) رمزگذاری‌شده و یک مقدار (Value) تشکیل شده است. البته خروجی‌ها جزئیات زیادی دارند که در این مقاله برخی از آنها را نادیده می‌گیریم و به توضیح کوتاه ساختارهای قفل و مقدار بسنده می‌کنیم. بین دو ساختار ورودی و خروجی هر تراکنش، یک وابستگی مهم وجود دارد. برای درک بهتر، تصور کنید که خروجی‌ها به‌نوعی قفل شده‌اند و ورودی‌ها، کلید بازکردن قفل آنها را فراهم می‌کنند. منظور از «مقدار» هم ساتوشی‌هایی است که در داخل خروجی قفل شده‌اند (ساتوشی نام کوچک‌ترین واحدهای بیت کوین است). ورودی هر تراکنش یک اشاره‌گر (Pointer) و یک کلید برای بازکردن قفل خروجی‌ها دارد. اشاره‌گر یک ورودی، به خروجی یک تراکنش قبلی اشاره دارد. کلید نیز برای بازکردن قفل خروجی قبلی (که اشاره‌گر به آن اشاره می‌کند) استفاده می‌شود. هر بار که یک ورودی، قفل خروجی را با موفقیت باز می‌کند، این خروجی در پایگاه داده بلاک چین با عنوان «خرج‌شده» (Spent) علامت‌گذاری می‌شود و از این به بعد، غیرقابل استفاده خواهد بود. بنابراین می‌توانید یک تراکنش را به‌عنوان «عملیات یا رفتاری انتزاعی» تعریف کنید که قفل خروجی‌های قبلی را باز می‌کند و خروجی‌های جدید را تولید می‌کند. ورودی‌های جدید تراکنش‌ها، می‌توانند مجدداً به خروجی‌های جدید تولید‌شده ارجاع دهند.

UTXO یا «خروجی خرج‌نشده تراکنش»، تمام آن خروجی‌های قفل‌شده‌ای هستند که هنوز هیچ ورودی‌ای قفل آنها را باز نکرده است و بنابراین هنوز خرج نشده‌اند.

به‌محض اینکه قفل یک خروجی باز می‌شود، می‌توانیم فرض کنیم که از زنجیره گردش خارج شده و خروجی‌های جدید جای آن را خواهند گرفت. بنابراین مجموع مقادیر خروجی‌هایی که قفل آنها باز شده (صرف‌نظر از کارمزد تراکنش‌ها)، همیشه با مجموع مقادیر خروجی‌های جدید ایجادشده برابر است و بدین ترتیب کل موجودی در گردش بیت کوین همیشه ثابت می‌ماند. شکل زیر رفتار یک تراکنش در شبکه را نشان می‌دهد. این تراکنش، برخی از UTXOهای قبلی را مصرف می‌کند و UTXOهای جدیدی تولید می‌کند.
رابطه UTXO و تراکنش در بلاک چین
رابطه UTXO و تراکنش در بلاک چین
بنابراین UTXO چیزی بیش از بیت کوین‌های قفل‌شده نیست. شما می توانید UTXOهای خود را به‌عنوان جعبه‌ای تصور کنید که حاوی چندین بیت کوین است. این جعبه قابلیت نگهداری از هر مقدار بیت کوین را دارد. زمانی که شما مقداری بیت‌ کوین دارید، مجموعه‌ای از UTXOها در بلاک چین متعلق به شماست. بنابراین می‌توانید UTXOهای خود را به‌عنوان جعبه‌هایی تصور کنید که حاوی بیت کوین هستند و فقط با کلید خصوصی شما باز می‌شوند. همان‌ طور که پیش‌تر هم اشاره شد، بلاک چین فهرستی از تمام تراکنش‌های انجام‌شده در شبکه است و با جستجو در داخل آن می‌توان تاریخچه‌ای از تراکنش‌های شبکه ایجاد کرد. از طریق این تاریخچه می‌توان هر خروجی را از همان لحظه‌ای که در تراکنش کوین بیس ایجاد شده، ردیابی کرد. شکل زیر نمونه‌ای از تاریخچه تراکنش‌های بیت کوین را نشان می‌دهد.
رابطه UTXO و تراکنش در بلاک چین
رابطه UTXO و تراکنش در بلاک چین
همان‌ طور که در نمودار بالا مشاهده می‌کنید، ورودی ۰ در تراکنش ۴، به خروجی ۰ از تراکنش ۲ برمی‌گردد. خروجی‌هایی که در آخرین تراکنش‌ها با نام‌های تراکنش ۳ و تراکنش ۶ نشان داده شده‌اند و مقادیر آنها ۱۰ و ۲۰ هزار ساتوشی است، UTXO هستند؛ چون هنوز هیچ یک از ورودی‌های تراکنش‌ها به آنها اشاره نکرده است. هنگامی که یک ورودی به آنها اشاره کند و کلید صحیحی برای بازکردن قفل آنها فراهم کند، UTXOها مصرف می‌شوند و دیگر UTXO محسوب نمی‌شوند. UTXOهای جدید، جایگزین UTXOهای مصرف‌شده‌ خواهند شد و تراکنش‌های بعدی با آنها ایجاد می‌شوند. اگر به خروجی ۰ تراکنش ۱ توجه کنید، متوجه می‌شوید که مقدار آن ۴۰ هزار ساتوشی است؛ اما یک خروجی جدید از همان ورودی ایجاد شده که دارای مقدار ۳۰ هزار ساتوشی است. مقدار ۱۰ هزار ساتوشی که اختلاف بین این دو خروجی است، همان کارمزد تراکنش است که برای درج یک تراکنش خاص در یک بلوک جدید به ماینرها پرداخت می‌شود. هرچه کارمزد تراکنش بالاتر باشد، احتمال اینکه ماینرها آن را برای درج در بلوک بعدی انتخاب کنند بیشتر می‌شود.

مجموعه UTXOها در بلاک چین

مجموع همه UTXOهای شبکه در هر لحظه موردنظر را «مجموعه UTXOها» یا (UTXO set) می‌خوانند. همه‌ نودهای بیت کوین این مجموعه را در خود ذخیره و نگهداری می‌کنند. از نظر فنی، این مجموعه وضعیت زنجیره (chainstate) را نشان می‌دهد و در بخش مربوط به وضعیت زنجیره هر نود ذخیره می‌شود. وضعیت زنجیره با هر بار پذیرش بلوک جدید در زنجیره بلاک، به‌روز‌رسانی می‌شود. بلاک جدید شامل فهرستی از آخرین تراکنش‌هاست. این فهرست مشخص می‌کند که کدام یک از UTXOهای قبلی مصرف شده و کدام UTXO جدید ایجاد شده است. هر نود بیت کوین در شبکه همیشه یک کپی دقیق از مجموعه UTXO‌ها را در حافظه محلی خود ذخیره می‌کند.
نمایش مجموعه UTXOها در یک نود بیت کوین
نمایش مجموعه UTXOها در یک نود بیت کوین
در زمان نگارش این مقاله، اندازه این مجموعه ۴.۲۵ گیگابایت است. به‌بیان ساده‌تر، اگر مقداری بیت کوین دارید، UTXOهای شما در حافظه همه فول نودهای بیت کوین حضور دارند. اما نگران نباشید؛ آنها نمی‌توانند قفل این UTXOها را باز کنند.
حجم مجموعه UTXOها
منبع: statoshi.info
همان‌ طور که قبلاً هم اشاره کردیم، UTXOها همان بیت کوین‌ها هستند. آنها در کیف پول‌های مختلف، به روش‌های متفاوتی برای کاربران نمایش داده می‌شوند.

هنگامی که برای استعلام موجودی بیت کوین خود در درون کیف پولتان جستجو می‌کنید، کیف پول شما در پس‌زمینه، در حال جمع‌کردن همه UTXOهای مربوط به شماست و در نهایت مجموع ارزش این UTXOها را به شما نشان می‌دهد.

این مبلغ، موجودی نهایی کیف پول شماست. این محاسبات در پس‌زمینه و به‌دور از چشم کاربران انجام می‌شوند و نتیجه به کاربر نمایش داده می‌شود. البته کیف پول‌های تخصصی‌تر بیت کوین مانند الکتروم، امکان مشاهده مستقیم UTXOها و مدیریت آنها را هم در اختیار کاربران قرار می‌دهند.

مقایسه مدل UTXO با مدل مبتنی بر حساب

درمورد مفهوم مبهمی مانند UTXO در یک سیستم پرداخت دیجیتال شاید کمی غیر‌قابل‌درک به نظر برسد. UTXO ذاتاً به پول نقد واقعی شباهت دارد؛ در حالی که در پلتفرم‌های پرداخت دیجیتال، ما با استفاده از حساب کاربری خود معاملات را انجام می‌دهیم. تفاوت این دو مدل تقریباً مانند تفاوت خرید با پول نقد و خرید با استفاده از کارت بانکی است. عملکرد مدل‌های مبتنی بر حساب بسیار ساده است. مبالغ پرداختی در این مدل می‌تواند هرچیزی و به هر روشی باشد و مفهوم باقی‌مانده در آنها وجود ندارد. با هر تراکنش دریافتی، مبلغ تراکنش به حساب شخص اضافه می‌شود و با هر تراکنش پرداختی، مبلغ از حساب او کسر می‌شود.   بلاک چین‌های گوناگون از روش‌های متنوعی برای انتقال ارزش استفاده می‌کنند. اما به‌طور کلی می‌توان این روش‌ها را به دو مدل «مبتنی بر UTXO» و «مبتنی بر حساب» تقسیم کرد. بلاک چین‌هایی مثل بیت کوین و لایت کوین، مبتنی بر UTXO هستند و بلاک چین‌های جدیدتر مثل اتریوم و پولکادات، بر اساس حساب‌ها کار می‌کنند. با این حال که هدف هر دوی این مدل‌ها مشترک است (پرداخت پول به کاربران)، هر دو مدل مزایا و معایب خاص خود را دارند. مدل‌های مبتنی بر UTXO، از منظر مقیاس‌پذیری و حفظ حریم خصوصی بهتر عمل می‌کنند. هر UTXO فقط یک‌بار و به‌طور کامل قابل‌مصرف است. از آنجا که این منطق ساده‌تر است، تأیید تراکنش‌ها هم می‌تواند به‌صورت موازی انجام شود. همچنین الگوها و تکنیک‌های مختلف تقویت حریم خصوصی می‌توانند به‌سادگی با استفاده از مدل UTXO پیاده‌سازی شوند. با وجود همه این نکات مثبت، نقطه ضعف مدل‌های مبتنی بر UTXO، تجربه کاربری آنهاست. کار با UTXOها به حدی برای کاربران سخت بوده که اکثریت کیف پول‌ها مجبور به صرف‌نظر کردن از این مدل‌ها و نمایش موجودی بیت کوین‌ها در قالب حساب‌ها بوده‌اند. علاوه بر این، مدل مبتنی بر UTXO به قراردادهای هوشمند عجیب و غریبی محدود شده‌ است که بر اساس کل مانده حساب کاربر اجرا می‌شوند. به همین دلایل ، اتریوم مدل UTXO را رد کرده و از یک مدل ساده و انعطاف پذیرتر بر پایه حساب کاربری استفاده می‌کند. اما در پایان باید گفت که هر دو مدل تراکنش‌های خود را با موفقیت انجام می‌دهند.  

نتیجه‌گیری

برای مفهوم بیشتر مقاله مطلب زیر را بخوانید و احتمالاً پس از خواندن آن خیال شما هم کمی راحت‌تر می‌شود.
  • UTXO جعبه قفل شده‌ای پر از سکه است؛
  • با تهیه کلید مناسب می‌توان قفل جعبه را باز کرد؛
  • وقتی مقداری بیت کوین خرج می‌کنید، یک تراکنش ایجاد می‌کنید (یا کیف پول این کار را برای شما انجام می‌دهد). این تراکنش برخی UTXOهای قدیمی را مصرف می‌کند و یک دسته UTXO جدید ایجاد می‌کند؛
  • UTXO همیشه به‌طور کامل مصرف می شود و باقی‌مانده UTXO به‌طور خودکار توسط کیف پول شما ایجاد می‌شود. پس از اتمام پرداخت، کیف پول موجودی صحیح شما را محاسبه کرده و به شما نمایش می‌دهد؛
  • هر UTXO با یک آدرس مرتبط است. انواع مختلف آدرس نشان‌دهنده انواع مختلف UTXO است؛
  • همیشه باید کلیدهای خود را در اختیار داشته باشید تا قفل UTXO باز شود. نداشتن کلید به معنی نداشتن بیت کوین است.
مقالات مرتبط
پاسخ دهید

آدرس ایمیل شما منتشر نخواهد شد.قسمتهای مورد نیاز علامت گذاری شده اند *