SlideShare une entreprise Scribd logo
1  sur  12
Télécharger pour lire hors ligne
前回からの質問
● Windows 環境の Visual Studio 2017 でプロジェクトが開けません
○ インストールすべきコンポーネントの案内が甘かったです。次のコンポーネントが必要です
.NET desktop development
.NET Core 2.0 development tools
詳細は次ページ参照
● dotnet MinChain.dll run config.json したが、何も動作しません
○ おそらく config.json の中身を書き換えていません
1
2
第4回
ブロックチェーンの動作原理
3
MinChain プロジェクトの構造
拡張メソッド群 ツール機能群
便利機能群
本体コード
4
ブロック
トランザクションをまとめる単位。ダイジェスト対象領域には以下を含む
● 前ブロック ID : すべての基本
● 難易度 : 生成スピードの調整、ブロック同士の重み付け
● Nonce : ブロックの ID を調整するための領域
● 日時 : 難易度の調整のため
● Tx Root Hash : トランザクションの差し替え等の改竄防止、
トランザクション多寡によらずダイジェスト対象領域のサイズを一
定にするため
通信時にはトランザクション本体も加える
Block
101
Models.cs
Line 10 – 65
トランザクション
トランザクション
トランザクション
5
トランザクション
● 送金元エントリ (In)
○ TxID / out Index : どのトランザクションでお金をもらったか
○ 電子署名 / 公開鍵 : 送金の承認根拠 (Bitcoin では Pay-to-pubkey-hash 方式の scriptSig に相
当)
● 送金先エントリ (Out)
○ 送金先アドレス : 誰宛に送るのか (Bitcoin では scriptPubKey)
○ 送金量 : いくら送るのか
公開鍵ハッシュが0x11223344... の人に
Tx 0x01234567 で受け取った 100 BTC 送ります
by 0xABCDABCD
取引を記述する単位
すべてがダイジェスト領域
電子署名の対象は、署名領域を除く
Models.cs
Line 68 – 140
6
UTXO (Unspent Transaction Output)
支払いの原資として消費がまだなされていない
トランザクションの Out のことを UTXO という
新しいブロックは UTXO からしか使ってはいけない
Block
Transaction
Transaction
Transaction
Transaction
Block
Transaction
Transaction
Transaction
Transaction
Block
Transaction
Transaction
Transaction
Transaction
Transaction
Transaction
Transaction
Transaction
Transaction
Transaction
Transaction
Runner/Executor.cs
Line 31 – 42,
53 – 187
7
ハッシュ関数
メッセージのダイジェスト (要約) を生成する処理
1. 要約のため
例) 支払先として、受取人の公開鍵を書く代わりに支払先のアドレスを記載
2. 改竄不可能にするため
例) 過去のブロックのダイジェストを生成。次のブロックから参照する
3. ハッシュテーブルのキーとして
例) Tx ID を使ってトランザクションを識別
“hoge” ecb666d7787...
SHA256
Util/Hash.cs
Line 9 – 19
8
公開鍵ハッシュが0x11223344... の人に
Tx 0x01234567 で受け取った 100 BTC 送ります
by 0xABCDABCD
電子署名 (公開鍵暗号方式)
秘密鍵と公開鍵という異なる 2 つの鍵を使って暗号化や電子署名する方法
1. 受取人の公開鍵のハッシュ値がアドレスとして使われる
2. 送金者の秘密鍵でトランザクションに電子署名する
“hoge” 電子署名
秘密鍵 公開鍵
OK !
Util/EccService.cs
Line 10 – 46
楕円曲線暗号 (ECC)
シュが0xABCDABCD... の人に
3456 で受け取った 200 BTC 送ります
by 0xDCBADCBA
公開
Tx 0
9
ネットワーク内で複数のエンティティ (コンピュータ) 同士が、
ルールに従う限り安定的に合意できるようにする仕組み
Bitcoin では Proof of Work (PoW)
という方法が使われている
コンセンサス アルゴリズム
ブロックを作るのを著しく難しくしておけば、
ネットワーク内で十分安定的に浸透する
それでも万が一、同時にブロックができたら、
どちらを主とするか比較ルールを決めておく
Util/Hash.cs
Line 21
10
マイニングとコインベース
ブロック生成処理にはコストがかかる
マイニング
Block ID がブロック難易度で定められた数以下になるよう
に、Nonce の値をインクリメントしながらハッシュする
コインベース
ブロックに含められる最初のトランザクションは、マイニング
にかかる報酬として一定額を任意アドレスに送金できる
Block
101
コインベース
トランザクション
トランザクション
トランザクション
Runner/Mining.cs
11
ブロック ID を 16 進の数値としてみれば、
先頭に 0 が並ぶ数ほど小さい数。確率的に、
ハッシュがどこまで小さい数になるべきか
定める。ブロック生成速度 (ネットワーク
全体のマイニング パワー) に応じて調整する
ブロック難易度
Runner/Executor.cs
Line 86
0.51 0.49
0.48 0.49
0.45 0.41
1.97
1.86
補足: Bitcoin では難易度の調整は 2016 ブロックごとに行われる
<
000001234abcdef...
0000001234abcde...
24
倍
難しい
Hash
12

