اگر در مقاله «تراکنش بیتکوین چگونه انجام میشود؟» دیدیم که یک تراکنش، خروجیهای قبلی را مصرف و خروجیهای جدید ایجاد میکند، حالا باید دقیقتر ببینیم این خروجیها چه هستند و چرا مفهوم UTXO برای فهم بیتکوین ضروری است.
UTXO مخفف Unspent Transaction Output، یعنی «خروجی تراکنش خرجنشده» است. در مدل بیتکوین، آنچه یک کاربر میتواند خرج کند، مجموعهای از خروجیهای خرجنشده است؛ نه یک عدد موجودی که در یک حساب مرکزی نگهداری شود.
UTXO دقیقاً چیست؟
هر تراکنش میتواند یک یا چند خروجی ایجاد کند. هر خروجی مقدار مشخصی بیتکوین و شرایطی برای خرجشدن دارد. تا زمانی که آن خروجی در یک تراکنش معتبر بعدی مصرف نشده باشد، یک UTXO محسوب میشود.
پس UTXO را میتوان یک واحد قابلخرج از وضعیت فعلی بیتکوین دانست. این واحد به یک تراکنش قبلی و شماره خروجی آن وابسته است و مقدار آن بر اساس ساتوشی مشخص میشود.
بهعنوان یک تشبیه ساده، میتوان UTXO را شبیه یک اسکناس دیجیتال در نظر گرفت؛ اما این تشبیه کامل نیست، چون UTXO یک شیء فیزیکی یا یک «سکه» مستقل نیست، بلکه خروجی یک تراکنش و شرایط خرجکردن آن است.
موجودی بیتکوین کجاست؟
وقتی کیف پول میگوید مثلاً ۱ بیتکوین دارید، این به معنی وجود یک رکورد مرکزی با مقدار «۱ BTC» برای حساب شما نیست.
کیف پول UTXOهایی را که میتواند با کلیدهای خود خرج کند پیدا میکند و ارزش آنها را جمع میزند. بنابراین موجودی قابلخرج یک کیف پول در عمل از مجموعه UTXOهای قابلخرج آن به دست میآید.
ممکن است این ۱ بیتکوین در یک UTXO واحد باشد یا از چند UTXO کوچکتر تشکیل شده باشد. از دید کاربر، هر دو میتوانند در مجموع همان مقدار را نشان دهند؛ اما ساختار تراکنش و هزینه خرجکردن آنها میتواند متفاوت باشد.
UTXO چگونه ایجاد میشود؟
UTXO در نتیجه ایجاد یک خروجی جدید در تراکنش به وجود میآید.
فرض کنید علی ۰٫۸ بیتکوین دارد و آن را در یک خروجی دریافت کرده است. تا زمانی که آن خروجی خرج نشده باشد، آن خروجی یک UTXO است.
حالا علی میخواهد ۰٫۳ بیتکوین برای فرد دیگری ارسال کند. تراکنش نمیتواند صرفاً ۰٫۳ بیتکوین از همان UTXO را «بردارد» و بقیه را دستنخورده باقی بگذارد. در عوض، UTXO قبلی مصرف میشود و تراکنش خروجیهای جدید ایجاد میکند.
برای مثال، تراکنش میتواند این ساختار را داشته باشد:
UTXO قبلی: 0.8000 BTC
│
▼
تراکنش
/ \
/ \
0.3000 BTC 0.4999 BTC
گیرنده Change
کارمزد: 0.0001 BTC
پس UTXO قبلی دیگر خرجنشده نیست و دو خروجی جدید ایجاد شدهاند. اگر هر دو شرایط لازم برای خرجکردن را داشته باشند، هر دو اکنون UTXO هستند.
Change چیست و چرا ایجاد میشود؟
در بسیاری از پرداختها، مبلغ مورد نیاز دقیقاً با یکی از UTXOهای موجود برابر نیست.
فرض کنید یک UTXO به ارزش ۱ BTC دارید و میخواهید ۰٫۲ BTC بفرستید. کیف پول ممکن است همان UTXO را مصرف کند و دو خروجی بسازد:
- ۰٫۲ BTC برای گیرنده
- مقدار باقیمانده، منهای کارمزد، برای خودتان
خروجی دوم Change یا باقیمانده است.
نکته مهم این است که Change «بخشی از همان UTXO قبلی» نیست. UTXO قبلی کاملاً مصرف شده و Change یک خروجی جدید است که بعداً خودش به یک UTXO قابلخرج تبدیل میشود.
به همین دلیل ممکن است در یک تراکنش، آدرس فرستنده ظاهراً دوباره مقداری بیتکوین دریافت کند. این الزاماً به معنی انتقال بیتکوین از شخص دیگری نیست؛ ممکن است صرفاً Change خود تراکنش باشد.
ورودی تراکنش چگونه یک UTXO را مصرف میکند؟
هر ورودی تراکنش به یک خروجی مشخص از یک تراکنش قبلی اشاره میکند. این شناسه در سطح فنی با ترکیبی از TXID و شماره خروجی، یعنی outpoint، مشخص میشود.
در نتیجه، میتوان رابطه را اینطور خلاصه کرد:
تراکنش قبلی
│
└── خروجی شماره N: یک UTXO
│
▼
ورودی تراکنش جدید
ورودی بهتنهایی «مقدار بیتکوین» را در خود نگهداری نمیکند؛ بلکه مشخص میکند کدام خروجی قبلی قرار است مصرف شود. نود با مراجعه به وضعیت مربوط به آن خروجی میتواند مقدار و شرایط خرجکردن را بررسی کند.
یک تراکنش میتواند چند UTXO را مصرف کند
فرض کنید کیف پول شما سه UTXO دارد:
- ۰٫۱۵ BTC
- ۰٫۳۰ BTC
- ۰٫۷۰ BTC
اگر بخواهید ۰٫۹ BTC ارسال کنید، ممکن است کیف پول دو UTXO به ارزش ۰٫۳۰ و ۰٫۷۰ را انتخاب کند. سپس خروجی گیرنده و Change را ایجاد میکند و کارمزد نیز از تفاوت مجموع ورودیها و خروجیها به دست میآید.
در نتیجه، تعداد UTXOهای ورودی میتواند روی اندازه تراکنش و در نتیجه روی هزینه آن اثر بگذارد.
روش انتخاب UTXOها به نرمافزار کیف پول بستگی دارد. کیف پولها ممکن است معیارهایی مانند اندازه تراکنش، هزینه، حریم خصوصی و مدیریت بهتر خروجیها را در نظر بگیرند.
آیا یک UTXO را میتوان چند بار خرج کرد؟
خیر. یک UTXO پس از اینکه در یک تراکنش معتبر مصرف شد، دیگر UTXO نیست و نمیتوان همان خروجی را بار دیگر بهعنوان یک خروجی خرجنشده معتبر مصرف کرد.
این ویژگی برای جلوگیری از double spending اهمیت اساسی دارد. نودها در اعتبارسنجی تراکنشها بررسی میکنند که خروجیهای مورد استفاده قابلخرج باشند و قبلاً مصرف نشده باشند.
اگر دو تراکنش رقیب تلاش کنند یک UTXO یکسان را خرج کنند، هر دو نمیتوانند در نهایت بهعنوان خرجکردن همان خروجی در یک زنجیره معتبر پذیرفته شوند. نحوه برخورد شبکه با تراکنشهای متعارض و وضعیت نهایی آنها به قواعد اعتبارسنجی و وضعیت بلاکچین بستگی دارد.
UTXO چه تفاوتی با آدرس دارد؟
این دو مفهوم را نباید یکی دانست.
آدرس یک قالب برای مشخصکردن مقصد دریافت و اطلاعات لازم برای ساخت شرایط خرجکردن است.
UTXO یک خروجی مشخص و خرجنشده از یک تراکنش است که مقدار و شرایط خرجکردن دارد.
یک آدرس میتواند در طول زمان با چندین خروجی مرتبط باشد و یک کیف پول نیز میتواند UTXOهای متعددی را کنترل کند. بنابراین گفتن «این آدرس ۲ BTC دارد» یک سادهسازی است؛ در سطح دقیقتر باید دید چه UTXOهایی با آن مقصد یا اسکریپت مرتبط هستند و کدامیک هنوز خرج نشدهاند.
UTXO چه ارتباطی با کیف پول دارد؟
کیف پول معمولاً مجموعه UTXOهایی را که میتواند خرج کند شناسایی و مدیریت میکند. هنگام ساخت تراکنش، کیف پول باید تصمیم بگیرد کدام UTXOها بهعنوان ورودی انتخاب شوند و چه خروجیهایی ساخته شوند.
این همان نقطهای است که مفهوم UTXO به مفهوم self-custody و کلید خصوصی متصل میشود: کیف پول باید بتواند شرایط لازم برای خرجکردن UTXOهای انتخابشده را با استفاده از کلیدهای مناسب برآورده کند.
برای توضیح رابطه میان کیف پول، آدرس، کلید خصوصی و عبارت بازیابی، راهنمای کیف پول بیتکوین را بخوانید.
UTXO چه ارتباطی با کارمزد دارد؟
کارمزد تراکنش بهطور مستقیم بر اساس مقدار بیتکوین ارسالشده تعیین نمیشود. اندازه تراکنش و نرخ کارمزد مورد استفاده نیز اهمیت دارند.
یکی از دلایل مهم این موضوع، تعداد و نوع ورودیها و خروجیهای تراکنش است. اگر برای ساخت یک پرداخت مجبور باشید تعداد زیادی UTXO کوچک را بهعنوان ورودی وارد کنید، تراکنش میتواند داده بیشتری داشته باشد و در شرایط مشابه فضای بیشتری از بلاک مصرف کند.
این وضعیت گاهی با اصطلاح UTXO fragmentation یا پراکندگی UTXOها توصیف میشود. مدیریت UTXOها بنابراین فقط یک موضوع فنی نیست و میتواند روی هزینههای آینده نیز اثر بگذارد.
UTXO و حریم خصوصی
مدل UTXO بهتنهایی تضمینکننده حریم خصوصی نیست.
بررسی ورودیها و خروجیهای تراکنشها میتواند اطلاعاتی درباره ارتباط میان آنها آشکار کند. برای مثال، استفاده همزمان از چند UTXO در یک تراکنش ممکن است برای تحلیلگران زنجیره سرنخهایی ایجاد کند؛ البته تفسیر چنین الگوهایی همیشه قطعی نیست و به روش استفاده از کیف پول و سایر دادهها بستگی دارد.
مدیریت Change و انتخاب UTXOها نیز میتواند روی حریم خصوصی اثر بگذارد. به همین دلیل، طراحی کیف پول و شیوه ساخت تراکنشها بخشی از بحث حریم خصوصی بیتکوین است.
UTXO در کدام بخش از معماری بیتکوین قرار میگیرد؟
برای دیدن تصویر بزرگتر، میتوان مسیر را اینگونه تصور کرد:
UTXOهای موجود
│
▼
کیف پول، انتخاب ورودیها
│
▼
ساخت تراکنش و خروجیها
│
▼
امضا و انتشار
│
▼
اعتبارسنجی نودها
│
▼
قرارگرفتن در بلاک
│
▼
UTXOهای جدید
در این مدل، تراکنش وضعیت UTXO را از یک مجموعه خروجی خرجنشده به مجموعه دیگری از خروجیهای خرجنشده تغییر میدهد.
این نکته برای فهم معماری بیتکوین بسیار مهم است: بلاکچین فقط فهرستی از «موجودی حسابها» نیست؛ بلکه تاریخچه تغییر وضعیت خروجیهای قابلخرج و قواعدی است که تعیین میکنند کدام خروجیها میتوانند مصرف شوند.
چرا فهم UTXO مهم است؟
UTXO فقط یک اصطلاح تخصصی برای توسعهدهندگان نیست. فهم آن چند مفهوم مهم را به هم وصل میکند:
- چرا تراکنشها ورودی و خروجی دارند.
- چرا Change ایجاد میشود.
- چرا یک پرداخت ممکن است چند UTXO را مصرف کند.
- چرا اندازه تراکنش روی کارمزد اثر دارد.
- چرا یک خروجی نمیتواند دوبار خرج شود.
- چرا موجودی کیف پول از مجموعهای از خروجیهای قابلخرج تشکیل میشود.
- چرا انتخاب UTXO میتواند روی حریم خصوصی و هزینههای آینده اثر بگذارد.
بدون فهم UTXO، بسیاری از توضیحات مربوط به تراکنش، کارمزد، کیف پول و double spending بیش از حد انتزاعی باقی میمانند.
جمعبندی
UTXO یا خروجی تراکنش خرجنشده، یکی از واحدهای اصلی مدل تراکنش بیتکوین است. هر UTXO مقدار مشخصی بیتکوین و شرایطی برای خرجشدن دارد و تا زمانی که مصرف نشده باشد، بخشی از وضعیت قابلخرج شبکه محسوب میشود.
هنگام پرداخت، UTXOهای قبلی بهعنوان ورودی مصرف میشوند و خروجیهای جدید، از جمله در صورت نیاز Change، ایجاد میشوند. این مدل توضیح میدهد که چرا بیتکوین موجودی حساب مرکزی ندارد و چرا ساختار تراکنش، کارمزد، حریم خصوصی و جلوگیری از double spending به یکدیگر مرتبطاند.
برای ادامه مسیر، مقاله تراکنش بیتکوین چگونه انجام میشود؟ جزئیات فرایند ساخت، امضا، انتشار و تأیید تراکنش را توضیح میدهد.
منابع و مراجع
- Bitcoin Developer Guide — Transactions and UTXOs
- Bitcoin Developer Guide — Block Chain
- Satoshi Nakamoto — Bitcoin: A Peer-to-Peer Electronic Cash System
این مطلب با هدف آموزش و تحلیل تهیه شده است و نباید بهعنوان توصیه قطعی برای خرید، فروش یا شرطبندی تلقی شود.