اگر تراکنشی پردازه کلید عمومی خالی داشته باشد، هر کسی می تواند آن را با پردازه ی امضا خرج کند؛ بدین صورت که پردازه امضا فقط ۱ را درون پشته قرار داده و بنابر این تراکنش صحیح می شود همان طور که هر کسی می تواند این تراکنش را خرج کند، اولین کسی که آن را خرج می کند، معدن کاوی خواهد بود که آن را درون یک بلاک می گنجاند. بنابراین این تراکنش ها می توانند معادل هزينه کارمزد برای معدن کاوان در نظر گرفته شوند. از آنجا که این نوع از تراکنش ها استاندارد نیستند، گرده ای در حال اجرای هسته بیت کوین آن را رله نمی کنند. مثال دیگر از تراکنشی غیر استاندارد، موردی است که توسط پردازه کلید عمومی رمز شده است.

این نوع از تراکنش ها غیرقابل خرج نامیده می شوند. دلیل این است که هیچ کس نمی تواند این تراکنش ها را خرج کند و خروجی را می توان از حافظه خروجی های تراکنش خرج نشده، حذف کرد.

این تراکنش ها در نسخه 0.9 پروتکل به عنوان راهی برای حل مسئله کاربرانی معرفی شدند که تلاش می کردند داده های تصادفی را به زنجیره بلوکی وارد کنند. مزیت اصلی این نوع تراکنش ها این است که حافظه خروجی های تراکنش خرج نشده با تراکنش های غیر قابل خرج – هنگامی که داده ها درون زنجیره بلوکی درج می شوند- درهم و برهم نمی شود.

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

امضاهای تراکنش های بیت کوین

به منظور خرج وجوه ذخیره شده در خروجی یک تراکنش، تراکنش خرج کننده باید با کلید خصوصی مرتبط با آدرسی که وجوه در آن ذخیره شده است، امضا شود. امضای تراکنش شامل مراحل زیر است:

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

شکل 1 جزییات اضافی را که در تراکنش گنجانده می شود نشان می دهد. تراکنش، تغيير قفل زمانی در کد خود دارد. همچنین هر ورودی در تراکنش، یک شماره توالی نیز دارد.

شکل1. اجزای تراکنش

تراکنش تنها هنگامی که قفل زمانی آن فرا رسیده باشد، یا زمانی که شماره توالی تمامی ورودی ها به حداکثر مقدار قابل قبول خود تعیین شده باشند، نهایی در نظر گرفته می شود. قفل زمانی در اصل اجازه فرستادن تراکنشی در انتظار (غير نهایی) را می دهد که می تواند در زمانی در آینده جایگزین شود. این تکنیک جایگزینی تراکنش نامیده می شود. دوره جایگزینی چنین تراکنشی توسط مقدار قفل زمانی یا از طریق شماره بلوک مهر زمانی تعیین می شود. اگر مقدار قفل زمانی کمتر از ۵۰۰ میلیون باشد، آن به عنوان یک شماره بلوک و اگر بالاتر از آن باشد، به عنوان تاریخ یونیکس تفسیر می شود. توجه داشته باشید برای تراکنشی که باید جایگزین شود، شماره توالی حداقل از یکی از ورودی ها باید کمتر از حداکثر باشد. نسخه های پی در پی از یک تراکنش می تواند با شماره های توالی بالاتر برای ورودی هایش، پخش همگانی شود. به این ترتیب یک تراکنش می تواند توسط طرف های درگیر، قبل از این که در زنجیره بلوکی منتشر شود، اصلاح شود. تراکنش، زمانی نهایی در نظر گرفته می شود که قفل زمانی به مقدار خود رسیده باشد، یا همه شماره های توالی از ورودی ها در حداکثر خود باشند.

تراکنش هایی که مقدار قفل زمانی آنها هنوز فرا نرسیده یا شماره های توالی در حداکثر مقدار خودشان تنظیم نشده باشند، تراکنش های نهایی نشده نامیده می شوند. تراکنش های نهایی نشده در زنجیره بلوکی گنجانده شده و توسط گره هایی که آنها را دریافت می کنند، حذف می شوند. قبل از سال ۲۰۱۰ تراکنش های نهایی نشده توسط گره ها تا زمانی که قفل زمانی فرا رسد، نگهداری می شدند، یا یک تراکنش جایگزین جدید که نهایی بود آماده می شد. این تراکنش های نهایی نشده در مخزن یا مخزن حافظه تراکنش های تأییده نشده برای کوتاه مدت اقامت می کردند. اجازه دادن به تراکنش های نهایی نشده جهت تجمع در مخزن حافظه تراکنش های تأییده نشده، ریسکی امنیتی است. مهاجم می تواند حمله اتكار سرویس ضد شبکه بیت کوین را با پر کردن مخزن حافظه تراکنش های تأییده نشده گره های معدن کاو با تراکنش های قفل زمانی شده، انجام دهد.

داشتن توانایی برای چند شریک برای به وجود آوردن و امضا زدن تراکنشی به صورت متوالی و سلسله وار مهم است. این قابلیت حتی با غیرفعال کردن جایگزینی تراکنش ممکن است. شرکا می توانند تراکنش های نیمه تکمیل خود را از طریق کانال های جایگزین ارسال کنند. با استفاده از مخزن حافظه تراکنش های تأییده نشده برای ذخیره سازی تراکنش های نیمه کامل، تسهیلات و راحتی به وجود می آید. اما اکثر قراردادهای پیشرفته هنوز هم بدون آن امکان پذیر است. یکی دیگر از ویژگی های تراکنش هایی که در شکل 1 نشان داده شده است، انواع هش امضا است. هر امضا در پردازه امضا شامل پرچمی است که نشان می دهد کدام ورودی ها و خروجی ها توسط امضا پوشش داده می شود. این پرچم به نام نوع هش امضا نامیده شده و می تواند مقادیری را داشته باشد.

در انتهای مقاله «انواع دیگر تراکنش های بیت کوین» توجه داشته باشید که امضاها پرچم اضافی دیگری دارند که می تواند مقدار درست یا غلط را داشته باشد. این پرچم را می توان با هر یک از سه پرچم قبلی ترکیب کرد. اگر مقدار آن درست تنظیم شود، امضا تنها شامل ورودی جاری خواهد بود. اگر مقدار آن نادرست تنظیم شود، امضا شامل تمام ورودی ها می شود. این پرچم در تراکنش های جمع سپاری مفید است. انعطاف پذیری زبان پردازه نویسی تراکنش همراه با روش های مختلف که در آن تراکنشی را می توان امضا کرد و نیز توانایی وارد کردن داده های تصادفی به زنجیره بلوکی، ایجاد فرصت های زیادی برای انواع کاربردهای نوآورانه کرده است. زبان پردازه نویسی بسیار قدرتمند است، اما باید در استفاده دقت زیادی شود. تنظیم اشتباه پارامترهای پردازه آسان بوده و دارای عواقب فاجعه باری است.

منبع: کتاب راهنمای بیت کوین نوشته پدرو فرانکو