آشنایی با ساختار تراکنش ها در شبکه بیت کوین
تراکنش ها در بیت کوین به چه صورت انجام می شود؟
بیت کوین ها در رایانه های کاربران مقیم نیستند. آنها ورودی های پایگاه داده توزیع شده ای به نام زنجیره بلوکی بوده است. بر خلاف ارزهای دیجیتال متمرکز، زنجیره بلوکی حساب ها و مقادیر آنها را نگهداری نمی کند، بلکه زنجیره بلوکی تراکنش ها را ذخیره می کند. تراکنش ها از لیستی متشکل از ورودی های تراکنش ها و لیستی از خروجی های تراکنش ها تشکیل شده اند. هر یک از خروجی تراکنش ها دارای دو قطعه داده است: یکی مقدار و دیگری نشانی گیرنده آن مقدار. آدرس ها از کلید عمومی مشتق شده اند؛ بنابراین تنها صاحب کلید خصوصی مرتبط با آن کلید عمومی می تواند وجوه ذخیره شده در خروجی تراکنش را باز کند. برای باز کردن وجوه، صاحب کلید خصوصی باید تراکنشی را که وجوه را به آدرس جدید ارسال می کند، امضا نماید.
ورودی تراکنش مرجعی را به خروجی تراکنش قبلی و نیز یک امضا که ثابت می کند وجوه مورد اشاره در خروجی تراکنش قبلی قابل خرج شدن است، نگهداری می کند. این امضا باید با کلید خصوصی مرتبط با کلید عمومی در آدرس بیت کوین انجام شود. اگر امضا مطابقت نداشته باشد، تراکنش نامعتبر تلقی شده و توسط شبکه حذف می شود. تراکنش، چندین ورودی تراکنش و خروجی تراکنش (حداقل یکی برای هر کدام) را گروهبندی می کند. هدف تراکنش آن است که وجوه را از ورودی ها به خروجی ها توزیع کند. ورودی ها در یک تراکنش به خروجی ها در تراکنش های قبلی ارجاع می دهند. این خروجی ها نباید خرج شده باشند. در غیر این صورت، آن تراکنش باطل است. برای این که تراکنشی معتبر باشد، مجموع مقادیر ورودی باید بزرگتر یا مساوی مجموع مقادیر خروجی باشد.
اگر بین ورودی و خروجی تفاوتی وجود داشته باشد، آن تفاوت، هزینه کارمزد تراکنش خواهد بود. حق کارمزد تراکنش ها توسط معدن کاوان- کسانی که تراکنش ها را در یک بلوک جمع آوری می کنند- جمع می شوند. خروجی ها در زنجیره بلوکی می توانند تنها یک بار خرج شده و آنها باید بطور کامل هزینه شوند. اگر مقدار خروجی بیشتر از میزان مصرف باشد، تراکنش یک تغییر را ایجاد می کند. فرستنده تراکنش می تواند این تغییر را با گنجاندن آدرس تغییر به عنوان خروجی اضافی به تراکنش ایجاد نموده، تا مبلغ باقی مانده را وصول کند. این واقعیت که آدرس تغییر بطور معمول توسط فرستنده تراکنش کنترل می شود، می تواند بطور فعالانه توسط الگوریتم های داده کاوی استفاده شده تا به زنجیره بلوکی اعمال شود.
توصیه می شود از آدرس تغییر جدیدی برای هر تراکنش به منظور افزایش حریم خصوصی استفاده شود. شکل 1 نشان دهنده نمونه ای از یک تراکنش است. در این مثال فرستنده می خواهد ۶ میلی بیت کوین به گیرنده ارسال کند. با این حال فرستنده تراکنشی بطور دقیق با ۶ میلی بیت کوین در اختیار ندارد. او تنها دو خروجی را با مقادیر ۵ میلی بیت کوین تحت کنترل خود دارد. بنابراین او تراکنشی که این دو خروجی را گروه بندی می کند، ایجاد و ۶ میلی بیت کوین به گیرنده می فرستد.
او همچنین یک خروجی به آدرسی که تحت کنترل خود اوست، برای دریافت تغییرات تراکنش باقی مانده (۳ میلی بیت کوین) ایجاد می کند. همچنین ۱ میلی بیت کوین به عنوان کارمزد برای معدن کاوان پرداخت می کند. قبل از ارسال تراکنش به شبکه، او باید دو ورودی تراکنش را امضا نماید تا ثابت کند آدرس هایی که توسط آنها ارجاع داده شده است، تحت کنترل اوست. تراکنش سپس به شبکه فرستاده می شود. اولین گره در شبکه، تراکنش را دریافت کرده و آن را به عنوان یک تراکنش معتبر تأیید می کند. اگر تراکنش صحیح باشد، گره آن را به گره های دیگر در شبکه رله می کند. برای بررسی این که تراکنشی معتبر است گره مراحل زیر را پیگیری می کند:
- بررسی می کند خروجی های قبلی که توسط تراکنش فعلی به آنها ارجاع داده شده اند، خرج نشده باشند. گره این کار را با انجام مشاوره با حافظه خروجی های تراکنش های خرج نشده انجام می دهد.
- گره بررسی می کند مجموع مقادیر ورودی، بزرگتر یا برابر مجموع خروجی ها باشد. این بدین معناست که گره بررسی می کند تراکنش بیش از ورودی های در دسترس، خرج نکند. تفاوت بین مجموع مقادیر ستانده ها و مجموع مقادیر نهاده ها، به عنوان کارمزد برای معدن کاوان در نظر گرفته شده و در تراکنش پایه – سکه گنجانده می شود.
- گره همچنین بررسی می کند امضاها برای هر کدام از ورودی ها معتبر باشد؛ یعنی هر کدام از ورودی ها با کلید خصوصی مرتبط با کلید عمومی آدرسی که به آن ارجاع داده شده، امضا شده باشد.
ساتوشی اجبار کرده است خروجی تراکنش به دلیل این که از نظر محاسباتی کارآمدتر است، به صورت کامل خرج شود. نرم افزار بیت کوین حافظه خروجی های تراکنش خرج نشده را نگه داری می کند. حافظه خروجی های تراکنش خرج نشده، پایگاه داده ای حاوی خروجی های تراکنش های خرج نشده است، حافظه خروجی های تراکنش خرج نشده بسیار مفید بوده و اگر تراکنش های جدید معتبر باشند، می توان آنها را بسرعت مورد بررسی قرار داد. هنگامی که تراکنش جدیدی از راه می رسد آن تراکنش درون حافظه خروجی های تراکنش خرج نشده جست وجو می شود. اگر تمام ورودی ها وجود داشته باشند، سپس ورودی ها به خروجی های معتبر قبلی متناظر شده و تراکنش همچنان ارزیابی می شود. اگر هیچ کدام از ورودی ها در حافظه خروجی های تراکنش خرج نشده یافت نشد، تراکنش معتبر نبوده و دور ریخته می شود.
در ابتدا فرض می کنیم تراکنش ها در بلوک هایی که با هم تأیید می شوند، گروه بندی می شوند؛ یعنی بطور همزمان در زنجیره بـلوکی گنجانده میشوند. شکل 2 حافظه خروجی های تراکنش خرج نشده را در عمل نشان می دهد. در ابتدا چهار تراکنش خرج نشده در شبکه (۰-۱ تا ۰-۴) وجود دارد. حافظه خروجی های تراکنش خرج نشده، این چهار خروجی های تراکنش را نگه داری می کند.
در مرحله بعد، بلوکی که شامل سه تراکنش خواهد بود، ایجاد می شود. سه تراکنش مزبور چهار خروجی تراکنش در حافظه خروجی های تراکنش خرج نشده را خرج کرده و در نتیجه آنها را از بین می برند. اما تراکنش های جدید در بلوک، خروجی های جدیدی را (۱-۱ تا ۱-۵) معرفی و این خروجی ها در حافظه خروجی های تراکنش خرج نشده، گنجانده شده است. بلوک بعدی سه تا از پنج خروجی های تراکنش در حافظه خروجی های تراکنش خرج نشده (۱-۱ تا ۱-۳) را خرج کرده و سه خروجی تراکنش جدید (۲-۱ تا ۲-۳) را می افزاید. با ورود هر بلوک جدید، خروجی هایی که خرج شده اند از حافظه خروجی های تراکنش خرج نشده حذف شده و خروجی های جدید ایجاد شده توسط تراکنش ها، در بلوک حافظه خروجی های تراکنش خرج نشده، اضافه می شوند. مزیت نگه داشتن حافظه خروجی های تراکنش خرج نشده این است که حافظه مزبور بسیار کوچکتر از کل پایگاه داده تراکنش ها (زنجیره بلوکی) است. این تکنیک اجازه می دهد یک گره در شبکه بیت کوین حافظه خروجی های تراکنش خرج نشده را در حافظه با دسترسی تصادفی نگهداری کرده و بطور قابل توجهی سرعت بررسی اعتبار تراکنش های جدید بالاتر می رود. در بازگشت به سؤال قبلی که بیت کوین ها در کجا مستقر هستند، می توان گفت بیت کوین ها در خروجی های خرج نشده در تراکنش های موجود در زنجیره بلوکی قرار دارند.
استفاده های دیگر، گذشته از انجام تراکنش ها به منظور انتقال وجه بین آدرس ها وجود دارد. بسیاری از این کاربردها به توانایی برای ذخیره هر داده دلخواهی در زنجیره بلوکی تکیه دارند. هنگامی که داده ها در درون زنجیره بلوکی قرار دارند، امنیت وجود و اعتبار آنها توسط قدرت محاسباتی شبکه بیت کوین تأمین می شود، بسیار شبیه به روشی که بیت کوین ها امن می شوند.
یک راه برای ذخیره داده ها در زنجیره بلوکی این است که از نشانی گیرنده به عنوان فیلد داده استفاده شود. کلید خصوصی مرتبط با این آدرس شناخته شده نیست. بنابراین، هر گونه ارسال وجهی به این آدرس از بین خواهد رفت. قابل درک است که کاربران این نوع از تراکنش ها بخواهند مقدار بسیار ناچیزی از وجه را که 1 ساتوشی نامیده می شود، خرج کنند. مشکل این است که این خروجی ها در حافظه خروجی های تراکنش خرج نشده، گنجانده شده و هرگز از آن حذف نمی شوند، چرا که آنها قابل خرج کردن نیستند. در پاسخ به این عمل، توسعه دهندگان بیت کوین اقدام به لحاظ کردن مقدار آستانه حداقلی برای تراکنش کردند. خروجی تراکنش زیر آستانه مزبور، تراکنش گرد و غبار نامیده می شود؛ چرا که آنها همانند گرد و غبار بوده و در حافظه خروجی های تراکنش خرج نشده تجمع کرده است.
منبع: کتاب راهنمای بیت کوین نوشته پدرو فرانکو