تالار گفتگوی تخصصی بلاکچین و رمزارزها

UTXO در بیتکوین

 

حامد ریحانی
Illustrious Member Admin
عضو شده: 3 سال قبل
ارسال‌: 629
شروع کننده موضوع  

به زبان ساده به هر مقدار ورودی به کیف پول بیتکوین شما، یک UTXO یا Unspent Transaction Output می گویند. در ابتدا درک این تعریف یک مقدار گیج کننده بنظر میرسد اما خیلی ساده است که با یک مثال به شما توضیح می دهم:

نکته اولی که حتما به عنوان یک استفاده کننده از بیتکوین از آن اطلاع دارید این است که شما در یک کیف پول بیتکوین می توانید ده ها و یا صدها یا هزاران آدرس داشته باشید و از هر کسی که می خواهید بیتکوین دریافت کنید یک آدرس جدید به او می دهید.

برای راحت تر درک کردن این موضوع یک فروشگاه اینترنتی را در نظر بگیرید که با دریافت بیتکوین کالا می فروشد. خب بهترین کار این است که در مرحله پرداخت به هر مشتری یک آدرس جدید و منحصر به فرد به هر مشتری بدهد که زمانی که به آن آدرس بیتکوینی وارد شد بتواند آن را به آن مشتری خاص نسبت بدهد! یعنی اگر قرار باشد فقط یک آدرس را به همه مشتری هایش بدهد و بعد همزمان یک کالا با قیمت 0.0025 بیتکوین را به چند نفر بفروشد چطور متوجه شود کدامیک بیتکوین را ارسال کرده و کدامیک نکرده و باید دردسرهای مختلفی را تحمل کند و احتمال خطا و نارضایتی و... بسیار بالا می رود. اما زمانیکه که به هر مشتری یک آدرس مخصوص به ایشان داده به راحتی می داند که کدام مشتری بیتکوین ارسال کرده و کدام یک هنوز آدرسش خالی است! 

پس کار صحیح این است که برای هر دریافتی از یک آدرس جدید استفاده شود. کاری که صرافی هایی مانند بایننس و غیره هم انجام داده اند و به هر مشتری خود یک آدرس اختصاصی داده اند و هر واریزی به هر آدرس مشخص است که برای کدام مشتری می باشد.

خب برای این فروشگاه فرض کنید 4 فروش در  یک روز انجام داده و به ترتیب زمان طی 4 تراکنش مقادیر 0.02 و 0.02 و 0.03 و 0.05 بیتکوین دریافت کرده. هر چهار تراکنش برای مشتریان متفاوت به آدرس های متفاوت ارسال شده است، اما الان می توانید فرض کنید مبلغ خرید یا تراکنش پنجم توسط مشتری سوم که قبلا 0.03 پرداخت کرده بود به همان آدرس تکراری قبلی به مقدار 0.035 واریز شد! پس اگر 4 آدرس این 4 مشتری را a و b و c و d بدانیم اینطور می شود گفت که 5 عدد ورودی یا utxo داریم:

  1. دریافت به آدرس a مقدار 0.02
  2. دریافت به آدرس b مقدار 0.02
  3. دریافت به آدرس c مقدار 0.03
  4. دریافت به آدرس d مقدار 0.05
  5. دریافت به آدرس تکراری c مقدار 0.035

هر کدام از ورودی های گفته شده در بالا بصورت کاملا جدا و مستقل از هم یک UTXO می باشند و حتی دریافتی های شماره 3 و 5 که به آدرس یکسان می باشند از این نظر از هم مستقل می باشند و ما در این مثال 5 عدد utxo داریم! ( برخی به اشتباه می گویند هر تراکنش یعنی یک utxo که بصورت عامیانه مفهوم را می رساند اما در حقیقت تعریف تراکنش خیلی متفاوت است ) 

نکته اینجاست که کیف پول فروشگاه الان در مجموع از 5 فروش بالا مقدار 0.155 بیتکوین دریافت کرده و صاحب فروشگاه به سادگی می تواند هر مقدار از آن را ( فعلا از بحث فی تراکنش در این مثال صرفنظر می کنیم ) به هر شکلی که بخواهد خرج کند. اما ببینیم در شبکه بیتکوین این خرج کردن چگونه انجام می شود:

