2013-11-21 5 views
1

В соответствии с Example 2: Escrow and dispute mediation существует возможность создания сделок условного депонирования. Также есть BIP 16, в котором представлен механизм оплаты за скрипт.Как установить произвольный scriptPubKey во время генерации транзакции биткойнов с депонированием?

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

  1. Каждый из этих трех участников создает новый адрес, выполнив НПЦ «getnewaddress».
  2. Затем каждый должен проверить свои адреса, выполнив «validateaddress» и получить паб-ключ.
  3. Затем мы должны создать multisig адрес, выполнив ПКР метод «createmultisig» с тремя pubkeys в качестве параметров, например:

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

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

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

  5. После того, что мы должны расшифровать нашу созданную транзакцию путем выполнения «decoderawtransaction», чтобы получить TXID, что необходимо будет создать следующую транзакцию:

    `bitcoind decoderawtransaction <blah-blah> 
    

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

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

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

    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»

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

ответ

2

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

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

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

Если вы хотите больше сотрудничать: zack [dott] [email protected]