قفل زمانی در بیت کوین چیست؟ آموزش صفر تا صد کاربرد TimeLock

یکی از سؤال‌های همیشگی پیرامون بیت کوین این است که آیا بیت کوین می‌تواند در نبود پاداش استخراج برای ماینرها، باز هم شبکه‌ای ایمن باشد؟ حتی اگر ایمن باشد اما نرخ کارمزدهای شبکه بالا رود، آیا موارد استفاده بیت کوین از بین می‌رود؟ قفل زمانی یا تایم‌لاک (Timelock) یک ویژگی است که برای پاسخ به این سؤال کاربرد دارد و بر اساس آن، یک تراکنش بیت کوین تا زمان مشخصی در آینده اعتبارسنجی نمی‌شود.

کد خبر: ۲۰۳۳۹۶۰

۰۶ بهمن ۱۴۰۳

به گزارش اقتصاد آنلاین به نقل از ارز دیجیتال ، در این مقاله بررسی می‌کنیم که مفهوم قفل زمانی در بیت کوین چیست و چرا این ویژگی برای ماینرهای بیت کوین و پذیرش آن مهم است. تمرکز ما در این مقاله روی بخش مهم و کمترشناخته‌شده‌ای از شبکه بیت کوین  است که می‌تواند امنیت تراکنش‌ها را بالا ببرد.

قفل زمانی در بیت کوین چیست؟

قفل زمانی که با نام‌های Timelock و Locktime شناخته می‌شود، یک مکانیسم تعبیه‌شده برای اعمال محدودیت در تراکنش‌های بیت کوین است که برای تأیید تراکنش، یک زمان مشخص یا ارتفاع بلاک را در شبکه بلاک چین تعیین می‌کند. قفل زمانی را می‌توان به‌عنوان عملکردی برای زمان‌بندی تراکنش‌ها یا مسدودکردن تراکنش‌ها برای مدت دلخواه در نظر گرفت.

به زبان ساده، قفل‌های زمانی نوعی قرارداد هوشمند ابتدایی هستند که به‌طور کامل یا جزئی، تا زمانی‌ که شرایط خاصی برآورده شود، مانع از تأیید یک تراکنش خاص توسط ماینرها می‌شود. بنابراین با استفاده از قفل زمانی در بیت کوین، می‌توان شرایط خاصی برای اجرای قرارداد تعیین کرد، یعنی همان کاری که قراردادهای هوشمند در اتریوم انجام می‌دهند.

اما کارایی قفل زمانی در بیت کوین چیست؟ با قفل زمانی می‌توان تعیین کرد که یک تراکنش در یک زمان خاص یا ارتفاع بلاک خاص توسط ماینرها تأیید شود. بنابراین، قفل زمانی به‌عنوان محدودیت برای مصرف برخی بیت کوین‌ها عمل می‌کند، تا زمانی‌که شرایط تعیین‌شده برآورده شود.

زمانی‌که شبکه به آن زمان خاص یا آن ارتفاع بلاک تنظیم‌شده برسد، ماینرها می‌توانند آن تراکنش را در هش درخت مرکل قرار دهند و به آخرین بلاک در بلاک چین اضافه کنند. پس از آن تراکنش می‌تواند تأیید شود.

اصطلاحات مرتبط با قفل زمانی

قفل زمانی در یک قسمت اختصاصی از هر تراکنش مشخص می‌شود. با این حال، اکثر افراد در تراکنش‌های خود قفل زمانی را خالی می‌گذارند، از این قابلیت استفاده نمی‌کنند یا گاهی نمی‌دانند که قفل زمانی در بیت کوین چیست. قفل‌های زمانی برای ایجاد یک لایه امنیتی اضافی و برای «قراردادهای قفل زمانی هش‌شده» (HTLC) مفید هستند که در شبکه لایتنینگ استفاده می‌شوند.

مقدار زمان یک قفل زمانی را می‌توان با ارتفاع بلاک (Block Height) یا مهر زمانی یونیکس (Unix Timestamp) مشخص کرد. برای اینکه بهتر متوجه شویم قفل زمانی در بیت کوین چیست، بهتر است ابتدا با اصطلاحات زیر آشنا باشیم.

