Я работаю над инструментом для генерации контрактов с временной блокировкой. Мой сценарий выкупа выглядит так:
OP_HASH160 <revocationHash> OP_EQUAL
OP_IF
<bobPubKey>
OP_ELSE
<timeDelay> OP_CHECKSEQUENCEVERIFY OP_DROP
<alicePubKey>
OP_ENDIF
OP_CHECKSIG
Цель состоит в том, чтобы Алиса могла потратить средства после временной задержки, а Боб мог потратить их в любое время, доказав знание прообраза хеша.
Потратить через хеш отзыва достаточно просто. Тем не менее, у меня возникли проблемы с созданием транзакции, которая тратит на основе временной блокировки, оказывается более сложной. Собственно, мои вопросы таковы:
<timeDelay>
представляет значение? Как я могу, например, заблокировать средства для 2 блоков?bitcoinjs-lib
или другую библиотеку?В биткойн-js вы могли бы сделать что-то вроде этого
aliceToBobRedeemScript = bitcoin.script.compile([,
bitcoin.opcodes.OP_IF,
bitcoin.opcodes.OP_HASH160,
aliceSecretHash,
bitcoin.opcodes.OP_EQUALVERIFY,
bobPrivKey.getPublicKeyBuffer(),
bitcoin.opcodes.OP_ELSE,
bitcoin.script.number.encode(10),
bitcoin.opcodes.OP_NOP3,
bitcoin.opcodes.OP_DROP,
alicePrivKey.getPublicKeyBuffer(),
bitcoin.opcodes.OP_ENDIF,
bitcoin.opcodes.OP_CHECKSIG
]);
в старой демонстрации atomicswap есть пример кода, в нем нет csv, но показаны другие вещи, например, как подписывать пользовательские транзакции и т. д.
https://github.com/rubensayshi/counterparty-p2sh-demo/blob/master/atomic-swap.js#L163-L185
по ссылке https://github.com/bitcoin/bips/blob/master/bip-0112.mediawiki :
1.) timeDelay в вашем примере представляет две возможности:
// There are two kinds of nSequence: lock-by-blockheight
// and lock-by-blocktime, distinguished by whether
// nSequenceMasked < CTxIn::SEQUENCE_LOCKTIME_TYPE_FLAG.
2.) когда я понимаю это правильно, это связано с BIP68. Изначально nSequence должен позволять модифицировать tx, находясь в мемпуле, когда значение меньше 0xFFFFFFFF. С CSV теперь есть относительное время после того, как tx входит в блокчейн. Для расходования UTXO с помощью CSV требуется, чтобы прошло определенное количество блоков. В то время как обычный tx установил бы nSequence в 0xFFFFFFFF, использование CSV требует, чтобы он был 0xFFFFFFFE или меньше. Рекомендуется дальнейшее чтение :-)
3.) Понятия не имею, может быть другие эксперты знают библиотеку, поддерживающую CLTV и CSV...
Чтобы ответить на вопрос: что представляет собой значение timeDelay? Как я могу, например, заблокировать средства для 2 блоков?
См. следующий пример с использованием bitcoinjs:
пусть bip68 = требуется ('bip68')
bip68.encode({ блоков: 54}) // => 0x00000036
bip68.encode({ blocks: 200 }) // => 0x000000c8 Также смотрите ссылку ниже: https://github.com/bitcoinjs/bip68
МандельУтка