Contenu connexe

Similaire à [Intermediate 04] ブロックチェーンの動作原理

今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略信之 岩永
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#Yuta Matsumura
 
20170311 Developing & Deploying .NET Core on Linux
20170311 Developing & Deploying .NET Core on Linux20170311 Developing & Deploying .NET Core on Linux
20170311 Developing & Deploying .NET Core on LinuxTakayoshi Tanaka
 
.NETラボ2021年10月 .NETの過去と現在
.NETラボ2021年10月 .NETの過去と現在.NETラボ2021年10月 .NETの過去と現在
.NETラボ2021年10月 .NETの過去と現在TomomitsuKusaba
 
20170527 inside .NET Core on Linux
20170527 inside .NET Core on Linux20170527 inside .NET Core on Linux
20170527 inside .NET Core on LinuxTakayoshi Tanaka
 
Kubernetes1.9でWindowsコンテナーをクラスタ化
Kubernetes1.9でWindowsコンテナーをクラスタ化Kubernetes1.9でWindowsコンテナーをクラスタ化
Kubernetes1.9でWindowsコンテナーをクラスタ化Takashi Kanai
 
.NET Coreとツール類の今
.NET Coreとツール類の今.NET Coreとツール類の今
.NET Coreとツール類の今Yuki Igarashi
 
班ゼミ_Jan_1_21_Multi_Pointers_Network
班ゼミ_Jan_1_21_Multi_Pointers_Network班ゼミ_Jan_1_21_Multi_Pointers_Network
班ゼミ_Jan_1_21_Multi_Pointers_NetworkZhuoBinggang
 
C# でブロックチェーン実装
C# でブロックチェーン実装C# でブロックチェーン実装
C# でブロックチェーン実装Yuto Takei
 
A 2-1 gitwebmatrix 2 から使う node.js on windows azure
A 2-1 gitwebmatrix 2 から使う node.js on windows azureA 2-1 gitwebmatrix 2 から使う node.js on windows azure
A 2-1 gitwebmatrix 2 から使う node.js on windows azureGoAzure
 
.NET Core時代のCI/CD
.NET Core時代のCI/CD.NET Core時代のCI/CD
.NET Core時代のCI/CDYuta Matsumura
 
CLI と BCL
CLI と BCLCLI と BCL
CLI と BCLshozon
 
Hokuriku.net 2013 01-26 node.js
Hokuriku.net 2013 01-26 node.jsHokuriku.net 2013 01-26 node.js
Hokuriku.net 2013 01-26 node.jsTadahiro Ishisaka
 
