仮想通貨で遊ぼう!『createrawtransaction編』 | なむやんの電子工作

なむやんの電子工作

電子工作が好きで、その備忘録にブログをハジメマス
最近は仮想通貨にはまってます、http://namuyan.dip.jp『It works!yay!!!』の管理人
※このブログの記事をまねしたことで何かしらの損害を被りましても自己責任でお願いいたします。

今日もきょうとてゆっくりしているnamuyanです。
月曜まで休みが続くので頭が開店休業中・・・・
こんな時はcoindを弄って遊ぶのが一番です!



今回のテーマ『createrawtransaction』はどういう意味でしょう?
生トランザクションを生成するという意味です。


私達がBitcoinを送金する時、Bitcoin-cliが内部的に勝手に処理をしてくれます。うまく処理をしてくれるのですが一体なにをやっているのかブラックボックスでよくわかりません。今回はその送金処理を理解しようというのが趣旨です。






Bitcoinでもいいのですが失敗すると痛いのでFujicoinを使用します。
※Linux環境なのでfujicoindを使用します。コンソールに入力するコマンドは全く同じですが、fujicoindはQtの場合、余分です。




1,送金元のTXidを調べる
まず必要なのはTXid、ブロックチェーンのトランザクションはTXidを紐にしてトランザクションを石レンガにして繋がっている印象を持ちます。実際はどうなのでしょう?(多分正しい


fujicoind listunspent > fuji.txt

vi fuji.txt




fuji.txtにはWallet内にある通貨の入っているアドレス情報が記載されています。ここで使うのは”txid”と”vout”と”address”と”amount”(=amount_Aとします)です。どこかにコピペしておきましょう。それと送金先のアドレスを用意しておきましょう。


fujicoind createrawtransaction '[{"txid":"<<
your_txid>>","vout":<<your_vout>>}]' '{"<<your_address>>":<<amout_B>>."<<送金先_address>>":<<amout_C>>}'



ここで注意してほしいのが
送金される金額 =
amout_C
残高 =
amout_B
Fee =
amount_A - amout_B -
amout_C
となることです。しっかり計算した後にコマンドを打ち込んで下さい。
打ち込みますと

0100000001c332f896de3ac6eae3b25e0583ae968a9e827c3426dbb971d
42cdfa2959bfc40000000000ffffffff0120734144000000001976a959684a
b6049a9c808fb9b1f783934ef683ae56ddc0a04788ac0000000000000000

のような長がぁ~い六進数のデータが出てきます。
これで生トランザクションが生成されました。次はブロックチェーンのP2Pネットワークにブロードキャストしてみましょう!








2,Broadcast to block chain network !
生トランザクションデータのみではいけません。なぜなら署名がされていないからです。”このアドレスの持ち主は私です”というサインをする作業はコマンド一発で完了します。この仕組みがなければ、好き勝手に他人の残高を変更できてしまうことになります。

fujicoind signrawtransaction <<生トランザクション>>


返り値として”complete”と”hex”が出てきます。まず、
”complete”がtrueである事を確認しましょう。これは内部にあるPrivateKeyにて署名が正しく完了したことを示します。”hex”が署名されたトランザクションです。次はこれをP2Pネットワークに放流しますペチペチ
(署名について実はよく理解していません><)

fujicoind sendrawtransaction
<<署名されたトランザクション>>


コマンドを打ち込んだら返り値にTXidが出て来るはずです。これをBlockExplorerにて確認してみましょう。正しくできていれば以下のような表示になっているはずです。



FEEがおかしなことになっています。はじめてトランザクションを手動で発行したので失敗していしまいました。Bitcoinでなくてよかったw泣くに泣けないw



いやー仮想通貨は面白いですね
これを考えたNakamoto Satoshi さんは天才ですな