Upgrade to Pro — share decks privately, control downloads, hide ads and more …

イーサリアムの技術 / Ethereum Technology

Kenji Saito
February 06, 2019

イーサリアムの技術 / Ethereum Technology

2019年2月6日(水)、ブロックチェーンハブ主催で開催されたブロックチェーンアカデミー「イーサリアムの技術」にて使用したスライドです。

Kenji Saito

February 06, 2019
Tweet

More Decks by Kenji Saito

Other Decks in Technology

Transcript

  1. ΠʔαϦΞϜͷٕज़ ϒϩοΫνΣʔϯج൫ٕज़ʲϒϩοΫνΣʔϯͷԠ༻ج൫ʳ ϒϩοΫνΣʔϯϋϒ CSO / ܚጯٛक़େֶ SFC ݚڀॴ ্੮ॴһ ੪౻

    ݡ࣐ ks91@blockchainhub.co.jp ΠʔαϦΞϜͷٕज़ — ϒϩοΫνΣʔϯج൫ٕज़ — 2019-02-06 – p.1/28
  2. ؆୯ͳࣗݾ঺հ ੪౻ ݡ࣐ (͍͞ͱ͏ ͚Μ͡) ܚጯٛक़େֶ SFC ݚڀॴ ্੮ॴһɾ؀ڥ৘ใֶ෦ ߨࢣ

    (ඇৗۈ) גࣜձࣾϒϩοΫνΣʔϯϋϒ CSO (Chief Science Officer) Ұൠࣾஂ๏ਓϏϤϯυϒϩοΫνΣʔϯ ୅දཧࣄ Ұൠࣾஂ๏ਓΞΧσϛʔΩϟϯϓ ୅දཧࣄ ܦྺ 1993 ೥ɺίʔωϧେֶΑΓ޻ֶम࢜߸औಘ (ίϯϐϡʔλαΠΤϯε) 2006 ೥ɺܚጯٛक़େֶΑΓσδλϧ௨՟ͷݚڀͰത࢜߸औಘ (੓ࡦɾϝσΟΞ) ܚጯٛक़େֶ େֶӃ ੓ࡦɾϝσΟΞݚڀՊ΍ SFC ݚڀॴʹͯ 18 ೥Ҏ্ʹΘͨΓ P2P (Peer-to-Peer) ͓Αͼσδλϧ௨՟౳ͷݚڀʹैࣄ 2011 ೥ՆΑΓ෱ౡͷ͜Ͳ΋ͨͪͷͨΊͷʮΞΧσϛʔΩϟϯϓʯΛ஥ؒΒͱ։࠵ ࡢՆ͸ SFC ʹͯ ΞΧσϛʔΩϟϯϓ 2018 ՆʮΦοέʔάʔάϧɺ॓୊΍ͬͱ͍ͯʂʯΛ࣮ࢪ ࠓि຤ɺΞΧσϛʔΩϟϯϓ 2019 ౙʮԵঁͷͨΊͷΦʔτϝʔγϣϯ ∼ ΧϫΠΠ͸ࣗಈԽͰ͖ΔʂʯΛ༧ఆ → ࢲͷ಄ͷதͰ͸ͭͳ͕͍ͬͯ·͢ (͜Ε͔ΒͷࣾձͷσβΠϯ͸͜Ͳ΋ͨͪͱҰॹʹ) ΠʔαϦΞϜͷٕज़ — ϒϩοΫνΣʔϯج൫ٕज़ — 2019-02-06 – p.2/28
  3. ΠʔαϦΞϜͱ͸ʁ Vitalik Buterin, “Ethereum White Paper: A NEXT GENERATION SMART

    CONTRACT & DECENTRALIZED APPLICATION PLATFORM” ϒϩοΫνΣʔϯٕज़ΛԠ༻ ฏۉϒϩοΫִؒ໿ 15 ඵΛ໨ඪ ͦ͜ʹϓϩάϥϛϯάݴޠΛࡌͤΔ νϡʔϦϯά׬શ ෼ࢄΞϓϦέʔγϣϯͷͨΊͷج൫ ͨͩ͠ػೳ෼ࢄ͢ΔΘ͚Ͱ͸ͳ͍ͷͰɺDApps ͱݺΜͰ͠·ͬͨํ͕ଥ౰͔΋ ݱࡏͷۚ༥ɾ՟ฎܦࡁγεςϜΛ࣌୅஗Εʹ͠Α͏ͱ͢Δҙਤ͕ݟ͑Δ εϚʔτίϯτϥΫτ ͱ͸ͦ΋ͦ΋ͦ͏͍͏΋ͷ σδλϧࢿ࢈ͷҠస΍ঢ়ଶભҠΛࣗಈԽ͢Δ ৄ͘͠͸ʮεϚʔτίϯτϥΫτʯͷճͰ ΠʔαϦΞϜͷٕज़ — ϒϩοΫνΣʔϯج൫ٕज़ — 2019-02-06 – p.5/28
  4. ༻ޠମܥ Ether Ethereum ʹ͓͚Δ௨՟ ֎෦ΞΫλʔ σδλϧॺ໊Ͱ͖Δ࣮ࡏͰɺΞΧ΢ϯτΛ΋ͭ EOA : Externally-Owned Account

    ࣗ཯ΦϒδΣΫτ γεςϜ಺Ͱࣗ཯ಈ࡞͠ɺΞΧ΢ϯτΛ΋ͭ ͱ͸ݴ͏΋ͷͷɺϝοηʔδΛૹΒͳ͍ͱಈ͔ͳ͍ ΞΧ΢ϯτ Ether ࢒ߴΛ΋ͪɺετϨʔδ΍ EVM ίʔυΛ΋ͯΔ EVM ίʔυ εϚʔτίϯτϥΫτͷϓϩάϥϜ ΠʔαϦΞϜͷٕज़ — ϒϩοΫνΣʔϯج൫ٕज़ — 2019-02-06 – p.7/28
  5. ΠʔαϦΞϜͷόʔδϣϯ Frontier (2015) Homestead (2016) Metropolis Byzantium (2017) ← ࠓ·ͩίί

    zkSNARKs (θϩ஌ࣝূ໌) → Zcash on Ethereum (ZoE) ϒϩοΫใुͷݮগԽ Constantinople (2019) Serenity ΠʔαϦΞϜͷٕज़ — ϒϩοΫνΣʔϯج൫ٕज़ — 2019-02-06 – p.9/28
  6. ϒϩοΫνΣʔϯͷٕज़తͳ՝୊ͷ੔ཧ ඇ࣮࣌ؒੑ (֬཰తಈ࡞) ൿಗͷࠔ೉ੑ (ສਓ΁ͷݕূՄೳੑͷ୲อ) ϫϯωε (෼ࢄ vs. ෳ੡) εέʔϥϏϦςΟ͕ͳ͍

    (શࢀՃऀʹෳ੡͞ΕΔͳΒεέʔϧ͠ͳ͍) ਐԽͷΨόφϯε͕ࠔ೉ (શһ͕ҰؙͱͳΔඞཁ͕͋ΔͳΒมΘΕͳ͍) ΠϯηϯςΟϒෆ੔߹ੑ ωΠςΟϒ௨՟ͷՁ஋Ͱࢧ͑ΒΕ͍ͯΔ (๫མ͢Δͱ͢΂ͯͷԠ༻͕ࢭ·Δ) ⇒ θϩϕʔεͰઃܭ͠௚ͤ͹ղ͚Δ ࣮ࡍʹਐߦதͰ͢ (ྫ : BBc-1) ଟ͘ͷ DLT ͸θϩϕʔεͰߟ͍͑ͯͳ͍ͱ͜Ζ͕໰୊ ྫ : ࡞ۀূ໌ͷ෇͔ͳ͍ϋογϡνΣʔϯ͸վ͟Μ͠์୊ ྫ : ৽ฉϞσϧͰɺۀքࢴ΍ࣾ಺ใʹࡌͤΔΑ͏ͳ͜ͱΛͯ͠΋ଘࡏূ໌ʹͳΒͳ͍ ΠʔαϦΞϜͷٕज़ — ϒϩοΫνΣʔϯج൫ٕज़ — 2019-02-06 – p.11/28
  7. ΠʔαϦΞϜ͸Ͳ͏औΓ૊Ή͔ ඇ࣮࣌ؒੑ (֬཰తಈ࡞) ⇒ τϥϯβΫγϣϯΛϑΝΠφϥΠζ͢Δ࢓૊Έ΁ (Casper) ൿಗͷࠔ೉ੑ (ສਓ΁ͷݕূՄೳੑͷ୲อ) ⇒ ZoE

    (Zcash on Ethereum) ϫϯωε (෼ࢄ vs. ෳ੡) εέʔϥϏϦςΟ͕ͳ͍ (શࢀՃऀʹෳ੡͞ΕΔͳΒεέʔϧ͠ͳ͍) ⇒ γϟʔσΟϯάɺPlasma ਐԽͷΨόφϯε͕ࠔ೉ (શһ͕ҰؙͱͳΔඞཁ͕͋ΔͳΒมΘΕͳ͍) ⇒ ༏͍͠ಠࡋऀ (ۤস) (Benevolent Dictator For Life (BDFL)) ΠϯηϯςΟϒෆ੔߹ੑ ωΠςΟϒ௨՟ͷՁ஋Ͱࢧ͑ΒΕ͍ͯΔ (๫མ͢Δͱ͢΂ͯͷԠ༻͕ࢭ·Δ) ⇒ ΞϓϦΛ࣮ߦ͍ͨ͠ਓʑ͕ങ͍ࢧ͑Δʁ ΠʔαϦΞϜͷٕज़ — ϒϩοΫνΣʔϯج൫ٕज़ — 2019-02-06 – p.12/28
  8. ΠʔαϦΞϜͷٕज़ͷಛ௃ Proof of Work + φΧϞτίϯηϯαε ͔Β ચ࿅͞Εͨ Proof of

    Stake + ߹੍ٞ ΁ ·ͣ͸ݱঢ়ͷઆ໌͔Β ΠʔαϦΞϜͷٕज़ — ϒϩοΫνΣʔϯج൫ٕज़ — 2019-02-06 – p.13/28
  9. ҉߸ֶతϋογϡؔ਺ ϏοτίΠϯ SHA-256 × SHA-256 SHA-256 × RIPEMD-160 ೋॏʹద༻͢Δ͜ͱͷҙຯ (1

    ஈ໨͕িಥͨ͠Βʁ) . . . ͳ͘Ͷʁ ઃܭҙਤͱҟͳΔ༻్ʹ༻͍Δ͜ͱʹΑΔ໰୊ ઃܭҙਤͱͯ͠͸ܭࢉίετ͕খ͘͞ͳΔΑ͏ʹ࡞ΒΕ͍ͯΔ ϥΠτίΠϯ scrypt (ϝϞϦΛ;ΜͩΜʹ࢖͏) ΠʔαϦΞϜ Ethash (Dagger-Hashimoto ͷਐԽܗ) DAG : Directed Acyclic Graph (༗޲ඇ८ճάϥϑ) https://github.com/ethereum/wiki/wiki/Ethash ΠʔαϦΞϜͷٕज़ — ϒϩοΫνΣʔϯج൫ٕज़ — 2019-02-06 – p.14/28
  10. GHOST (Greedy Heaviest Observed Subtree) ฏۉϒϩοΫִؒΛ୹͘ઃఆ͢Δͱ ແବ଍Λ౿ΉϚΠφʔ͕૿͑Δ ແବ଍Λ౿·ͳ͍ϚΠφʔ͕ूத͠΍͍͢ ⇒ GHOST

    ʹΑΓղܾΛ໨ࢦ͢ ௚ܥͷखલͷϒϩοΫ (਌) ͚ͩͰͳ͘ɺ೿ੜͨ͠ΦʔϑΝϯͰ͋Δ “uncles” Λ΋ࢀর্ͨ͠Ͱɺproof of work ͷίετΛܭࢉ͠ɺ࠷΋ॏ͍ίετ͕ ͔͔ͬͨ΋ͷΛશһ͕બ୒͢Δ (มܗͨ͠φΧϞτίϯηϯαε) ߋʹɺuncle ΋ϚΠχϯάใुΛड͚औΔ ΠʔαϦΞϜͰ͸ uncles ͷࢀরΛ 7 ஈ֊લ·Ͱʹ੍ݶͨ͠ GHOST Λ࠾༻ ΠʔαϦΞϜͷٕज़ — ϒϩοΫνΣʔϯج൫ٕज़ — 2019-02-06 – p.15/28
  11. มܗϚʔΫϧɾύτϦγΞ໦ IUUQTFOXJLJQFEJBPSHXJLJ3BEJY@USFF ύτϦγΞ໦ͷྫ key ͸೚ҙͷόΠτྻͰ΋ OK PATRICIA (Practical Algorithm To

    Retrieve Information Coded In Alphanumeric) Trie (τϥΠ໦) (key, value) Λදݱ͠ɺݕࡧͰ͖Δ τϥΠ໦ͷઅΛࢀর͢ΔͨΊʹμΠδΣετ͕࢖ΘΕΔ ௖఺ΛϚʔΫϧϧʔτͱͯ͠ѻ͑Δ ૬ҧɾվ͟Μ͸ݕग़͞ΕΔ ֤ཁૉ͸ RLP (recursive length prefix encoding) ʹΑΓ ූ߸Խ͞ΕΔ ΠʔαϦΞϜʹ͓͚Δঢ়ଶɺετϨʔδɺτϥϯβΫγϣϯ ͷϦετ౳ͷදݱʹ࢖ΘΕΔ ΠʔαϦΞϜͷٕज़ — ϒϩοΫνΣʔϯج൫ٕज़ — 2019-02-06 – p.16/28
  12. Proof of Stake ͷҰൠࣜ (ݹ͍ߟ͑ํ) Hn (PD + id +

    t + . . .) ≤ 2n × balance d Hn : n Ϗοτ஋Λग़ྗ͢Δ҉߸ֶతϋογϡؔ਺ (ex. SHA-256 (n = 256)) PD : ௚લͷϒϩοΫͷμΠδΣετ id : ΞΧ΢ϯτͷࣝผࢠ (ex. ެ։ݤͷμΠδΣετ) t : ࣌ࠁ (ex. UNIX ࣌ࠁ (ඵ)) balance : ౰֘ΞΧ΢ϯτͷ࢒ߴ d : ೉қ౓ (ex. ίΠϯͷ૯ྔ) μΠδΣετΛ༻͍Δ PoW ͷܗࣜͰද͞ΕΔ ΠʔαϦΞϜͷٕज़ — ϒϩοΫνΣʔϯج൫ٕज़ — 2019-02-06 – p.19/28
  13. Proof of Stake ͷ 3ͭͷ໰୊ 1. ίΠϯͷཷΊࠐΈ 2. “Nothing at

    Stake” ୹ظత໰୊ ௕ظత໰୊ 3. ௿ίετ 51% ߈ܸ ΠʔαϦΞϜͷٕज़ — ϒϩοΫνΣʔϯج൫ٕज़ — 2019-02-06 – p.20/28
  14. Casper : ΠʔαϦΞϜͰͷऔΓ૊Έ Nothing at Stake ໰୊΁ͷରࡦ ࠾༻͞Εͳ͔ͬͨνΣʔϯͰϒϩοΫΛೝΊͨݕূऀΛേ͢Δ (Slasher) σϙδοτΛ෷ཱͬͯީิ͢ΔݕূऀͨͪʹΑΔ౤ථํࣜ

    100 ϒϩοΫߴຖʹʮνΣ οΫϙΠϯτʯΛઃ͚ɺσϙδοτֹʹԠͨ͡ॏΈ ෇͖ͷ౤ථͰਖ਼౰ͳνΣʔϯΛܾΊΔ ࣍ͷνΣ οΫϙΠϯτ͕ਖ਼౰Խ͞ΕΔͱɺखલͷνΣ οΫϙΠϯτ͸ʮ֬ఆʯ ͱͳΔ ⇒ Ͳ͜·ͰຽओతͰ͍ΒΕΔ͔ʁ ωοτϫʔΫͷ෼அ͕ى͖͍ͯͳ͍͜ͱ͕લఏʹࢥ͑Δ ΠʔαϦΞϜͷٕज़ — ϒϩοΫνΣʔϯج൫ٕज़ — 2019-02-06 – p.25/28