Daisukei vsug ef
Daisukei vsug efDaisukei vsug ef
Daisukei vsug efvsug_jim
 
マッチングアプリの作り方
マッチングアプリの作り方マッチングアプリの作り方
マッチングアプリの作り方IBM Analytics Japan
 
OSSコンソーシアム 開発基盤部会 2018年度 活動方針・部会紹介
OSSコンソーシアム 開発基盤部会 2018年度 活動方針・部会紹介OSSコンソーシアム 開発基盤部会 2018年度 活動方針・部会紹介
OSSコンソーシアム 開発基盤部会 2018年度 活動方針・部会紹介Daisuke Nishino
 
Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6信之 岩永
 
.NET CoreとVS Codeで作る人狼知能
.NET CoreとVS Codeで作る人狼知能.NET CoreとVS Codeで作る人狼知能
.NET CoreとVS Codeで作る人狼知能takots
 
dotnetconfJP2017_netcore2
dotnetconfJP2017_netcore2dotnetconfJP2017_netcore2
dotnetconfJP2017_netcore2Yusuke Fujiwara
 

Similaire à [Intermediate 04] ブロックチェーンの動作原理 (20)

今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#
 
20170311 Developing & Deploying .NET Core on Linux
20170311 Developing & Deploying .NET Core on Linux20170311 Developing & Deploying .NET Core on Linux
20170311 Developing & Deploying .NET Core on Linux
 
.NETラボ2021年10月 .NETの過去と現在
.NETラボ2021年10月 .NETの過去と現在.NETラボ2021年10月 .NETの過去と現在
.NETラボ2021年10月 .NETの過去と現在
 
20170527 inside .NET Core on Linux
20170527 inside .NET Core on Linux20170527 inside .NET Core on Linux
20170527 inside .NET Core on Linux
 
Kubernetes1.9でWindowsコンテナーをクラスタ化
Kubernetes1.9でWindowsコンテナーをクラスタ化Kubernetes1.9でWindowsコンテナーをクラスタ化
Kubernetes1.9でWindowsコンテナーをクラスタ化
 
.NET Coreとツール類の今
.NET Coreとツール類の今.NET Coreとツール類の今
.NET Coreとツール類の今
 
班ゼミ_Jan_1_21_Multi_Pointers_Network
班ゼミ_Jan_1_21_Multi_Pointers_Network班ゼミ_Jan_1_21_Multi_Pointers_Network
班ゼミ_Jan_1_21_Multi_Pointers_Network
 
C# でブロックチェーン実装
C# でブロックチェーン実装C# でブロックチェーン実装
C# でブロックチェーン実装
 
A 2-1 gitwebmatrix 2 から使う node.js on windows azure
A 2-1 gitwebmatrix 2 から使う node.js on windows azureA 2-1 gitwebmatrix 2 から使う node.js on windows azure
A 2-1 gitwebmatrix 2 から使う node.js on windows azure
 
.NET Core時代のCI/CD
.NET Core時代のCI/CD.NET Core時代のCI/CD
.NET Core時代のCI/CD
 
CLI と BCL
CLI と BCLCLI と BCL
CLI と BCL
 
Hokuriku.net 2013 01-26 node.js
Hokuriku.net 2013 01-26 node.jsHokuriku.net 2013 01-26 node.js
Hokuriku.net 2013 01-26 node.js
 
Daisukei vsug ef
Daisukei vsug efDaisukei vsug ef
Daisukei vsug ef
 
マッチングアプリの作り方
マッチングアプリの作り方マッチングアプリの作り方
マッチングアプリの作り方
 
OSSコンソーシアム 開発基盤部会 2018年度 活動方針・部会紹介
OSSコンソーシアム 開発基盤部会 2018年度 活動方針・部会紹介OSSコンソーシアム 開発基盤部会 2018年度 活動方針・部会紹介
OSSコンソーシアム 開発基盤部会 2018年度 活動方針・部会紹介
 
Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6
 
