تراکنشها در یک شبکه غیر متمرکز بلاک چینی مانند بیت کوین، بعد از آن که توسط نودهای شبکه تایید شدند و توسط ماینرها در بلاک قرار گرفتند، در مرحله بعد بر روی بلاک چین ثبت میشوند؛ اما ممکن است این سوال پیش بیاید که این تراکنشها بعد از آن که در شبکه منتشر شدند، تا زمانی که توسط یک ماینر در بلاک چین ثبت شوند، کجا به انتظار مینشینند؟ جواب این سوال MemPool است. در این مقاله قصد داریم در مورد Mempool و نحوه کارکرد آن توضیح دهیم.
Mempool یا Transaction Pool در واقع یک جور اتاق انتظار برای تراکنشهای تایید نشده است و فضایی است که نودهای کامل (Full Node) شبکه به ذخیره تراکنشهای تایید نشده اختصاص میدهند.
هر تراکنش بعد از آن که ایجاد شد و در شبکه منتشر شد، هر نود کاملی بعد از آن که آن را تایید کرد، در Mempool خود ذخیره میکند و سایر نودهای مجاور آن هم از وجود این تراکنش که هنوز در بلاک چین ثبت نشده، مطلع میشوند و آنها هم آن را در MemPool خود ذخیره میکنند.
روند تایید تراکنشهای تایید نشده در Mempool
در کل، هر نود در شبکه بیت کوین بعد از دریافت یک تراکنش جدید، ابتدا جزئیات آن را بر اساس قواعد تعریف شده در پروتوکل بیت کوین بررسی میکند و بعد از آن که تراکنش توسط گره (نود) تایید شد، در Mempool ذخیره میشود و در شبکه منتشر میشود تا سایر نودها هم از وجود آن مطلع شوند.
اما در نظر داشته باشید که با وجود تایید شدن تراکنش توسط نودها و با توجه به آن که تراکنش هنوز توسط ماینرها در بلاک چین ثبت نشده، کماکان تراکنش تایید نشده تلقی میشود. تراکنشهایی هم که به هر نوعی با پروتوکل بیت کوین در تضاد باشند، توسط نودها رد میشوند و اصلا در شبکه منتشر نمیشوند.
اما همانطور که گفته شد، یک تراکنش تایید نشده توسط نودهای کامل شبکه در فضای Mempool به انتظار مینشیند تا یک ماینر، آن تراکنش را در بلاکی که قصد دارد آن را استخراج کند قرار دهد و موفق به پیدا کردن هش مربوط به آن بلاک شود و با اضافه شدن آن بلاک در بلاک چین، آن تراکنش هم تایید شده تلقی شود.
توجه داشته باشید که یک نود کامل شبکه میتواند خود ماینر هم باشد، اما تمام نودهای کامل (Full Node) لزوما اقدام به صرف انرژی برای پیدا کردن هش بلاک جدید (ماینینگ) نمیکنند و تنها وظیفه ذخیره کل اطلاعات بلاک چین و تایید تراکنشها و بلاکهای جدید را به عهده دارند.
فضای MemPool
بعد از آن که تراکنش بالاخره در بلاک چین ثبت شد، بقیه نودهای شبکه آن را از Mempoolهای خود حذف میکنند. به این ترتیب، بعد از استخراج هر بلاک جدید حجم MemPool نودها افت میکند و دوباه با انتشار تراکنشهای جدید در شبکه، این حجم به تدریج افزایش پیدا میکند.
در شبکه بیت کوین با توجه به آن که حجم هر بلاک به ۱ مگابایت محدود شده است و هر ده دقیقه به صورت میانگین یک بلاک جدید به بلاک چین اضافه می شود، در زمانهای شلوغی شبکه، تعداد تراکنشهای تایید نشده که در فضای MemPool به انتظار تایید هستند، افزایش مییابد. در واقع در این مواقع که حجم MemPool از حجم یک بلاک که یک مگابایت است، بیشتر میشود، برای ثبت شدن یک تراکنش در بلاک چین، ممکن است زمان بیشتری نیاز داشته باشد.
ماینرها برای انتخاب تراکنشها از بین تراکنشهای تایید نشده موجود در فضای Mempool کاملا مختار هستند. از آنجاکه هدف ماینرها کسب سود بیشتر از توان محاسباتی خرج شده است، اولویت آنها با تراکنشهایی است که کارمزد بیشتری را به ماینرها پیشنهاد میدهند، نه زمانی که تراکنش در انتظار تایید بوده است.
به همین دلیل است که با افزایش میزان کارمزد پرداختی، سرعت تایید تراکنش و ثبت آن در بلاک چین افزایش مییابد و تراکنشهای با کارمزد خیلی کم شاید مجبور باشند مدت زمان زیادی در صف انتظار Mempool باقی بمانند.
به تعداد نودهای شبکه، Mempool وجود دارد
هر نود کامل شبکه، در واقع یک کامپیوتر است که بر اساس پروتکل شبکه بیت کوین عمل مینماید و یک فضایی مخصوص به ذخیره تراکنشهای تایید نشده یا Mempool دارد که بر روی حافظه RAM ذخیره میشود.
از آنجا که شبکه بیت کوین یک دفتر کل توزیع شده است، تراکنشهایی که هر نود دریافت میکند، لزوما با سایر تراکنشهای دریافتی سایر نودها یکی نیست. به علاوه این که هر شخصی برای راهاندازی یک نود کامل، سخت افزار انتخابی خود، با ظرفیت RAM مد نظر خود را میتواند داشته باشد. در نتیجه هر نودی از شبکه میتواند تراکنشهای در صف انتظار مخصوص به خودش را داشته باشد و لزوما تمام تراکنشهای موجود در تمام Mempool های نودهای شبکه با هم یکسان نیستند.
در صورت پر شدن فضای MemPool یک نود چه اتفاقی رخ میدهد؟
در نسخههای قدیمیتر نرمافزار Bitcoind، با پر شدن فضای RAM اختصاصی یک نود برای تراکنشهای تایید نشده یا MemPool، نود کرش میکرد و با MemPool خالی ریستارت میشد.
اما در نسخههای جدیدتر این نرم افزار، میتوان در نرمافزار یک آستانه کارمزد تعریف کرد که با رسیدن به حداکثر ظرفیت Mempool تراکنشهای با کارمزد کمتر از آستانه، به طور خودکار از فضای Mempool حذف شوند.
مشاهده حجم کلی تراکنشهای در صف انتظار MemPool
در اکثر مرورگرهای بلاک چین بیت کوین مانند Blockhchain.info، قسمتی برای مشاهده حجم کلی تراکنشهای در صف انتظار تایید و تغییرات آن در طول زمان وجود دارد. در زمان نگارش این مطلب، همانطور که در تصویر زیر میتوان دید، حجم کل تراکنشهای موجود در MemPoolهای بیت کوین، حدود ۶ مگابایت است.
در تصویر زیر نیز تغییرات مربوط به حجم MemPool بیت کوین در طول یک سال گذشته را میتوان دید.
آخرین به روز رسانی: ۱۳۹۹/۴/۵