Lab Nakagawa 2017 Digital Garage. All rights reserved. Redistribution or public display not permitted without written permission from

Similar documents
Agenda Transaction とは インプットとは アウトプットとは インプットとアウトプットの関係 手数料 (fee) とは UTXO(Unspent Transaction Output) とは 2

Agenda 1. 目標 2. BC2のBitcoin 3. Bitcoin-cliの体験 4. Bitcoinの概要 2

ビットコインとは ビットコインは仮想通貨 1 円やドルは 国家単位で運営されている通貨ビットコインは世界中で利用できる次世代の通貨を目指したもの 2オンラインゲームや特定のWebサイトでのみ使える仮想通貨は多いビットコインは 円やドルと同じく 広範な経済活動での利用を目指したもの 3 電子マネーは

BitcoinでCTF Bitcoin based CTF

このセッションについて RPC アプリの作成 : 注意点とベストプラクティス ( 前半 ) RPC のコードを触ろう RPC アプリの作成 : 注意点とベストプラクティス ( 後半 ) 2

UID S307-NDEF

NFC ucode タグのメモリフォーマット規定

インターネット接続ガイド v110

RPC Lab - Karl-Johan Alm 2017 Digital Garage. All rights reserved. Redistribution or public display not permitted without written permissio

TH-47LFX60 / TH-47LFX6N

エレクトーンのお客様向けiPhone/iPad接続マニュアル

Łñ“’‘‚2004

プリント


iPhone/iPad接続マニュアル

RPC Lab - Karl-Johan Alm 2017 Digital Garage. All rights reserved. Redistribution or public display not permitted without written permissio

基本操作ガイド

操作ガイド(本体操作編)

操作ガイド(本体操作編)

ScanFront300/300P セットアップガイド

ブロックチェーン技術入門 サンプルページ この本の定価 判型などは, 以下の URL からご覧いただけます. このサンプルページの内容は, 初版 1 刷発行当時のものです.

AutoSway_Gaide_kari4

2 COPYRIGHT TempNate. ALL RIGHTS RESERVED.

ScanFront 220/220P 取扱説明書

ScanFront 220/220P セットアップガイド

基本操作ガイド

Juniper Networks Corporate PowerPoint Template

相続支払い対策ポイント

150423HC相続資産圧縮対策のポイント

\\afs001-0m0005\project02\A32\M

ハピタス のコピー.pages

Copyright 2008 All Rights Reserved 2

Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using con

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード]

クイック操作シート

DC9GUIDEBook.indb

1000 Copyright(C)2009 All Rights Reserved - 2 -

村田智英(むらた ともひで) 主にWEB系のバックエンドのエンジニアです 好きなもの: D言語, perl, emacs, fedora 嫌いなもの: PHP, Ora

スライド 1

Copyright SATO International All rights reserved. This software is based in part on the work of the Independen

WAGO Profibus /-833及び三菱MELSEC Q02HCPU/QJ71PB92Dのコンフィグレーション


Taro php.jtdc

ACS電子ジャーナル利用マニュアル

(c) 2013 TOYOTA DIGITAL CRUISE, INC. All Rights Reserved.

平成22年度 特許庁

USB_IR_Remote_Controller_Advance_Library 取扱説明書 2016/06/23 R03 Assembly Desk USB_IR_Remote_Controller_Advance_Library を使用すると 弊社製 USB IR Remote controll

Microsoft PowerPoint - kougi9.ppt

F コマンド

2. Save をクリックします 3. System Options - Network - TCP/IP - Advanced を開き Primary DNS server と Secondary DNS Server に AXIS ネットワークカメラ / ビデオエンコーダが参照できる DNS サ

untitled

ICS_Japan アプリケーションノート ISO メッセージ送受信基礎編 Rev File Name: アプリケーションノート _ISO15765_2_ メッセージ送受信 _ 基礎編 _A00.docx Intrepid Control Systems, Inc. アプリ

初心者にもできるアメブロカスタマイズ新2016.pages

- 2 Copyright (C) All Rights Reserved.

DragonDisk

Microsoft PowerPoint - ie ppt

