وقتی یک تراکنش بیتکوین را ارسال میکنید، معمولاً بلافاصله داخل یک بلاک قرار نمیگیرد. ابتدا باید توسط نودها دریافت و بررسی شود و در صورت پذیرفتهشدن طبق سیاست محلی آن نود، در ممپول یا Mempool قرار بگیرد.
ممپول را میتوان محل نگهداری موقت تراکنشهای معتبر و هنوز تأییدنشده دانست. اما یک نکته مهم وجود دارد: ممپول یک صف جهانی و واحد نیست. هر نود ممپول خودش را دارد و مجموعه تراکنشهای آن میتواند با نود دیگر متفاوت باشد.
در این مقاله میبینیم ممپول دقیقاً چه کاری انجام میدهد، تراکنش چگونه به آن وارد میشود، چرا دو نود میتوانند تراکنشهای متفاوتی در ممپول خود داشته باشند و این موضوع چه ارتباطی با کارمزد و ساخت بلاک دارد.
ممپول دقیقاً چیست؟
Mempool مخفف Memory Pool است و در بیتکوین به مجموعه تراکنشهای تأییدنشدهای گفته میشود که یک نود برای پردازش و انتشار بیشتر در اختیار دارد.
وقتی یک تراکنش جدید به نود میرسد، نود نمیتواند صرفاً به این دلیل که تراکنش از یک همتا دریافت شده آن را قبول کند. تراکنش باید از نظر قوانین لازم بررسی شود؛ از جمله اینکه ورودیهای آن قابل خرجکردن باشند، امضاها معتبر باشند و تراکنش با وضعیت فعلی زنجیره و سیاستهای محلی نود سازگار باشد.
اگر تراکنش پذیرفته شود، نود میتواند آن را در ممپول خود نگه دارد و برای همتاهای دیگر منتشر کند.
بنابراین ممپول بخشی از وضعیت دائمی بلاکچین نیست. تراکنش تا زمانی که در یک بلاک قرار نگرفته، در وضعیت تأییدنشده قرار دارد و ممکن است از ممپول یک نود وارد شود، حذف شود یا اصلاً در ممپول نود دیگری قرار نگیرد.
مسیر یک تراکنش از کیف پول تا بلاک
بهصورت ساده میتوان مسیر را اینگونه دید:
فرایند کلی: ساخت تراکنش، سپس امضا، ارسال به نود، اعتبارسنجی، پذیرش در ممپول، انتشار بین نودها، انتخاب برای بلاک و در نهایت تأیید.
در این مسیر چند نکته مهم وجود دارد.
اول اینکه کیف پول تراکنش را میسازد و با کلیدهای لازم آن را امضا میکند. سپس تراکنش به یک یا چند نود ارسال میشود.
نود دریافتکننده تراکنش را بررسی میکند. اگر تراکنش معتبر باشد و با سیاست پذیرش آن نود نیز سازگار باشد، میتواند وارد ممپول شود و از طریق شبکه همتابههمتا منتشر شود.
در نهایت، یک ماینر یا سازنده بلاک تراکنشهای مناسب را برای قرارگرفتن در بلاک انتخاب میکند. پس از قرارگرفتن تراکنش در یک بلاک معتبر، دیگر صرفاً یک تراکنش ممپول نیست؛ وارد زنجیره بلاکها شده است.
آیا ممپول همه نودها یکی است؟
خیر. این یکی از مهمترین نکات درباره Mempool است.
ممپول یک دیتابیس جهانی نیست که همه نودهای شبکه دقیقاً یک نسخه از آن را نگه دارند. هر نود مجموعهای محلی از تراکنشها دارد.
فرض کنید تراکنش شما به نود A برسد اما هنوز به نود B نرسیده باشد. در این لحظه تراکنش میتواند در ممپول A وجود داشته باشد ولی در ممپول B نباشد.
حتی اگر هر دو نود تراکنش را دریافت کرده باشند، سیاستهای محلی آنها میتواند باعث شود نتیجه یکسان نباشد. سیاستهای مربوط به relay و mempool، برخلاف قوانین اجماع، قواعدی هستند که نود برای تراکنشهای تأییدنشده اعمال میکند.
به همین دلیل، عبارت «تراکنش در ممپول بیتکوین است» اگر بدون مشخصکردن نود یا سرویس گفته شود، کمی سادهسازیشده است. دقیقتر این است که بگوییم تراکنش در ممپول یک یا چند نود قرار گرفته است.
تفاوت Consensus و Mempool Policy
این تفاوت برای فهم بیتکوین بسیار مهم است.
قوانین اجماع تعیین میکنند چه چیزی در شبکه معتبر است. اگر تراکنشی قوانین اجماع را نقض کند، نمیتواند صرفاً با تغییر تنظیمات یک نود معتبر شود.
اما Mempool Policy درباره این است که یک نود با تراکنشهای تأییدنشده چه رفتاری داشته باشد؛ برای مثال چه تراکنشهایی را relay کند یا در ممپول خود نگه دارد.
بنابراین ممکن است یک تراکنش از نظر اجماع بالقوه معتبر باشد، اما یک نود آن را طبق سیاست محلی خود به ممپول وارد نکند یا آن را relay نکند.
این موضوع را نباید با «رد شدن از بلاکچین» اشتباه گرفت. تراکنش تا زمانی که در بلاک قرار نگرفته، در مرحله سیاستهای ممپول و relay قرار دارد؛ پس از قرارگرفتن در بلاک، قوانین اجماع نقش تعیینکننده دارند.
ممپول چه ارتباطی با کارمزد دارد؟
محدود بودن فضای بلاک باعث میشود همه تراکنشهای منتظر نتوانند همزمان وارد بلاک بعدی شوند.
در چنین شرایطی، نرخ کارمزد اهمیت پیدا میکند. در مقاله کارمزد بیتکوین چگونه تعیین میشود؟ دیدیم که Fee Rate معمولاً با واحد sat/vB بیان میشود و اندازه مجازی تراکنش نیز در تعیین هزینه کل نقش دارد.
وقتی تقاضا برای فضای بلاک بالا میرود، تراکنشهایی با نرخ کارمزد بالاتر معمولاً برای ساخت بلاک جذابتر میشوند. در نتیجه کاربران برای رسیدن به تأیید سریعتر ممکن است نرخ بالاتری انتخاب کنند.
اما ممپول را نباید یک صف ساده مرتبشده بر اساس یک عدد تصور کرد. روابط میان تراکنشها، مانند تراکنشی که خروجی تأییدنشده تراکنش دیگری را خرج میکند، میتواند در نحوه ارزیابی مجموعه تراکنشها اهمیت داشته باشد.
به همین دلیل، در نرمافزارهای واقعی ساخت بلاک و سیاست ممپول، مفاهیمی مانند ancestor و descendant نیز مطرح میشوند.
چرا یک تراکنش ممکن است مدتی در ممپول بماند؟
قرارگرفتن تراکنش در ممپول به معنی «تأیید در بلاک بعدی» نیست.
چند عامل میتواند باعث شود تراکنش مدتی منتظر بماند:
- تقاضای زیاد برای فضای محدود بلاک
- نرخ کارمزد پایینتر نسبت به تراکنشهای رقیب
- اندازه بزرگتر تراکنش
- وضعیت و سیاست ممپول نودهای مختلف
- شرایط انتشار تراکنش در شبکه
به همین دلیل، تخمین زمان تأیید همیشه یک پیشبینی قطعی نیست. حتی اگر یک سرویس زمان تقریبی ارائه کند، شرایط ممپول و فضای بلاک میتواند تغییر کند.
آیا تراکنش میتواند از ممپول حذف شود؟
بله.
ممپول فضای حافظه نامحدود و دائمی نیست. نودها برای نگهداری تراکنشهای تأییدنشده محدودیتها و سیاستهای مشخصی دارند.
یک تراکنش ممکن است به دلایلی مانند قرارگرفتن در یک بلاک، جایگزینشدن طبق سیاستهای مربوط به RBF، حذفشدن بهدلیل محدودیتهای ممپول یا منقضیشدن از ممپول یک نود خارج شود.
خروج یک تراکنش از ممپول یک نود بهتنهایی به معنی نامعتبرشدن آن در سطح اجماع نیست. ممکن است همان تراکنش هنوز در ممپول نودهای دیگر وجود داشته باشد و دوباره منتشر شود، مشروط بر اینکه شرایط لازم را داشته باشد.
RBF چه ارتباطی با ممپول دارد؟
Replace-By-Fee یا RBF سازوکاری است که اجازه میدهد در شرایط مشخص، یک تراکنش تأییدنشده با تراکنش جایگزین شود.
از دید ممپول، این یعنی نود باید بتواند رابطه میان تراکنش جدید و تراکنش موجود را بررسی کند و طبق سیاست جایگزینی تصمیم بگیرد که آیا تراکنش قبلی کنار گذاشته شود یا نه.
هدف عملی RBF میتواند افزایش نرخ کارمزد تراکنشی باشد که هنوز تأیید نشده است.
پس RBF نیز بخشی از دنیای تراکنشهای تأییدنشده و سیاستهای ممپول است، نه یک تغییر در قوانین بنیادی مالکیت بیتکوین.
ممپول با بلاکچین چه تفاوتی دارد؟
یک راه ساده برای تفکیک این دو مفهوم این است:
| ممپول | بلاکچین |
|---|---|
| محلی است | زنجیره مشترک بلاکهای پذیرفتهشده است |
| تراکنشهای تأییدنشده را نگه میدارد | تراکنشهای قرارگرفته در بلاکها را ثبت میکند |
| تحت سیاستهای محلی نود قرار دارد | تحت قوانین اجماع شبکه اعتبارسنجی میشود |
| میتواند بین نودها متفاوت باشد | هدف شبکه رسیدن به یک تاریخچه معتبر مشترک است |
| وضعیت آن موقتی و پویاست | تاریخچه ثبتشده شبکه را تشکیل میدهد |
این تفاوت یکی از دلایل مهمی است که نباید ممپول را بخشی از خود بلاکچین به حساب آورد.
آیا دیدن یک تراکنش در ممپول یعنی پول منتقل شده است؟
نه به معنای نهایی و قطعی.
وقتی تراکنش در ممپول قرار میگیرد، یعنی دستکم یک نود آن را دریافت و طبق شرایط خود پذیرفته است. اما هنوز در یک بلاک قرار نگرفته است.
برای همین، وقتی موضوع انتقال ارزش اهمیت بالایی دارد، باید به وضعیت تراکنش روی زنجیره و تعداد تأییدها توجه کرد، نه صرفاً دیدهشدن آن در یک mempool explorer.
این نکته ادامه طبیعی بحث امنیت بیتکوین است: شبکه برای معتبرشناختن تاریخچه به قواعد اجماع و اعتبارسنجی مستقل نودها متکی است، نه صرفاً به اینکه یک تراکنش در ممپول دیده شود.
یک مثال ساده
فرض کنید سه تراکنش در ممپول منتظر هستند:
- تراکنش A: اندازه ۱۵۰ vB و نرخ ۵ sat/vB
- تراکنش B: اندازه ۲۰۰ vB و نرخ ۲۰ sat/vB
- تراکنش C: اندازه ۱۰۰ vB و نرخ ۱۲ sat/vB
کارمزد کل آنها بهترتیب ۷۵۰، ۴۰۰۰ و ۱۲۰۰ ساتوشی است.
اگر فقط به کارمزد کل نگاه کنیم، ممکن است تصور کنیم B جذابتر است چون بیشترین کارمزد مطلق را میپردازد. اما نرخ کارمزد نشان میدهد که B برای هر واحد از فضای مجازی تراکنش، ۲۰ sat/vB میپردازد.
در شرایط ساده و بدون درنظرگرفتن روابط میان تراکنشها، چنین نرخهایی میتوانند در اولویتبندی فضای بلاک مهم باشند. در سیستم واقعی، ساخت بلاک میتواند مجموعهای از تراکنشهای مرتبط را نیز در نظر بگیرد.
جمعبندی
ممپول را میتوان اتاق انتظار محلی تراکنشهای تأییدنشده دانست، نه یک دفترکل مشترک و نه یک صف جهانی واحد.
مهمترین نکات این مقاله:
- هر نود ممپول خودش را دارد.
- تراکنش پس از دریافت باید توسط نود بررسی شود.
- قوانین اجماع با سیاستهای ممپول یکی نیستند.
- تراکنش موجود در ممپول هنوز تأییدشده محسوب نمیشود.
- محدود بودن فضای بلاک باعث اهمیت نرخ کارمزد میشود.
- ممپول میتواند میان نودها متفاوت باشد.
- RBF و بخشی از مدیریت تراکنشهای تأییدنشده در محدوده سیاست ممپول قرار میگیرند.
- قرارگرفتن تراکنش در بلاک، مرحلهای متفاوت از حضور آن در ممپول است.
اگر UTXO را مدل مالکیت و تراکنش را سازوکار انتقال این مالکیت بدانیم، ممپول حلقهای است که این تراکنش را پیش از ثبت در بلاکچین در شبکه نگه میدارد و برای قرارگرفتن در فضای محدود بلاک آماده میکند.
منابع و مطالعه بیشتر
- Bitcoin Core — Transaction Relay Policy
- Bitcoin Core — Mempool Terminology
- Bitcoin Core — Mempool Design
- Bitcoin Core — Mempool Replacements
- Bitcoin Core — Mempool Options
این مطلب با هدف آموزش و تحلیل تهیه شده است و نباید بهعنوان توصیه قطعی برای خرید، فروش یا شرطبندی تلقی شود.