انتظار برای تایید شدن تراکنش های بیت کوینی می تواند دلهره آوره باشد. شاید فکر کنیم که اشتباهی در وارد کردن آدرس کیف پول رخ داده است، که البته امکان آن هم وجود دارد. با این وجود، بیشتر مواقع طولانی شدن زمان انتظار برای تایید یک تراکنش به دلایل دیگری رخ می دهد. اما تراکنش های صادر شده تا چه زمانی می توانند در انتظار تایید شدن باقی بمانند و آیا واقعا لازم است این زمان طولانی را منتظر بمانیم؟ برای درک این موضوع، ابتدا باید بدانیم که تراکنش های بیت کوینی چه مکانیزمی دارند و تایید شدن آنها به چه چیزی وابسته است.
در یک تراکنش بیت کوینی چه اتفاقی می افتد؟
فرض کنیم شما 10 بیت کوین در کیف پول خود دارید و می خواهید 6 عدد از آنها را به آدرس دیگری بفرستید. در تراکنش های بیت کوینی، به جای اینکه صرفا 6 بیت کوین از یک آدرس برداریم و به آدرس دیگری بفرسیتم، مراحل پیچیده تری طی می شوند؛ هرچند، در نهایت اتفاقی که می افتد انتقال همان مقدار دلخواه بیت کوین به آدرس مد نظر است.
بیت کوین هایی که شما در آدرس خود دارید، به صورت دسته ای به آن انتقال پیدا کرده اند. مثلا اگه 10 بیت کوین داشته باشید، ممکن است به صورت چهار دسته ی 3، 1 ،2 و 4 بیت کوینی آنها را دریافت کرده باشید، که به آنها output یا خروجی تراکنش های دریافتی گفته می شود. نکته ی مهم این است که این مقادیر در آدرس شما جمع نشده و به یک دسته ی واحد تبدیل نمی شوند، یعنی به لحاظ فنی اطلاعات آدرس شما در شبکه همچنان ورود چهار دسته ی بیت کوینی را نشان می دهد، نه یک دسته ی کلی را ( اگرچه والت شما مجموع دارایی را به شما نشان می دهد).