.NET CoreとVS Codeで作る人狼知能
.NET CoreとVS Codeで作る人狼知能.NET CoreとVS Codeで作る人狼知能
.NET CoreとVS Codeで作る人狼知能
 
Node.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャーNode.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャー
 
dotnetconfJP2017_netcore2
dotnetconfJP2017_netcore2dotnetconfJP2017_netcore2
dotnetconfJP2017_netcore2
 

Plus de Yuto Takei

51% 攻撃の原理とシミュレーション
51% 攻撃の原理とシミュレーション51% 攻撃の原理とシミュレーション
51% 攻撃の原理とシミュレーションYuto Takei
 
これから始めるAzure Kubernetes Service入門
これから始めるAzure Kubernetes Service入門これから始めるAzure Kubernetes Service入門
これから始めるAzure Kubernetes Service入門Yuto Takei
 
ブロックチェーンと仮想通貨 -- 新しいビジネスに挑戦
ブロックチェーンと仮想通貨 -- 新しいビジネスに挑戦ブロックチェーンと仮想通貨 -- 新しいビジネスに挑戦
ブロックチェーンと仮想通貨 -- 新しいビジネスに挑戦Yuto Takei
 
開発チームにおける多様性のススメ
開発チームにおける多様性のススメ開発チームにおける多様性のススメ
開発チームにおける多様性のススメYuto Takei
 
ブロックチェーン神話に迫る - 本当に使える? 使えない?
 ブロックチェーン神話に迫る - 本当に使える? 使えない? ブロックチェーン神話に迫る - 本当に使える? 使えない?
ブロックチェーン神話に迫る - 本当に使える? 使えない?Yuto Takei
 
ブロックチェーン技術者が夢見る未来
ブロックチェーン技術者が夢見る未来ブロックチェーン技術者が夢見る未来
ブロックチェーン技術者が夢見る未来Yuto Takei
 
ブロックチェーン技術の課題と社会応用
ブロックチェーン技術の課題と社会応用ブロックチェーン技術の課題と社会応用
ブロックチェーン技術の課題と社会応用Yuto Takei
 
Windows コンテナを AKS に追加する
Windows コンテナを AKS に追加するWindows コンテナを AKS に追加する
Windows コンテナを AKS に追加するYuto Takei
 
ブロックチェーンの不動産登記への応用に関する検討
ブロックチェーンの不動産登記への応用に関する検討ブロックチェーンの不動産登記への応用に関する検討
ブロックチェーンの不動産登記への応用に関する検討Yuto Takei
 
51% 攻撃の原理とシミュレーション
51% 攻撃の原理とシミュレーション51% 攻撃の原理とシミュレーション
51% 攻撃の原理とシミュレーションYuto Takei
 
[Intermediate 02] シェルの使い方 / Git, GitHub について
[Intermediate 02] シェルの使い方 / Git, GitHub について[Intermediate 02] シェルの使い方 / Git, GitHub について
[Intermediate 02] シェルの使い方 / Git, GitHub についてYuto Takei
 
[Basic 15] ソフトウェアと知的財産権 / ブロックチェーンと計算機科学 / MinChain の紹介
[Basic 15] ソフトウェアと知的財産権 / ブロックチェーンと計算機科学 / MinChain の紹介[Basic 15] ソフトウェアと知的財産権 / ブロックチェーンと計算機科学 / MinChain の紹介
[Basic 15] ソフトウェアと知的財産権 / ブロックチェーンと計算機科学 / MinChain の紹介Yuto Takei
 
[Basic 14] 暗号について / RSA 暗号 / 楕円曲線暗号
[Basic 14] 暗号について / RSA 暗号 / 楕円曲線暗号[Basic 14] 暗号について / RSA 暗号 / 楕円曲線暗号
[Basic 14] 暗号について / RSA 暗号 / 楕円曲線暗号Yuto Takei
 
