Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

マルチシグネチャアドレスの作成・送金方法

5.152 Aufrufe

Veröffentlicht am

モナーコインのWalletを使用したマルチシグネチャアドレスの作成方法及び送金方法の説明

Veröffentlicht in: Software
  • Als Erste(r) kommentieren

マルチシグネチャアドレスの作成・送金方法

  1. 1. マルチシグネチャアドレス (multisignature address) の作成方法・送金方法 2014年4月20日 モナーコインで遊ぶ会@東京
  2. 2.  名前:とく(@Mona_toku)  20歳 学生  回路屋さん マイコン FPGA など かる〜く自己紹介 最近ソフトウェア系の話題などに興味がわく スクリプト言語やサーバー・Webプログラミングの勉強をする 1
  3. 3. マルチシグネチャアドレスについての  文献・ソースが少ない(英語よめませーん)  活用したサービスが少ない  アドレス作成に公開鍵暗号の知識が少っしだけ必要 出金の仕組みが複雑 2 講演の経緯 ぜひ理解して、マルチシグネチャアドレスの サービスの開発や利用を!
  4. 4. マルチシグネチャアドレスについて いくつか質問!! どの程度知られているのかな? 3
  5. 5. 1. 「マルチシグネチャアドレス」というワードを 聞いたことがある 4 2. マルチシグネチャアドレスがどういうものか 知っている 3. マルチシグネチャアドレスを作成したこと がある 4. マルチシグネチャアドレスで送金をしたこと がある 5. マルチシグネチャアドレスを利用したWeb サービスなどを考えたことがある
  6. 6. マルチシグネチャアドレス 5 説明上の用語・略語 マルチシグアドレス 着金 出金 説明の便宜上、アドレスをお財布とおいている。 公開鍵 秘密鍵
  7. 7. マルチシグアドレスとは 6
  8. 8. 7 通常のアドレス 鍵が1個掛けられており、 出金には対応した鍵が1個必要 マルチシグアドレス 鍵がM個掛けられているが、 出金は対応した鍵がN個で可能 例では・・・ 鍵が3個掛けられているが、 出金は対応した鍵が2個で可能 (N≦M) 2−of−3 マルチシグアドレス
  9. 9.  Mの設定できる値 0<M≦16  Nの設定できる値 0<N≦M 8 MとNの設定できる値
  10. 10. マルチシグアドレスの作成方法 いきなり技術的な話! 開発者・サービス提供者向け! 9 とりあえず財布つくってみよう!!
  11. 11. 10 その前に・・・ 1. 秘密鍵と公開鍵のペア 2. 自ウォレットで作成された通常のアドレス 3. インポートされた通常のアドレス これらに該当するものを鍵をかける数(M)だけ 用意する 1.はWIF(Wallet Import Format)の知識が必要 わりかし簡単な2.の方法 で説明!
  12. 12.  鍵をかける数(M)だけのアドレスを作成 getnewaddressコマンドで作成出来る (このアドレスが公開鍵として使用される [validateaddressで参照可能])  作成したアドレスの秘密鍵を取り出す dumpprivkeyコマンドで取得 (出金承認時に必要) 11 マルチシグアドレスの作成準備
  13. 13. さぁ!アドレス作成!! 12
  14. 14. 13 createmultisigコマンド addmultisigaddressコマンド createmultisig <nrequired> <‘[“key”,”key”,…]’> addmultisigaddress <nrequired> <‘[“key”,”key”,…]’> [account] createmultisig N ‘[“address1”, “address2”,…]’ addmultisigaddress N ‘[“address1”, “address2”,…]’ [label] わかりやすく〜 N:出金時必要な鍵(署名)の数 adderss:アドレス(公開鍵でもOK!) label:ウォレットに表示されるlabelのこと (開発を行う上ではaccount)
  15. 15. 実際に、やってみる。 14 address:マルチシグアドレス redeemScript:出金時に必要!! 償還スクリプト createmultisig 2 '["MAQDRBoRei2U8pHWc1XGcmgWy8AK4dBUP7", "MDfxu3scxRP9syLnxMZQ1h3pvASmnHQjGm", "MMwG8XGMEMGQTMazJec4MrckynuigiHeKQ"]’ { "address" : "3QxBKdzTusR3LahTLCzkHFy6R8vYMNZfH4", "redeemScript" : "5221033cb51d0ace038b613390a43bf9e3fdc12ce32fb03 cf87f1257d3462231693cfa2103ebda741dcaace3d7c59bb0dc3462d51764b5 424277edbf4a12781e3b3451e35521023203603ea470f93ea288b47ad1f3e5d 8ed1554f013addd6f10c6d4e0dd05825553ae” }
  16. 16. マルチシグアドレスで出金! 15 入金は通常と同じだよ!
  17. 17. 出金の前に・・・ Walletにすべての秘密鍵がインポートされている場合 16 マルチシグアドレスでは残高が記憶できない!? (みたい・・・) listunspentコマンドを使用し 着金情報を取得する  コマンドからtxid、vout、scriptPubKeyを取得  同時にredeemScriptも取得することが出来る
  18. 18. 出金の前に・・・ Walletにすべての秘密鍵がインポートされていない場合 17 マルチシグアドレスでは残高が記憶できない!? (みたい・・・) 着金に関するトランザクション(txid)を すべて記憶する必要がある  出金したユーザからtxidを通知してもらう  トランザクションを作成し、出金するユーザに署名 してもらう
  19. 19. 1. createrawtransactionコマンドを使い トランザクション情報の作成 1. signrawtransactionコマンドを使い トランザクション情報に署名 1. sendrawtransactionコマンドを使い トランザクションを実行! 18 マルチシグアドレスの 出金の流れ
  20. 20. 19 1. createrawtransaction 通常:createrawtransaction [{"txid":txid,"vout":n},...] {address:amount,...} マルチシグ:createrawtransaction [{"txid":txid,"vout":n, "scriptPubKey":"hex", "redeemScript":"hex"},...] {address:amount,...} 着金の情報 出金の情報  着金の情報  txid:トランザクションID  vout:出金情報番号(index)  scriptPubKey:検証用スクリプト  redeemScript:償還スクリプト  出金の情報  address:出金先アドレス  amount:出金金額
  21. 21. 20 着金の情報の詳細・説明 vout vin txid vout ・・・ txid vout ・・・ txid vout ・・・ 1 txid value scriptPubKey ・・・ 2 txid value scriptPubKey ・・・ 3 txid value scriptPubKey ・・・ createrawtransaction txid:97dc7aa76e7d0ee5f83a635d05ab2eb0984cf3fd69ffc916c391a5b4dec7e3c7 gettrawtransaction で見れるよ!
  22. 22. 実際に、やってみる。 21 createrawtransaction ‘[{"txid":"97dc7aa76e7d0ee5f83a635d05ab2e(ry・・・", "vout":0, "scriptPubKey":"a914ff28fa4840a1edddf196f(ry・・・", "redeemScript":"5221033cb51d0ace038b6133(ry・・・"}]' '{"MXC8hYF6ScqqgSWGY2L3Emz9n4ownkW8gq":0.08}' 0100000001c7e3c7deb4a591c316c9ff69fdf34c98b02eab055d633af8e50e7d6 ea77adc970000000000ffffffff0100127a00000000001976a914ff80af5e0a8a3a 420276514a85a644c32d79208d88ac00000000 HEXでエンコードされた トランザクション情報
  23. 23. 1. createrawtransactionコマンドを使い トランザクション情報の作成 1. signrawtransactionコマンドを使い トランザクション情報に署名 1. sendrawtransactionコマンドを使い トランザクションを実行! 22 マルチシグアドレスの 出金の流れ
  24. 24. 23 2. signrawtransaction signrawtransaction <hex string> [{"txid":txid,"vout":n, "scriptPubKey":hex,"redeemScript":hex},...] [<privatekey1>,...] 着金の情報 秘密鍵  hex string  HEXでエンコードされたトランザクション情報  着金の情報  createrawtransactionで使用したものと同じ  秘密鍵  WIF形式の秘密鍵(複数指定可) (dumprivkeyで取り出したもの)
  25. 25. 実際に、やってみる。 24 signrawtransaction 0100000001c7e3c7deb4a591c316c9ff69fdf34c98(ry・・・ ' [{"txid":"97dc7aa76e7d0ee5f83a63(ry・・・",(ry・・・}] ' ' ["TQQoLcRqWnR7NySfQooRXFQ4Kg45w7ocUa(ry・・・"] ' { "hex" : "0100000001c7e3c7deb4a591c316c9ff69fdf34c98b02eab055d633af8e50e7d6ea77adc9700000000b60049304602 2100ad0e6b9e8e1db6525f876d95967d13450d736ca9e2c869bf631d249fef809567022100e4f58ae538ae964ed3c6d2391c6f794d e603ede3f5e55c78fa09ca0b56a55c4e014c695221033cb51d0ace038b613390a43bf9e3fdc12ce32fb03cf87f1257d3462231693cfa2 103ebda741dcaace3d7c59bb0dc3462d51764b5424277edbf4a12781e3b3451e35521023203603ea470f93ea288b47ad1f3e5d8ed155 4f013addd6f10c6d4e0dd05825553aeffffffff0100127a00000000001976a914ff80af5e0a8a3a420276514a85a644c32d79208d88ac 00000000", "complete" : false } 署名(鍵)が2個必要なため まだ送金ができない
  26. 26. 実際に、やってみる。2 25 signrawtransaction 0100000001c7e3c7deb4a591c316c9ff69fdf34c98b0(ry・・・ ' [{"txid":"97dc7aa76e7d0ee5f83a63(ry・・・",(ry・・・}] ' ' ["TQ8jEssUoEPhG5fiQC1KUaK7xsqKbE4qRRwbb(ry・・・"] ' { "hex" : ”00100000001c7e3c7deb4a591c316c9ff69fdf34c98b02eab055d633af8e50e7d6ea77adc9700000000fdff000049304 6022100ad0e6b9e8e1db6525f876d95967d13450d736ca9e2c869bf631d249fef809567022100e4f58ae538ae964ed3c6d2391c6f794 de603ede3f5e55c78fa09ca0b56a55c4e01483045022011e269a4780d6dd6228585d978882f1a40156e4cfe68112a1f5d6ce4a3603b3a 022100f34a2d341b6ccb47ebc56d14c59e60db025f8f4f8173b196e976bba5131bc2be014c695221033cb51d0ace038b613390a43bf9e3 fdc12ce32fb03cf87f1257d3462231693cfa2103ebda741dcaace3d7c59bb0dc3462d51764b5424277edbf4a12781e3b3451e35521023203 603ea470f93ea288b47ad1f3e5d8ed1554f013addd6f10c6d4e0dd05825553aeffffffff0100127a00000000001976a914ff80af5e0a8a3a 420276514a85a644c32d79208d88ac00000000", "complete" : true } 署名(解除)完了!!
  27. 27. 1. createrawtransactionコマンドを使い トランザクション情報の作成 1. signrawtransactionコマンドを使い トランザクション情報に署名 1. sendrawtransactionコマンドを使い トランザクションを実行! 26 マルチシグアドレスの 出金の流れ
  28. 28. 27 3. sendrawtransaction sendrawtransaction <hex string>  hex string  HEXでエンコードされたトランザクション情報 (今回は署名が完了した物) だけ!!
  29. 29. 実際に、やってみる。 28 sendrawtransaction 0100000001c7e3c7deb4a591c316c9ff69fdf34c98b(ry・・・ 99b5cd179b85f38538c44ca15e520ecdf10e50dc126d498b9c04fc599db0161e マルチシグアドレスから送金処理 を行ったトランザクションのID
  30. 30.  マルチシグネチャアドレスの説明  マルチシグネチャアドレスの作成  マルチシグネチャアドレスから送金の処理 29 まとめ
  31. 31.  できれば2−of−3の仕組みを説明したかった なぁ・・・  マルチシグネチャアドレス、わかればそんなに 難しくないw!!  マルチシグネチャアドレスをWebサービスなどに 是非ご検討を!! 30 最後に
  32. 32. ご清聴ありがとうございました!

×