В соответствии с Example 2: Escrow and dispute mediation существует возможность создания сделок условного депонирования. Также есть BIP 16, в котором представлен механизм оплаты за скрипт.Как установить произвольный scriptPubKey во время генерации транзакции биткойнов с депонированием?
Согласно этим документам, как я понимаю, я должен выполнить следующие действия, чтобы обработать транзакцию депозитного между тремя участниками:
- Каждый из этих трех участников создает новый адрес, выполнив НПЦ «getnewaddress».
- Затем каждый должен проверить свои адреса, выполнив «validateaddress» и получить паб-ключ.
Затем мы должны создать multisig адрес, выполнив ПКР метод «createmultisig» с тремя pubkeys в качестве параметров, например:
bitcoind createmultisig 2 '["pubkey1","pubkey2","pubkey3"]'
Затем мы создаем транзакцию, чтобы положить некоторые монеты этого multisig адрес:
bitcoind createrawtransaction '[{"txid":"my some txid","vout":0}]' '{"created multisig address":0.001}'
После того, что мы должны расшифровать нашу созданную транзакцию путем выполнения «decoderawtransaction», чтобы получить TXID, что необходимо будет создать следующую транзакцию:
`bitcoind decoderawtransaction <blah-blah>
{ "TXID": "TXID, что нам нужны", "версия": 1, " Locktime": 0, < .. .> и так далее < ...> } `
Одним из заключительных этапов: мы должны создать свой собственный scriptPubKey. Хорошо, что это не проблема: мы можем использовать Pybitcointools, библиотека Python для подписей Bitcoin и сделок, чтобы сделать это, выполнив
pybtctool mk_multisig_script pub_key1 pub_key2 pub_key3 2 3
, в результате, мы получаем scriptPubKey, что мы должны использовать позже в другом createrawtransaction.Заключительный этап. Магия начинается. Мы выполняем биткойны для создания необработанных транзакций с помощью специального скрипта:
bitcoind createrawtransaction '[{"txid":"txid","vout":0,"scriptPubKey":"**scriptPubKey**","redeemScript":"redeemScript from createmultisig transaction above"}]' '{"bitcoin address to output":0.001}'
и это возвращает транзакцию.
Волшебное: Все выше работает отлично. Заключительное createrawtransaction создает транзакцию. Но когда мы декодировать принятую транзакцию путем выполнения bitcoind decoderawtransaction <transaction, received on the last step>
в Vout секции будет то вроде этого: "vout" : [ { "value" : 0.00100000, "n" : 0, "scriptPubKey" : { "asm" : "OP_DUP OP_HASH160 blah blah OP_EQUALVERIFY OP_CHECKSIG", "hex" : "blah blah",
Как вы видите, в scriptPubKey есть «OP_CHECKSIG», но наш скрипт должен иметь «OP_CHECKMULTISIGVERIFY»
Итак, возникает вопрос: как установить произвольный скрипт для вывода транзакции?