هنگام انتقال بیت کوین به یک آدرس دیگر نیز شما یکی از همین دسته ها یا ترکیبی از آنها را ارسال می کنید. اینکه چه ترکیبی از دسته های بیت کوینی برای ارسال انتخاب شوند، وابسته به فرآیندی به نام coin selection است که توضیح آن در این مطلب صرفا باعث پیچیده تر شدن مسئله خواهد شد. آنچه باید بدانید این است که هنگام ارسال بیت کوین، شما خروجی یا output های موجود در آدرس خود را به عنوان ورودی یا input برای تراکنش جدید استفاده می کنید.
ممکن است دسته های موجود در آدرس شما دقیقا برابر با مبلغی که می خواهید پرداخت کنید نباشند. فرضا در مثال بالا، اگر بخواهید 6.5 بیت کوین پرداخت کنید، باید دسته ی 3 و 4 به عنوان ورودی ترکیب شده و دو خروجی 6.5 و 0.5 ایجاد شوند. خروجی 6.5 به آدرس مقصد منتقل شده و خروجی 0.5 به عنوان باقیمانده به آدرس اولیه باز می گردد. دلیل این اضافه کاری و به قول معروف لقمه را دور سر چرخاندن، سهولت پردازش فرایند پرداخت ها به لحاظ برنامه نویسی است.
تراکنش های بیت کوینی چطور در بلاک چین ثبت می شوند؟
تراکنش های انجام شده در شبکه ی بیت کوین، برای تایید شدن و افزوده شدن به بلاک چین باید توسط ماینرها استخراج شوند. تا قبل از استخراج، این تراکنش ها موقتا در محلی به نام استخر حافظه (memory pool) باقی می مانند، که می توان آن را به حافظه ی موقت کامپیوتر (RAM) تشبیه کرد. چیزی که ماینرها را ترغیب می کند تا یک تراکنش را استخراج کرده و در بلاک چین ثبت کنند، کارمزد (Fee) آن است. در هر تراکنش، مقدار کمی بیت کوین به عنوان کارمزد تراکنش از طرف فرستنده در نظر گرفته می شود که این مبلغ اندک به عنوان پاداش به ماینری داده می شود که تراکنش مورد نظر را استخراج کند. هرچه مقدار کارمزد یک تراکنش بالاتر باشد، ماینرهای بیشتری نسبت به استخراج آن رغبت نشان می دهند؛ در نتیجه آن تراکنش سریعتر تایید شده و در بلاک چین ثبت می شود.
تایید تراکنش های بیت کوینی ممکن است به دو دلیل با تاخیر مواجه شود:
- کم بودن کارمزد تعیین شده
- شلوغ بودن شبکه
در هر دو صورت، تراکنش های صادر شده اما تایید نشده باید در استخر حافظه منتظر بمانند تا در نهایت ماین شوند. در صورتی هم که مقدار کارمزد تعیین شده بسیار کم باشد، ماینرها انگیزه ای برای استخراج تراکنش مورد نظر نخواهند داشت. اما یک تراکنش تایید نشده تا چه زمانی در استخر حافظه باقی می ماند؟ آیا زمانی برای انقضای تراکنش ها وجود دارد؟
در پاسخ باید گفت تراکنش هایی که به هر دلیل توسط هیچ ماینری استخراج نشده اند، حداکثر تا دو هفته در استخر حافظه باقی می مانند و پس از آن پاک می شوند؛ انگار که هیچ تراکنشی انجام نشده است. البته بعید است که یک تراکنش صرفا به دلیل شلوغی شبکه تا دوهفته ماین نشود؛ این موضوع غالبا به دلیل کم بودن کارمزد تعیین شده است. با این وجود نیازی نیست بابت کم بودن کارمزد دو هفته صبر کنیم تا تراکنش منقضی شود و آن را از اول انجام دهیم.
چطور تراکنش هایی را که تایید نشده اند از برزخ استخر حافظه نجات دهیم؟
برای این کار سه روش کلی وجود دارد:
روش اول: منتظر ماندن! همانطور که گفتیم، اگر تراکنش مورد نظر به دلیل شلوغی شبکه ی بیت کوین در استخر حافظه گیر کرده باشد، با گذشت زمان بالاخره تایید خواهد شد (معمولا تا 24 ساعت). اگر تایید نشدن تراکنش به خاطر کارمزد پایین باشد، ممکن است بعد از مدتی برخی ماینرها نسبت به استخراج آن اقدام کنند، اما در صورتی که کارمزد بیش از حد کم باشد، انتظار دردی را دوا نخواهد کرد.
روش دوم: انتشار مجدد یا rebroadcast. برای درک این روش، باید با مفهوم تاییدیه یا confirmation در شبکه آشنا شوید. وقتی تراکنشی صورت گرفت و توسط یک ماینر استخراج شد، آن تراکنش درون یکی از بلاک های شبکه قرار داده می شود و تمام نود های ماینر آن تراکنش را به رسمیت می شناسند. این اولین تاییدیه است. برای اطمینان از ثبت شدن قطعی یک تراکنش در بلاک چین، معمولا 3-6 تاییدیه لازم است؛ یعنی باید منتظر ماند تا چند بلاک دیگر در شبکه ی بیت کوین ماین شوند. این موضوع یک مسئله ی امنیتی است که ارتباط مستقیمی به مطلب حاضر ندارد و بنابراین از توضیح اضافه در مورد آن خودداری می کنیم.
در روش rebroadcast، لازم است قبل از اینکه تراکنش ارسال شده از سمت شما حتی یک تاییدیه بگیرد، تراکنش دیگری دوباره با همان پارامترها ولی با کارمزد بیشتر در شبکه منتشر کنید. به دلیل کارمزد بالاتر، این تراکنش سریعتر از نسخه قبلی خود استخراج شده و درواقع جایگزین نسخه قبلی می شود. دلیل اینکه این کار باید قبل از گرفتن تاییدیه انجام بگیرد، جلوگیری از مشکل double spending یا خرج کردن دوباره ی همان بیت کوین هاست. وقتی تراکنش اولیه ی شما که دارای کارمزد کمی است یک تاییدیه از شبکه بگیرد، آن تراکنش در بلاک چین ثبت شده و بیت کوین های آن استفاده می شوند؛ در نتیجه شما نمی توانید تراکنش جایگزین برای آن انجام دهید و نودهای ماینر آن را نخواهند پذیرفت.
روش سوم: child pays for parent (CPFP). در این روش، برای این که یک تراکنش اولیه یا parent گرفتار شده در استخر حافظه را به سرانجام برسانیم، یک تراکنش ثانویه یا child منتشر می کنیم. ویژگی این تراکنش ثانویه آن است که یکی از خروجی ها یا output های تراکنش اولیه را به عنوان ورودی خود استفاده می کند و در واقع، دنباله ای برای آن تراکنش در بلاک چین است. ویژگی دیگر تراکنش ثانویه کارمزد بالای آن است؛ کارمزد این تراکنش به اندازه ای زیاد تعیین می شود که نه تنها برای خودش، بلکه برای تراکنش اولیه نیز کافی باشد.
همانطور که از اسم این روش بر می آید، تراکنش ثانویه به نوعی پول بلیط تراکنش اولیه را نیز پرداخت می کند. روش CPFP به این دلیل کاربردی است که در بلاک چین تراکنش ها به صورت زنجیره ای ثبت شده اند و اگر یک تراکنش به خصوص در شبکه مورد قبول واقع نشده باشد، تراکنش هایی که به دنبال آن می آیند نیز پذیرفته نخواهند شد. در واقع در این روش، ما با پرداخت کارمزد بسیار بالا، بلاک چین را مجبور می کنیم که تراکنش ثانویه را بپذیرد، اما برای انجام این کار، شبکه باید در ابتدا تراکنش اولیه را به رسمیت بشناسد که این همان هدف اصلی ماست.
انجام CPFP توسط برخی والت ها مثل Electrum و Samourai امکان پذیر است و به طور کلی با جستجو در اینترنت می توانید روش آن را متوجه شوید.
منابع:
Bitcoin.stackexchange