UTXO چیست؟ آشنایی با مفهوم خروجی خرجنشده تراکنش
دنیای بیت کوین و ارزهای دیجیتال پر از عبارات و اصطلاحات بهظاهر نامفهوم مثل UTXO یا خروجی خرجنشده تراکنش است. حتماً شما هم تاکنون با بسیاری از آنها برخورد کردهاید. معنای برخی از این کلمات در نگاه اول، کاملاً متفاوت از معنای واقعی آنها به نظر میرسد و با شنیدن برخی دیگر از آنها، هیچ ایدهای از مفهومشان به ذهن ما خطور نمیکند؛ چراکه قبلاً در هیچ فرهنگ لغتی نه آنها را دیدهایم و نه شنیدهایم.
برخی از این اصطلاحات مخفف چندین کلمه و برخی دیگر، عباراتی کاملاً جدید و برگرفته از اصطلاحات فنی بلاک چین هستند. گاهی اوقات بهدلیل نداشتن معادلی بهتر، عبارتی کاملاً فنی در زبان رایج و روزمره باقی میماند.
یکی از این واژههای فنی، «UTXO» است. تقریباً به همان اندازه که در دنیای واقعی از کلمه «پول» استفاده میکنیم، در دنیای بیت کوین از “UTXO” استفاده میشود. با این حال، هنوز هم بسیاری از کاربران هیچ ایدهای درمورد این کلمه ندارند. در این مطلب که بهکمک مقالهای از Rajarshi Maitra که در وبسایت مدیوم منتشر شده، مفهوم این عبارت را بهطور کامل بررسی میکنیم.
تعریف UTXO بهزبان ساده
UTXO مخفف عبارت Unspent Transaction Output بهمعنای «خروجی خرجنشده تراکنش» است. این اصطلاح هیچ پیشینهای در زبان انگلیسی ندارد و تولد آن به دنیای بیت کوین برمیگردد. بهبیان ساده، هر UTXO مانند یک اسکناس نقدی عمل میکند که ارزشی را (بهصورت بیت کوین) در خود ذخیره میکند و فقط یک بار میتوان آن را خرج کرد. بنابراین هر تراکنش بیت کوین، (حداقل) یک UTXO را مصرف کرده و یک یا چند UTXO جدید را ایجاد میکند.
UTXO اصطلاحی کاملاً فنی است و از بطن کد شبکه بیت کوین نشئت گرفته است. همین اصطلاح عجیبوغریب، تقریباً مهمترین مفهومی است که دانستن آن برای کسی که میخواهد کمی بیشتر از جزئیات بیت کوین بداند و عضو تأثیرگذارتری در این شبکه باشد لازم است.
تعریفی که در بالا ارائه کردیم، توضیح سادهای از مفهوم UTXO بود و جنبههای فنی آن را در بر نمیگرفت. برای درک بهتر جنبههای فنی UTXO، آن را به بخشهای کوچکتر تقسیم میکنیم. سپس هر بخش را بهصورت جداگانه توضیح میدهیم تا در پایان با جمعبندی توضیحات، به مفهوم دقیق این عبارت برسیم.
برای این کار، از بزرگترین جزء این سیستم و از موتور محرک شبکه بیت کوین، یعنی فناوری «بلاک چین» شروع می کنیم و سپس اجزای کوچکتر را یکبهیک بررسی میکنیم.
همچنین بخوانید: TXID یا شناسه تراکنش چیست؟
بلاک چین چیست؟
ماشین بیت کوین از ساختارهای ریاضی مشخصی تشکیل شده است. منظور از این ساختارها، مفاهیم انتزاعی ریاضی هستند که هریک معنای خاص خود را دارند.
هر ساختار میتواند شامل دادههایی خام باشد و یا اینکه خود از ساختارهای کوچکتر تشکیل شود. پروتکل بیت کوین دادههای درون هر ساختار را با توجه به معنی آنها تفسیر میکند و به کار میبندد.
بیایید از باشکوهترین و برجستهترین ساختار داده سالهای اخیر، یعنی بلاک چین شروع کنیم. بلاک چین از دو کلمه بلاک (Block) به معنی بلوک و چین (Chain) به معنی زنجیره تشکیل شده است. پس همان طور که از نامش پیداست، بلاک چین یک زنجیره از بلوکهاست. هر یک از بلاکها هم شامل یک ساختار ریاضی و تشکیلدهنده یک ساختار بزرگتر هستند.
بلاک چین بزرگترین ساختار موجود در پروتکل بیت کوین است. در زمان نگارش این مقاله، بلاک چین بیت کوین چیزی حدود ۳۷۰ گیگابایت حجم دارد و از یک فهرست بسیار طولانی از بلاکها تشکیل میشود.
هر بلاک شامل دو ساختار است که یکی از آنها سربرگ (Header) و دیگری فهرست تراکنشها (Transaction List) نام دارد.
بخش سربرگ یا هدر، دربرگیرنده اطلاعات کلی و اصلی مربوط به هر بلاک است. علاوه بر این، خروجی رمزنگاریشده یا همان هش بلاک قبلی هم در سربرگ بلاکهای جدید قرار میگیرد. هش بلاک قبلی در واقع به بلاک قبلی در زنجیره (یا بلاک والد) اشاره دارد. به این ترتیب، هر بلاک به بلاک قبلی خود و بلاک قبلی نیز به بلاک قبلتر خود اشاره میکند و این زنجیره به همین شکل ادامه دارد تا به اولین بلاک ایجاد شده یا همان بلاک جنسیس برسد.
این روند اشاره به بلاک قبلی، یک ساختار زنجیرهای از بلاکها ایجاد میکند که در حقیقت همان بلاک چین است. در واقع بلاک چین چیزی بیش از یک فهرست پیونددهنده بلاکها به یکدیگر نیست و مزیت اصلی آن، تغییرناپذیری دادههاست. چراکه با تغییر محتوای هر بلاک، هش خروجی آن بهطرز غیرقابل پیشبینی تغییر میکند و از آنجا که بلاکها از طریق هش به یکدیگر متصل هستند، هش تمامی بلاکهای بعدی زنجیره هم نامعتبر خواهد شد. این ایده بهظاهر ساده، یکی از پایههای امنیت شبکه بلاک چین است.
شکل زیر دادههای موجود در بلاک شماره ۱۰ بلاک چین بیت کوین را نشان میدهد. بخش Summary (خلاصه)، دادههای موجود در سربرگ را مشخص میکند و بخش زیر آن نیز شامل دادههای مربوط به تراکنشهاست.
در قسمت Timestamp (برچسب زمانی) بلاک، میبینیم که این بلاک در تاریخ ۹ ژانویه ۲۰۰۹ (۲۰ دی ۱۳۸۷) استخراج شده است. این تاریخ نشان میدهد که احتمالاً ساتوشی ناکاموتو (خالق بیت کوین) شخصاً این بلاک را استخراج کرده است.
در فهرست تراکنشها نیز تنها یک تراکنش با ارزش ۵۰ بیت کوین وجود دارد که نشان میدهد بیت کوینها به یک آدرس ارسال شدهاند. این تراکنش، یک تراکنش کوین بیس بوده است؛ به این معنی که یک ماینر این بیت کوینها را در ازای استخراج بلاک، بهعنوان پاداش دریافت کرده است.
در آن زمان کسی جز ساتوشی ناکاموتو در شبکه نبوده که بتواند این تعداد بیت کوین را معامله کند. بنابراین تنها احتمالی که وجود دارد این است که این تراکنش، مربوط به دریافت پاداش استخراج بوده است. در این تراکنش، ۵۰ بیت کوین بهعنوان پاداش حل معمای اثبات کار به ماینر داده شده است.
اکنون که ایده اصلی پشت بلاکهای بلاک چین بیت کوین را میدانیم، بیایید یک قدم جلوتر برویم و بر روی مفهوم «تراکنش» تمرکز کنیم.
رابطه 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 set) میخوانند. همه نودهای بیت کوین این مجموعه را در خود ذخیره و نگهداری میکنند. از نظر فنی، این مجموعه وضعیت زنجیره (chainstate) را نشان میدهد و در بخش مربوط به وضعیت زنجیره هر نود ذخیره میشود.
وضعیت زنجیره با هر بار پذیرش بلوک جدید در زنجیره بلاک، بهروزرسانی میشود. بلاک جدید شامل فهرستی از آخرین تراکنشهاست. این فهرست مشخص میکند که کدام یک از UTXOهای قبلی مصرف شده و کدام UTXO جدید ایجاد شده است. هر نود بیت کوین در شبکه همیشه یک کپی دقیق از مجموعه UTXOها را در حافظه محلی خود ذخیره میکند.
در زمان نگارش این مقاله، اندازه این مجموعه ۴.۲۵ گیگابایت است. بهبیان سادهتر، اگر مقداری بیت کوین دارید، UTXOهای شما در حافظه همه فول نودهای بیت کوین حضور دارند. اما نگران نباشید؛ آنها نمیتوانند قفل این UTXOها را باز کنند.
همان طور که قبلاً هم اشاره کردیم، UTXOها همان بیت کوینها هستند. آنها در کیف پولهای مختلف، به روشهای متفاوتی برای کاربران نمایش داده میشوند.
هنگامی که برای استعلام موجودی بیت کوین خود در درون کیف پولتان جستجو میکنید، کیف پول شما در پسزمینه، در حال جمعکردن همه UTXOهای مربوط به شماست و در نهایت مجموع ارزش این UTXOها را به شما نشان میدهد.
این مبلغ، موجودی نهایی کیف پول شماست. این محاسبات در پسزمینه و بهدور از چشم کاربران انجام میشوند و نتیجه به کاربر نمایش داده میشود. البته کیف پولهای تخصصیتر بیت کوین مانند الکتروم، امکان مشاهده مستقیم UTXOها و مدیریت آنها را هم در اختیار کاربران قرار میدهند.
مدل UTXO چگونه کار میکند؟
در دنیای واقعی، UTXO تقریباً شبیه پول نقد و سکه واقعی است. وقتی کسی میخواهد برای خرید چیزی در یک فروشگاه پول نقد خود را خرج کند، جمع کل مبلغ خرید را پرداخت میکند، کالاها را دریافت میکند و باقیمانده پول خود را پس میگیرد.
اگر کسی ۱۰ دلار پول نقد داشته باشد و بخواهد ۵ دلار از آن را در فروشگاه خرج کند، اسکناس را نصف نمیکند. در عوض یک اسکناس 10 دلاری را پرداخت میکند و یک اسکناس ۵ دلاری جدید را بهعنوان باقیمانده پول خود پس میگیرد.
UTXOها نیز به روشی مشابه کار میکنند. در یک معامله، UTXO همیشه بهطور کامل مصرف میشود؛ حتی اگر مقدار مورد نیاز کمتر از UTXO پرداختی باشد!
به شکل بالا توجه کنید. بهعنوان، مثال فرض کنید سارا میخواهد برای برخی کالاها یا خدمات، مبلغ ۶ بیت کوین به بهزاد بپردازد؛ اما او فقط یک UTXO به ارزش ۱۰ بیت کوین دارد. او تراکنشی ایجاد میکند که در آن، کل UTXO خود را مصرف کند و دو UTXO جدید تولید میکند؛ یکی برای بهزاد با ۶ بیت کوین و دیگری برای خودش با ۴ بیت کوین. سارا این UTXO با موجودی ۴ بیت کوین را به خودش پرداخت میکند و در واقع بهعنوان باقیمانده UTXO قبلی شناخته میشود.
نرم افزار کیف پول سارا این UTXO را بهطور خودکار ردیابی میکند و موجودی کیف پول او را با احتساب این ۴ بیت کوین نمایش میدهد. هر بار که پرداختی با مبلغی کمتر از UTXO متعلق به فرستنده انجام میشود، کیف پول بهطور خودکار باقیمانده UTXO را برای کاربر ایجاد میکند.
هر UTXO با یک آدرس بیت کوین مرتبط است و آدرسها انواع مختلفی دارند (P2PKH ، P2SH ، Bech32 و انواع دیگر). آدرسهای مختلف، عملکردهای متفاوتی را برای UTXOها ایجاد میکنند. بهعنوان مثال، اگر کاربری یک UTXO چندامضایی را ایجاد کند (یعنی یک UTXO که برای خرجشدن نیاز به امضای دو یا چند شخص دارد)، این UTXO آدرسی دارد که با عدد ۳ شروع میشود و بهطور کلی شبیه عبارت زیر است:
۳J۹۸t۱WpEZ۷۳CNmQviecrnyiWrnqRhWNLy
اگر یک کیف پول بیت کوین با مقداری موجودی داشته باشید، در هر زمان دلخواه میتوانید از آن برای مشاهده UTXOهای خود استفاده کنید.
همچنین بخوانید: بیت کوین چگونه کار میکند و تراکنشهای آن چگونه انجام میشود؟
مقایسه مدل UTXO با مدل مبتنی بر حساب
فکرکردن درمورد مفهوم مبهمی مانند UTXO در یک سیستم پرداخت دیجیتال شاید کمی غیرقابلدرک به نظر برسد. UTXO ذاتاً به پول نقد واقعی شباهت دارد؛ در حالی که در پلتفرمهای پرداخت دیجیتال، ما با استفاده از حساب کاربری خود معاملات را انجام میدهیم. تفاوت این دو مدل تقریباً مانند تفاوت خرید با پول نقد و خرید با استفاده از کارت بانکی است.
عملکرد مدلهای مبتنی بر حساب بسیار ساده است. مبالغ پرداختی در این مدل میتواند هرچیزی و به هر روشی باشد و مفهوم باقیمانده در آنها وجود ندارد. با هر تراکنش دریافتی، مبلغ تراکنش به حساب شخص اضافه میشود و با هر تراکنش پرداختی، مبلغ از حساب او کسر میشود.
بلاک چینهای گوناگون از روشهای متنوعی برای انتقال ارزش استفاده میکنند. اما بهطور کلی میتوان این روشها را به دو مدل «مبتنی بر UTXO» و «مبتنی بر حساب» تقسیم کرد. بلاک چینهایی مثل بیت کوین و لایت کوین، مبتنی بر UTXO هستند و بلاک چینهای جدیدتر مثل اتریوم و پولکادات، بر اساس حسابها کار میکنند.
با این حال که هدف هر دوی این مدلها مشترک است (پرداخت پول به کاربران)، هر دو مدل مزایا و معایب خاص خود را دارند.
مدلهای مبتنی بر UTXO، از منظر مقیاسپذیری و حفظ حریم خصوصی بهتر عمل میکنند. هر UTXO فقط یکبار و بهطور کامل قابلمصرف است. از آنجا که این منطق سادهتر است، تأیید تراکنشها هم میتواند بهصورت موازی انجام شود. همچنین الگوها و تکنیکهای مختلف تقویت حریم خصوصی میتوانند بهسادگی با استفاده از مدل UTXO پیادهسازی شوند.
با وجود همه این نکات مثبت، نقطه ضعف مدلهای مبتنی بر UTXO، تجربه کاربری آنهاست. کار با UTXOها به حدی برای کاربران سخت بوده که اکثریت کیف پولها مجبور به صرفنظر کردن از این مدلها و نمایش موجودی بیت کوینها در قالب حسابها بودهاند.
علاوه بر این، مدل مبتنی بر UTXO به قراردادهای هوشمند عجیب و غریبی محدود شده است که بر اساس کل مانده حساب کاربر اجرا میشوند. به همین دلایل ، اتریوم مدل UTXO را رد کرده و از یک مدل ساده و انعطاف پذیرتر بر پایه حساب کاربری استفاده میکند. اما در پایان باید گفت که هر دو مدل تراکنشهای خود را با موفقیت انجام میدهند.
نتیجهگیری
هنوز هم بهطور کامل مفهوم UTXO را متوجه نشدهاید؟ نگران نباشید! حتی ممکن است خواندن تمام جزئیات فوق در مورد UTXO شما را بیش از پیش گیج کرده باشد. برای همه ما فهم این مفاهیم عجیبوغریب دنیای بیت کوین سخت و پیچیده است. برای جمعبندی کامل همه مطالب بالا، کل مفاهیم را به شرح زیر خلاصه میکنیم و احتمالاً پس از خواندن آن خیال شما هم کمی راحتتر میشود.
- UTXO جعبه قفل شدهای پر از سکه است؛
- با تهیه کلید مناسب میتوان قفل جعبه را باز کرد؛
- وقتی مقداری بیت کوین خرج میکنید، یک تراکنش ایجاد میکنید (یا کیف پول این کار را برای شما انجام میدهد). این تراکنش برخی UTXOهای قدیمی را مصرف میکند و یک دسته UTXO جدید ایجاد میکند؛
- UTXO همیشه بهطور کامل مصرف می شود و باقیمانده UTXO بهطور خودکار توسط کیف پول شما ایجاد میشود. پس از اتمام پرداخت، کیف پول موجودی صحیح شما را محاسبه کرده و به شما نمایش میدهد؛
- هر UTXO با یک آدرس مرتبط است. انواع مختلف آدرس نشاندهنده انواع مختلف UTXO است؛
- همیشه باید کلیدهای خود را در اختیار داشته باشید تا قفل UTXO باز شود. نداشتن کلید به معنی نداشتن بیت کوین است.
لطفاً سوالات و نظرات خود درباره مفهوم UTXO را در بخش کامنتهای همین مقاله مطرح کنید.
میشه منبع مقاله رو بذارید؟