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

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

Kenji Saito
September 18, 2019

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

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

Kenji Saito

September 18, 2019
Tweet

More Decks by Kenji Saito

Other Decks in Technology

Transcript

  1. ؆୯ͳࣗݾ঺հ ੪౻ ݡ࣐ (͍͞ͱ͏ ͚Μ͡) ૣҴాେֶ େֶӃܦӦ؅ཧݚڀՊ ڭत ܚጯٛक़େֶ SFC

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

    SMART CONTRACT & DECENTRALIZED APPLICATION PLATFORM” (Dec. 2013∼) ϒϩοΫνΣʔϯٕज़ΛԠ༻ ฏۉϒϩοΫִؒ໿ 15 ඵΛ໨ඪ ͦ͜ʹϓϩάϥϛϯάݴޠ (= νϡʔϦϯά׬શ) ΛࡌͤΔͱ͍͏ΞΠσΞ νϡʔϦϯά׬શ = ສೳνϡʔϦϯάϚγϯΛΤϛϡϨʔτͰ͖Δ = ϥϯμϜΞΫηεͰ͖Δ (ແݶͷ) ϝϞϦͱ CPU ͔ΒͳΔܭࢉػΛΤϛϡϨʔτͰ͖Δ ⇒ ࣮ࡍʹ͸ɺॻ͚ΔछྨͷϓϩάϥϜʹ੍ݶ͕͋Δ ʮ෼ࢄΞϓϦέʔγϣϯʯͷͨΊͷج൫ ͨͩ͠ػೳ෼ࢄ͢ΔΘ͚Ͱ͸ͳ͘ɺෳ੡ͳͷͰɺ ʮDAppsʯͱݺΜͰ͠·ͬͨํ͕ଥ౰ DApps = ୤தԝ / தԝࣗಈԽ ΞϓϦ ΠʔαϦΞϜͷٕज़ — ϒϩοΫνΣʔϯج൫ٕज़ — 2019-09-18 – p.5/30
  3. ༻ޠମܥ Ether Ethereum ʹ͓͚Δ௨՟ ֎෦ΞΫλʔ σδλϧॺ໊Ͱ͖Δ࣮ࡏͰɺΞΧ΢ϯτΛ΋ͭ EOA : Externally-Owned Account

    ࣗ཯ΦϒδΣΫτ (಺෦ΞΫλʔ) γεςϜ಺Ͱࣗ཯ಈ࡞͠ɺΞΧ΢ϯτΛ΋ͭ ͱ͸ݴ͏΋ͷͷɺϝοηʔδΛૹΒͳ͍ͱಈ͔ͳ͍ (ͦͯ͠ϚΠφʔ͕ಈ͔͢) ΞΧ΢ϯτ Ether ࢒ߴΛ΋ͪɺετϨʔδ (ঢ়ଶ) ΍ EVM ίʔυΛ΋ͯΔ EVM ίʔυ εϚʔτίϯτϥΫτͷϓϩάϥϜ εϚʔτίϯτϥΫτ = Ethereum ʹ͓͚ΔԠ༻ϓϩάϥϜ ̸ = εϚʔτͳܖ໿ ϒϩοΫνΣʔϯʹॻ͖ࠐ·ΕΔ͜ͱͰਅਖ਼ੑ͕୲อ͞ΕΔ ΠʔαϦΞϜͷٕज़ — ϒϩοΫνΣʔϯج൫ٕज़ — 2019-09-18 – p.7/30
  4. EVM : Ethereum Virtual Machine ࣗ཯ΦϒδΣΫτ͕ϝοηʔδΛड͚Δͱىಈ͠ɺίϯτϥΫτΛ࣮ߦɺঢ়ଶΛมԽͤ͞Δ ࣮ߦεςοϓຖʹ Gas ͷڙڅ͕ඞཁ (ແݶϧʔϓΛආ͚ɺ

    ʮEVM ͷ࣮ߦऀ = ϚΠφʔʯ΁ͷख਺ྉͱͳΔ) ΠʔαϦΞϜͷٕज़ — ϒϩοΫνΣʔϯج൫ٕज़ — 2019-09-18 – p.8/30
  5. Ethereum ͷόʔδϣϯ Frontier (2015) Homestead (2016) Metropolis Byzantium (2017) zkSNARKs

    (θϩ஌ࣝূ໌) → Zcash on Ethereum (ZoE) ౳ Constantinople + St.Petersburg (2019) ← ࠓίί ޮ཰Խɺঢ়ଶνϟωϧ (for 2nd Layer)ɺProof of Stake ʹ޲͚ͨௐ੔ ౳ Serenity ΠʔαϦΞϜͷٕज़ — ϒϩοΫνΣʔϯج൫ٕज़ — 2019-09-18 – p.9/30
  6. ϒϩοΫνΣʔϯͷٕज़తͳ՝୊ͷ੔ཧ (࠶ܝ) ඇ࣮࣌ؒੑ (֬཰తಈ࡞) ൿಗͷࠔ೉ੑ (ສਓ΁ͷݕূՄೳੑͷ୲อ) ϫϯωε (෼ࢄ vs. ෳ੡)

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

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

    of Stake + ߹੍ٞ ΁ ·ͣ͸ݱঢ়ͷઆ໌͔Β ΠʔαϦΞϜͷٕज़ — ϒϩοΫνΣʔϯج൫ٕज़ — 2019-09-18 – p.13/30
  9. ҉߸ֶతϋογϡؔ਺ ϏοτίΠϯ SHA-256 × SHA-256 (ϒϩοΫ/TX μΠδΣετ) SHA-256 × RIPEMD-160

    (ެ։ݤμΠδΣετ = ΞυϨεͷݩσʔλ) ೋॏʹద༻͢Δ͜ͱͷҙຯ (1 ஈ໨͕িಥͨ͠Βʁ) . . . ҙຯ͸ແ͍ ઃܭҙਤͱҟͳΔ༻్ʹ༻͍Δ͜ͱʹΑΔ໰୊ ઃܭҙਤͱͯ͠͸ܭࢉίετ͕খ͘͞ͳΔΑ͏ʹ࡞ΒΕ͍ͯΔ ϥΠτίΠϯ scrypt (ϝϞϦΛ;ΜͩΜʹ࢖͏) Ethereum Ethash (Dagger-Hashimoto ͷਐԽܗ) (Proof of Work) DAG : Directed Acyclic Graph (༗޲ඇ८ճάϥϑ) https://github.com/ethereum/wiki/wiki/Ethash Keccak-256 (≈SHA-3) (μΠδΣετ) (Ethash Ͱ΋෦඼ͱͯ͠༻͍ΒΕΔ) ΠʔαϦΞϜͷٕज़ — ϒϩοΫνΣʔϯج൫ٕज़ — 2019-09-18 – p.14/30
  10. GHOST (Greedy Heaviest Observed Subtree) ฏۉϒϩοΫִؒΛ୹͘ઃఆ͢Δͱ ແବ଍Λ౿ΉϚΠφʔ͕૿͑Δ ແବ଍Λ౿·ͳ͍ϚΠφʔ͕ूத͠΍͍͢ ⇒ GHOST

    ʹΑΓղܾΛ໨ࢦ͢ ௚ܥͷखલͷϒϩοΫ (਌) ͚ͩͰͳ͘ɺ೿ੜͨ͠ΦʔϑΝϯͰ͋Δ “uncles” Λ΋ࢀর্ͨ͠Ͱɺproof of work ͷίετΛܭࢉ͠ɺ࠷΋ॏ͍ίετ͕ ͔͔ͬͨ΋ͷΛશһ͕બ୒͢Δ (มܗͨ͠φΧϞτɾίϯηϯαε) ߋʹɺuncle ΋ϚΠχϯάใुΛड͚औΔ Ethereum Ͱ͸ uncles ͷࢀরΛ 7 ஈ֊લ·Ͱʹ੍ݶͨ͠ GHOST Λ࠾༻ ࠷ۙͰ͸ uncle ͸ gender-neutral ͳޠͰ͋Δ ommer Ͱஔ͖׵͑ΒΕͭͭ͋Δ ΠʔαϦΞϜͷٕज़ — ϒϩοΫνΣʔϯج൫ٕज़ — 2019-09-18 – p.15/30
  11. Merkle ໦ (ϏοτίΠϯͷ৔߹) ͨͩ͠ Digest = SHA-256 × SHA-256 Ͱ͋ΓɺϒϩοΫϔομʹ͸

    Merkle root ͕ຒΊࠐ·ΕΔ TX ͷଘࡏ͸ɺͦΕؚ͕·ΕΔ෦෼໦ (֤૚ͰྡʹདྷΔμΠδΣετ) ͕ఏڙ͞ΕΔͱݕূͰ͖Δ ΋ͱ΋ͱ͸ফඅࡁ TX ͷσʔλΛফͤΔΑ͏ʹ͢ΔͨΊʹઃܭ ΠʔαϦΞϜͷٕज़ — ϒϩοΫνΣʔϯج൫ٕज़ — 2019-09-18 – p.16/30
  12. มܗϚʔΫϧɾύτϦγΞ໦ IUUQTFOXJLJQFEJBPSHXJLJ3BEJY@USFF ύτϦγΞ໦ͷྫ key ͸೚ҙͷόΠτྻͰ΋ OK PATRICIA (Practical Algorithm To

    Retrieve Information Coded In Alphanumeric) Trie (τϥΠ໦) (key, value) Λදݱ͠ɺݕࡧͰ͖Δ τϥΠ໦ͷઅΛࢀর͢ΔͨΊʹμΠδΣετ͕࢖ΘΕΔ ௖఺ΛϚʔΫϧϧʔτͱͯ͠ѻ͑Δ ૬ҧɾվ͟Μ͸ݕग़͞ΕΔ ֤ཁૉ͸ RLP (recursive length prefix encoding) ʹΑΓ ූ߸Խ͞ΕΔ Ethereum ʹ͓͚Δঢ়ଶɺετϨʔδ౳ͷදݱʹ࢖ΘΕΔ ΠʔαϦΞϜͷٕज़ — ϒϩοΫνΣʔϯج൫ٕज़ — 2019-09-18 – p.17/30
  13. 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-09-18 – p.20/30
  14. Proof of Stake ͷ 3ͭͷ໰୊ 1. ίΠϯͷཷΊࠐΈ 2. “Nothing at

    Stake” ୹ظత໰୊ ௕ظత໰୊ 3. ௿ίετ 51% ߈ܸ ΠʔαϦΞϜͷٕज़ — ϒϩοΫνΣʔϯج൫ٕज़ — 2019-09-18 – p.21/30
  15. Casper : Ethereum ͰͷऔΓ૊Έ Nothing at Stake ໰୊΁ͷରࡦ ࠾༻͞Εͳ͔ͬͨνΣʔϯͰϒϩοΫΛೝΊͨݕূऀΛേ͢Δ (Slasher)

    σϙδοτ͞Εͨ stake Λ຅ऩ͢Δ σϙδοτΛ෷ཱͬͯީิ͢ΔݕূऀͨͪʹΑΔ౤ථํࣜ 100 ϒϩοΫߴຖʹʮνΣ οΫϙΠϯτʯΛઃ͚ɺσϙδοτֹʹԠͨ͡ॏΈ ෇͖ͷ౤ථͰਖ਼౰ͳνΣʔϯΛܾΊΔ ࣍ͷνΣ οΫϙΠϯτ͕ਖ਼౰Խ͞ΕΔͱɺखલͷνΣ οΫϙΠϯτ͸ʮ֬ఆʯ ͱͳΔ ⇒ Ͳ͜·ͰຽओతͰ͍ΒΕΔ͔ʁ ωοτϫʔΫͷ෼அ͕ى͖͍ͯͳ͍͜ͱ͕લఏʹࢥ͑Δ ى͖ͨ৔߹͸ʁ (ෳ਺ͷҟͳΔʮ֬ఆ͞Εͨʯྺ࢙͕ੜͨ͡Βʁ) → ϋʔυϑΥʔΫ ΠʔαϦΞϜͷٕज़ — ϒϩοΫνΣʔϯج൫ٕज़ — 2019-09-18 – p.26/30
  16. γϟʔσΟϯά (ਫฏ෼ׂ) ݕূ࡞ۀͷ෼ݖԽ εέʔϥϏϦςΟʹ޲͚ͨΞϓϩʔν γϟʔυ΁ͷࢀՃΛΊ͙ΔઓུతߦಈΛݗ੍͢ΔͨΊ PoS ͕લఏ PoW Ͱ͸γϟʔυؒͰϋογϡϨʔτͷେখ͕ੜ͡ɺ߈ܸ͕༰қ PoS

    Ͱ͸σϙδοτͨ͠ओମ͕ಛఆ͞ΕΔͷͰɺ γϟʔυΛΞϧΰϦζϜͰׂΓ౰ͯՄ ΠʔαϦΞϜͷٕज़ — ϒϩοΫνΣʔϯج൫ٕज़ — 2019-09-18 – p.27/30