شبکه لایتنینگ

شبکه لایتنینگ (LN) پروتکلی است که برای امکان انجام تراکنش‌های فوری و ارزان‌قیمت در بیت کوین طراحی شده است. این شبکه نویدبخش توانایی‌های بالای بیت کوین در مقیاس‌پذیری است و یک راهکار لایه ۲ محسوب می‌شود.

ارتفاع بلاک

ارتفاع بلاک درجنسیس بلاک از صفر شروع می‌شود و سپس همه بلوک‌ها به ترتیب صعودی شماره‌گذاری می‌‍شوند. این عدد به عنوان ارتفاع بلاک شناخته می‌شود. ارتفاع بلاک فعلی، در واقع همان تعداد بلاک‌های یک بلاک چین منهای یک است.

مهر زمانی یونیکس

مهر زمانی یونیکس (Unix Timestamp) تعداد ثانیه‌هایی است که از اول ژانویه ۱۹۷۰ به بعد می‌گذرد و روشی برای نشان‌دادن گذر زمان است. مهر زمانی در بلاک‌ها استفاده شده تا اطمینان حاصل شود که بلاک‌ها دقیقاً به ترتیب زمانی به یکدیگر می‌پیوندند.

تراکنش

یک تراکنش نشان می‌دهد که انتقال بیت کوین از یک آدرس به آدرس دیگر صورت گرفته است. تمام تراکنش‌ها در بلاک‌های یک بلاک چین ثبت می‌شوند.

طبقه‌بندی قفل زمانی در بیت کوین چیست؟

ساده‌ترین نوع قفل‌های زمانی توسط خالق بیت کوین، ساتوشی ناکاموتو، به نرم‌افزار اصلی بیت کوین اضافه شدند. آنها در همه تراکنش‌ها وجود دارند حتی اگر بسیاری از این قابلیت استفاده نکنند. حالت پیش‌فرض قفل زمانی در 0x00000000 یا 0xFFFFFFFF قرار دارد. با این حال، آن دسته از تراکنش‌هایی که قفل زمانی در آنها معین می‌شود دارای ۳ ویژگی مهم هستند: مکان، گرایش و معیار.

مکان: در سطح تراکنش یا اسکریپت

همانطور که قبلاً اشاره کردیم، قفل‌های زمانی را می‌توان در تراکنش‌ها پیدا کرد حتی اگر از این ویژگی استفاده نشود. قفل‌های زمانی می‌توانند هم در سطح تراکنش‌ها و هم در سطح اسکریپت‌ها وجود داشته باشند، اما این دو عملکردهای کاملاً متفاوتی دارند.

در سطح تراکنش‌ها، استفاده از قفل‌های زمانی به این معنی است که تا وقتی که به زمان مشخص‌شده نرسد یا به ارتفاع بلاک مشخص‌‍شده نرسد، نمی‌توان آن را تأیید کرد، حتی اگر امضاهای دیجیتال آن تراکنش معتبر باشند.

از اسکریپت برای پردازش و تأیید تراکنش‌ها در بیت کوین استفاده می‌شود و یک اسکریپت فهرستی از دستورالعمل‌های برنامه‌نویسی‌شده برای هر تراکنش است که توضیح می‌دهد چگونه شخص بعدی می‌تواند به بیت کوین‌ها دسترسی پیدا کند.

در مقابل، قفل زمانی در اسکریپت‌ها تعیین می‌کند که آیا یک اسکریپت معتبر است یا خیر. بنابراین با قفل زمانی در سطح اسکریپت می‌توان شرایط را تعیین کرد.

پس در حالی‌که هر دو نوع قفل زمانی محدودیت‌هایی را بر اساس زمان اعمال می‌کنند، اما در سطوح یا مکان‌های مختلف در سیستم بیت‌کوین عمل می‌کنند. قفل‌های زمانی در سطح تراکنش تعیین می‌کنند که چه زمانی می‌توان تراکنش را اجرا کرد، در حالی که قفل‌های زمانی در سطح اسکریپت شرایطی که تحت آن تراکنش‌ها می‌توانند در شبکه انجام شوند را تعیین می‌کنند.

