万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

  • ・資産運用おすすめ
    10万円は1000円くらい利益
    • ・寄付お願いします
      YENTEN:YYzNPzdsZWqr5THWAdMrKDj7GT8ietDc2W
      BitZenny:ZfpUbVya8MWQkjjGJMjA7P9pPkqaLnwPWH
      c0ban:8KG95GXdEquNpPW8xJAJf7nn5kbimQ5wj1
      Skycoin:KMqcn7x8REwwzMHPi9fV9fbNwdofYAWKRo

    イーサリアムを支える技術

    イーサリアムを支える技術

    https://sfc-academy.connpass.com/event/107096/

    Bit Arena

    https://bitarena.app/

    DeskLive

    • クライアントサーバー

    • P2P

    Ethereum

    Winny, SkypeP2P

    ビタリックが最初に作った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

    10*10 ↓ バイトコード 0x91E8... ↓ EVM ・・・イーサリアム仮想マシン ↓ 100

    トランザクションに入れて、ネットワーク上に流す

    この中に入れて実行する

    イーサリアム仮想マシン マイナーが実行する

    一方向性関数

    ** ネットや書籍であまり言及されていない、が重要

    • 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 順番も覚えていないといけない 数字が変わってしまう

    • 最も安全な秘密鍵の生成方法

    • 秘密鍵をなくしたら誰も引き出せない口座の出来上がり

    • 偶然二人の秘密鍵が被ったら二人共口座資金を自由に使用できる

    P2P

    ** 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などでなんでもできる

    Bitcoinチューリング完全ではない

    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