UTXO چیست؟ منطق واقعی موجودی کیف پول بیت کوین
برای ثبت سفارش به حساب نیاز دارید. ثبت نام رایگان است.
کیف پول شما می نویسد ۰.۰۵ بیت کوین دارید. حالا یک خبر عجیب: چنین عددی هیچ جای شبکه بیت کوین ذخیره نشده است. نه در حسابی به نام شما، نه در دفتری، هیچ جا.
آن عدد را کیف پولتان همان لحظه محاسبه کرده است، از روی چیزهایی به نام UTXO. اگر بدانید UTXO چیست، سه چیز دیگر هم برایتان روشن می شود: چرا کارمزد تراکنش هایتان گاهی بی دلیل بالاست، چرا گاهی مبلغی «باقی مانده» به کیف پولتان برمی گردد، و چرا بیت کوین اصلا این طور طراحی شده است.
UTXO مخفف Unspent Transaction Output است، یعنی خروجی خرج نشده یک تراکنش.
هر تراکنش بیت کوین یک یا چند خروجی می سازد. هر خروجی مقدار مشخصی بیت کوین دارد و با یک قفل بسته شده که فقط کلید خصوصی صاحبش بازش می کند. تا وقتی کسی آن خروجی را خرج نکرده باشد، به آن UTXO می گویند. به محض اینکه خرج شد، دیگر UTXO نیست و برای همیشه از فهرست بیرون می رود.
ساده ترین تشبیه: هر UTXO یک اسکناس است. اسکناس ها مبلغ های مختلفی دارند، در جیب شما هستند، و هر کدام فقط یک بار خرج می شوند.
بانک شما مدل حساب دارد: یک عدد که کم و زیاد می شود. اتریوم هم همین طور کار می کند. بیت کوین نه.
در بیت کوین چیزی به اسم موجودی وجود ندارد؛ فقط مجموعه ای از خروجی های قفل شده وجود دارد. کیف پول شما همه UTXO هایی را که با کلید شما باز می شوند پیدا می کند، جمعشان می زند و نتیجه را به شما نشان می دهد. آن عددی که می بینید یک جمع است، نه یک حساب.
چرا ساتوشی این راه را انتخاب کرد؟ چون بررسی اینکه یک خروجی خرج شده یا نه، کار ساده ای است و هر گره می تواند مستقل انجامش دهد. همین سادگی است که جلوی خرج کردن یک بیت کوین برای دو نفر را می گیرد؛ همان مشکلی که خرج مضاعف و انواع حمله به آن درباره اش نوشته شده است.
اینجا همان جایی است که تشبیه اسکناس بیشترین کارایی را دارد.
فرض کنید یک اسکناس ۱۰ هزار تومانی دارید و می خواهید ۶ هزار تومان خرید کنید. اسکناس را نصف نمی کنید؛ کل آن را می دهید و ۴ هزار تومان باقی مانده می گیرید.
UTXO هم دقیقا همین است. یک UTXO همیشه کامل خرج می شود، حتی اگر مبلغ مورد نیاز کمتر از آن باشد. تراکنش شما آن UTXO را کامل مصرف می کند و دو خروجی جدید می سازد: یکی برای گیرنده، یکی برای خود شما به عنوان باقی مانده. اگر در کاوشگر بلاک چین تراکنشی از خودتان را دیده اید که ظاهرا مبلغی به یک آدرس ناشناس فرستاده، معمولا آن آدرس ناشناس مال خودتان بوده است.
تفاوت مجموع ورودی ها و مجموع خروجی ها هم جایی نمی رود: همان کارمزدی است که ماینر برمی دارد. یعنی کارمزد را شما جداگانه پرداخت نمی کنید، از دل همین حساب درمی آید.
مجموع تمام UTXO های موجود در هر لحظه را «مجموعه UTXO» می نامند و در نرم افزار بیت کوین با نام chainstate ذخیره می شود.
هر گره شبکه یک نسخه از این مجموعه را نگه می دارد و با آمدن هر بلاک به روزش می کند: UTXO هایی که خرج شده اند حذف و آنهایی که تازه ساخته شده اند اضافه می شوند. وقتی گره ای می خواهد تراکنش شما را بررسی کند، لازم نیست کل تاریخچه بیت کوین را بخواند؛ فقط نگاه می کند که آن خروجی هنوز در این مجموعه هست یا نه. همین یک تصمیم طراحی است که اعتبارسنجی را برای یک کامپیوتر خانگی شدنی نگه داشته است.
حالا بخش عملی، که در بیشتر مقاله های فارسی درباره UTXO اصلا نمی آید.
کارمزد تراکنش بیت کوین به مبلغ آن ربطی ندارد. به حجم تراکنش بر حسب بایت ربط دارد، و حجم را تعداد ورودی ها تعیین می کند. یعنی اگر بخواهید مبلغی را از دل ده UTXO کوچک بپردازید، تراکنش شما بزرگ می شود و کارمزدش هم به همان نسبت. همان مبلغ اگر از یک UTXO بزرگ پرداخت شود، خیلی ارزان تر تمام می شود.
نتیجه عملی اش این است: کسی که مدام مبالغ خرد دریافت می کند، بدون اینکه بداند یک مشت خرده UTXO جمع می کند و روزی که بخواهد همه را یک جا خرج کند صورت حساب سنگینی می بیند. بعضی کیف پول ها امکان انتخاب دستی UTXO را می دهند که به آن coin control می گویند، و در روزهای خلوت شبکه می شود چند UTXO کوچک را در یک تراکنش ارزان به یکی تبدیل کرد.
و اگر تراکنشی فرستادید و تایید نشد، ماجرا به همین کارمزد و ازدحام شبکه برمی گردد؛ تراکنش تایید نشده بیت کوین و راه های حلش همان حالت را کامل توضیح داده است.
تفاوت UTXO با مدل حساب چیست؟
در مدل حساب که اتریوم و بانک ها از آن استفاده می کنند، یک عدد موجودی وجود دارد که کم و زیاد می شود. در مدل UTXO موجودی وجود ندارد و فقط خروجی های خرج نشده هستند؛ موجودی چیزی است که کیف پول از جمع آنها می سازد. مدل UTXO بررسی را ساده تر و موازی پذیرتر می کند و مدل حساب نوشتن قرارداد هوشمند را راحت تر.
کلید خصوصی در بیت کوین چیست و چه ربطی به UTXO دارد؟
کلید خصوصی همان چیزی است که قفل روی یک UTXO را باز می کند. مالکیت بیت کوین یعنی داشتن کلیدی که بتواند خروجی های قفل شده را خرج کند. اگر کلید را از دست بدهید، آن UTXO ها همچنان در شبکه هستند و برای همیشه خرج نشده باقی می مانند.
اولین UTXO ها از کجا می آیند؟
از تراکنش coinbase، یعنی اولین تراکنش هر بلاک که پاداش ماینر را می سازد. این تنها تراکنشی است که ورودی ندارد و از هیچ، خروجی جدید تولید می کند. هر بیت کوینی که امروز در گردش است، اگر تاریخچه اش را عقب بروید، به یکی از همین تراکنش ها می رسد.
آیا UTXO فقط در بیت کوین وجود دارد؟
نه. شبکه هایی که از کد بیت کوین منشعب شده اند، مثل لایت کوین و دوج کوین، همین مدل را دارند. در مقابل اتریوم و شبکه هایی مثل ترون از مدل حساب استفاده می کنند، و به همین دلیل تجربه کار با آنها فرق می کند.
منابع: تعریف فنی UTXO و مجموعه UTXO در مستندات فنی learnmeabitcoin و طراحی اولیه در مقاله اصلی بیت کوین نوشته ساتوشی ناکاموتو.