イーサリアムを支える技術
https://sfc-academy.connpass.com/event/107096/
Bit Arena
DeskLive
クライアントサーバー
Ethereum
巨大なファイル
ビタリックが最初に作った1つのファイル。 世界中同時
EHT・・・単位 ソースコードも入っている なんでも入る
[TX1] A: a + 50ETH b - 50ETH [TX2] B: a - 30ETH b + 30ETH
TX・・トランザクション
全員のファイルを書き換える
PCで横流し
書き換える権限を持っているPC・・・マイナー
ブロック 自分の好き勝手作ってもいい?->違う
自分の手元のファイルを更新して投げる 全世界に行き渡る
検証してから横流しする
ID・・・自分で好き勝手 ID < ある数値 (例えば10000)
ハッシュ関数
暗号通貨の至る所で使われている。 ブロックID
TXs -> | ハッシュ関数 | ナンス(自分で決めた) -> | | -> 10250 (1万超えてる) 1, 2, 3, 4/... | | 20730 前のブロックID -> | | 1000000 8700 [入力] [出力]
全ての項目を全てパスしたら 横流ししていく
SolidityとEVM
[ジェネシスブロック]
[ ]
[ ]
[ ] -> チェーン
[ ブロック ]
HelloWorld
ブロック 各セクションに分かれている 最初の前のIDがないビタリックが最初に作った 一番最初のIDはジェネシスブロック
Tx | From | | To | | Data HelloWorld |
Solidiy
他にも4つくらいある 他にもメジャーなのがある
Solidity
トランザクションに入れて、ネットワーク上に流す
この中に入れて実行する
一方向性関数
** ネットや書籍であまり言及されていない、が重要
- Trapdoor関数
ビットコインは暗号化されていると良く言われるが -> 暗号化されていない, 誰でも読める ではなぜ暗号通過?
5 -------| | -> 10000 33 -------| | -> 66 11 -------| | -> 66 Input Trapdoor f Out
Trapdoor function Trapdoor --- 忍者の使う回転扉みたいなの、いっぺん行くと戻って来れない
秘密鍵から公開鍵は作れるけど、公開鍵から秘密鍵は逆算できない
- ハッシュ関数 0~1000 (この範囲に抑えることができる) 1000 -------| | -> 100 5000 -------| | -> 500 1000 -------| | -> 1000 Input Hash f Out (名前:Murmur)
逆を計算できる
※暗号学的ハッシュ関数とは違うので注意
暗号学的ハッシュ関数
Crypto (SHAなど) 暗号学的ハッシュ関数 || ハッシュ関数 + Trapdoor
0~100000
1000 -| |-> 23879 5000 -| |-> 23879 10000 -| |-> 37698
アカウントの作成
keccccc256
楕円曲線電子署名
楕円曲線暗号
y2 = x3 + 7
結果しか知らないよ。
P + Q = R 2P = P+P = Q
gethなど
Gの座標
元の点はどこだったのか思い出せない
秘密鍵, 公開鍵, アドレス
知られると全財産あげるのと同じ 256bitが標準 C言語は16bit, 32bitなのでそのまま表せない
Gの接線 Gはみんなで共有しているポイント
2G->3G->4G->5G ミラーリング
5G...Qと表す 公開鍵
Ethereumはちょうど20桁の16進数 0x ......... 20桁
d ---> Q ---ハッシュ関数-> アドレス
d -|-> Q -|-> -|-> アドレス Ecc Keccak256 下20桁切る
Keccak256---良く出てくるハッシュ関数
日本語の情報だと曲線だが、
ビットコインやイーサリアムは 整数だけを切り抜いて 素数の数で折り返す
アカウントの生成
アカウント生成=秘密鍵生成
ノードとは無関係。所有者や住所は特定されない。
/ o oC o
Tokyo o----o --- o A Tx B C a b c
A->CではBから来たのか AさんがBに横流ししたのかわからない
Metamask
ウォレット=アカウントの酒豪
- ウォレットの種類(非決定性、決定性、階層型決定性)
非決定性ウォレット 33 100 500 一つでも忘れたら終わり 決定性 65-> 2018 -> 5750 -> 367 シード値さえ分かれば復元可能
** 階層的決定性
シード 65 ----> 2018 ---- ----> 5750---- ----> 367----
- シードとニーモニック
Metamaskのニーモニック 人には教えてはいけない
12英単語 coin streak jump jump 順番も覚えていないといけない 数字が変わってしまう
** Devp2p
プロトコル データ構造の約束事
port30303
Node Discovery (UDP) ノードを探す(他にイーサリアム使ってる人いませんか?)
Ping Pong Find Node Neightbors
自分以外の15ノードと繋がっている 自分で調整が可能
フルノード いつでもマイニングスタート
Simplified Payment Verification
SPV Full
マイナー・・イーサリアムでは一番重要な役割
巨大なステートマシン
A → B ↓ C -> D ↘︎
巨大なファイル
100アカウントくらいに大金が振り込まれた
A - EVM -> B -> C ↑ ↑ Tx Tx2
Solidity ↓ バイトコード ↓ EVM この時はバイトコード1つ1つに翻訳
Soloidityはチューリング完全 if forなどでなんでもできる
Gas SSTORE 20000 高い命令 ADD + 3 MUL * 3 SLOAD 5000 ブロックチェーン から読む命令
24006gas x 1000 GasPrice = 250060000 wei
自分のコードがどれくらいかかるかわからない
トランザクション詳細 ブロック/トランザクション検証 ガスによる「表面的な」 チューリング完全
途中まで実行しても足りなかったらロールバックされてお金だけ取られ
- Ethash
コンセンサスアルゴリズム Ethash
PoW------Proof Of Work
Tx -> ナンス -> 前ハッシュ ->
ASICというハードウェア マイニングが高速になる
EthereumでのPoWではASICを無意味にできる
メモリ帯域制限
[CPU] <--- [メモリ] <--- [HD] ハッシュ Page DAG 2GB
イーサリアムではメモリ輸送で負荷がかかるように変えた Ethereumにはブロックナンバーが進むたびに必要なメモリ領域が増えるDAG Epochという仕組みがあるので、 ...
Page 64回
parentHash
ommersHash マイニングに負けた人 手数料が行くように beneficiary stateRoot transactionsRoot receiptsRoot logsBloom difficulty
- 内部データ構造
ステートルート
マークルパトリシア木
JSON RPC (Remote Procedire Call) RPC...離れたコンピュータに実行できる(昔からある)
Geth...Metamaskが持っているNode