گرایش: مطلق یا نسبی

قفل‌های زمانی به دو دسته مطلق یا نسبی تقسیم می‌شوند. اولی به ما اجازه می دهد تا بلاک را بر اساس زمان مشخصی تعریف کنیم. بنابراین مثلاً می‌توانیم لحظه‌ای را انتخاب کنیم که بلاک در آن به پایان می‌رسد.

از سوی دیگر، قفل زمان نسبی به ما این امکان را می‌دهد که زمان مشخصی را تعریف کنیم که باید سپری شود تا تراکنش انجام شود. هر دو گزینه برای تعیین زمان تراکنش‌ها بسیار مفید هستند.

معیار: شماره بلاک یا مهر زمان

در بیت کوین دو روش برای اندازه‌گیری زمان وجود دارد: شماره بلاک و مهر زمانی. ما می‌توانیم از هر دو برای ایجاد قفل زمانی استفاده کنیم. هنگامی که قفل زمانی بر اساس یک شماره بلاک ایجاد می‌شود، ماینرها انتظار دارند که به آن شماره بلاک برسند. این کار به منظور تأیید عملیات و گنجاندن تراکنش در یک بلاک جدید انجام می‌شود.

برعکس، زمانی که قفل زمانی بر اساس مهر زمانی تنظیم می‌شود، ماینرها منتظر می‌مانند تا زمان تعیین‌شده سپری شود. به عبارت دیگر زمان مشخصی برای اعتبارسنجی تراکنش مشخص شده است. این زمان با علامت «زمان یونیکس» (Unix Time) اندازه‌گیری می‌شود.

انواع قفل‌های زمانی

بیت کوین در حال حاضر ۴ راه برای ایجاد قفل زمانی دارد. دو مورد از این ابزارها در سطح تراکنش و دو مورد دیگر در سطح اسکریپت هستند. در اینجا هریک از آنها را بررسی می‌کنیم.

قفل زمانی nLockTime

این قفل زمانی از نوع مطلق و در سطح تراکنش است. «ان-لاک‌تایم» تنها قفل زمانی است که از ابتدا در نسخه اصلی نرم‌افزار بیت کوین موجود بود. هنگامی که یک تراکنش بیت کوین ایجاد می‌کنید، می‌توانید زمان یا ارتفاع بلاکی که در آن تراکنش باید اعتبارسنجی شود را در آینده مشخص کنید.

این بدان معناست که حتی اگر تراکنش از نظر امضای دیجیتال و سایر معیارها صحیح باشد، تا زمانی‌که به زمان یا ارتفاع بلاک مشخص‌شده نرسیده باشد، توسط شبکه تایید نخواهد شد. بنابراین، تراکنش‌ها می‌توانند تا رسیدن به یک ارتفاع بلاک خاص یا مهر زمانی یونیکس به تعویق بیفتند.

در پروتکل بیت کوین، زمان به صورت اعداد صحیح ۳۲ بیتی بیان می‌شوند. اگر عدد کمتر از ۵۰۰ میلیون باشد، به عنوان ارتفاع بلوک تعبیر می‌شود. اگر بیشتر از ۵۰۰ میلیون باشد، به عنوان نشانی از زمان یونیکس در نظر گرفته می‌شود که نشان‌دهنده یک نقطه زمانی خاص است.

با قفل زمانی nLockTime، تراکنش می‌تواند حداکثر تا ۹۵۰۰ سال در صورت استفاده از شماره بلاک یا ۲۱۰۶ سال در صورت استفاده از مهرهای زمانی به تأخیر بیفتد.

اگرچه همه تراکنش‌ها شامل ویژگی ان-لاک‌تایم هستند، اکثر کیف پول‌ها آن را به طور پیش‌فرض روی صفر تنظیم می‌کنند. قفل زمانی صفر بدان معناست که تراکنش را می‌توان در هر بلاکی از بلاک چین بدون تأخیر تأیید کرد.

