スマートコントラクトのデプロイって何だろう

91d36c66b64ce58f3e749d9d921aae69?s=47 Shuichi Nagao
September 28, 2018

 スマートコントラクトのデプロイって何だろう

Ethereumのコントラクトのデプロイについて見ていきます。既存のWeb開発におけるデプロイとは似ているのですがデプロイフローは異なるのでその紹介をします。

91d36c66b64ce58f3e749d9d921aae69?s=128

Shuichi Nagao

September 28, 2018
Tweet

Transcript

  1. εϚʔτίϯτϥΫτͷ σϓϩΠͬͯͲ͏͍͏͜ͱʁ 2018/9/28 @NGO275 1

  2. ࿩͢಺༰ ▸ εϚʔτίϯτϥΫτ(εϚίϯ) ͓͞Β͍ ▸ σϓϩΠͱ͸ ▸ ࣮ࡍʹ΍ͬͯΈΔ 2

  3. εϚʔτίϯτϥΫτ͓͞Β͍ ֓ཁ ▸ ؅ཧऀෆࡏͰࣥߦ͕ՄೳʹͳͬͨɺϓϩάϥϜԽ͞Εͨܖ໿ ͷ͜ͱ ▸ ࣗಈൢചػ͕Α͘ྫ͑ΒΕΔ ▸ 20ੈلޙ൒࣌఺ͰNick Szabo͕ఏএͨ֓͠೦

    ▸ ϒϩοΫνΣʔϯͱͷ૬ੑ͕ྑ͘ɺEthereumΛ͸͡Ίͱͨ͠ ༷ʑͳϒϩοΫνΣʔϯͰεϚʔτίϯτϥΫτͷ࣮ߦϓϥο τϑΥʔϜ͕࣮૷͞Ε͍ͯΔ ▸ ࠓճ͸EthereumʹϑΥʔΧε͠·͢ 3
  4. εϚʔτίϯτϥΫτ͓͞Β͍ ICOΛྫʹͱΔ ICO εϚίϯ ϓϩδΣΫτ 4

  5. σϓϩΠͱ͸ લఏͱͯ͠ETHEREUM͸εςʔτΛ΋ͬͨγϯάϧτϯϚγϯ εςʔτ N εςʔτ N+1 τϥϯβΫγϣϯ 5

  6. σϓϩΠͱ͸ εςʔτͷ࣮ଶ͸ΞΧ΢ϯτͷू߹ ▸ ΞΧ΢ϯτʹ͸2छྨ͋Δ ▸ ֎෦ΞΧ΢ϯτ (EOA) ▸ ਓ͕ѻ͏ΞΧ΢ϯτ ▸

    ίϯτϥΫτΞΧ΢ϯτ (CA) ▸ ίϯτϥΫτ͕ೖ͍ͬͯΔΞΧ΢ϯτ 6
  7. σϓϩΠͱ͸ εςʔτͷσʔλߏ଄͸ϚʔΫϧύτϦγΞπϦʔঢ় STATE ROOT NONCE BALANCE CODE HASH STORAGE ROOT

    CODE ΞΧ΢ϯτ 7
  8. σϓϩΠͱ͸ τϥβΫγϣϯͷৄࡉ ▸ τϥϯβΫγϣϯʹ͸2छྨ͋Δ ▸ Message Call ▸ ίϯτϥΫτͷؔ਺࣮ߦ ▸

    ETHͷૹۚ ▸ Contract Creation ▸ ৽͍͠ίϯτϥΫτΞΧ΢ϯτͷੜ੒ 8
  9. σϓϩΠͱ͸ τϥβΫγϣϯͷৄࡉ ▸ τϥϯβΫγϣϯʹ͸2छྨ͋Δ ▸ Message Call ▸ ίϯτϥΫτͷؔ਺࣮ߦ ▸

    ETHͷૹۚ ▸ Contract Creation ▸ ৽͍͠ίϯτϥΫτΞΧ΢ϯτͷੜ੒ σϓϩΠͷ࣮ଶ 9
  10. σϓϩΠͱ͸ CONTRACT CREATIONΛߦ͏ํ๏ EOA ৽نCA CONTRACT CREATION EOA ৽نCA CONTRACT

    CREATION MESSAGE CALL CA CA͕࣮ߦ͢ΔτϥβΫγϣϯΛ ಺෦τϥϯβΫγϣϯͱݴ͍·͢ 1 2 10
  11. ࣮ࡍʹ΍ͬͯΈΔ ͍͔ͭ͘ํ๏͸͋ΔͷͰྻڍͯ͠ΈΔ 1. Ethereum ClientΛ࢖ͬͯEOA͔Β௚઀Contract Creation ͷτϥϯβΫγϣϯΛ࣮ߦ͢Δ 2. deployؔ਺Λ࣋ͬͨFactoryίϯτϥΫτΛ࣮૷͠ɺͦͷ deployؔ਺Λ࣮ߦ͢Δʢ಺෦τϥϯβΫγϣϯͰContract

    Creation͕࣮ߦ͞ΕΔʣ 3. RemixΛ࢖ͬͯContract CreationΛ࣮ߦ͢Δ 11
  12. ࣮ࡍʹ΍ͬͯΈΔ ͍͔ͭ͘ํ๏͸͋ΔͷͰྻڍͯ͠ΈΔʢৄࡉʣ 1. Ethereum ClientΛ࢖ͬͯEOA͔Β௚઀Contract Creation ͷτϥϯβΫγϣϯΛ࣮ߦ͢Δ ‣ ຊ֨తͳ։ൃΛ͢ΔͳΒ͜Ε ‣

    TruffleΛ࢖͏͜ͱͰCLI͔ΒσϓϩΠͰ͖Δ ‣ ෳ਺ͷίϯτϥΫτΛ޷͖ͳॱ൪ͰσϓϩΠͰ͖Δͷ Ͱ΋ͬͱ΋ॊೈੑ͕ߴ͍ 12
  13. ࣮ࡍʹ΍ͬͯΈΔ ͍͔ͭ͘ํ๏͸͋ΔͷͰྻڍͯ͠ΈΔʢৄࡉʣ 2. deployؔ਺Λ࣋ͬͨFactoryίϯτϥΫτΛ࣮૷͠ɺͦͷ deployؔ਺Λ࣮ߦ͢Δ ‣ ΞϓϦར༻ऀ͕ίϯτϥΫτΛσϓϩΠͰ͖Δ ‣ ؆୯ʹτʔΫϯΛൃߦͰ͖ΔγεςϜΛ࡞Δͱ͢Δͱɺ ͜ͷํ๏Ͱ֤τʔΫϯΛϢʔβʹσϓϩΠͯ͠΋Β͏

    13
  14. 3. RemixΛ࢖ָͬͯ͢Δ ‣ Remix͜ͱϒϥ΢βIDEΛ࢖͏ͱɺ؆୯ʹίϯτϥΫτ ΛσϓϩΠͰ͖Δ ‣ ϩʔΧϧ։ൃ؀ڥʹґଘ͠ͳ͍ͷͰษڧʹ͸࠷ద͕ͩɺ ຊ֨తͳ։ൃʹ͸෺଍Γͳ͍͔ ‣ MetaMask͚ͩ͋Ε͹ྑ͍

    ࣮ࡍʹ΍ͬͯΈΔ ͍͔ͭ͘ํ๏͸͋ΔͷͰྻڍͯ͠ΈΔʢৄࡉʣ 14
  15. ࣮ࡍʹ΍ͬͯΈΔ REMIXͰ΍ͬͯΈΔ৔߹ͷϑϩʔͷ֓ཁ͸ҎԼ ▸ MetaMaskΛηοτΞοϓ ▸ https://remix.ethereum.org/ ▸ ӈͷΑ͏ʹίϯτϥΫτΛ࣮૷ ▸ RemixͰCompileλϒΛ։͖ɺ


    ίϯύΠϧ͢Δʢ͜ͷ࣌Solidityͷversion ͱcompilerͷversionΛ߹ΘͤΔʣ ▸ RunλϒΛ։͖ɺDeployϘλϯΛΫϦο Ϋ pragma solidity ^0.4.25; contract Counter { uint public value = 0; event Increment(uint _value); function increment() public { value++; emit Increment(value); } } 15
  16. ࣮ࡍʹ΍ͬͯΈΔ Լ४උ ‣ https://metamask.io/ Ͱ MetaMaskΛΠϯετʔϧ͢Δ ‣ MetaMaskͰ΢ΥϨοτΛΞΫ ςΟϕʔτ͓ͯ͘͠ ‣

    ςετωοτ(Ropsten)ʹ઀ଓͯ͠
 https://faucet.metamask.io/ Ͱ ETHΛೖख͓ͯ͘͠ 16
  17. ࣮ࡍʹ΍ͬͯΈΔ ίϯτϥΫτΛ࣮૷͢Δ 17

  18. ࣮ࡍʹ΍ͬͯΈΔ ίϯτϥΫτΛ࣮૷͢Δ ᶃϑΝΠϧͷ৽ن࡞੒࣮ͯ͠૷ 18

  19. ࣮ࡍʹ΍ͬͯΈΔ ίϯτϥΫτΛίϯύΠϧ͢Δ ᶃCompileΛ։͘ ᶄCompiler version֬ೝ ᶅStart to compileΛΫϦοΫ 19

  20. ࣮ࡍʹ΍ͬͯΈΔ ίϯτϥΫτΛσϓϩΠ͢Δ ᶄWeb3͕Inject͞Ε͍ͯΔ͔֬ೝ ᶃRunΛ։͘ ᶅDeployΛΫϦοΫ͢Δ 20

  21. ࣮ࡍʹ΍ͬͯΈΔ ίϯτϥΫτΛσϓϩΠ͢Δ ᶆMetaMaskͰॺ໊͢Δ 21

  22. ࣮ࡍʹ΍ͬͯΈΔ ίϯτϥΫτͰ༡ΜͰΈΔ ᶃίϯτϥΫτͷؔ਺Λ࣮ߦͰ͖Δ 22

  23. ·ͱΊ ▸ σϓϩΠͱ͸τϥϯβΫγϣϯͷContract Creationͷ͜ͱ ▸ ओʹ3ͭͷํ๏ͰσϓϩΠͰ͖Δ ▸ Ethereum ClientΛ࢖͏ʢ։ൃ޲͚ʣ ▸

    σϓϩΠ༻ͷίϯτϥΫτΛ࡞ΔʢϢʔβ޲͚ʣ ▸ Remixͱ͔؆қతʹߦ͑ΔπʔϧΛ࢖͏ ▸ σϓϩΠͨ͠΋ͷ͸୭Ͱ΋ࢀরՄೳͳͷͰΈͳ͞Μ΋ࢼͯ͠ ΋·͠ΐ͏ʂ 23