Y

Blockchain.infoのpushtxはnon-standard txをブロードキャストするのか

f:id:yzono:20150206001845j:plain

はじめに

過去数回にわたってReality Keysについて調べてみましたが、Reality Keysのclaim時のブロードキャストはBlockchain.infoのpushtxからはできないため、Eligiusというminine pool?に対してブロードキャストすると理解していました。

ただし未確認情報によると、最近はBlockchain.infoでもnon-standardトランザクションを受けつけると聞いたので、今回はその辺りを調べてみます。

目次

Blockchain.infoのpushtxについて

Broadcast Transactionにサイン済みトランザクションを入力することでブロードキャストすることができます。これを利用することでオフラインのPCでサインして、それをUSB(紙でもOK)でコピーして、Broadcast Transactionのサイトからブロードキャストするといったことが可能になります。

Broadcast Transactionの画面に直接入力しなくてもPOSTリクエストを送れば同じことができます。pybitcointoolsがそうしています

またDecode Raw TransactionではRawトランザクションの内容を確認することができます。

これから通常のトランザクションと、P2SHトランザクションのそれぞれを試してみます。

通常トランザクションでの確認

(1)サイン済みトランザクション作成

pybitcointoolsを使ってRawトランザクションを作成します。

>>> from bitcoin import *
>>> h = history('1DbUhHwFL6gEqCQUcKciy4SUbYjFsh3qc7')
>>> h
[{'output': u'f5edd697298a4594f87bb91642347efd8ab90766bd22203b1beb58b917c29b0e:0', 'block_height': 342044, 'value': 80000, 'address': u'1DbUhHwFL6gEqCQUcKciy4SUbYjFsh3qc7'}]
>>> outs = [{'value': 10000, 'address': '1Fcyh3T6zsQtwBpwpTADf6M24GY5CC4vbx'}]
>>> tx = mktx(h,outs)
>>> tx
'01000000010e9bc217b958eb1b3b2022bd6607b98afd7e344216b97bf894458a2997d6edf50000000000ffffffff0110270000000000001976a914a05fa4734f5d4b7b821b2f9379246eac2678787a88ac00000000'
>>> sign_tx = sign(tx,0,'[ビットコインアドレス1DbUhHwFL6gEqCQUcKciy4SUbYjFsh3qc7の秘密鍵]')
>>> sign_tx
'01000000010e9bc217b958eb1b3b2022bd6607b98afd7e344216b97bf894458a2997d6edf5000000006b4830450220255040338b4f15adee91cf40df9122f2f5a999135d0585950b06420f37f0eade02210087b3f346beede40cae4f4ffd17d3fbec39bee511605020e0741ef383db46ded1012102a3595dd20267e7cb7a329e5d22160beef1ad9a3b08866444268fc966000ea037ffffffff0110270000000000001976a914a05fa4734f5d4b7b821b2f9379246eac2678787a88ac00000000'

(2)Blockchain.infoでDecode Raw Transaction実行

Decode Raw Transactionからトランザクションの中身を見ます。

{
   "lock_time":0,
   "size":192,
   "inputs":[
      {
         "prev_out":{
            "index":0,
            "hash":"f5edd697298a4594f87bb91642347efd8ab90766bd22203b1beb58b917c29b0e"
         },
         "script":"4830450220255040338b4f15adee91cf40df9122f2f5a999135d0585950b06420f37f0eade02210087b3f346beede40cae4f4ffd17d3fbec39bee511605020e0741ef383db46ded1012102a3595dd20267e7cb7a329e5d22160beef1ad9a3b08866444268fc966000ea037"
      }
   ],
   "version":1,
   "vin_sz":1,
   "hash":"4d11bf337bb22960b15b63341c1a19bcdcc08b8dcfe81ef87ef3ba2129971497",
   "vout_sz":1,
   "out":[
      {
         "script_string":"OP_DUP OP_HASH160 a05fa4734f5d4b7b821b2f9379246eac2678787a OP_EQUALVERIFY OP_CHECKSIG",
         "address":"1Fcyh3T6zsQtwBpwpTADf6M24GY5CC4vbx",
         "value":10000,
         "script":"76a914a05fa4734f5d4b7b821b2f9379246eac2678787a88ac"
      }
   ]
}

