قفل زمانی (Time Lock) بیت کوین چیست؟
بیت کوین هیچ گونه معایب آشکار و مشهود و معدودی ندارد قفل زمان مجهز به زمان قفل مختلف به شما امکان می دهد شرایط زمانی را که در آن تراکنش ها معتبر هستند را مشخص کنید. با قفل زمانی، می توانید اکنون یک تراکنش ایجاد کنید و هزینه تراکنش را هفته آینده بپردازید، یک دوره انتظار اجباری برای سکه تعیین کنید، قراردادهای هوشمند پیچیده ای ایجاد کنید که چندین تراکنش را در بر می گیرد، یا بلوک های خود را برای قرن ها تصادفی می کند. اخیراً قفل هایی به بیت کوین اضافه شده است. وارد ساختار معاملات شد. پیشنهادهای بهبود بیت کوین (BIP) شگفت انگیز و دقیق هستند اما نیاز به دانش اولیه زیادی دارند. در این مقاله اطلاعاتی در مورد انواع قفل های زمانی و توضیح مفصل آنها جمع آوری کرده ایم.
طبقه بندی قفل های زمانی
قبل از توضیح قفل های زمانی، بیایید نحوه عملکرد آنها را توضیح دهیم. قفل زمان دارای 3 ویژگی مهم است که عبارتند از:
- محل
- هدف گذاری
- معیار
مکان: تراکنش در مقابل اسکریپت
انواع قفل زمان می توان آن را در خود تراکنش یا در سوابق پرداخت به HashScript (P2SH) بدست آورد. هر تراکنش دارای چندین دامنه قفل زمانی است. متناوبا، ممکن است اسکریپت ها قفل زمانی نداشته باشند یا چندین قفل زمانی داشته باشند. از نظر عملکردی، قفلهای زمانی در سطح تراکنش و سطح اسکریپت تقریباً یکسان هستند، اما عملکرد آنها بسیار متفاوت است.
یکی قفل زمان در سطح تراکنش، با وجود امضاها و اسکریپت های معتبر، تراکنش را تا زمان مورد نظر نامعتبر می کند. قفلهای زمانی در سطح اسکریپت از ارزیابی اسکریپت جلوگیری میکنند مگر اینکه تراکنش نیز مسدود شود. عدم ارزیابی اسکریپت تراکنش را باطل می کند. به طور خلاصه، قفلهای سطح تراکنش تعیین میکنند که چه زمانی یک تراکنش انجام میشود، در حالی که قفلهای سطح اسکریپت تعیین میکنند که آیا امضای اسکریپت معتبر است یا خیر.
تفاوت مشترک بین این دو دقیقاً همان چیزی است که آنها را مسدود می کنند. قفل زمانی در سطح تراکنش فقط شامل یک تراکنش خاص است. قفل های سطح تراکنش را به عنوان چک های پس از تاریخ در نظر بگیرید.
ممکن است چکی برای شما نوشته باشیم که معتبر باشد و در تاریخ بعدی قابل نقد باشد، اما تاریخ مورد نظر فقط در مورد آن چک صدق می کند و ممکن است چک از راه های دیگری که برای ما ناشناخته است وصول شود. قفلهای سطح اسکریپت شرایطی را برای همه تراکنشهایی که خروجی مصرف میکنند ایجاد میکنند. به عبارت دیگر، قفلهای سطح تراکنش بر کارهایی که میتوانید با یک تراکنش پس از ایجاد آن انجام دهید، تأثیر میگذارند، اما قفلهای سطح اسکریپت تعیین میکنند که کدام تراکنشها میتوانند ایجاد شوند.
قفل کردن زمان معامله آنقدرها هم که فکر می کنید آسان نیست. این قفل ها سکه ها را کنترل نمی کنند، فقط هزینه ها را کنترل می کنند. به همین دلیل است که کارهای جالبی که می توان انجام داد به OP_CLTV و OP_CSV نیاز دارد. با استفاده از قفلهای سطح اسکریپت و منطق شرطی (OP_IF)، میتوانیم اسکریپتهای پیچیدهای ایجاد کنیم که بهعنوان مثال میتوانند تأیید چند امضایی یا تأیید تک امضایی را پس از مدت زمان مشخصی فعال کنند. این برنامه ها برنامه های بسیاری را برای تراکنش های P2SH ارائه می دهند.
زمان در سطح سناریو قفل شده است قفل زمان نیاز در سطح معامله قفلهای سطح اسکریپت برای اجرا به قفلهای سطح تراکنش بستگی دارند. قفل های سطح اسکریپت به جای بررسی زمان در اسکریپت، قفل را در زمان تراکنش بررسی می کنند. این موضوع نکته بسیار ظریف و اقتصادی و در عین حال کمی ناملموس است. اسکریپت بررسی می کند که تراکنش حداقل در مسیر اسکریپت باشد و قفل زمانی تراکنش را به عنوان تضمینی برای گذشت زمان می پذیرد.
برای اطلاع از شرایط ثبت نام در دوره سطح صفر ارزهای دیجیتال و اقدام قیمت روی لینک کلیک کنید.
هدف گذاری: مطلق یا نسبی
وقتی سکهها را برنامهریزی میکنیم، در واقع زمانی را هدف قرار میدهیم که سکهها منتشر شوند. قفل های مطلق این هدف را از نظر زمان مشخص می کنند. این قفل ها زمان دقیق انقضای قفل را انتخاب می کنند. قفل های زمان نسبی این هدف را به عنوان زمانی از زمان اعلام خروجی قبلی تعریف می کنند. تفاوت این دو مانند این است که بگویید “ساعت 15 می بینمت” و “4 ساعت دیگر می بینمت”.
تراکنش هایی که در زمان مطلق مسدود می شوند تا زمانی که به زمان مورد نظر نرسند نامعتبر خواهند بود. این بدان معنی است که یک تراکنش را می توان برای سال ها ایجاد، امضا کرد، به اشتراک گذاشت و حتی عمومی کرد، با این تضمین که تنها زمانی که قفل منقضی شود تأیید می شود. از قفل زمان مطلق میتوان برای ارسال پول به کودکان یا راهاندازی حساب پساندازی استفاده کرد که میتوان آن را واریز کرد اما تا زمان مورد نظر برداشت نمیشود.
از سوی دیگر، قفل شدن نسبی زمان مانع از تایید تراکنش ها می شود تا زمانی که مدت زمان مشخصی سپری شود. این یک عملکرد قدرتمند و دقیق است. نکته جالب در مورد قفل زمان نسبی ایجاد قفل های نسبی برای تراکنش های منتشر نشده یا تایید نشده است. هنگامی که تراکنش تایید شد، همیشه می توانیم a قفل زمان کاملاً در آینده، اما برای آن باید منتظر بمانید تا تراکنش تأیید شود و زمان تأیید را دریافت کنید. قفل های زمانی نسبی را می توان برای تراکنش های تایید نشده ایجاد کرد. یعنی می توانید در چند مرحله از قبل یک قرارداد هوشمند ایجاد و امضا کنید و مطمئن باشید که تراکنش مورد نظر مطابق میل شما تایید می شود.
متریک: بلوک در مقابل ثانیه
در شبکه بیتکوین، زمان یک فرض توافقی است و مهلتهای تحویل هرگز منقضی نمیشوند. تراکنش ها نمی توانند ساعت خود را تماشا کنند. بنابراین باید تعریف کنیم که «زمان» چیست. بیت کوین دو روش برای اندازه گیری زمان دارد: شماره بلوک و مهر زمان بلوک. این روش ها برای هر قفل زمانی اجرا می شوند. می توانید تعداد مشخصی بلوک یا ثانیه را برای زمان قفل تنظیم کنید. هر دو روش پیچیدگی های خاص خود را دارند و هر دو اندازه گیری برای کاربردهای دنیای واقعی به اندازه کافی دقیق هستند، اما دانستن تفاوت های آنها مهم است.
اغلب گفته می شود که بلوک ها از توزیع پواسون پیروی می کنند. بلوک ها باید هر 10 دقیقه تولید شوند، اما این کاملاً درست نیست. هنگامی که قدرت هش افزایش می یابد، بلاک ها سریعتر ایجاد می شوند و زمانی که قدرت هش کاهش می یابد، سرعت تولید بلاک نیز کاهش می یابد. سختی شبکه هر بلوک 2016 برای رسیدن به مدت زمان مورد نظر 10 دقیقه تنظیم شده است، اما این زمان ممکن است به دلیل شرایط شبکه یا احتمالات تصادفی تغییر کند.
مهرهای زمانی بسیار دقیق هستند. همانطور که می دانید، زمان در بیت کوین همیشه جلو نمی رود. به لطف قوانین اجماع مهر زمانی، گاهی اوقات زمان ممکن است یک یا دو بلوک به عقب برگردد یا برای یک دقیقه متوقف شود.
دلایل خوبی برای این وجود دارد. مُهرهای زمانی همیشه در ساعات بیدرنگ ذخیره میشوند. روش میانگین زمان سپری شده (MTP) برای اعتبارسنجی قفل های مبتنی بر مهر زمانی استفاده می شود.
معرفی انواع قفل زمانی
حالا که واضح شدیم، بیایید خود ابزارها را توضیح دهیم. در حال حاضر 4 نوع قفل وجود دارد که عبارتند از:
- زمان قفل کردن
- (OP_CHECKLOCKTIMEVERIFY (OP_CLTV
- (OP_CHECKSEQUENCEVERIFY(OP_CSV
- n دنباله
دو تا از این قفل ها در سطح اسکریپت و دو قفل در سطح تراکنش هستند.
زمان قفل nLocktime
قفل nLocktime یک قفل زمان مطلق در سطح تراکنش است. این قفل همچنین تنها قفلی است که بخشی از دید اصلی ساتوشی ناکاموتو است. تراکنش یک ساختار داده ساده است که شامل یک کپی، یک ورودی، یک خروجی و چند عنصر دیگر است. قفل زمان nLocktime جزء lock_time خود را دارد. این جزء شماره بلوک یا مهر زمانی را مشخص می کند. معامله فقط پس از زمان مورد نظر معتبر خواهد بود. تراکنش های ایجاد شده توسط Bitcoin Core به طور پیش فرض دارای یک جزء lock_time برای بلوک فعلی هستند تا از کاهش کارمزد جلوگیری شود.
nقفل زمان توالی
nسری زمان قفل یک قفل زمان این نسبتاً در سطح معامله است. این قفل مولفه قدیمی sequence_no را در هر ورودی تغییر مسیر می دهد تا تراکنش ها را بر اساس زمان سپری شده برای بررسی خروجی های قبلی لغو کند. قفل های nSequence در BIP 68 معرفی شدند و در اواسط سال 2016 توسط یک سافت فورک فعال شدند.
شماره های دنباله ای از ابتدا وجود داشته اند، اما از آنجایی که جایگزینی تراکنش هرگز اجرا نشد، بلااستفاده مانده اند. برای چندین سال تمام کاری که این اعداد می توانستند انجام دهند غیرفعال کردن nLocktime بود. اعداد دنباله ای اکنون برای اعمال قفل های موقت نسبی در سطح تراکنش استفاده می شوند.
قفل های دنباله ای به هر ورودی اختصاص داده می شوند و بر اساس خروجی مصرف شده توسط هر ورودی مصرف می شوند. این بدان معنی است که چندین شرایط قفل زمانی مختلف می توانند در یک تراکنش وجود داشته باشند. برای معتبر بودن معامله باید همه شرایط رعایت شود. اگر حتی یک قفل متوالی واجد شرایط نباشد، کل تراکنش رد می شود.
Timelock 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 باشد.