رمز ۱۰۸مرحلهٔ پایه، درس ۸ از ۲۲ بلاکچین و فناوری
تأیید تراکنش بلاکچین چطور انجام میشود؛ از ممپول تا نهایی شدن
مسیر تراکنش بلاکچینی از ارسال تا ممپول و بلوک، معنای تأیید، دلیل معطل ماندن تراکنش و تفاوت نهایی شدن در بیتکوین و اتریوم به زبان ساده.
پیشنیاز رمز ۱۰۷ هش (Hash) در بلاکچین یعنی چه؛ اثر انگشت دادهها
وقتی در کیف پول دکمهٔ ارسال را میزنید، تراکنش شما هنوز «انجامشده» نیست؛ فقط امضا شده و در شبکه پخش شده است. تراکنش ابتدا در صف انتظاری به نام ممپول (Mempool) میماند، سپس تولیدکنندهٔ بلوک بعدی آن را در یک بلوک قرار میدهد و از همان لحظه «یک تأیید» میگیرد. هر بلوکی که پس از آن روی زنجیره اضافه شود یک تأیید دیگر است و برگرداندن تراکنش را سختتر میکند. در بیتکوین اطمینان بهتدریج با انباشته شدن تأییدها بیشتر میشود، اما اتریوم مرحلهٔ رسمی دیگری به نام «نهایی شدن» (Finality) هم دارد.
از دکمهٔ ارسال تا ثبت در بلوک
در درس بلاکچین چیست به زبان ساده دیدید که بلاکچین دفتری مشترک است که هزاران رایانه نسخهای از آن را نگه میدارند. تراکنش شما برای رسیدن به این دفتر چند مرحلهٔ مشخص را طی میکند و دانستن این مراحل کمک میکند وقتی چیزی کند پیش میرود، بدانید مشکل دقیقاً کجاست.
مرحلهٔ اول در دستگاه خود شما رخ میدهد. کیف پول پیامی میسازد که میگوید چه مقداری از کدام نشانی به کدام نشانی کیف پول منتقل شود و چه کارمزدی برای آن پرداخت میشود. سپس این پیام را با کلید خصوصی شما امضا میکند. امضا ثابت میکند صاحب دارایی اجازهٔ انتقال را داده است، بیآنکه خود کلید فاش شود. اگر هنوز با نقش کلیدها آشنا نیستید، راهنمای کیف پول ارز دیجیتال چیست و چطور امن نگهش داریم را پیش از ادامه بخوانید.
مرحلهٔ دوم پخش شدن در شبکه است. کیف پول تراکنش امضاشده را به یک یا چند گره (Node) میفرستد و هر گره پیش از آنکه آن را به گرههای دیگر برساند، بررسی میکند که امضا درست باشد و دارایی موردنظر پیشتر خرج نشده باشد. تراکنشی که این بررسی را پاس نکند همانجا کنار گذاشته میشود.
مرحلهٔ سوم انتظار در ممپول است و مرحلهٔ چهارم ثبت در بلوک. در شبکههایی که با استخراج کار میکنند، ماینرها بلوک میسازند و در شبکههای مبتنی بر سهام، اعتبارسنجها. طبق مستندات توسعهدهندگان بیتکوین، سربرگ هر بلوک در قالبی ۸۰ بایتی ذخیره میشود و یکی از فیلدهای آن هش سربرگ بلوک قبلی است [۱]. همین فیلد است که بلوکها را به هم زنجیر میکند؛ سازوکار آن را در درس هش در بلاکچین یعنی چه دیدید.
-
بلوک ۱
بلوک آغاز (جنسیس)
نخستین تراکنشها
اشاره به بلوک قبلی: ندارد
-
بلوک ۲
چند تراکنش
اثر انگشت (هش) بلوک ۱
-
بلوک ۳
چند تراکنش
اثر انگشت (هش) بلوک ۲
-
بلوک ۴
تازهترین
تراکنشهای تازه
اثر انگشت (هش) بلوک ۳
«ارسال شد» با «تأیید شد» یکی نیست
پیام «ارسال شد» در کیف پول فقط یعنی تراکنش به شبکه تحویل داده شده است. تا وقتی تراکنش در هیچ بلوکی ثبت نشده، از نظر شبکه هنوز اتفاق نیفتاده است و ممکن است با تراکنش دیگری جایگزین یا از صف حذف شود.
ممپول؛ صف انتظار تراکنشها
ممپول (کوتاهشدهٔ Memory Pool) فهرست تراکنشهای معتبری است که به شبکه رسیدهاند ولی هنوز در بلوکی ثبت نشدهاند. نکتهٔ مهم این است که ممپول واحدی در کار نیست؛ هر گره ممپول خودش را در حافظه نگه میدارد و ممکن است فهرست یک گره با گرهٔ دیگر کمی فرق داشته باشد، چون تراکنشها با تأخیر در شبکه پخش میشوند.
ظرفیت هر بلوک محدود است. بنابراین وقتی تعداد تراکنشهای منتظر از ظرفیت بلوک بعدی بیشتر باشد، تولیدکنندهٔ بلوک باید انتخاب کند و طبیعی است که تراکنشهایی با کارمزد بالاتر را جلوتر بردارد. کارمزد شبکه در این درس فقط از همین زاویه اهمیت دارد: کارمزد بیشتر معمولاً جای تراکنش را در صف جلوتر میبرد، و کارمزد کمتر یعنی احتمال انتظار طولانیتر در ساعتهای شلوغ. جزئیات آن را در درس کارمزد شبکه (Gas Fee) چیست و چرا تغییر میکند ببینید.
وقتی شبکه خلوت است، حتی تراکنش کمکارمزد هم بهسرعت در بلوک جا میگیرد. وقتی شبکه شلوغ است، صف بلند میشود و تراکنشی که با کارمزد پایین فرستاده شده ممکن است بارها از قلم بیفتد. اگر تراکنشی مدت زیادی در ممپول بماند، بسیاری از گرهها آن را از فهرست خود پاک میکنند. در این حالت دارایی از دست نرفته است؛ تراکنش اصلاً روی زنجیره ثبت نشده و موجودی همچنان در نشانی فرستنده است، هرچند ممکن است کیف پول برای مدتی آن را «در انتظار» نشان دهد.
پرداخت تأییدنشده را نهایی ندانید
اگر کالا یا خدمتی را در ازای رمزارز تحویل میدهید، تراکنشی را که هنوز در ممپول است پرداختشده حساب نکنید. فرستنده ممکن است پیش از ثبت در بلوک، همان دارایی را با کارمزد بالاتر به نشانی دیگری بفرستد. به این کار «خرج دوباره» (Double Spend) میگویند و قربانی آن کسی است که به تراکنش منتظر اعتماد کرده است.
تأیید یعنی چه و چند تأیید کافی است
«تأیید» (Confirmation) به زبان ساده یعنی تعداد بلوکهایی که تراکنش شما را پوشش دادهاند. بلوکی که تراکنش در آن ثبت شده تأیید اول است و هر بلوکی که بعد از آن به زنجیره اضافه شود یک تأیید دیگر. فرض کنید تراکنش شما در بلوکی ثبت شده و پس از آن دو بلوک دیگر هم آمده است؛ کاوشگر بلوک برای آن سه تأیید نشان میدهد.
چرا تأیید بیشتر یعنی اطمینان بیشتر؟ چون هر بلوک هش بلوک قبلی را در خود دارد، نمیتوان تراکنشی را تغییر داد مگر اینکه بلوک حاوی آن و همهٔ بلوکهای بعدی هم تغییر کنند [۱]. در شبکهای مانند بیتکوین که با اثبات کار کار میکند، بازسازی هر بلوک به توان پردازشی واقعی نیاز دارد. پس هرچه تراکنش زیر بلوکهای بیشتری مدفون باشد، کسی که بخواهد آن را برگرداند باید کار بیشتری را از نو انجام دهد و در عین حال از بقیهٔ شبکه جلو بزند.
عدد مشهور شش تأیید از همین منطق میآید. ویکی بیتکوین میگوید بیشتر صرافیها و فروشندگانی که ریسک خرج دوباره را میپذیرند، شش تأیید یا بیشتر میخواهند [۲]. همین منبع تأکید میکند که عدد شش ویژگی خاصی ندارد و با این فرض انتخاب شده است که مهاجم بیش از ۱۰٪ نرخ هش شبکه را در اختیار نداشته باشد و ریسکی کمتر از ۰٫۱٪ قابلقبول شمرده شود [۲].
آنچه این عدد میگوید و آنچه نمیگوید
شش تأیید یک قرارداد مدیریت ریسک است، نه مرزی که بعد از آن برگشت ناممکن شود. اگر فرضهای پشت آن عوض شود، مثلاً مبلغ خیلی بزرگتر باشد یا توان مهاجم بیشتر فرض شود، عدد مناسب هم تغییر میکند.
به همین دلیل پاسخ «چند تأیید کافی است» به مبلغ و میزان ریسکی بستگی دارد که گیرنده حاضر است بپذیرد. یک پرداخت کوچک ممکن است با تأییدهای کمتری پذیرفته شود و یک انتقال بزرگ با تأییدهای بیشتر. صرافیها برای هر شبکه عدد جداگانهای تعیین میکنند و آن را معمولاً در صفحهٔ واریز مینویسند؛ اگر با روال کلی کار با صرافی آشنا نیستید، بخش صرافی و نخستین خرید ارز دیجیتال را ببینید.
چرا گاهی تراکنش ساعتها معطل میماند
تأخیر معمولاً یکی از چند علت مشخص را دارد و شناختن علت، راهحل را روشن میکند:
- کارمزد پایین نسبت به شلوغی شبکه. رایجترین علت همین است. اگر کارمزد در زمان ارسال مناسب بوده ولی بعد شبکه شلوغ شده، تراکنش پشت صف میماند.
- شلوغی ناگهانی. رویدادهایی که همزمان کاربران زیادی را به شبکه میکشانند، صف را در مدت کوتاهی بلند میکنند.
- گیر کردن ترتیب تراکنشها در اتریوم. هر حساب در اتریوم برای تراکنشهایش شمارهٔ ترتیبی به نام نانس (Nonce) دارد. اگر تراکنشی با نانس کوچکتر گیر کند، تراکنشهای بعدی همان حساب هم پشت آن منتظر میمانند، حتی اگر کارمزد کافی داشته باشند.
- وابستگی به تراکنش تأییدنشدهٔ دیگر. در بیتکوین اگر داراییای را خرج کنید که خودش از تراکنشی هنوز تأییدنشده آمده، تراکنش دوم نمیتواند زودتر از اولی در بلوک بنشیند و سرنوشتش به آن گره خورده است.
- تأخیر در سمت صرافی. گاهی تراکنش روی زنجیره تأییدهای لازم را گرفته، اما صرافی یا سرویس مقصد هنوز آن را پردازش نکرده است. این مشکل شبکه نیست و باید از پشتیبانی همان سرویس پیگیری شود.
اگر تراکنش هنوز در ممپول است، برخی کیف پولها امکان «جایگزینی با کارمزد بالاتر» (Replace-by-Fee) را میدهند: همان تراکنش با کارمزد بیشتر دوباره فرستاده میشود و نسخهٔ قبلی را کنار میزند. در اتریوم هم میتوان تراکنش تازهای با همان نانس و کارمزد بالاتر فرستاد؛ اگر این تراکنش تازه مقداری صفر را به نشانی خود شما بفرستد، عملاً تراکنش قبلی را بیاثر میکند. این تنها معنای «لغو» در بلاکچین است و فقط تا پیش از ثبت در بلوک ممکن است. پس از ثبت، تراکنش برگشتناپذیر است.
مراقب «تسریعکنندههای» ناشناس باشید
کسانی که در پیامرسانها یا سایتهای ناشناس وعدهٔ «سریعتر کردن» یا «برگرداندن» تراکنش را میدهند و در عوض عبارت بازیابی، کلید خصوصی یا پرداخت پیشاپیش میخواهند، از الگوهای رایج کلاهبرداری استفاده میکنند. تنها ابزار امن برای افزایش کارمزد، گزینهٔ داخل کیف پول خود شماست. برای شناخت این الگوها راهنمای چطور در ارز دیجیتال کلاهبرداری نخوریم را بخوانید.
نهایی شدن در بیتکوین و اتریوم
در بیتکوین لحظهای رسمی به نام «نهایی شدن» وجود ندارد. نهایی شدن در این شبکه احتمالاتی است: هیچ قانونی نمیگوید پس از فلان تعداد بلوک تراکنش دیگر برنمیگردد، بلکه با هر تأیید تازه احتمال برگشت آن کمتر میشود. عددهایی مانند شش تأیید، همانطور که دیدید، از همین حساب ریسک به دست آمدهاند.
اتریوم مسیر دیگری دارد. این شبکه با اثبات سهام کار میکند و طبق ethereum.org زمان در آن به «اسلات»های ۱۲ ثانیهای و «اپاک»های ۳۲ اسلاتی تقسیم میشود [۳]. در هر اسلات یک اعتبارسنج بلوک پیشنهاد میدهد و اعتبارسنجهای دیگر دربارهٔ آن رأی میدهند.
تراکنش در اتریوم وقتی «نهایی» میشود که در زنجیرهای قرار بگیرد که بین دو چکپوینت آن «پیوند اکثریت قاطع» برقرار است؛ یعنی ۶۶٪ کل اتر سپردهشده روی آن دو چکپوینت توافق کرده باشند [۳]. طبق ethereum.org، نهایی شدن یک بلوک اتریوم در حال حاضر حدود ۱۵ دقیقه طول میکشد و در طول دو اپاک انجام میشود [۴]. این زمان عمداً طوری تنظیم شده که اعتبارسنجهایی که روی رایانههای خانگی کار میکنند فرصت پردازش امن رأیها را داشته باشند، و طرحی به نام «نهاییسازی تکاسلاتی» (SSF) در نقشهٔ راه اتریوم هست که در آن بلوک در همان اسلاتی که پیشنهاد میشود نهایی هم بشود [۴].
| موضوع | بیتکوین | اتریوم |
|---|---|---|
| سازوکار ساخت بلوک | اثبات کار | اثبات سهام |
| معیار اطمینان کاربر | تعداد تأییدها | تأییدها و سپس نهایی شدن |
| لحظهٔ رسمی نهایی شدن | ندارد؛ احتمالاتی است | دارد؛ پس از توافق اکثریت قاطع |
پس پرسش «کدام سریعتر است» به این بستگی دارد که چه چیزی را اندازه بگیرید. ورود تراکنش به بلوک در اتریوم معمولاً زودتر رخ میدهد، اما اگر ملاک شما نهایی شدن رسمی باشد، باید چند دقیقه صبر کنید. شبکههای دیگر و راهحلهای لایهٔ دوم هم قواعد خودشان را دارند و به همین دلیل صرافیها برای هر شبکه تعداد تأیید جداگانهای اعلام میکنند.
بعد از ارسال، چه چیزی را بررسی کنیم
پس از هر ارسال، وضعیت را خودتان و از منبعی مستقل ببینید. هر تراکنش یک شناسهٔ یکتا دارد که با آن میتوانید در یک کاوشگر بلوک (Block Explorer)، یعنی سایتی که محتوای زنجیره را به شکل خوانا نشان میدهد، مسیرش را دنبال کنید.
فهرست بررسی پس از ارسال تراکنش
- شناسهٔ تراکنش (TXID یا Transaction Hash) را از کیف پول یا صفحهٔ برداشت صرافی کپی کنید.
- کاوشگر بلوک همان شبکهای را باز کنید که تراکنش در آن فرستاده شده است؛ نشانی کاوشگر را از داخل کیف پول باز کنید یا خودتان تایپ کنید، نه از لینکی که در پیامرسان دریافت کردهاید.
- وضعیت تراکنش را ببینید: «در انتظار» یعنی هنوز در ممپول است و وجود شمارهٔ بلوک و تعداد تأیید یعنی روی زنجیره ثبت شده است.
- نشانی مقصد، مقدار و شبکه را با آنچه قصد داشتید مقایسه کنید؛ اشتباه در هر کدام پس از ثبت قابل برگشت نیست.
- اگر مقصد یک صرافی است، تعداد تأیید موردنیاز آن صرافی برای همان شبکه را در صفحهٔ واریز بخوانید و تا رسیدن به آن عدد صبور باشید.
- اگر تراکنش مدت زیادی در ممپول مانده، ابتدا گزینهٔ افزایش کارمزد را در کیف پول خودتان بررسی کنید.
- عبارت بازیابی و کلید خصوصی خود را برای «پیگیری» یا «تسریع» تراکنش به هیچ فرد یا سایتی ندهید.
اگر گیرندهٔ پرداخت هستید، همین فهرست را برعکس به کار ببرید. تصویر صفحهٔ کیف پول فرستنده یا پیامی که میگوید «پول را فرستادم» مدرک نیست؛ فقط تراکنشی که با تأیید کافی در کاوشگر بلوک و به نشانی خود شما دیده میشود، پرداخت انجامشده است. اگر دارایی را از صرافی به کیف پول شخصی منتقل میکنید، دلیل اهمیت این کار و نکتههای آن را در درس چرا برداشت دارایی از صرافی به کیف پول شخصی مهم است ببینید.
درس بعدی
حالا که مسیر یک تراکنش را میشناسید، سازوکار اجماع و ساخت بلوک را در درسهای بعدی بخش بلاکچین و فناوری دنبال کنید؛ آنجا توضیح داده شده که شبکه چطور بدون مرجع مرکزی بر سر یک نسخه از دفتر توافق میکند.
خودتان را بسنجید
چرا تراکنش من هنوز تأیید نشده است؟
رایجترین دلیل این است که کارمزد تراکنش نسبت به شلوغی شبکه پایین بوده و تولیدکنندگان بلوک تراکنشهای دیگر را جلوتر برداشتهاند. در اتریوم ممکن است یک تراکنش قبلی از همان حساب گیر کرده باشد و بقیه را پشت سر خود نگه دارد. شناسهٔ تراکنش را در کاوشگر بلوک همان شبکه جستوجو کنید تا ببینید در ممپول است یا اصلاً به شبکه نرسیده است.
صرافی چرا برای واریز چند تأیید میخواهد؟
تراکنشی که فقط در یک یا دو بلوک آخر است هنوز از نظر نظری قابل برگرداندن است و صرافی نمیخواهد پیش از اطمینان کافی، موجودی را در حساب شما آزاد کند. هر تأیید اضافه، هزینهٔ حمله برای خرج دوباره را بیشتر میکند. به همین دلیل هر صرافی برای هر شبکه عددی جداگانه تعیین میکند.
میشود تراکنش تأییدنشده را لغو کرد؟
لغو به معنای واقعی وجود ندارد؛ فقط تا پیش از ثبت در بلوک میتوانید آن را با تراکنش جایگزینی که کارمزد بالاتری دارد عوض کنید، به شرط آنکه کیف پول شما این امکان را بدهد. پس از ثبت در بلوک، تراکنش برگشتناپذیر است و هیچ پشتیبانی یا سایتی نمیتواند آن را پس بگیرد.
تأیید در اتریوم سریعتر از بیتکوین است؟
ورود تراکنش به بلوک در اتریوم معمولاً سریعتر است، چون زمان شبکه به اسلاتهای ۱۲ ثانیهای تقسیم شده است. اما نهایی شدن رسمی در اتریوم حدود ۱۵ دقیقه طول میکشد. در بیتکوین مرز رسمی نهایی شدن وجود ندارد و اطمینان با انباشته شدن تأییدها بهتدریج بیشتر میشود.
منابع
- Block Chain — Bitcoin مشاهدهٔ منبع Block Chain — Bitcoin
- Confirmation - Bitcoin Wiki مشاهدهٔ منبع Confirmation - Bitcoin Wiki
- Proof-of-stake (PoS) | ethereum.org مشاهدهٔ منبع Proof-of-stake (PoS) | ethereum.org
- Single slot finality | ethereum.org مشاهدهٔ منبع Single slot finality | ethereum.org