(3)Blockchain.infoでDecode Raw Transaction実行

Broadcast Transactionの画面からブロードキャストした後、以下成功のメッセージが表示されます。

Transaction Submitted

PS2Hトランザクションの場合

(1)サイン済みトランザクション作成

前回のrealitykeysdemo.py実行時に作成されたmulti_txは以下です。

01000000018ef7d75fc510e9ecf4272a152fa0fcf8c96bf98d1b9943e142db2c2dd032024200000000fd790100483045022100ad2ddb0cfe51e51a7628302b96c8070796de4887071d213257790ecf6bbbfae602202935347c9d375ab8737c24a06af00bf1f166a765162c4f2062b6024c146a62f00147304402202039f48dbaeee0be741c64e6b9870b791b49c8f966b4b1b4a9f86c16d4928cc802202ca2a7c50f0bd1f8a99aa6e96b6db0d4e526bb246f4836923f5d34e3b8df098601004ce45b39395d5241043e90a622f851754b83c0d28bc0d4a4c619b13c70c174658a0b0dd7480a32631629734a00ba16434e6f64060ec6e3837b5d148134cd6522302b5243b34ad375432103ea19d70a96a072a1881a6177ab47144168f19f9648675eb189e35e4bde4b16cd525b3137345d5b3130335d5241040190c6e169d2aaadb45cae2964db48d48c16b42a9cf963aceda3644068a73f3d23a33a4efd87f2e73e9482bb7425a8500a2ca19124f1c2930df2aa5e726ff11921036d4f24332e9c49861591558f074a112f9718e47383c394106325ac5b65b9cd30525b3137345d5b3130345dffffffff01e8030000000000001976a914a05fa4734f5d4b7b821b2f9379246eac2678787a88ac00000000

(2)Blockchain.infoでDecode Raw Transaction実行

Decode Raw Transactionからトランザクションの中身を見ます。

{
   "lock_time":0,
   "size":464,
   "inputs":[
      {
         "prev_out":{
            "index":0,
            "hash":"420232d02d2cdb42e143991b8df96bc9f8fca02f152a27f4ece910c55fd7f78e"
         },
         "script":"00483045022100ad2ddb0cfe51e51a7628302b96c8070796de4887071d213257790ecf6bbbfae602202935347c9d375ab8737c24a06af00bf1f166a765162c4f2062b6024c146a62f00147304402202039f48dbaeee0be741c64e6b9870b791b49c8f966b4b1b4a9f86c16d4928cc802202ca2a7c50f0bd1f8a99aa6e96b6db0d4e526bb246f4836923f5d34e3b8df098601004ce45b39395d5241043e90a622f851754b83c0d28bc0d4a4c619b13c70c174658a0b0dd7480a32631629734a00ba16434e6f64060ec6e3837b5d148134cd6522302b5243b34ad375432103ea19d70a96a072a1881a6177ab47144168f19f9648675eb189e35e4bde4b16cd525b3137345d5b3130335d5241040190c6e169d2aaadb45cae2964db48d48c16b42a9cf963aceda3644068a73f3d23a33a4efd87f2e73e9482bb7425a8500a2ca19124f1c2930df2aa5e726ff11921036d4f24332e9c49861591558f074a112f9718e47383c394106325ac5b65b9cd30525b3137345d5b3130345d"
      }
   ],
   "version":1,
   "vin_sz":1,
   "hash":"3da69aebb48d947316f4e59b575fbccf9f5b872da10126a510f648b4fc8ddb57",
   "vout_sz":1,
   "out":[
      {
         "script_string":"OP_DUP OP_HASH160 a05fa4734f5d4b7b821b2f9379246eac2678787a OP_EQUALVERIFY OP_CHECKSIG",
         "address":"1Fcyh3T6zsQtwBpwpTADf6M24GY5CC4vbx",
         "value":1000,
         "script":"76a914a05fa4734f5d4b7b821b2f9379246eac2678787a88ac"
      }
   ]
}

(3)Blockchain.infoでDecode Raw Transaction実行

ダメっぽいレスポンスが返ってきます。

Push of data element that is larger than remaining data

まとめ

もっと詳しく調べてみます..

参考

https://blockchain.info/pushtx

わからないこと

Push of data element that is larger than remaining data