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

スマートコントラクト / Smart Contracts

Kenji Saito
September 25, 2019

スマートコントラクト / Smart Contracts

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

Kenji Saito

September 25, 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-25 – p.3/36
  2. ܖ໿ͱ͸ʁ ܖ໿ͱ͸ (by ޿ࣙԓ) 1. ໿ଋ 2. ରཱ͢Δෳ਺ͷҙࢥදࣔͷ߹கʹΑͬͯ੒ཱ͢Δ๏཯ߦҝ ଃ༩ɾചങɾަ׵ɾିआɾ੥ෛɾޏ༻ɾҕ೚ɾدୗͳͲ͕ͦͷྫ ੒ཱͷຊ࣭తཁ݅

    ౰ࣄऀؒͷҙࢥදࣔͷ߹க ͦͷͨΊͷϝσΟΞ͸ ޱ಄ɺѲखɺ೪౔൘ʹூΔɾম͘ɾׂΔɺࢴ (खॻ͖)ɺࢴ (ҹ࡮)ɺ . . . ػցͰͰ͖Δ͜ͱ͸ʁ cf.ʮϝσΟΞ͕ϝοηʔδͩʯby McLuhan cf.ʮάʔςϯϕϧΫͷۜՏܥʯby McLuhan → ׆൛ҹ࡮ज़ͷొ৔͕࢈ۀࣾձͷܗ੒ʹେ͖͘د༩ͨ͠ εϚʔτίϯτϥΫτ — ϒϩοΫνΣʔϯج൫ٕज़ — 2019-09-25 – p.9/36
  3. ΠʔαϦΞϜͱ͸ʁ Vitalik Buterin, “Ethereum White Paper: A NEXT GENERATION SMART

    CONTRACT & DECENTRALIZED APPLICATION PLATFORM” ϒϩοΫνΣʔϯٕज़ΛԠ༻ ฏۉϒϩοΫִؒ໿ 15 ඵΛ໨ඪ ͦ͜ʹϓϩάϥϛϯάݴޠΛࡌͤΔ νϡʔϦϯά׬શ = ສೳνϡʔϦϯάϚγϯΛΤϛϡϨʔτͰ͖Δ (౰ͨΓલ) DApps (தԝΛࣗಈԽ͢ΔΞϓϦ) ͷͨΊͷج൫ ݱࡏͷۚ༥ɾ՟ฎܦࡁγεςϜΛ࣌୅஗Εʹ͠Α͏ͱ͢Δҙਤ͕ݟ͑Δ εϚʔτίϯτϥΫτ ͱ͸ͦ΋ͦ΋ͦ͏͍͏΋ͷ σδλϧࢿ࢈ͷҠస΍ঢ়ଶભҠΛࣗಈԽ͢Δ εϚʔτίϯτϥΫτ — ϒϩοΫνΣʔϯج൫ٕज़ — 2019-09-25 – p.11/36
  4. EVM : Ethereum Virtual Machine ࣗ཯ΦϒδΣΫτ͕ϝοηʔδΛड͚Δͱىಈ͠ɺίϯτϥΫτΛ࣮ߦɺঢ়ଶΛมԽͤ͞Δ ࣮ߦεςοϓຖʹ Gas ͷڙڅ͕ඞཁ (ແݶϧʔϓΛආ͚ɺEVM

    ͷ࣮ߦऀ = ϚΠφʔ΁ͷख਺ྉͱͳΔ) εϚʔτίϯτϥΫτ — ϒϩοΫνΣʔϯج൫ٕज़ — 2019-09-25 – p.12/36
  5. ϓϩάϥϛϯάݴޠ EVM ͕ղऍ͢Δͷ͸όΠτίʔυ ͦͷଞʹߴڃݴޠͷίϯύΠϥΛ༻ҙ ߴڃݴޠ : ਓ͕ؒಡΈॻ͖Ͱ͖Δݴޠ Ұํɺػցʹ͍ۙݴޠ͸ʮ௿ڃݴޠʯͰ . .

    . ͦΜͳ͜ͱΛݴͬͯΔͱͦͷ͏ͪਓ޻஌ೳʹౖΒΕΔ͔΋ ྫ : Solidity — JavaScript ʹࣅͨݴޠ ݱࡏͷϓϥΠϚϦݴޠ LLL — Lisp ʹࣅͨݴޠ εϚʔτίϯτϥΫτ — ϒϩοΫνΣʔϯج൫ٕज़ — 2019-09-25 – p.14/36
  6. Solidity αϯϓϧίʔυ (͜Ε͕ߴڃݴޠͩʂ) pragma solidityˆ0.5.0; contract IndivisibleAsset { /* ෼ׂͰ͖ͳ͍ࢿ࢈ͷॴ༗ݖͷҠసΛ࣮ݱ

    */ string public _name; string public _symbol; uint256 public _quantity; address public _owner; constructor(string memory name, string memory symbol, uint256 quantity) public { _name = name; _symbol = symbol; _quantity = quantity; _owner = msg.sender; } function transfer(address to) public returns (bool) { require (_owner == msg.sender); _owner = to; return true; } } εϚʔτίϯτϥΫτ — ϒϩοΫνΣʔϯج൫ٕज़ — 2019-09-25 – p.15/36
  7. ϓϩάϥϛϯάݴޠ Solidity ͷಛ௃ JavaScript ෩ ΦϒδΣΫτࢦ޲ ίϯτϥΫτΛ਽ܗ (ܕ, Ϋϥε) ͱͯ͠هड़͢Δ

    σϓϩΠ͢Δࡍʹߏஙࢠ (constructor) ͕ݺ͹ΕΔ σϓϩΠ (deploy) = ίϯτϥΫτΛϒϩοΫνΣʔϯʹ഑උ͢Δ ͦͷࡍʹߏஙࢠʹ౉͢ύϥϝʔλΛܾΊΔ σϓϩΠ͞ΕͨίϯτϥΫτ͸۩ମతͳ࣮ମ (Πϯελϯε) ΞΧ΢ϯτΛ΋ͭ (ΞυϨεͰࣝผ͞ΕΔ) ετϨʔδͱ ETH ࢒ߴΛ΋ͭ ଞͷίϯτϥΫτʹϝοηʔδΛૹΕΔ σϓϩΠ͞ΕͨίϯτϥΫτʹϝοηʔδΛૹͬͯૢ࡞͢Δͱ͍͏Ϟσϧ ϝοηʔδʹ൓Ԡ͢Δίʔυͷਅਖ਼ੑ͕୲อ͞ΕΔͱ͍͏લఏͷ্Ͱ εϚʔτίϯτϥΫτ — ϒϩοΫνΣʔϯج൫ٕज़ — 2019-09-25 – p.16/36
  8. ADEPT ͱચ୕ػ ADEPT : IBM ͷ IoT ݚڀϓϩδΣΫτ ϒϩοΫνΣʔϯΛ༻͍ͨચ୕ػͷྫ͕ग़ͯ͘Δ ҰମԿΛ΍Δʁ

    Ϟʔλʔ͸੍ޚͰ͖ͳ͍ શϚΠφʔ͕֤ʑͷλΠϛϯάͰಈ͖ͳ͕Βॲཧ͍ͯ͠Δ → ϒϩοΫνΣʔϯ͔Βೖग़ྗίϚϯυ͸ग़ͤͳ͍ ⇒ ʮڱ͍ҙຯʯʹԡ͠ࠐ·Εͨಈ࡞ ચࡎΛൃ஫͢Δʂ εϚʔτίϯτϥΫτ — ϒϩοΫνΣʔϯج൫ٕज़ — 2019-09-25 – p.19/36
  9. The DAO ࣄ݅ (࿐ݟͨ͠Ψόφϯεͷ՝୊) ΠʔαϦΞϜ্ʹ࡞ΒΕͨࣗ཯෼ࢄ౤ࢿϑΝϯυ The DAO Split (ϑΝϯυ෼ׂ) ࠶ؼݺͼग़͠ʹΑΔ

    360 ສ ETH (50∼60 ԯԁ) ౪೉ (2016/6/17) બ୒ࢶ Կ΋͠ͳ͍ ιϑτϑΥʔΫ (ޓ׵ੑΛҡ࣋ͨ͠ΞυϨεౚ݁) ࢿۚ͸໭Βͳ͍ ϋʔυϑΥʔΫ (ྺ࢙ͷॻ͖׵͑; ݱࡏΛ੍͢Δऀ͸աڈΛ੍͢) ͋Δҙຯʮϫϯωεͷ᠘ʯͷ࠷ѱͷൃݱ ίϛϡχςΟ͸ʮϋʔυϑΥʔΫʯΛબΜͩʂ (2016/7/20 ࣮ߦ) εϚʔτίϯτϥΫτ — ϒϩοΫνΣʔϯج൫ٕज़ — 2019-09-25 – p.22/36
  10. ERC20 τʔΫϯ ERC (Ethereum Request for Comment) ͷୈ 20 ൪ͷจॻ

    https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md contract ERC20 { function totalSupply() constant returns (uint totalSupply); function balanceOf(address _owner) constant returns (uint balance); function transfer(address _to, uint _value) returns (bool success); function transferFrom(address _from, address _to, uint _value) returns (bool success); function approve(address _spender, uint _value) returns (bool success); function allowance(address _owner, address _spender) constant returns (uint remaining); event Transfer(address indexed _from, address indexed _to, uint _value); event Approval(address indexed _owner, address indexed _spender, uint _value); } ଞʹΦϓγϣϯͱͯ͠ name/໊শ, symbol/୯Ґɾه߸, decimals/খ਺఺ҎԼԿܻ͔ approve ͸ଞͷϢʔβ͔ΒͷҾ͖ग़͠ΛڐՄ͠ɺallowance ͸ͦͷϦϛοτΛฦ͢ ز͔ͭ೉఺͕͋ΓɺERC223 (ޡૹ৴༧๷), ERC721 (Non-Fungible) ౳ʹΑΓ֦ு͞Ε͍ͯΔ εϚʔτίϯτϥΫτ — ϒϩοΫνΣʔϯج൫ٕज़ — 2019-09-25 – p.24/36
  11. ݱࡏͷࢹ఺͔Βݟͨΰʔϧ Uber ͷΑ͏ͳاۀΛϓϩάϥϜͱͯ͠هड़ɾ࣮ߦͰ͖ΔΑ͏ͳ ؀ڥΛ੔͑ɺఏڙ͢Δ ࣮ࡍͷ Uber ΋͔ͳΓࣗಈԽ͞Ε͍ͯΔ ͦΕʹΑΓ ୭΋͕ެӹੑʹओମతʹؔ༩͢ΔͨΊͷίετɾෑډΛԼ͛Δ Ϗδωε΋ଟ͘ͷਓʹӹ͕͋Δ͔Βͦ͜੒Γཱͭ

    ஍ٿ্ͷݶΒΕͨࢿݯΛ༗ޮʹ׆༻͠ɺ࣋ଓతʹੜ͖ΒΕΔจ໌΁ͷ มԽʹد༩͢Δ ࣮ࡍʹ P2P + εϚʔτίϯτϥΫτͰ Uber ͷΑ͏ͳ΋ͷΛ࣮ݱ͢ΔࢼΈ͕ ෳ਺ਐߦ͍ͯ͠Δ εϚʔτίϯτϥΫτ — ϒϩοΫνΣʔϯج൫ٕज़ — 2019-09-25 – p.30/36
  12. ྫ୊ — ࣗಈΤεΫϩʔʹΑΔ౔஍ͷചങ 1. ౔஍΍୅ۚͷ࣋ͪಀ͛Λ๷͙ͨΊʹചങܖ໿Λۭதʹݻఆ (ͲͪΒ͕΍ͬͯ΋಺༰ΛݕূՄ) 2. ౔஍ͷݖར΍୅ۚΛചങܖ໿ʹ༬ୗ͢Δ (ؾ͕มΘͬͨΒऔΓ໭ͯ͠Α͍) 3.

    ࣮ߦ (͜Ε΋ͲͪΒ͕΍ͬͯ΋Α͍) ͢Δͱɺ৚͕݅ଗ͍ͬͯΔͳΒ౔஍ͷݖརͱ୅͕ۚಉ࣌ʹҠస͢Δ εϚʔτίϯτϥΫτ — ϒϩοΫνΣʔϯج൫ٕज़ — 2019-09-25 – p.33/36
  13. པ฼ࢠߨ ߨݩ͕৴༻ͷ͓͚Δ஥ؒΛूΊͯελʔτ͢Δ Ծʹຖ݄ 10 ສԁͣͭ࣋ͪدΔ஥͕ؒ 12 ໊ → ຖ݄ 120

    ສԁ͕࣋ͪدΒΕΔ ຖ݄ɺ஥ؒͷͻͱΓ͕ 120 ສԁΛड͚औΔ 12ϲ݄ޙʹ 12 ਓ໨͕ 120 ສԁΛड͚औͬͯऴྃ ஍Ҭ͔Β͓͕ۚಀ͛ͳ͍࢓૊Έ εϚʔτίϯτϥΫτ — ϒϩοΫνΣʔϯج൫ٕज़ — 2019-09-25 – p.34/36