Возможно ли (так или иначе) истечь срок действия txout?

Я прочитал Контракты: будет ли это возможно? где часть вопроса касалась истечения срока транзакции, а в одном из ответов говорилось, что это никогда не будет возможно, поскольку это вызывает проблемы. К сожалению, в ответе не было указано, какие проблемы это вызовет.

Я не совсем понимаю из вопроса/ответа, был ли вопрос об истечении (неподтвержденной?) транзакции (что вполне может быть проблематично) или об истечении срока действия txout из ранее подтвержденной транзакции.

Является ли последнее совершенно невозможным с помощью любого существующего метода, например, сценариев и/или комбинации транзакций?

Один из способов, который, как я понимаю, может быть возможен (и я всего лишь новичок в биткойнах, поэтому, пожалуйста, сжальтесь надо мной и помогите мне понять, если это предложение явно нелепо для экспертов по биткойнам) состоит в том, чтобы иметь новую операцию биткойн-скрипта, которая могла бы использоваться в scriptPubKey txout для помещения " текущего " времени в стек, чтобы его можно было сравнить (используя OP_LESSTHAN, OP_GREATERTHAN, OP_LESSTHANOREQUAL или OP_GREATERTHANOREQUAL) с фиксированным временем истечения срока действия (которое находится в scriptPubKey и помещается в стек by scriptPubKey) и только если текущее время меньше времени истечения срока действия, остальная часть scriptPubKey позволит подтвердить транзакцию (т.е. платеж в биткойнах).

Примечание о том, что я имею в виду под « текущим » временем… могут быть длительные дебаты об источнике текущего времени и достоверности этого источника, но я бы предположил, что «текущее» время на самом деле не обязательно должно быть фактическое текущее время, если оно является достаточно близким приближением в сфере биткойнов (в среднем около 10 минут, но может быть дольше, может быть короче). Таким образом, это может быть отметка времени предыдущего блока в цепочке блоков; таким образом каждый узел (при условии отсутствия разветвления) будет оценивать истечение срока действия txout по одному и тому же «текущему» времени.

Нежелательным, но, возможно, приемлемым побочным эффектом является то, что если транзакция, расходующая txout, отправлена ​​и подтверждена в коротком форке блокчейна, то она будет повторно поставлена ​​в очередь на более длинном форке, и есть вероятность, что срок действия txout мог истечь до того, как транзакция будет повторно обработана, и, таким образом, транзакция не пройдет во второй раз.

Еще одна тонкость, повышающая удобство использования, может состоять в том, чтобы предложить два варианта новой «текущей» временной операции для отражения двух «вариантов» lock_time, один вариант для помещения метки времени предыдущего блока в стек, а другой вариант — для помещения метки времени предыдущего блока. высота в стеке. Таким образом, пользователь может писать транзакции, которые являются самосогласованными по временной привязке или самосогласованными по высоте.

Вилки работают немного иначе, чем вы предполагаете: как только они расходятся от общего источника, они полностью независимы друг от друга. Они являются расходящимися дочерними ветвями от общего корня, которые никогда не сойдутся вместе. Каждая вилка считает своих конкурентов недействительными, поскольку они несовместимы друг с другом. Таким образом, никогда не будет повторной постановки в очередь из-за взаимодействия с другими форками, вместо этого каждый форк будет рассматривать каждую транзакцию для себя, как только она станет доступной.

Ответы (1)

Срок действия txout на самом деле не имеет смысла, так как это уничтожит монеты, а уничтожить монеты невозможно. (Монеты, о которых не было заявлено ни одним txout, вносятся в качестве комиссионных.)

В будущем вы можете создать транзакцию с lock_time, которая отправляет монеты на другой биткойн-адрес. Если вы передадите эту транзакцию контрагенту, у него будет возможность транслировать транзакцию в сеть после наступления срока ее оплаты, и она вступит в силу.