قفل زمانی nSequence

این قفل زمانی از نوع نسبی است و در سطح تراکنش اعمال می‌شود. «ان-سیکوئنس» در اواسط سال ۲۰۱۶ در سافت فورک (BIP) شماره ۶۸ وارد شبکه بیت کوین شد. در این قفل زمانی نسبی، از اعداد ترتیبی یا دنباله‌ای در سطح تراکنش استفاده می‌شود.

برخلاف زمان قفل مطلق، که ارتفاع بلوک یا مهر زمانی خاصی را برای اعتبارسنجی تراکنش مشخص می‌کند، ان-سیکوئنس قفل زمان نسبی را امکان‌پذیر می‌کند. این بدان معنی است که شرایط را بر اساس گذشت زمان نسبت به سایر رویدادها در بلاک چین تعیین می کند.

هنگامی که یک تراکنش ایجاد می‌شود، هر ورودی یا اینپوت آن شامل یک مقدار nSequence است. این مقدار را می‌توان برای تنظیم شرایط برای زمانی که تراکنش در یک بلاک گنجانده شود، دستکاری کرد.

با استفاده از قفل زمانی نسبی nSequence، مشخص می‌کنید که تا چه مدت پس از تأیید خروجی یا آوتپوت قبلی تراکنش، ورودی آن اعتبارسنجی شود. معمولاً از این قابلیت در ترکیب با قفل زمانی CSV استفاده می‌شود که در ادامه توضیح می‌دهیم.

هنگام اعمال قفل زمانی ان-سیکوئنس، چندین شرایط زمانی مختلف را می‌توان در یک تراکنش تنظیم کرد. بنابراین، برای معتبربودن تراکنش، باید همه شرایط محقق شوند؛ در غیر این صورت، تراکنش به کلی رد می‌شود.

برخلاف قفل زمانی قبلی، قفل زمانی nSequences فقط از ۱۸ بیت از مجموع ۳۲ بیت استفاده می‌کند، بنابراین ۱۴ بیت برای پیاده‌سازی‌های بعدی رزرو شده است. از آن ۱۸ بیت در حال‌استفاده، ۱۶ بیت برای رمزگذاری قفل زمانی در نظر گرفته شده است. بنابراین، این نوع قفل‌های زمانی تنها به ۶۵٬۵۳۵ واحد بلاک و تنها ۱۸ ساعت محدود هستند.

قفل زمانی CheckLockTimeVerify

این قفل زمانی که معمولاً با حروف اول آن یعنی CLTV شناخته می‌شود، یک قفل زمانی مطلق در سطح اسکریپت است. جزئیات آن در سافت فورک شماره ۶۵ و در اواخر سال ۲۰۱۵ توسط پیتر تاد (Peter Todd)، توسعه‌دهنده بیت کوین، به شبکه معرفی شد. با این ویژگی می‌توان مشخص کرد که در چه تاریخی گیرنده می‌تواند از وجوه ارسال‌شده استفاده کند.

یکی از توابع پیشرفته قفل زمانی CTLV، تغییر پارامتر احراز هویت یک آدرس چند امضایی است. به عنوان مثال، اگر یک آدرس چند امضایی با طرح ۲ از ۳ ایجاد شده باشد (یعنی از ۳ کلید مجاز، به امضای ۲ کلید نیاز است)، CLTV می‌تواند پارامتر مذکور را تحت معیارهای خاصی به طرح ۱ از ۳ تغییر دهد. به این ترتیب، فرد می‌تواند وجوه را تحت شرایطی که قبلاً روی آن توافق‌شده است، بازیابی کند.

قفل زمانی CheckSquenceVerify

این قفل زمانی که به اختصار CSV خوانده می‌شود، نوعی قفل زمانی نسبی در سطح اسکریپت است. قفل زمانی CSV بخشی از سافت فورک شماره ۶۸ بود، اما در سافت فورک ۱۱۲ تشریح شد و در اواسط سال ۲۰۱۶ به شبکه اضافه شد. می‌توان گفت قفل زمانی CSV نسخه نسبی قفل زمانی مطلق CLTV است.