Z7000操作編_本文.indb


CAC

Microsoft Word - COP_MasterSim_Installation_Supplement_A00.doc

PeopleJpeg2Bmpマニュアル

スライド 1

BLOCK TYPE.indd

受付代行 設定マニュアル このマニュアルでは 恵比寿ボイスプロダクションが Google アシスタントアプリで公開している 受付代行 ( ) を使って Google

2 COPYRIGHT TempNate. ALL RIGHTS RESERVED.

入学検定料支払方法の案内 1. 入学検定料支払い用ページにアクセス ポータルの入学検定料支払いフォームから 入学検定料支払い用 URL の ここをクリック / Click here をクリックしてください クリックを行うと 入学検定料支払い用のページが新たに開かれます ( 検定料支払い用ページは ポ

チュートリアル Part 2 の概要 チュートリアル Part 2 では サンプルデータのマニホールドブロックを使用して ilogic で Excel スプレッドシートと関連付けて マニホールドブロックの各形状や部品番号に関するルールを作成 実行して ilogic のルールに基づいて Excel ス

オートビュー



Copyright All Rights Reserved. -2 -!

M 目次 1. ログイン方法 メール画面の概要 メールの確認について スレッドの表示変更 ( スレッド順 日時順 ) メール作成と送信 メールへの署名 ラベルの作成 ラベルの

2

2

RsMulti の取扱説明 「RS232C で直接接続する(LAN を使用しない場合)」


WYE771W取扱説明書

操作ガイド(本体操作編)

untitled

IPA:セキュアなインターネットサーバー構築に関する調査

無線LANフレーム構成について

- 2 Copyright (C) All Rights Reserved.

Microsoft Word - 最終版 バックせどりismマニュアル .docx

2

<4D F736F F D F81798E518D6C8E9197BF33817A88C38D868B5A8F70834B D31292E646F63>

<4D F736F F D A B D815B83675F49534F F325F A815B EF3904D5F8AEE916295D25F E646F6378>

untitled

もくじ 1. はじめに 1.1 本書について サポート 3 2. 準備する 2.1 TORAIZ AS-1の設定を行う コンピューターと接続する TORAIZ Sound editor LEのMIDI 設定を行う TORAIZ AS-1からバンクのデー

Active Directory フェデレーションサービスとの認証連携

べリンガーB-CONTROL

電話機のリセットと再起動

VOX-BASE/RECEIVE Conformance Statement

SE-800 INSTRUCTION BOOK

ZIPパスワードメールプロフェッショナル版マニュアル

how-to-decide-a-title

構造体

// このクラスの有効期間中の各呼び出しに使用される キャッシュされた Socket オブジェクト Socket socket = null; // 非同期処理が完了したことを通知するために信号を送るオブジェクト static ManualResetEvent clientdone = new Ma

JEB Plugin 開発チュートリアル 第3回

02_巻頭特集.indd

URL AdobeReader Copyright (C) All Rights Reserved.

Transcription:

Segwitの特徴と利用 @DG Lab Nakagawa 2017 Digital Garage. All rights reserved. Redistribution or public display not permitted without written permission from Digital Garage.

Segwitとは Segregated Witnessの略称 直訳すると 分離された証人 2

Agenda Segwitのデータ構造 Segwitがもたらすこと Segwitの利用方法 3

Segwitのデータ構造 4

Segwitのデータ構造 今までのTransactionデータ構造 との違い Transaction version txin_count txins txout_count txouts lock_time Transaction version marker flag txin_count txins txout_count txouts script_witnesses lock_time 5

Segwitのデータ構造 Name type 0x00 固定 Field Size version int32_t 4 byte marker char 1 byte flag char 1 byte txin_count var_int 1-9 byte txins txin[] 可変 txout_count var_int 1-9 byte txouts txout[] 可変 script_witnesses script_witnesses[] 可変 lock_time uint32_t 4 byte 0x00 以外 現在は 0x01 のみ txinsと要素数が 同じ配列 6

Segwitのデータ構造 witnessesの要素が無い場合 witness length 0x00 のみ script_witnessesのデータ構造 Description Data type witness count var_int witnesses witness[] Field Size 1-9 byte 可変 witnessのデータ構造 Description Data type script length var_int script uchar[] Field Size 1-9 byte 可変 7

Segwitのデータ構造 script_witnessesのデータ例 P2WPKHの場合 02 47 <signature 71byte> 21 <pubkey 33byte> 要素が2つ 0x02 1つ目の要素 サイズ 署名値 2つ目の要素 サイズ public key このようなデータがインプット数分付与される 8

Segwitがもたらすこと 9

Segwitがもたらすこと malleability対策 malleabilityとは TransactionIDが変わってしまう 画像 https://github.com/bitcoin/bips/blob/master/bip-0144/witnesstx.png 10

BIP:9 Version bits with timeout and delay Segwitがもたらすこと soft forkで対応可能 soft forkとは 2016/11/15 00:00(UTC) から2016ブロック毎 約2週間毎にチェック 1年後がリミット Segwitはbit1を使う./bitcoin-cli getblockchaininfo 画像 https://github.com/bitcoin/bips/blob/master/bip-0009/states.png 11

Segwitがもたらすこと soft fork 現状は 画像 https://bitcoincore.org/en/segwit_adoption/ 12

Segwitがもたらすこと Block内のTransaction数増加 ブロックサイズ ブロックは現在 最大サイズが1MBに制限されているが この制限を以下のように変更 する ベースサイズ 3 トータルサイズを新しくblock weightとして定義する ベースサイズはwitness関連のデータを除外したオリジナルのトランザクションをシリアラ イズしたバイト単位のブロックサイズ トータルサイズはBIP-144*4に定義されているシリアライズフォーマットでトランザクション をシリアライズしたバイト単位のブロックサイズで ベースデータとwitnessデータを含む 新しいルールでは block weightの合計が 4,000,000以下とされる Segregated Witnessの仕様 BIP-141 http://techmedia-think.hatenablog.com/entry/2016/02/16/224844より 13

Segwitがもたらすこと その他 Sigopsの上限増加 Transactionサイズ計算 将来の拡張 etc... 14

Segwitがもたらすこと まとめ TransactionIdを固定にできる 1ブロックあたりのTransaction数が増える 15

Segwitの利用 16

Segwitの利用 P2WPKH pay-to-witness-public-key-hash scriptpubkey pk_script locking script OP_0 <public key hash*> 0x0014<public key hash*> scriptsig signature script unlocking script empty witness <signature> <public key> *hashは HASH160 17

Segwitの利用 UTXO アウトプット Transaction インプット unlockin script hash previous_output empty index value script length pk_script length signature script pk_script sequence script_witnesses P2WPKH locking script OP_0 <public key hash> 例 0x0014abcd..cdef witnesses script 0x02 47 03abcd...ef01 21 02abcd...ef 18

Segwitの利用 *hashは SHA256 P2WSH pay-to-witness-script-hash scriptpubkey pk_script locking script OP_0 <witnessscript hash*> 0x0020<witnessScript hash*> scriptsig signature script unlocking script empty witness <param 1>... <param N> <witnessscript> 19

Segwitの利用 UTXO アウトプット Transaction インプット unlockin script hash previous_output empty index value script length pk_script length signature script pk_script sequence script_witnesses P2WSH locking script OP_0 <witnessscript hash hash> 例 0x0020abcd..cdef witnesses script <param 1> <param N> <witnessscript> 20

Segwitの利用 P2WPKH pay-to-witness-public-key-hash scriptpubkey pk_script locking script どうやって OP_0 <public key hash*> 0x0014<public key hash*> scriptsig signature script unlocking script 計算するの empty witness <signature> <public key> *hashは HASH160 21

Segwitの利用 署名 BIP:143 Signature用データ Signature用データをHASH256した値 32byte HASH256した値の署名値 70byte 署名値にHashType(SIGHASH_ALL:1byte)を付与(71byte) 22

BIP:143 Double SHA256 of the serialization of: 1. nversion of the transaction (4-byte little endian) 2. hashprevouts (32-byte hash) 3. hashsequence (32-byte hash) 4. outpoint (32-byte hash + 4-byte little endian) 5. scriptcode of the input (serialized as scripts inside CTxOuts) 6. value of the output spent by this input (8-byte little endian) 7. nsequence of the input (4-byte little endian) 8. hashoutputs (32-byte hash) 9. nlocktime of the transaction (4-byte little endian) 10. sighash type of the signature (4-byte little endian) 23

BIP:143 以下のデータをHASH256した値 1. 送信するTransactionのVersion 基本 0x01000000 2. txinsのoutpointをhashした値 計算は後述 3. txinsのsequenceをhashした値 計算は後述 4. 署名するtxinのoutpoint 5. 署名するtxinに使ったUTXOのscriptCode 6. 署名するtxinに使ったUTXOのvalue 7. 署名するtxinのsequence 8. txoutsのoutputをhashした値 9. 送信するTransactionのlocktime 10. 署名のhash type ここでは SIGHASH_ALLなので0x01000000 24

BIP:143 1. nversion of the transaction (4-byte little endian) 作成したTransactionのversion 0x01000000 4. outpoint (32-byte hash + 4-byte little endian) 署名対象となるUTXOのエンドポイント hash txidの反転 index 6. value of the output spent by this input (8-byte little endian) 署名対象となるUTXOのvalue amount 25

BIP:143 7. nsequence of the input (4-byte little endian) 作成したTransactionのsequence 0xffffffff 9. nlocktime of the transaction (4-byte little endian) 作成したTransactionのlocktime 0x00000000 10. sighash type of the signature (4-byte little endian) HashType 署名タイプ SIGHASH_ALL 0x01000000 26

BIP:143 5. scriptcode of the input (serialized as scripts inside CTxOuts) P2WPKH 0x19 76 a9 14<public key hash*> 88 ac OP_DUP OP_HASH160 <pubkey hash*> OP_EQUALVERIFY OP_CHECKSIG P2WSH 0x<length> <witnessscript> Codeによって例外あり ハッシュ値ではない *hashは HASH160 27

BIP:143 hashprevouts SIGHASH_ALL 2. hashprevouts (32-byte hash) 作成したTransactionが持つ全てのtxinが持つ outpoint hash index 36bytes を連結し その値をHASH256した値 例 txin outpoint script 0 1 sequence ff7f...969f 00000000 <size> <script> eeffffffff ef51...c68a 01000000 <size> <script> ffffffff ff7f...969f 00000000 ef51...c68a 01000000 これをHASH256 28

BIP:143 hashsequence SIGHASH_ALL 3. hashsequence (32-byte hash) 作成したTransactionが持つ全てのtxinが持つ sequence 4bytes を連結し それをHASH256した値 例 txin outpoint script sequence 0 1 ff7f...969f 00000000 ef51...c68a 01000000 eeffffff ffffffff <size> <script> <size> <script> eeffffff ffffffff これをHASH256 29

BIP:143 hashoutputs SIGHASH_ALL 8. hashoutputs (32-byte hash) 作成したTransactionが持つ全てのtxoutが持つ amount+script length+scriptpubkey を連結し それをHASH256した値 例 txout amount value scriptpubkey pk_script 0 1 202c...00 9093...00 1976a9148280...ac7a6d5988ac 1976a9143bde...7faa815988ac 202c...00 1976a9148280...ac7a6d5988ac 9093...00 1976a9143bde...7faa815988ac これをHASH256 30

演習 31

演習 昨日も使ったツールを使います URLを開いてください http://www.bc-2.jp/tools/index.html 32

演習 手順 P2PKH P2WPKHに送信 通常のTransaction形式 P2WPKH P2PKHに送信 SegwitのTransaction形式 33

同じpublic keyで P2PKHとP2WPKH のアドレスに送信 演習 P2PKH P2WPKH OP_DUP OP_HASH160 <pubkey hash> OP_EQUALVERIFY OP_CHECKSIG OP_0 0x14 <pubkey hash> P2WPKH P2PKHに送信 OP_0 0x14 <pubkey hash> OP_DUP OP_HASH160 <pubkey hash> OP_EQUALVERIFY OP_CHECKSIG 34

Transaction 演習 UTXO アウトプット インプット Transaction previous インプットOP_0 _output hash 0x14 previous script length _output index <pubkey hash> value script length signature script pk_script length signature script sequence pk_script sequence OP_DUP OP_HASH160 <pubkey hash> OP_EQUALVERIFY OP_CHECKSIG アウトプット index アウトプット value value pk_script length pk_script length pk_script pk_script hash script_witnesses 35

演習 準備のsendtoaddress に使います scriptpubkey を 署名やアウトプット に使います pubkey を 準備 signature_scriptやwitness $./bitcoin-cli getnewaddress に使います <address> $./bitcoin-cli validateaddress <address> <address info> $./bitcoin-cli dumpprivkey <address> <private key wif> 署名時に使います 結果をコピーしておく 36

演習 準備 $./bitcoin-cli sendtoaddress <address> <value> <txid> $./bitcoin-cli getrawtransaction <txid> 1 ブロックに入るまで待つ txid outputの n index scriptpubkey を次のTransactionに使います 37

Etc にて ①pubkeyをペースト 演習 ②HASHボタン押下 ③0014を先頭に付与 P2WPKHのscriptPubKey作成 OP_0 サイズ 0x14 ② ① ③ 例 0014fbf56a88eeb451c59f58fe6c9ee14ba2c4dcd00e 作成した値をコピー 38

署名値計算 演習 Transaction txid UTXOに設定されている pk_scriptなので OP_DUP OP_HASH160 <pubkey hash> OP_EQUALVERIFY OP_CHECKSIG getrawtransacton でn(index)を確認 feeを引いた値 P2WPKHの scriptpubkey OP_0 0x14 <pubkey hash> 39

演習 ② ① 署名値計算 Signature Signature にて ①private key(wif)をペースト ②Signボタン押下 ③署名値をコピー ③ 40

演習 <signature> <pubkey>生成 Script にて ①署名値 + 空白 + pubkey ②コピー ① ② 41

演習 txid <signature> <public key> getrawtransacton でn(index)確認 feeを引いた値 P2WPKHの scriptpubkey OP_0 0x14 <pubkey hash> 42

演習 vout の scriptpubkey type を見てみよう 確認 $./bitcoin-cli decoderawtransaction <data> 送信 $./bitcoin-cli sendrawtransaction < data> <txid> txid outputの value ブロック化確認 を次のTransactionに使います $./bitcoin-cli getrawtransaction <txid> 1 アウトプットのアドレスがP2WPKHであることを確認 ブロックに入るまで待つ 43

演習 Etc Config off on 44

演習 txid 署名値計算 Transaction OP_DUP OP_HASH160 <pubkey hash> OP_EQUALVERIFY OP_CHECKSIG feeを引いた値 P2PKHの scriptpubkey 45

署名値計算 演習 Signature ① OP_DUP OP_HASH160 <pubkey hash> OP_EQUALVERIFY OP_CHECKSIG ② ③ ④ Signature にて ①Imoportボタン押下 ②txin選択 ③scriptCode設定 ④amount設定 UTXOのvalue 46

署名値計算 演習 Signature ① ② Signature にて ①Private Key設定 ②Signボタン押下 ③署名値コピー ③ 47

演習 空 txid feeを引いた値 P2PKHの scriptpubkey 2回クリック 署名値 public key 48

演習 確認 $./bitcoin-cli decoderawtransaction <data> 送信 $./bitcoin-cli sendrawtransaction <data> <txid> $./bitcoin-cli getrawtransaction <txid> 1 Segwitのトランザクションである事を確認 txinwitnessが設定されている ブロックに入るまで待つ 49

参考資料 BIP: 141 Segregated Witness (Consensus layer) https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki BIP: 143 Transaction Signature Verification for Version 0 Witness Program https://github.com/bitcoin/bips/blob/master/bip-0143.mediawiki BIP: 144 Segregated Witness (Peer Services) https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki BIP: 9 Version bits with timeout and delay https://github.com/bitcoin/bips/blob/master/bip-0009.mediawiki 50

takatoshi@dglab.com 51