[Basic 13] 型推論 / 最適化とコード出力
[Basic 13] 型推論 / 最適化とコード出力[Basic 13] 型推論 / 最適化とコード出力
[Basic 13] 型推論 / 最適化とコード出力Yuto Takei
 
[Basic 12] 関数型言語 / 型理論
[Basic 12] 関数型言語 / 型理論[Basic 12] 関数型言語 / 型理論
[Basic 12] 関数型言語 / 型理論Yuto Takei
 
[Basic 11] 文脈自由文法 / 構文解析 / 言語解析プログラミング
[Basic 11] 文脈自由文法 / 構文解析 / 言語解析プログラミング[Basic 11] 文脈自由文法 / 構文解析 / 言語解析プログラミング
[Basic 11] 文脈自由文法 / 構文解析 / 言語解析プログラミングYuto Takei
 
[Basic 10] 形式言語 / 字句解析
[Basic 10] 形式言語 / 字句解析[Basic 10] 形式言語 / 字句解析
[Basic 10] 形式言語 / 字句解析Yuto Takei
 
[Basic 9] 並列処理 / 排他制御
[Basic 9] 並列処理 / 排他制御[Basic 9] 並列処理 / 排他制御
[Basic 9] 並列処理 / 排他制御Yuto Takei
 
[Basic 8] プロセスとスレッド / 入出力 / シェル
[Basic 8] プロセスとスレッド / 入出力 / シェル[Basic 8] プロセスとスレッド / 入出力 / シェル
[Basic 8] プロセスとスレッド / 入出力 / シェルYuto Takei
 
