بیت کوین هیچ نقص آشکار و قابل مشاهده ای ندارد و به چندین قفل زمانی (Time Lock) مختلف مجهز شده است. قفل زمان به شما امکان می دهد شرایط زمانی را که در آن تراکنش ها معتبر هستند را مشخص کنید. با استفاده از قفل زمانی، میتوانید هماکنون یک تراکنش ایجاد کنید و هزینه تراکنش را در هفته آینده بپردازید، یک دوره انتظار اجباری برای کوین تعیین کنید، قراردادهای هوشمند پیچیدهای ایجاد کنید که چندین تراکنش را در بر میگیرد یا بهطور تصادفی قطعات خود را برای قرنها مسدود میکند. به تازگی قفل ها به بیت کوین اضافه شده و وارد ساختار تراکنش شده اند. پیشنهادهای بهبود بیت کوین (BIP) شگفت انگیز و دقیق هستند اما آنها به دانش اولیه زیادی نیاز دارند. در این مقاله اطلاعاتی در مورد انواع قفل های زمانی و توضیح دقیق آنها گردآوری کرده ایم.
طبقه بندی قفل زمانی
قبل از توضیح قفل های زمانی، بیایید نحوه عملکرد آنها را توضیح دهیم. قفل زمان دارای 3 ویژگی مهم است که عبارتند از:
- مکان
- هدف گذاری
- معیار
مکان: تراکنش در مقابل اسکریپت
انواع Timelock را می توان در خود تراکنش یا در ورودی های پرداخت به هش اسکریپت (P2SH) به دست آورد. هر تراکنش دارای چندین دامنه قفل زمانی است. متناوبا، ممکن است اسکریپت ها قفل زمانی نداشته باشند یا چندین قفل زمانی داشته باشند. از نظر عملکردی، قفلهای زمانی در سطح تراکنش و سطح اسکریپت تقریباً یکسان هستند اما عملکرد آنها بسیار متفاوت است.
یک قفل زمانی در سطح تراکنش، با وجود امضاها و اسکریپت های معتبر، تراکنش را تا زمان مورد نظر نامعتبر می کند. قفلهای زمانی در سطح اسکریپت از ارزیابی اسکریپت جلوگیری میکند مگر اینکه تراکنش نیز مسدود شود. عدم ارزیابی اسکریپت تراکنش را باطل می کند. به طور خلاصه، قفلهای زمانی در سطح تراکنش تعیین میکنند که چه زمانی یک تراکنش تأیید میشود، در حالی که قفلهای سطح اسکریپت تعیین میکنند که آیا امضای یک اسکریپت معتبر است یا خیر.
تفاوت کلی بین این دو دقیقاً همان چیزی است که آنها مسدود می کنند. قفل زمانی در سطح تراکنش فقط شامل یک تراکنش خاص است. قفل های سطح تراکنش را مانند چک های پس از تاریخ در نظر بگیرید.
ممکن است برای شما چکی نوشته باشیم که بعدا معتبر و قابل نقد باشد اما تاریخ مورد نظر فقط در مورد این چک صدق می کند و چک را می توان از راه های دیگری که اطلاعی از آن نداریم نقد کرد. قفلهای سطح اسکریپت، شرایطی را برای تمام تراکنشهایی که خروجی را خرج میکنند، ایجاد می نمایند. به عبارت دیگر، قفل های سطح تراکنش بر آنچه که می توانید با یک تراکنش پس از ایجاد آن انجام دهید، تأثیر می گذارد اما قفل های سطح اسکریپت تعیین می کنند که کدام تراکنش ها می توانند ایجاد شوند.
قفل کردن زمان تراکنش آنقدرها هم که فکر می کنید راحت نیست. این قفل ها کوین ها را کنترل نمی کنند، فقط هزینه ها را کنترل می کنند. به همین دلیل است کارهای جالبی که می توان انجام داد به OP_CLTV و OP_CSV نیاز دارد. با استفاده از قفلهای سطح اسکریپت و منطق شرطی (OP_IF)، میتوانیم اسکریپتهای پیچیدهای ایجاد کنیم که بهعنوان مثال میتوانند خرج کردن چند امضایی یا خرج کردن تک امضایی را پس از مدت زمان مشخصی فعال کنند. این برنامه ها، کاربردهای بسیاری را برای تراکنش های P2SH فراهم می کند.
قفلهای زمانی در سطح اسکریپت به وجود قفل زمانی در سطح تراکنش نیاز دارند. قفلهای سطح اسکریپت برای اجرا وابسته به قفلهای سطح تراکنش هستند. قفل های سطح اسکریپت به جای بررسی زمان در اسکریپت، قفل زمان تراکنش را بررسی می کنند. این سوال نکته بسیار ظریف و اقتصادی و در عین حال کمی ناملموس است. اسکریپت بررسی می کند که تراکنش حداقل در مسیر اسکریپت باشد و قفل زمانی تراکنش را به عنوان تضمینی برای سپری شدن زمان مورد نظر می گیرد.
جهت اطلاع از شرایط ثبت نام در دوره سطح صفر ارزهای دیجیتال و پرایس اکشن بر روی لینک کلیک کنید.
هدف گذاری: مطلق یا نسبی
وقتی کوینها را زمانبندی میکنیم، در واقع زمانی که کوینها منتشر میشوند هدف قرار میدهیم. قفل های مطلق این هدف را بر حسب زمان تعیین شده تعریف می کنند. این قفل ها زمان دقیق انقضای قفل را انتخاب می کنند. قفل های زمان نسبی این هدف را به عنوان زمان از تأیید خروجی قبلی تعریف می کنند. تفاوت این دو مانند این است که بگویید «ساعت 3 بعدازظهر می بینمت» و «4 ساعت دیگر می بینمت».
برای کسب اطلاعاتی در مورد نمودار رنگین کمان بیت کوین بر روی لینک کلیک کنید.
تراکنشهایی که در زمان مطلق گیر کردهاند تا زمانی که به زمان هدف نرسیدهاند، نامعتبر خواهند بود. این بدان معنی است که یک تراکنش را می توان برای سال ها ایجاد، امضا، به اشتراک گذاشت و حتی عمومی کرد، با این تضمین که تنها زمانی که قفل منقضی شود تأیید می شود. از قفل زمان مطلق می توان برای ارسال پول به کودکان یا ایجاد یک حساب پس انداز استفاده کرد که می توان آن را واریز کرد اما تا زمان مورد نظر برداشت نمی شود.
از سوی دیگر، قفل زمان نسبی از تایید تراکنش ها تا زمان سپری شدن مدت زمان مشخصی جلوگیری می کند. این یک ویژگی قدرتمند و دقیق است. نکته جالب در مورد قفل زمان نسبی ایجاد قفل های نسبی برای تراکنش های منتشر نشده یا تایید نشده است. هنگامی که تراکنش تایید شد، همیشه میتوانیم یک قفل زمانی مطلق در آینده ایجاد کنیم اما برای این کار باید منتظر تایید تراکنش باشید و زمان تایید آن را دریافت کنید. برای تراکنش های تایید نشده می توان قفل های زمانی نسبی ایجاد کرد؛ یعنی می توانید در چند مرحله از قبل یک قرارداد هوشمند ایجاد و امضا کنید و مطمئن باشید که تراکنش مورد نظر مطابق میل شما تایید می شود.
معیار: بلاک ها در مقابل ثانیه
در شبکه بیت کوین، زمان یک فرض مبتنی بر اجماع است و مهلت عرضه هرگز به پایان نمی رسد. تراکنش ها نمی توانند ساعت خود را تماشا کنند. بنابراین ما باید تعریف کنیم که "زمان" چیست. بیت کوین دو راه برای اندازه گیری زمان دارد: شماره بلاک و برچسب زمانی بلاک. این روش ها برای هر قفل زمانی اجرا می شوند. شما می توانید یک عدد بلاک یا ثانیه خاص را برای قفل زمان تنظیم کنید. هر دوی این روش ها پیچیدگی های خاص خود را دارند و هر دوی این اندازه گیری ها برای کاربردهای دنیای واقعی به اندازه کافی دقیق هستند اما دانستن تفاوت های آنها بسیار مهم است.
اغلب گفته می شود که بلاک ها از توزیع پویسون پیروی می کنند. بلاک ها باید هر 10 دقیقه تولید شوند اما این کاملا درست نیست. وقتی قدرت هش افزایش می یابد، بلاک ها سریعتر ایجاد می شوند و زمانی که قدرت هش کاهش می یابد، سرعت تولید بلاک نیز کاهش می یابد. سختی شبکه هر بلاک 2016 تنظیم می شود تا به مدت زمان مورد نظر 10 دقیقه برسد اما به دلیل شرایط شبکه یا احتمالات تصادفی، این زمان ممکن است تغییر کند.
برچسب های زمانی بسیار دقیق هستند. همانطور که می دانید، زمان در بیت کوین همیشه جلو نمی رود. به دلیل قوانین اجماع برای برچسب های زمانی بلاک، گاهی اوقات زمان می تواند یک یا دو بلاک به عقب برگردد یا برای یک دقیقه متوقف شود.
دلایل خوبی برای آن وجود دارد. برچسب های زمانی همیشه در عرض چند ساعت از زمان واقعی نگهداری می شوند. برای اعتبارسنجی قفل های مبتنی بر برچسب های زمانی، از روش میانگین زمان سپری شده (MTP) استفاده می شود.
معرفی انواع قفل زمانی
اکنون که به وضوح صحبت می کنیم، بیایید خود ابزارها را توضیح دهیم. در حال حاضر 4 نوع قفل وجود دارد که عبارتند از:
- nLocktime
- (OP_CHECKLOCKTIMEVERIFY (OP_CLTV
- (OP_CHECKSEQUENCEVERIFY(OP_CSV
- nSequence
دو تا از این قفل ها در سطح اسکریپت و دو قفل در سطح تراکنش هستند.
قفل زمانی nLocktime
قفل nLocktime یک قفل زمان مطلق در سطح تراکنش است. این قفل همچنین تنها قفلی است که بخشی از دیدگاه اولیه ساتوشی ناکاموتو بود. تراکنش یک ساختار داده ساده است که شامل یک نسخه، ورودی، خروجی و چند عنصر دیگر است. قفل زمان nLocktime جزء lock_time خود را دارد. این جزء شماره بلاک یا برچسب زمانی را مشخص می کند. معامله فقط پس از زمان مورد نظر معتبر خواهد بود. تراکنش های ایجاد شده توسط هسته بیت کوین به طور پیش فرض دارای یک جزء lock_time برای بلاک فعلی هستند تا از کاهش کارمزد جلوگیری شود.
قفل زمانی nSequence
قفل زمان nSequence یک قفل زمانی نسبی در سطح تراکنش است. این قفل جزء قدیمی sequence_no هر ورودی را مجدداً هدف قرار می دهد تا تراکنش ها را بر اساس زمان سپری شده تأیید خروجی های قبلی نامعتبر کند. قفل های nSequence در BIP 68 معرفی شدند و در اواسط سال 2016 توسط یک سافت فورک فعال شدند.
اعداد متوالی از ابتدا وجود داشته است اما چون جایگزینی تراکنش هرگز اجرا نشد، بلااستفاده ماندند. برای چندین سال، تمام کاری که این اعداد می توانستند انجام دهند غیرفعال کردن nLocktime بود. اکنون، اعداد ترتیبی برای اعمال قفل های زمانی نسبی در سطح تراکنش استفاده می شوند.
قفل های nSequence به هر ورودی اختصاص داده می شوند و بر اساس خروجی مصرف شده توسط هر ورودی مصرف می شوند. این بدان معنی است که چندین شرایط قفل زمانی مختلف می تواند در یک تراکنش وجود داشته باشد. برای اینکه یک معامله معتبر باشد، باید همه شرایط رعایت شود. اگر حتی یک قفل متوالی شرایط را نداشته باشد، کل معامله رد می شود.
برای کسب اطلاعاتی در مورد تراکنش های تاییده نشده بیت کوین، بر روی لینک کلیک کنید.
قفل زمانی CSV
قفل زمانی OP_CHECKSEQUENCEVERIFY (OP_CSV) یک قفل زمانی نسبی در سطح اسکریپت است. این قفل در BIP 112 تعریف شده و با nSequence و MTP در اواسط سال 2016 با سافت فورک وارد شبکه شد.
قفل OP_CSV عملکرد بسیار مشابهی با OP_CLTV دارد. OP_CSV به جای بررسی زمان، عنصر برتر استک را با ورودی sequence_no مقایسه می کند. OP_CSV عناصر پشته را به همان روشی که nSequence قفل های زمانی را تفسیر می کند، تجزیه می کند. OP_CSV تحت شرایط زیر شکست خواهد خورد:
- استک خالی است. (هیچ زمان هدفی برای بررسی توسط OP_CLTV مشخص نشده است.)
- آیتم برتر استک کمتر از صفر است. (قفل منفی زمان معنی ندارد.)
نشان غیرفعال کردن آیتم برتر استک تنظیم نشده است و حداقل یکی از موارد زیر وجود دارد:
- نسخه تراکنش کمتر از 2 است. (تراکنش از OP_CSV پشتیبانی نمی کند.)
- نسخه تراکنش کمتر از 2 باشد.
- نشان غیرفعال سازی nSequence ورودی اعمال شده باشد.
- مدت زمان 16 بیت عنصر بالای استک باید بیشتر از مدت زمان ورودی sequence_no باشد.