در ادامه مثال فرض کنید که این فروشگاه برای 2 شریک است که از درآمد امروز هر کدام می خواهند 0.07 بیتکوین بردارند و 0.015 هم برای هزینه های فروشگاه در کیف پول دیگری به عنوان قلک فروشگاه ذخیره کنند. اینجاست که باید دقت کنید:

  • ابتدا از این کیف پول 0.07 بیتکوین برای یکی از شریک ها به آدرس او ارسال می شود. این یک تراکنش است که طی آن باید 3 عدد از utxo ها ( یا خروجی های خرج نشده Unspent Transaction Output ) یعنی شماره های 1 و 2 و 3 ( به ترتیب زمان ) که مجموع آنها می شود 0.07 به عنوان input استفاده شوند و این تراکنش یک output دارد که همان آدرس کیف پول شریک اول می باشد.

 

  • در ادامه از کیف پول اصلی فروشگاه که 0.085 بیتکوین داخل آن باقی مانده قصد دارند 0.07 بیتکوین به آدرس کیف پول شریک دیگر ارسال کنند. اینجاست که مفهموم UTXO یک مقدار جدی می شود! در این کیف پول 2 عدد ورودی باقی مانده که شماره های 4 و 5 هستند چرا که ورودی های شماره 1 و 2 و 3 را در تراکنش به کیف پول شریک اول مصرف کردند. مجموع تراکنش های 4 و 5 برابر با 0.085 بیتکوین است و برای پرداخت 0.07 بیتکوین، سیستم در بلاکچین بیتکوین به شکلی خاص عمل می کند: شما باید 0.85 را بدهید ( یعنی هر 2 عدد utxo را بطور کامل بدهید ) که 0.07 برای شریک دوم ارسال شود و 0.015 به عنوان باقیمانده پول پس بگیرید! ( مشابه اینکه دو اسکناس 10 هزار تومانی دارید که با آن از مغازه شکلات 18 هزار تومانی می خرید و 2 هزار تومان باقیمانده دریافت می کنید ) این تراکنش جدید هم پس دارای 2 عدد utxo ورودی یا input می باشد که همان شماره ها 4 و 5 می باشند، اما تفاوتی که این تراکنش با تراکنش مربوط به پرداخت سهم شریک اول دارد این است که این تراکنش 2 خروجی یا output دارد: یکی به مقدار 0.07 بیتکوین به آدرس کیف پول شریک دوم و یکی به مقدار 0.015 به یک آدرس کاملا جدید از همین کیف پول اصلی فروشگاه!

 

  • حالا در کیف پول اصلی فروشگاه که قبلا 5 عدد utxo داشتیم و همه آنها خرج شده اند یک عدد utxo جدید وارد شده و قابل خرج کردن با شماره 6 است که مقدار آن 0.015 می باشد، این مقدار از آدرس c به آدرس e از همین کیف پول طی تراکنش قبلی همراه با پرداخت سهم شریک دوم منتقل شده است.

 

  • تراکنش بعدی انتقال 0.015 به یک کیف پول متفاوت به عنوان قلک هزینه های فروشگاه می باشد. این تراکنش یک ورودی دارد که همان utxo شماره 6 از مرحله قبل می باشد و کل آن مقدار به آدرس کیف پول قلک منتقل می شود.

 

برخی کیف پول های حرفه ای امکان ترکیب کل این 3 پرداخت 0.07 و 0.07 و 0.015 و یا بطور کلی ارسال مقادیر مختلف به آدرس های مختلف طی یک تراکنش را به شما می دهند اما برای درک بهتر مفهوم UTXO ماجرا را اینگونه مطرح کردم.

نکته مهم این است که در کیف پول های بیتکوین بصورت پیشفرض UTXO های موجود به ترتیب زمان ورود به کیف پول خرج می شوند. اما کیف پول های حرفه ای تر به شما امکانی به نام Coin Control ارائه می دهند که طی آن می توانید انتخاب کنید که به عنوان مثال برای تراکنش پرداخت سهم شریک اول از utxo های شماره 1 و 5 استفاده شود! و برای تراکنش پرداخت سهم شریک دوم از شماره های 2 و 3 و 6 استفاده شود. توضیحات کامل Coin Control و کاربرد های مهم آن را بعدا در مطلبی دیگر برای شما خواهم نوشت.

 


   
mr_k1lou and mahmood reacted
نقل‌قول
    سبد خرید