Как установить произвольный scriptPubKey во время генерации транзакции условного депонирования биткойна?

В соответствии с Примером 2: Посредничество условного депонирования и разрешения споров существует возможность создавать сделки условного депонирования. Также есть BIP 16, который вводит механизм оплаты за скрипт-хэш.

Согласно этим документам, как я понимаю, я должен выполнить следующие шаги для обработки сделки условного депонирования между тремя участниками:

  1. Каждый из этих трех участников создает новый адрес, выполняя команду rpc "getnewaddress".
  2. Затем каждый должен проверить свои адреса, выполнив "validateaddress" и получить ключ доступа.
  3. Затем мы должны создать адрес мультисигнала, выполнив метод rpc "createmultisig" с тремя аргументами в качестве параметров, например так:

    bitcoind createmultisig 2 '["pubkey1","pubkey2","pubkey3"]'

  4. Затем мы создаем транзакцию, чтобы положить несколько монет на этот многозначный адрес:

    bitcoind createrawtransaction '[{"txid":"my some txid","vout":0}]' '{"created multisig address":0.001}'

  5. После этого мы должны декодировать нашу созданную транзакцию, выполнив "decoderawtransaction", чтобы получить txid, который понадобится для создания следующей транзакции:

    `bitcoind decoderawtransaction <blah-blah>
    

    { "txid": "txid, который нам нужен", "версия": 1, "время блокировки": 0, <...> и т. д. <...>}`

  6. Один из последних шагов: мы должны создать наш собственный scriptPubKey. Хорошо, это не проблема: мы можем использовать Pybitcointools, библиотеку Python для биткойн-подписей и транзакций, чтобы сделать это, выполнив pybtctool mk_multisig_script pub_key1 pub_key2 pub_key3 2 3 в результате мы получаем scriptPubKey, который мы должны использовать позже в другой транзакции createrawtransaction.

  7. Заключительный этап. Волшебство начинается. Мы выполняем bitcoind для создания необработанной транзакции с помощью специального скрипта:

    bitcoind createrawtransaction '[{"txid":"txid","vout":0,"scriptPubKey":"**scriptPubKey**","redeemScript":"redeemScript from createmultisig transaction above"}]' '{"bitcoin address to output":0.001}' и это возвращает транзакцию.

Магия: все выше работает отлично. Final 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"

Итак, вопрос: как установить произвольный скрипт на вывод транзакции?

1 ответ

Я борюсь с той же проблемой, что и вы, но, может быть, я немного дальше? Далее я бы:transaction=pybitcointools.deserialize(hex)
transaction["outs"][n]["script"]=**script pub key**
hex=pybitcointools.serialize(transaction)

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

ОБНОВЛЕНИЕ https://bitcoin.stackexchange.com/questions/4486/transaction-with-slightly-changed-script-is-never-relayed Похоже, наш клиент откажется транслировать эти транзакции, мы должны передать их конкретный пул шахтеров.

Если вы хотите больше сотрудничать: zack[dott]bitcoin@gmail.com

Другие вопросы по тегам