Глоссарий / Справочник разработчика
PP expires
- Что такое PP expires?
- PP expires представлял собой необязательную временную метку Unix в сообщении PaymentDetails протокола BIP70, которая указывала кошельку прекратить исполнение запроса после наступления этого момента.
Определено в BIP-70.
Каждому счету на биткоин с фиксированной ценой нужен срок, потому что цена меняется, пока клиент принимает решение. BIP70 дал продавцам для этого одно поле, временную метку Unix длиной 64 бита, и оставил его необязательным. Эта практика пережила протокол: обратный отсчет на экране мгновенной покупки или в биткоин-банкомате выполняет ровно ту же задачу.
Как это работает
Статус: исторический. expires было полем 4 сообщения PaymentDetails, а Bitcoin Core объявил BIP70 устаревшим в версии 0.19, прежде чем удалить его в 0.20.0 3 июня 2020 года. Сегодня это поле никто не реализует.
В сообщении рядом друг с другом стояли два счетчика времени. time было обязательным и фиксировало момент, когда продавец составил запрос; expires было необязательным и фиксировало момент, когда запрос должен перестать быть действительным. Оба считали секунды с 1 января 1970 года, и оба были беззнаковыми 64-битными целыми, что незаметно позволяло избежать ограничения 19 января 2038 года, в которое упирается знаковый 32-битный счетчик.
Соблюдение срока целиком зависело от программного обеспечения плательщика. Кошелек сравнивал временную метку со своими системными часами и отказывался строить транзакцию, как только срок истекал, а значит, устройство с неверными часами либо оплачивало уже недействительный счет, либо отклоняло действительный. Само поле никак не касалось блокчейна. Транзакция, оплачивающая просроченный запрос, так же действительна, как любая другая, и то, зачтет ли продавец платеж, вернет деньги или молча оставит их себе, никогда не было вопросом протокола.
Короткие сроки несли в себе особую ловушку. Биткоин нацелен в среднем на один блок каждые десять минут, поэтому пятиминутный срок мог истечь еще до появления первого подтверждения, оставляя клиента, который действительно заплатил, и счет, который программное обеспечение продавца уже списало.
Где это встречается
Котировки с фиксированной ценой повсюду в покупке биткоина, и за каждой из них стоит срок действия.
Экран мгновенной покупки на бирже показывает курс рядом с обратным отсчетом, обычно где-то от нескольких секунд до пары минут. Если дать ему истечь, котировка пересчитывается по текущей цене. Биткоин-банкомат делает то же самое на более длинном отрезке времени, и отчасти поэтому его спред шире: оператор берет на себя ценовой риск за все время, которое вы проводите у автомата.
Lightning сделала срок обязательным, а не необязательным. Счет BOLT11 несет поле x для срока действия, а при его отсутствии по умолчанию используется 3600 секунд, то есть один час. Если заплатить позже, добросовестно работающий узел отклонит платеж, а не оставит его в подвешенном состоянии.
Практический совет плательщику незамысловат: когда указан срок, не экономьте на комиссии. Занижение комиссии ради нескольких сотен сатоши является самым частым способом пропустить срок, и транзакция, которая подтверждается с опозданием, как раз и превращается в обращение в поддержку вместо заказа.
PP expires vs locktime
Срок действия был просьбой продавца, которую программное обеспечение кошелька решало соблюдать; locktime является правилом, которое исполняет каждый узел сети. К тому же они действуют в противоположных направлениях и с разной силой. expires отмечало момент, после которого платеж уже не следует делать, и ни один майнер его никогда не проверял. Locktime, записанный в самой транзакции, называет высоту блока или время, до наступления которых транзакция вообще не может быть включена в блок. Первое закрывает окно; второе открывает его.