دستههای جدید از بیتکوین که تو تراکنش ساخته شدن.
سیستم تراکنش بیتکوین در بر گیرندهی فرستادن و دریافت دستههایی از بیتکوین است که به نام خروجی میشناسیم.
میشه یه چیزایی فهمید؛ ولی تنها راهی که بفهمیم چی به چیه اینه که به چندتا مثال نگاه کنیم.
بذار داستان تراکنش رو با تولد یه دسته بیتکوین جدید شروع کنیم...
فرض کن یه استخراج کنندهی بیتکوینی، بر اساس کاری که انجام دادی موفق شدی یه بلوک از تراکنشها رو حل کنی و یه دسته بیتکوینِ 25تایی رو بدست آوردهای.
هر استخراجکنندهای (ماینر) آدرس خودش رو بالای هر بلوک قرار میده که اگه موفق به حل بلوک بشه پاداش بیتکوین به این آدرس فرستاده بشه. به این تراکنش میگیم تراکنشِ ساخت.
پس وضعیت فعلی آدرس بیتکوین تو این شد:
به طور طبیعی میخوای جشن بگیری و نوشیدنیای بر بدن بزنی.
شایدم پولت اضافه بیاد و هوس از دست دادنش به سرت زد و ریختی تو سایتهای پانزی و اسکم !
اولین چیزی که به ذهنت میرسه اینه که 1 دونه از اون دسته 25تایی بیتکوین رو برداری و خرج نوشیدنی رو بدی، منطقیه، ولی تراکنش اینطوری کار نمیکنه.
بجاش باید کل دستهی 25 بیتکوین رو تو تراکنش بفرستیم.
اما برای اینکه مطمئن باشیم کل 25 بیتکوین رو نمیخوایم برای پرداخت قیمت 1 بیتکوین خرج کنیم. دسته رو تقسیم میکنیم به 2 مقصد مجزا:
- (پرداخت)نوشیدنیفروشی
- باز به آدرس خودمون (باقی پول)
به دستههای تازه ساخته شده میگیم خروجی.
درسته اینجا در ظاهر یه لقمه رو دور سر خودمون چرخوندیم ولی در نهایت نتیجه یکسانه
دلیل اینکه به این صورت این تراکنشها انجام میگیره اینه که از چشمانداز برنامهنویسی، سادهتر و امنتره.
بگذریم! در شکل زیر میبینیم که آدرسهای بیتکوین بعد از تراکنش به چه شکل درمیان:
نوشیدنیفروشی، یه دسته جدید 1 بیتکوینی داره، به خودمونم دسته 24 بیتکوینی فرستادیم. اون دستهی 25تایی الان دیگه مصرف شده رفته.
پس درسته که بنظر میاد 1 بیتکوین رو از حسابمون برداشتیم و به یه آدرس دیگه فرستادیم... ولی الان میدونیم واقعا چی شد.
سازوکار تراکنش بیتکوین اینطور طراحی شده:
- برداشتن یک خروجی (دسته بیتکوین) که از قبل وجود داره
- ایجاد کردن خروجیها (دستهها) با مقدار جدید
- فرستادن این دستههای جدید به آدرسها
از این به بعد بجای استفاده از کلمهی «دسته» از «خروجی» استفاده میکنیم.
چند روز گذشته و نوشیدنیفروشیای که مشتریش بودیم، با توجه به آدرسش، نونش تو روغن بوده:
اما همانطور که میدونیم، نوشیدنی از رو درخت در نمیاد، پس نوشیدنیفروشمون الان دنبال خرید دستگاه نوشیدنیساز جدیده.
چه نوشیدنیساز دوست داشتنیای، با قیمت مفت 4.2 بیتکوین.
بخریمش.
ساخت تراکنش برای دستگاه نوشیدنیساز.
فکر کنم یه خرده شکلش رو شاخ و دم دار کشیدم، ولی خب توضیحش سخت نیست:
- نوشیدنیفروشی یه خروجی (دسته) نداره که تنهایی کل 4.2 قیمت دستگاه ( مقدار بیتکوین) رو پوشش بده. پس باید یه مشت دسته رو کنار هم بگذاریم که در نهایت جمعش از 4.2 بیتکوین بیشتر بشه.
- زمانی که ما یه تراکنش رو میسازیم، خروجیهایی که برمیداریم که خرج کنیم رو میگیم «ورودی» تراکنش.
- نوشیدنیفروشی، با مجموع ورودی 4.5 ، دو خروجی جدید 4.2 و 0.3 ایجاد میکنه.
وقتی یه خروجی رو تو تراکنش استفاده میکنی بطور موقت بهش میگن «ورودی» .
بعد از این تراکنش، وضع آدرس نوشیدنیفروشی اینطوریه:
دوباره توجه کن که خروجیهایی که به عنوان ورودی ازشون استفاده کردیم خرج شدن! و دیگه نمیشه ازشون استفاده کرد.
ولی هنوز اون خروجیهای هنوز «خرج نشده» قابل استفادهاند. بهشون میگیم خروجی تراکنشهای خرج نشده (UTXOs).
مقدار کل تعداد بیتکوینهای داخل یه حساب برابر هست با مجموع کل UTXOs های حساب.
خروجیهای [1] + [2] + [0.5] + [1] رو برای ورودی تراکنش انتخاب کردیم. اما تا زمانی که روی هم رفته بیشتر از مقداری باشن که میخواهیم بفرستیم، هر ترکیبی بخوایم میتونیم از این خروجیها (یا به زبون بهتر ورودیها) انتخاب کنیم!
[1] + [3] + [0.5] = 4.5
[3] + [2] = 5
[1] + [3] + [0.5] + [2] + [1] = 7.5همه اینها شدنیاند، خودت میتونی باقی پول هر ترکیب رو حساب کنی.
عه، راستی! تو دوتا تراکنش قبلی کارمزد تراکنش نذاشتیم.
بدون کارمزد تراکنش،اینکه تراکنشهات برن تو بلوک طول میکشه، کارمزد، نقشش اینه که به تراکنشت اولویت بده.
کارمزد تراکنش زمان استخراج بلوک به جیب استخراجکننده میره، پس کارمزد انگیزهایه که به استخراجکننده میدی که تراکنش رو داخل بلوکی که استخراج میکنه بزاره.
زمانی که این متن نوشته شده اینطوری بود که چون بلوکها پر پر نمیشد، استخراجکنندهها مرامی تراکنش بیکارمزد هم بعضی وقتها تو بلوکشون میذاشتن. الان دیگه این خبرا نیست و تراکنش بیکارمزد نه تو بلوک قرار میگیره، نه حتی تو شبکه پخش میشه و بهدست استخراجکننده میرسه.
فرض کن تراکنش آخری رو تو شبکه نفرستادیم، بیا یه کارمزد بهش اضافه کنیم:
پس خروجیِ کارمزد تراکنش چی شد؟! خروجی کارمزدی درکار نیست ولی به اندازهی خروجیها دقت کن.
مجموع خروجیها کمتر از مجموع ورودیهاست، یعنی مقداری بیتکوین مونده که مصرف نشده. این مقدار «باقی مونده» کارمزد تراکنشه.مبلغ باقیموندهی تراکنش (ورودیها – خروجیها) همیشه توسط استخراجکننده برداشته میشه، پس اگه یه تراکنش دستی ایجاد کنی و فراموش کنی داخلش یه خروجی برای باقی پولت بذاری، استخراجکننده اون باقی پول (هرچقدر که باشه) رو برای خودش برمیداره.
و اینجا آخر این قسمته!
شاد زی..