مقدار ان-سیکوئنس، جایی در ورودی تراکنش است که قفل زمانی نسبی آن ورودی را نشان می‌دهد. هنگامی که کد CSV در سطح اسکریپت اجرا می‌شود، زمان فعلی (یا ارتفاع بلاک) را با زمان یا ارتفاع بلاک مشخص‌شده توسط مقدار nSequence در ورودی تراکنش مقایسه می‌کند.

اگر مدت زمان گذشته از وقتی‌که تراکنش در بلاک چین گنجانده شده مساوی یا بیشتر از زمان مشخص‌شده در مقدار nSequence باشد، شرط محقق می‌شود. به عبارت دیگر، اگر زمان کافی با توجه به مقدار nSequence سپری شده باشد، اسکریپت اجازه می‌دهد تا تراکنش به‌طور عادی اعتبارسنجی و اجرا شود.

با این حال، اگر شرط برآورده نشود (یعنی اگر زمان مشخص‌شده هنوز نگذشته باشد)، کد CSV باعث از کار افتادن اسکریپت می‌شود. این بدان معنی است که تراکنش نمی‌تواند ادامه یابد و نامعتبر تلقی می‌شود. با این نوع قفل زمانی، تراکنش‌ها می‌توانند حداکثر برای ۶۵٬۵۳۵ بلاک که معادل تقریباً ۴۵۵ روز است، مسدود شوند.

نام قفل زمانی | زمان راه‌اندازی | توضیحات

قفل زمانی nLockTime مطلق در سطح تراکنش

این ویژگی از ۲۰۰۹ که بیت کوین راه‌اندازی شد در دسترس بوده

این قفل زمانی می‌تواند روی صفر تنظیم شود که در این‌صورت غیرفعال است.
می‌توان یک ارتفاع بلاک مشخص را انتخاب کرد، که یعنی تراکنش تنها بعد از آن ارتفاع بلاک، اعتبارسنجی می‌شود.
می‌توان یک زمان مشخص را انتخاب کرد که یعنی تراکنش تنها بعد از آن زمان مشخص، اعتبارسنجی می‌شود.

قفل زمانی nSequence نسبی در سطح تراکنش

سافت فورک جولای ۲۰۱۶

این قفل زمانی، نسبی است و در سطح ورودی اعمال می‌شود. هر ورودی در تراکنش‌های بیت کوین یک جایگاه برای nSequence دارد که اگر روی 0xFFFFFFFF تنظیم شود، یعنی غیرفعال است.
با این قفل زمانی نسبی، ورودی تراکنش تا مدت مشخصی بعد از اینکه خروجی تراکنش قبلی تأیید شده، نامعتبر باقی می‌ماند. به همین دلیل این قفل زمانی، نسبی محسوب می‌شود.

قفل زمانی CLTV مطلق در سطح اسکریپت

دسامبر ۲۰۱۵

این قفل زمانی برعکس دو مورد قبل در سطح اسکریپت اعمال می‌شود و بدین ترتیب انعطاف‌پذیری و کنترل بیشتری در تنظیم قفل زمانی می‌دهد.
به عنوان مثال می‌تواند در ترکیب با شروط دیگر مانند توابع برنامه‌نویسی «and»، «if» و «then» مورد استفاده قرار گیرد.

قفل زمانی CSV نسبی در سطح اسکریپت

جولای ۲۰۱۶

این ویژگی نیز مانند قبلی یک آپکد بوده و در سطح اسکریپت اعمال می‌شود.
این قفل زمانی می‌تواند برای ایجاد چندین زنجیره متفاوت از تراکنش‌های تأییدنشده از یک خروجی استفاده شود، به طوری‌که بسته به دوره‌های زمانی، مسیرهای خاصی نسبت به مسیرهای دیگر اولویت دارند.
این قابلیت به‌طور گسترده در شبکه لایتنینگ استفاده می‌شود.