[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理
[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理
[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理Yuto Takei
 

Plus de Yuto Takei (20)

51% 攻撃の原理とシミュレーション
51% 攻撃の原理とシミュレーション51% 攻撃の原理とシミュレーション
51% 攻撃の原理とシミュレーション
 
これから始めるAzure Kubernetes Service入門
これから始めるAzure Kubernetes Service入門これから始めるAzure Kubernetes Service入門
これから始めるAzure Kubernetes Service入門
 
ブロックチェーンと仮想通貨 -- 新しいビジネスに挑戦
ブロックチェーンと仮想通貨 -- 新しいビジネスに挑戦ブロックチェーンと仮想通貨 -- 新しいビジネスに挑戦
ブロックチェーンと仮想通貨 -- 新しいビジネスに挑戦
 
開発チームにおける多様性のススメ
開発チームにおける多様性のススメ開発チームにおける多様性のススメ
開発チームにおける多様性のススメ
 
ブロックチェーン神話に迫る - 本当に使える? 使えない?
 ブロックチェーン神話に迫る - 本当に使える? 使えない? ブロックチェーン神話に迫る - 本当に使える? 使えない?
ブロックチェーン神話に迫る - 本当に使える? 使えない?
 
ブロックチェーン技術者が夢見る未来
ブロックチェーン技術者が夢見る未来ブロックチェーン技術者が夢見る未来
ブロックチェーン技術者が夢見る未来
 
ブロックチェーン技術の課題と社会応用
ブロックチェーン技術の課題と社会応用ブロックチェーン技術の課題と社会応用
ブロックチェーン技術の課題と社会応用
 
Windows コンテナを AKS に追加する
Windows コンテナを AKS に追加するWindows コンテナを AKS に追加する
Windows コンテナを AKS に追加する
 
ブロックチェーンの不動産登記への応用に関する検討
ブロックチェーンの不動産登記への応用に関する検討ブロックチェーンの不動産登記への応用に関する検討
ブロックチェーンの不動産登記への応用に関する検討
 
51% 攻撃の原理とシミュレーション
51% 攻撃の原理とシミュレーション51% 攻撃の原理とシミュレーション
51% 攻撃の原理とシミュレーション
 
[Intermediate 02] シェルの使い方 / Git, GitHub について
[Intermediate 02] シェルの使い方 / Git, GitHub について[Intermediate 02] シェルの使い方 / Git, GitHub について
[Intermediate 02] シェルの使い方 / Git, GitHub について
 
[Basic 15] ソフトウェアと知的財産権 / ブロックチェーンと計算機科学 / MinChain の紹介
[Basic 15] ソフトウェアと知的財産権 / ブロックチェーンと計算機科学 / MinChain の紹介[Basic 15] ソフトウェアと知的財産権 / ブロックチェーンと計算機科学 / MinChain の紹介
[Basic 15] ソフトウェアと知的財産権 / ブロックチェーンと計算機科学 / MinChain の紹介
 
[Basic 14] 暗号について / RSA 暗号 / 楕円曲線暗号
[Basic 14] 暗号について / RSA 暗号 / 楕円曲線暗号[Basic 14] 暗号について / RSA 暗号 / 楕円曲線暗号
[Basic 14] 暗号について / RSA 暗号 / 楕円曲線暗号
 
[Basic 13] 型推論 / 最適化とコード出力
[Basic 13] 型推論 / 最適化とコード出力[Basic 13] 型推論 / 最適化とコード出力
[Basic 13] 型推論 / 最適化とコード出力
 
[Basic 12] 関数型言語 / 型理論
[Basic 12] 関数型言語 / 型理論[Basic 12] 関数型言語 / 型理論
[Basic 12] 関数型言語 / 型理論
 
[Basic 11] 文脈自由文法 / 構文解析 / 言語解析プログラミング
[Basic 11] 文脈自由文法 / 構文解析 / 言語解析プログラミング[Basic 11] 文脈自由文法 / 構文解析 / 言語解析プログラミング
[Basic 11] 文脈自由文法 / 構文解析 / 言語解析プログラミング
 
[Basic 10] 形式言語 / 字句解析
[Basic 10] 形式言語 / 字句解析[Basic 10] 形式言語 / 字句解析
[Basic 10] 形式言語 / 字句解析
 
[Basic 9] 並列処理 / 排他制御
[Basic 9] 並列処理 / 排他制御[Basic 9] 並列処理 / 排他制御
[Basic 9] 並列処理 / 排他制御
 
[Basic 8] プロセスとスレッド / 入出力 / シェル
[Basic 8] プロセスとスレッド / 入出力 / シェル[Basic 8] プロセスとスレッド / 入出力 / シェル
[Basic 8] プロセスとスレッド / 入出力 / シェル
 
[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理
[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理
[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理
 

Dernier

生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料Takayuki Itoh
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2Tokyo Institute of Technology
 
UniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptUniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptyuitoakatsukijp
 
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ssusere0a682
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024koheioishi1
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationYukiTerazawa
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ssusere0a682
 

Dernier (7)

生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
 
UniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptUniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScript
 
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentation
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
 

[Intermediate 04] ブロックチェーンの動作原理

  • 1. 前回からの質問 ● Windows 環境の Visual Studio 2017 でプロジェクトが開けません ○ インストールすべきコンポーネントの案内が甘かったです。次のコンポーネントが必要です .NET desktop development .NET Core 2.0 development tools 詳細は次ページ参照 ● dotnet MinChain.dll run config.json したが、何も動作しません ○ おそらく config.json の中身を書き換えていません 1
  • 2. 2
  • 5. ブロック トランザクションをまとめる単位。ダイジェスト対象領域には以下を含む ● 前ブロック ID : すべての基本 ● 難易度 : 生成スピードの調整、ブロック同士の重み付け ● Nonce : ブロックの ID を調整するための領域 ● 日時 : 難易度の調整のため ● Tx Root Hash : トランザクションの差し替え等の改竄防止、 トランザクション多寡によらずダイジェスト対象領域のサイズを一 定にするため 通信時にはトランザクション本体も加える Block 101 Models.cs Line 10 – 65 トランザクション トランザクション トランザクション 5
  • 6. トランザクション ● 送金元エントリ (In) ○ TxID / out Index : どのトランザクションでお金をもらったか ○ 電子署名 / 公開鍵 : 送金の承認根拠 (Bitcoin では Pay-to-pubkey-hash 方式の scriptSig に相 当) ● 送金先エントリ (Out) ○ 送金先アドレス : 誰宛に送るのか (Bitcoin では scriptPubKey) ○ 送金量 : いくら送るのか 公開鍵ハッシュが0x11223344... の人に Tx 0x01234567 で受け取った 100 BTC 送ります by 0xABCDABCD 取引を記述する単位 すべてがダイジェスト領域 電子署名の対象は、署名領域を除く Models.cs Line 68 – 140 6
  • 7. UTXO (Unspent Transaction Output) 支払いの原資として消費がまだなされていない トランザクションの Out のことを UTXO という 新しいブロックは UTXO からしか使ってはいけない Block Transaction Transaction Transaction Transaction Block Transaction Transaction Transaction Transaction Block Transaction Transaction Transaction Transaction Transaction Transaction Transaction Transaction Transaction Transaction Transaction Runner/Executor.cs Line 31 – 42, 53 – 187 7
  • 8. ハッシュ関数 メッセージのダイジェスト (要約) を生成する処理 1. 要約のため 例) 支払先として、受取人の公開鍵を書く代わりに支払先のアドレスを記載 2. 改竄不可能にするため 例) 過去のブロックのダイジェストを生成。次のブロックから参照する 3. ハッシュテーブルのキーとして 例) Tx ID を使ってトランザクションを識別 “hoge” ecb666d7787... SHA256 Util/Hash.cs Line 9 – 19 8
  • 9. 公開鍵ハッシュが0x11223344... の人に Tx 0x01234567 で受け取った 100 BTC 送ります by 0xABCDABCD 電子署名 (公開鍵暗号方式) 秘密鍵と公開鍵という異なる 2 つの鍵を使って暗号化や電子署名する方法 1. 受取人の公開鍵のハッシュ値がアドレスとして使われる 2. 送金者の秘密鍵でトランザクションに電子署名する “hoge” 電子署名 秘密鍵 公開鍵 OK ! Util/EccService.cs Line 10 – 46 楕円曲線暗号 (ECC) シュが0xABCDABCD... の人に 3456 で受け取った 200 BTC 送ります by 0xDCBADCBA 公開 Tx 0 9
  • 10. ネットワーク内で複数のエンティティ (コンピュータ) 同士が、 ルールに従う限り安定的に合意できるようにする仕組み Bitcoin では Proof of Work (PoW) という方法が使われている コンセンサス アルゴリズム ブロックを作るのを著しく難しくしておけば、 ネットワーク内で十分安定的に浸透する それでも万が一、同時にブロックができたら、 どちらを主とするか比較ルールを決めておく Util/Hash.cs Line 21 10
  • 11. マイニングとコインベース ブロック生成処理にはコストがかかる マイニング Block ID がブロック難易度で定められた数以下になるよう に、Nonce の値をインクリメントしながらハッシュする コインベース ブロックに含められる最初のトランザクションは、マイニング にかかる報酬として一定額を任意アドレスに送金できる Block 101 コインベース トランザクション トランザクション トランザクション Runner/Mining.cs 11
  • 12. ブロック ID を 16 進の数値としてみれば、 先頭に 0 が並ぶ数ほど小さい数。確率的に、 ハッシュがどこまで小さい数になるべきか 定める。ブロック生成速度 (ネットワーク 全体のマイニング パワー) に応じて調整する ブロック難易度 Runner/Executor.cs Line 86 0.51 0.49 0.48 0.49 0.45 0.41 1.97 1.86 補足: Bitcoin では難易度の調整は 2016 ブロックごとに行われる < 000001234abcdef... 0000001234abcde... 24 倍 難しい Hash 12