До этого времени можно было создать еще одну транзакцию без ограничения lock_time, переместить монеты и сделать транзакцию контрагента бесполезной.

Мой комментарий слишком длинный, поэтому он будет состоять из нескольких частей... ЧАСТЬ 1 Это несколько надуманный пример, но он иллюстрирует то, о чем я думал. NB: пример потребует использования (в настоящее время) нестандартных транзакций с условными операциями сценариев.
ЧАСТЬ 2 Условия: 1) Алиса хочет дать Бобу немного биткойнов прямо сейчас (время t0), но хочет оговорить, что они должны быть потрачены к заданному будущему времени (t2). Алисе все равно, на что Боб тратит биткойны. 2) Если Боб не потратит биткойны к моменту времени t2, то Алиса хочет, чтобы монеты были пожертвованы в благотворительный фонд, которым анонимно управляет Ева. 3) Алиса рассчитывает умереть примерно в момент времени t1, где t1<t2.
ЧАСТЬ 3. Следствия: 1) Алисе нужно отправить транзакцию (Tx0) в момент t0 с txout, которая переводит биткойны Бобу, чтобы Боб мог их потратить. 2) Алиса и Боб не хотят, чтобы Алиса подписывала транзакцию расходов Боба (еще не написанную) (Tx.Bobspend), главным образом потому, что, если Алиса умрет в момент времени t1<t2 до того, как Боб сгенерирует Tx.Bobspend, Алисы больше не будет рядом. подписать Tx.Bobspend, хотя мы еще не достигли t2.
ЧАСТЬ 4 3) Хотя теперь Алиса могла генерировать транзакцию (Tx.Alicecharity) с txout, который переводит биткойны в фонд, она не знает личность Евы и, следовательно, ей некуда отправить Tx.Alicecharity.
ЧАСТЬ 5 Таким образом, Tx0 Алисы будет иметь txout, который работает примерно так, когда кто-то пытается провести его с транзакцией (Tx.future) в какое-то время в будущем (t.future): если t.future < t2 и подписи на Tx.future совпадает с биткойн-адресом Боба, а затем позволяет Бобу потратить биткойны. В противном случае, если t.future > t2 и подписи на Tx.future совпадают с биткойн-адресом фонда, тогда пусть фонд тратит биткойны, иначе t.future недействителен.
Невозможно поместить ссылку на текущее время (или другую монотонно возрастающую функцию, подобную времени) в сценарий, поэтому я не вижу способа сделать это с помощью всего одной транзакции. Однако вы можете написать мультиподпись 1 из 2, которая переводит монеты в A1 и B1 (где A1 контролируется Алисой, а B1 контролируется Бобом), и отправить Еве транзакцию, перемещающую монеты с несколькими подписями в E1 ( адрес, контролируемый Евой) со значением lock_time равным t2. Затем Ева может транслировать транзакцию, получая монеты из мультиподписной транзакции по истечении времени t2.
Вы имели в виду «в настоящее время никак» (согласен) или «никогда не будет»? Я выдвигал идею одной или двух новых скриптовых функций для использования scriptPubKey, которые помещали бы высоту или отметку времени предыдущего блока в стек до или после помещения константы (выражающей время «истечения срока действия»), а затем op_lessthan или op_greaterthan, чтобы определить, находится ли «текущее» время до или после константы. Учитывая, что узлы уже имеют некоторое представление о «текущем» времени для проверки Tx NLock_time, это не кажется большим шагом вперед ... но мое понимание, вероятно, слишком упрощенно. :-/
кстати, ваш (вдумчивый) ответ, по-видимому, предполагает, что Алиса отправит Еве подписанный Tx с блокировкой по времени, но в моем (очень надуманном) примере уже прямо говорилось, что Алиса не знала, кто такая Ева, поэтому у нее не было возможности отправить Еву что-нибудь . (Несмотря на возможность использования Алисой доверенной третьей стороны для трансляции lock_timed Tx от имени Евы по истечении времени lock_time.)