Основные моменты
- Функция блокировки биткойнов позволяет пользователям создавать транзакции, которые можно потратить только по истечении определенного времени
- Существует четыре варианта временных блокировок: nLockTime, nSequence, CheckLockTimeVerify, CheckSequenceVerify
Одна из наиболее ценных функций Биткойна — это временные блокировки. Эта функция, существовавшая со времени первого выпуска Биткойна, позволяет пользователям создавать недопустимые (необязательные) транзакции до истечения определенного времени. В 2015 и 2016 годах разработчики Bitcoin Core представили более продвинутые уровни временных блокировок, позволяющие пользователям создавать временные блокировки для отдельных выходов Биткойн, а не для целых транзакций.
Timelocks также обеспечивают базу и инфраструктуру для различных умных контрактов и проектов, основанных на биткойнах. Проекты второго уровня, такие как Lightning Network, в значительной степени зависят от разработки функций Биткойн-таймлока. Такие компании, как Particl, также используют функции временной блокировки для создания услуг условного депонирования для клиентов.
Классификации
На основе их операций существует четыре варианта временных блокировок: nLockTime, nSequence, CheckLockTimeVerify, CheckSequenceVerify. Следующая таблица показывает, как определяются их классы.
Тайм-ауты транзакций и сценариев
Временные блокировки можно найти в самой транзакции Биткойн или в сценарии, связанном с входными данными. Временные блокировки на уровне транзакций определить самое раннее время, когда транзакция может быть передана на цепочку биткойнов. То есть, если транзакция имеет временную блокировку с временной блокировкой на уровне транзакции, она становится недействительной до тех пор, пока не пройдет определенный период времени. Временные блокировки на уровне сценария инициировать оценку сценария, в результате чего UXTO не будет расходоваться при соблюдении определенных критериев. Добавление временных блокировок уровня сценария требует включения соответствующих временных блокировок уровня транзакции того же типа. Например, временная блокировка на уровне сценария, такая как временная блокировка CheckSequenceVerify, будет работать только в том случае, если уже есть временная блокировка на уровне транзакции, такая как добавленная nSequence. Это связано с тем, что временные блокировки на уровне сценария проверяют время, используя временную блокировку транзакции для обеспечения соблюдения ее критериев, гарантируя, что временная блокировка транзакции, по крайней мере, равна длительности скрипта (подробнее об этом позже).
Абсолютные и относительные временные блокировки
При создании временной блокировки пользователи устанавливают целевое время для транзакции, которая будет использоваться. Они могут установить это целевое время как высоту блока или время UNIX. Есть две вариации этих целей таймлока: Абсолютная и Относительная.
Абсолютные временные замки определить точный момент времени, когда истекает блокировка, и транзакция может быть передана на блокчейн. Например, транзакция может быть передана только тогда, когда высота блока достигла # 400000. Относительные временные блокировки определить количество времени, которое должно пройти относительно предыдущего подтверждения вывода. Например, если выход добывается для блока # 400000, и была создана транзакция относительной временной блокировки, где входу, ссылающемуся на этот вывод, было задано время таргетинга 100 блоков, новая транзакция не может быть добыта до блока № 400100. Это различие позволяет пользователям создавать относительные временные блокировки для нескольких необъявленных и неподтвержденных транзакций, устанавливая серию интеллектуальных контрактов, которые срабатывают после истечения времени подтверждения транзакции и подтверждаются — открывая возможность создавать каналы оплаты.
Хотя ожидается, что блоки Биткойна будут обнаруживаться каждые 10 минут, время в сети часто не так надежно, как можно было бы предположить. В зависимости от хэш-мощности блоки могут приходить медленнее или быстрее, чем 10-минутные цели. Кроме того, в сети также могут возникать небольшие перестановки цепей, которые изменят время блока на один или два блока. Кроме того, майнеры могут лгать о своих временных метках, поскольку нет единого мнения относительно создания временных меток для блоков. Таким образом, для обеспечения надежности отметки времени блока, BIP 113 был создан в августе 2015 года, чтобы использовать медианную отметку времени предыдущих 11 блоков, чтобы сгладить сдвиг времени в биткойнах.
Варианты
nLockTime
Теперь, когда мы понимаем, как классифицируются временные блокировки, мы рассмотрим четыре варианта временных. nLockTime — это на уровне транзакций, абсолютный таймлок. Эта временная блокировка была включена в исходный выпуск Биткойн и определяет самое раннее время, когда транзакция может быть передана в сеть. nLockTime появляется в поле транзакции «lock_time», которое может быть установлено в 0, <500 000 000 или ≥ 500 000 000. Поле «lock_time», устанавливающее 0, игнорируется — время блокировки отсутствует. Поле «lock_time», установленное ниже 500 000 000, будет отслеживаться с использованием высоты блока. Поле «lock_time», установленное равным или превышающим 500 000 000, будет отслеживаться с использованием метки времени Unix. Как только транзакция nLockTime разблокирована, пользователь может передать транзакцию в сеть.
Начиная с выпуска Bitcoin Core 0.11.0, все кошельки Bitcoin Core начинаются с поля «lock_time» с недавней высотой в качестве способа предотвращения сбора платежей. Плата за улавливание — это когда майнеры пытаются переписать блоки, чтобы найти транзакции с высокой комиссией из будущих блоков. Это может привести к тому, что некоторые транзакции с таймлоками будут разрушены, как объяснил бывший участник Биткойн-ядра Питер Тодд:
[perfectpullquote align=»full» bordertop=»false» cite=»» link=»» color=»» class=»» size=»»]«По сути, для крупного майнера стоимость транзакций в лучшем блоке и mempool может превышать стоимость преднамеренной попытки добывать два блока, чтобы осиротить лучший блок. Однако с nLockTime у вас скоро закончатся транзакции, которые вы можете поместить в первый блок, что означает, что теперь они должны идти во втором. При ограниченных размерах блоков вам не хватает места, и, кроме того, теперь другому майнеру теперь нужно осиротеть только один блок, чтобы, в свою очередь, перехватить дорогостоящие транзакции, которые вы должны были разместить во втором блоке, разрушив всю вашу тяжелую работу ».[/perfectpullquote]
Согласно данным P2Sh.info, за последние 30 дней примерно 15% всех транзакций в биткойнах имеют значения nLockTime выше 0. Это указывает на то, что большинство транзакций поступают из кошельков, которым еще предстоит реализовать меры, введенные Тоддом, чтобы не допускать отслеживания комиссионных сборов. , Хотя в настоящее время это не вызывает беспокойства, поскольку субсидии за вознаграждение в виде блоков значительно превышают комиссионные за транзакции, поскольку комиссионные продолжают составлять большую часть доходов майнеров, отслеживание сборов станет более привлекательным вариантом для майнеров.
CheckLockTimeVerify
CheckLockTimeVerify (CLTV) является Сценарий уровня, абсолютный таймлок. CLTV был предложен в 2014 году с помощью BIP 65, а в конце 2015 года был внедрен программно в сеть Биткойн. CLTV был представлен для устранения недостатков в nLockTime. Хотя nLockTime может гарантировать, что транзакция не будет проведена после определенного времени, она не может доказать, что выходные данные этих транзакций будут заблокированы. Это потому, что транзакции nLockTime не могут быть переданы в сеть и требуют, чтобы владелец закрытых ключей транслировал транзакцию после снятия временной блокировки. Таким образом, даже если транзакция nLockTime создана, владелец личного ключа может создать новую транзакцию, чтобы потратить набор UTXO исходного nLockTime на другой адрес, удалив временную блокировку в процессе.
С CLTV пользователь может создать транзакцию, которая транслируется в сеть, и предотвратить вывод этих транзакций до тех пор, пока параметр CLTV не станет меньше или равен nLockTime транзакции. Овладев автором биткойнов, Андреас Антонопулос приводит пример того, как Алиса отправляет Бобу транзакцию с синхронизацией по CLTV: «Когда Боб пытается потратить этот UTXO, он создает транзакцию, которая ссылается на UTXO в качестве входных данных. Он использует свою подпись и открытый ключ в сценарии разблокировки этого ввода и устанавливает значение nLocktime транзакции равным или превышающим время блокировки в наборе Алисы CHECKLOCKTIMEVERIFY. Затем Боб транслирует транзакцию в сети биткойнов ». Например, если параметр Алисы, установленный Алисой, составляет 500 000 блоков, транзакция Боба nLockTime должна быть больше или равна 500 000. Проще говоря, CLTV, когда пользователь использует CLTV для синхронизированных транзакций, он или она говорит: «Я хочу, чтобы этот вывод можно было тратить на это. абсолютный блок / время»
nSequence
nПоследовательность уровень транзакции, относительная временная блокировка. nSequence была предложена в BIP 68 и мягко разветвлена в сети Биткойн в середине 2016 года. Поле транзакции nSequence использует 18 битов. Два из этих битов являются флагами, которые позволяют узлам интерпретировать поле. Один бит называется Отключить флаг, что при установке означает, что блокировки nSequence отключены — без временной блокировки. Другой бит это Тип флага, который при установке указывает узлам рассчитывать время в секундах вместо блоков. Оставшиеся 16 бит устанавливают время блокировки.
Пользователь, создающий транзакцию временной блокировки nSequence, создаст транзакцию, которая действительна только в том случае, если срок действия ввода превысил установленное время. Например, временная блокировка nSequence, равная 512 секундам, означает, что транзакция может быть создана только по истечении 512 секунд с момента, когда UTXO, который ссылается на этот вход, был включен в цепочку блоков.
CheckSequenceVerify
CheckSequenceVerify (CSV) является уровень сценария, относительная временная блокировка, Он был предложен в BIP 112 и мягко разветвлен в сети Биткойн в середине 2016 года. Как и CLTV, CSV нацелена на способность тратить выходные. С помощью CSV пользователь может создать транзакцию, которая транслируется в сеть, но предотвращает использование выходных данных этих транзакций до тех пор, пока параметр CSV не станет короче или не станет равным 16-битной длительности транзакции nSequence. Относительная временная шкала, используемая CSV, особенно полезна при работе с каналами оплаты. Поскольку это относительная временная блокировка, CSV позволяет пользователям создавать платежные каналы, которые поддерживают несколько транзакций вне цепочки, которые могут быть открыты на неопределенный срок до тех пор, пока транзакция не будет передана для запуска счетчика временной блокировки. Как объясняет Антонополус, «CSV особенно полезны, когда несколько (связанных) транзакций создаются и подписываются, но не распространяются… Дочерняя транзакция не может быть использована до тех пор, пока родительская транзакция не будет распространена, добыта и состарена в течение времени, указанного в относительном временном блокировании . ”Чтобы поставить CSV в самых простых терминах, когда пользователь использует CSV для синхронизированных транзакций, он или она говорит:
[perfectpullquote align=»full» bordertop=»false» cite=»» link=»» color=»» class=»» size=»»]« Я хочу, чтобы этот вывод был расходным, когда X блок / время прошло родственник когда трансляция транзакции Y[/perfectpullquote]
Заключение
В то время как временные блокировки являются мощными инструментами, они становятся еще более полезными в сочетании с другими умными контрактными функциями Биткойна. Например, пользователи могут использовать временные блокировки и мульти-подпись для создания счетов условного депонирования с биткойнами, которые можно потратить только по истечении Х времени и Х числа подписавших подписавших транзакцию. Пользователи также могут создать адрес, по которому биткойны будут выплачиваться их первоначальным владельцам после определенного периода бездействия, если определенная подписавшая сторона подписала транзакцию.