Они могли бы быть исполнено, если замена сделка была возможна в блоках. С жесткой вилкой, правило может измениться так, что сделки с locktimes в будущем может в блоки. Locktime бы предотвратить выходы из тратятся. После этого, если кто-то вещает сделку, которая дважды проводит несколько входов и где все эти входы имеют более высокий порядковый номер, то он будет эффективно отменить первоначальную сделку. После того, как будет достигнут Locktime, тогда выходы высшей транзакции последовательности могут быть потрачены.
Можно сделать это (менее эффективно) с мягкой вилкой.
Якорь / multisig сделка будет иметь N выходов следующего вида:
Код:
ЕСЛИ
<сейчас + 40 дней> CLTV DROP <возврат открытого ключа> OP_CHECKSIG
ELSE
CHECKMULTISIGVERIFY
КОНЕЦ
<сейчас + 40 дней> CLTV DROP <возврат открытого ключа> OP_CHECKSIG
ELSE
КОНЕЦ
Государственные операции обновления будет N входных и выходных транзакций N со следующими выходами.
Код:
ЕСЛИ
<сейчас + 30 дней> CLTV DROP <открытый ключ нового владельца> OP_CHECKSIG
ELSE
<Последовательность чисел> OP_CHECKSEQUENCEVERIFY
КОНЕЦ
<сейчас + 30 дней> CLTV DROP <открытый ключ нового владельца> OP_CHECKSIG
ELSE
<Последовательность чисел> OP_CHECKSEQUENCEVERIFY
КОНЕЦ
Они бы проводит первые N выходов сделки якорного и тратить их на N новых выходов. Каждый из государственных операций обновления может выступать в качестве связующего звена. До тех пор, как он тратит связь с меньшим порядковым номером, то она является действительной сделкой. После 30 дней CLTV прошел, выходной результат может быть израсходованы.
Там должно быть пособие для в некоторых дополнительных входов в сделку, чтобы платить взносы. Это может работать похоже на SIGHASH_ANYONE_CAN_PAY.
OP_CHECKSEQUENCEVERIFY означает, что вы можете эффективно использовать scriptPubKeys родительской транзакции вместо этого сделки. Каждая нижняя сделка порядкового номера использует открытый ключ от своего родителя в цепи обратно к сделке корня / анкера.
В-псевдо код, он делает следующее
Примечание: max_sequence начинается 0xFFFFFFFF
если (sequence_number >= Max_sequence)
вернуться FAIL;
Если (TXID из первых N входов не равны)
вернуться FAIL;
Родитель = getTransaction (TxIn [п] .getPrevTransaction ())
если (TXID из первых N входов родителя не равны)
вернуться FAIL;
stack.pop (); // Удалить <Последовательность чисел>
stack.pop (); // Удалить <1> для IF
subScript.max_sequence = sequence_number
subScript.scriptSig = stack.copy ()
subScript.scriptPubKey = parent.getgetPubKey ()
transactionCopy = сделка с первыми N txids заменены дедушкой TXID
если (subScript.execute (transactionCopy) == СБОЙ) // Использование transactionCopy для всех операций scriptSig
вернуться FAIL;
проследовать, как будто это был NOP