$30 off During Our Annual Pro Sale. View Details »

スマートコントラクトの課題と実サービス応用へのアプローチ

Osuke
June 29, 2018

 スマートコントラクトの課題と実サービス応用へのアプローチ

Osuke

June 29, 2018
Tweet

More Decks by Osuke

Other Decks in Programming

Transcript

  1. ΠʔαϦΞϜʹ͓͚Δ
    εϚʔτίϯτϥΫτͷ՝୊ͱ
    ࣮αʔϏεԠ༻΁ͷΞϓϩʔν
    2018/06/29 Gunosy Inc. Osuke(@zoom_zoomzo)

    View Slide

  2. Osuke
    @zoom_zoomzo
    - blog
    - twitter
    - ϑϦʔϥϯε → Gunosy (2018/06)

    View Slide

  3. εϚʔτίϯτϥΫτͱ͸
    ܖ໿ͷࣗಈԽ → Ձ஋ͷަ׵Λ൐͏ܖ໿ͷࣗಈԽ
    - ྫɿ
    ࣗಈൢചػ → 150ԁͱυϦϯΫͷՁ஋ަ׵
    ࣗಈվࡳػ → 200ԁͱʮ৽॓ޚԓલӺ͔Β࿡ຊ໦Ӻ΁ిंͰߦ͘ݖརʯͷՁ஋ަ׵
    - ࣗಈൢചػʹ150ԁΛೖΕͯυϦϯΫ͕ग़ͯ͜ͳ͍Մೳੑ͸ʁ
    - ৐٬͕վࡳػΛແཧ΍Γ௨ͬͯλμ৐Γ͢ΔՄೳੑ͸ʁ
    ϋʔυ΢ΣΞʹूݖతͳॊೈੑͷ௿͍εϚʔτίϯτϥΫτ

    View Slide

  4. ϒϩοΫνΣʔϯ × εϚʔτίϯτϥΫτ
    ϒϩοΫνΣʔϯʹΑͬͯɺ
    ɹ- σʔλ͕վ͟Μ͕Ͱ͖ͳ͍ʢվ͟Μ͞Ε͍ͯͳ͍ͱ৴͡ΒΕΔʣ
    ɹ ͔ͭ
    ɹ- ͦͷσʔλ͕͍ͭͰ΋Ͳ͜Ͱ΋୭Ͱ΋ݟΕΔΑ͏ʹͳͬͨ
    → ͜ͷσʔλΛʮఆྔతධՁ͕ՄೳͳՁ஋ʯͱͯ͠৴͡Δ͜ͱ͕Ͱ͖ͦ͏
    ͞ΒʹɺεϚʔτίϯτϥΫτʹΑͬͯՁ஋ͷަ׵৚݅ΛϓϩάϥϜͰ͖Δ
    τϥετϨεͰύʔϛογϣϯϨεͰϑϨΩγϒϧͳՁ஋ͷަ׵͕࣮ݱ

    View Slide

  5. ΠʔαϦΞϜͰͷεϚʔτίϯτϥΫτ
    ΠʔαϦΞϜ͸͋ΒΏΔՁ஋ަ׵ͷج൫ͱͳΔ΂͘ɺ
    ɹνϡʔϦϯά׬શͳεϚʔτίϯτϥΫτΛઃܭͰ͖Δ
    ٯʹɺࣗ༝౓͕ߴ͗ͯ͢੬ऑੑͷݪҼͱͳΔ͜ͱ΋

    - The DAO
    - Parity Multisig Wallet
    - vyper౳ͷఏҊ
    function transfer(address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));
    require(_value <= balances[msg.sender]);
    balances[msg.sender] = balances[msg.sender].sub(_value);
    balances[_to] = balances[_to].add(_value);
    emit Transfer(msg.sender, _to, _value);
    return true;
    }
    ERC20.sol

    View Slide

  6. ࣮༻ԽʹΉ͚ͨεϚʔτίϯτϥΫτͷ՝୊

    View Slide

  7. εέʔϥϏϦςΟ໰୊
    1ϒϩοΫ͋ͨΓͷσʔλαΠζͱϒϩοΫੜ੒εϐʔυͷ্ݶʹΑͬͯ
    TPS(Transaction Per Seconds)੍͕ݶ͞Εͯ͠·͏ɻ
    - ྫɿΠʔαϦΞϜ ~15TPS

    ɹ - ෳࡶͳॲཧΛߦ͏εϚʔτίϯτϥΫτ΄Ͳɺଟ͘ͷख਺ྉ(gas)Λࢧ෷͏ඞཁੑ
    - ϒϩοΫνΣʔϯωοτϫʔΫͷ҆શੑͱ෼ࢄੑ΋ҡ࣋͠ͳ͚Ε͹ͳΒͳ͍

    ʢεέʔϥϏϦςΟɾτϦϨϯϚʣ
    ҆શੑɿ
    - ίϯηϯαεΞϧΰϦζϜͷηΩϡϦςΟ
    - ୯ҰͷϝΠϯνΣʔϯʹର͢Δे෼ͳ߹ҙܗ੒
    ෼ࢄੑɿ
    - ωοτϫʔΫʹগͳ͍ܭࢉϦιʔεͰࢀՃͰ͖Δ
    - େଟ਺ͷΫϥΠΞϯτʹΑΔݕূ࡞ۀ
    εέʔϥϏϦςΟ
    ҆શੑ ෼ࢄੑ

    View Slide

  8. ΞοϓάϨʔμϏϦςΟ໰୊
    Ұ౓ɺΠʔαϦΞϜωοτϫʔΫʹσϓϩΠ͞ΕͨίϯτϥΫτͷEVMίʔυΛ
    ॻ͖௚͢͜ͱ͕Ͱ͖ͳ͍
    - ϒϩοΫνΣʔϯͷඇվ͟Μੑͷੑ࣭ʹ༝དྷ
    - όά΁ͷରॲ & ػೳ֦ॆ͕ࠔ೉
    ίϯτϥΫτͷΞοϓάϨʔμϏϦςΟʹؔ͢ΔR&D
    - ͞·͟·ͳΞοϓάϨʔμϒϧͳίϯτϥΫτύλʔϯͷఏҊ
    - ྫɿzeppelin_os
    ίϯτϥΫτߏ଄಺Ͱࢀর͢ΔίϯτϥΫτΛมߋ
    ver.1
    ver.2
    ίϯτϥΫτ

    View Slide

  9. ϓϥΠόγʔ໰୊
    ϒϩοΫνΣʔϯͷॏཁͳੑ࣭ͷͻͱͭʹσʔλͷಁ໌ੑ͕͋Δ
    - σʔλ͕վ͟Μ͞Ε͍ͯͳ͍͔୭Ͱ΋ݕূ͢Δ͜ͱ͕Մೳ
    - σʔλΛ୭Ͱ΋ར༻͢Δ͜ͱ͕Մೳ
    ϓϥΠόγʔੑͷߴ͍σʔλΛѻ͏͜ͱ͕ࠔ೉ͳ໰୊
    ྫɿ ݸਓͷి࿩൪߸ɺΧελϚʔσʔλ
    zk-SNARKsɺEnigma

    View Slide

  10. ΦϥΫϧ໰୊
    ΦϥΫϧͱ͸ɺϒϩοΫνΣʔϯωοτϫʔΫ಺ʹ
    ϒϩοΫνΣʔϯ֎෦ͷ৘ใΛ࣋ͬͯ͘Δ͜ͱ
    - ྫɿؾԹɺҐஔ৘ใɺαοΧʔͷࢼ߹݁Ռ
    ΦϥΫϧ֎෦σʔλͷਖ਼౰ੑʹؔͯ͠ϒϩοΫνΣʔϯωοτϫʔΫͰ
    ͍͔ʹ߹ҙܗ੒ΛͱΔ͔
    εϚʔτίϯτϥΫτͷ׆༻ʹ͓͍ͯඇৗʹॏཁʹͳͬͯ͘Δ෼໺
    ΦϥΫϧγεςϜͷྫ
    - Oraclize
    - Witnet
    - Augur

    View Slide

  11. ΞΠσϯςΟςΟ໰୊
    ύϒϦοΫϒϩοΫνΣʔϯ͸ύʔϛογϣϯϨεͰ୭Ͱ΋ར༻Ͱ͖Δ
    - ΞυϨεΛϦΞϧࣾձͱͷΞΠσϯςΟςΟʹ݁ͼ͚ͭΔ͜ͱ͕೉͍͠
    - ޿ٛͷΦϥΫϧ
    औҾॴ(DEX)΍ICOͰͷ౤ࢿՈอޢɺϚωʔϩϯμϦϯά๷ࢭʹ൐͏KYC/AMLͷඞཁੑ
    ಛఆͷݸਓͱϒϩοΫνΣʔϯωοτϫʔΫͰͷධՁΛ݁ͼ͚ͭΔ
    ྫɿ
    - uPort
    - Civic
    - ERC725 & ERC735

    View Slide

  12. ʙτʔΫϯઃܭʙ
    εϚʔτίϯτϥΫτͷ࣮༻ԽΛߟ͑Δ

    View Slide

  13. DAPPSͷτʔΫϯઃܭ
    ϢʔςΟϦςΟτʔΫϯΛલఏʢαʔϏεͷར༻ݖʣ
    Ϣʔβʔʹର͢Δద੾ͳΠϯηϯςΟϒઃܭΛߟ͑Δ
    - αʔϏεʹରͯ͠ྑ͍ߦಈʹΠϯηϯςΟϒΛ༩͑ɺ

    ɹѱ͍ߦಈʹϖφϧςΟΛ༩͑Δ
    - τʔΫϯΤίϊϛʔͷ૑ग़
    τʔΫϯϗϧμʔʹΠϯηϯςΟϒͷ͋ΔτʔΫϯϞσϧઃܭ
    - τʔΫϯΛଟ͘ɺ௕ظؒอ࣋ͯ͠΋Β͏͜ͱʹରͯ͠ΠϯηϯςΟϒઃܭΛߟ
    ͑Δ
    ̍छྨͷτʔΫϯͰ੒ΓཱͨͤΔ͜ͱʹݶք͕ੜ͡Δ͔΋
    - ྫ͑͹ɺαʔϏεͷΨόφϯεͷͨΊʹূ݊ੑͷߴ͍τʔΫϯΛ༻ҙ͠ɺ

    ɹϢʔβʔ͸Ձ֨มಈϦεΫͷগͳ͍StableίΠϯΛར༻͢Δ

    View Slide

  14. ʙORIGIN PROTOCOLͷྫʙ
    ෼ࢄܕγΣΞϦϯάαʔϏεΛߟ͑Δ

    View Slide

  15. ORIGIN PROTOCOLͱ͸
    ͋ΒΏΔγΣΞϦϯάαʔϏεͷج൫ͱͳΔ෼ࢄܕͷϓϩτίϧΛ໨ࢦ͢
    - ϢʔβʔͱΦʔφʔ྆ऀͷϚονϯάख਺ྉΛैདྷͱൺֱͯ͠େ෯ʹԼ͛Δ
    - ΞΠσϯςΟςΟʹ݁ͼͭ͘ϨϐϡςʔγϣϯͳͲͷσʔλΛڞ༗Խ

    View Slide

  16. αʔϏεΛ”෼ࢄԽ”͢Δҙٛ
    αʔϏεར༻ͷࢧ෷͍ํ๏ΛτʔΫϯʹ͢Δ͚ͩͰ͸ɺ
    ɹϒϩοΫνΣʔϯ΍εϚʔτίϯτϥΫτΛ׆༻͢Δҙຯ͕ͳ͍
    ΠϯηϯςΟϒઃܭʹΑΔ୯Ұओମʹґଘ͠ͳ͍αʔϏεͷӡӦ

    - ΠϯηϯςΟϒઃܭʹΑΔΦϥΫϧʢෆਖ਼ใࠂʣ

    - ΨόφϯεʹΑΔγεςϜͷ؅ཧɾΞοϓάϨʔυ
    ΞΠσϯςΟςΟʹඥͮ͘Ϩϐϡςʔγϣϯ౳ͷσʔλڞ༗Խ
    ORIGINͰ͸

    View Slide

  17. ΠϯηϯςΟϒઃܭʹΑΔΦϥΫϧ
    ᶃෆਖ਼
    Origin
    ᶄෆਖ਼ใࠂ
    ᶅ౤ථ
    - Ͳ͕ͬͪෆਖ਼ʁ
    τʔΫϯϗϧμʔ
    ෆਖ਼ใࠂऀ
    ෆਖ਼ٙ࿭ͷਓ
    γΣΞϦϯάαʔϏεͰ໰୊ʹͳΔͷ͕ɺϦΞϧࣾձͰͷෆਖ਼ߦҝ
    - γΣΞͨ͠ंʹইΛ͚ͭͨͷʹഛঈۚΛࢧ෷Θͳ͍
    - ͓ۚΛࢧ෷ͬͨͷʹγΣΞϋ΢εʹೖΕͳ͍
    σϙδοτ σϙδοτ

    View Slide

  18. ΠϯηϯςΟϒઃܭʹΑΔΦϥΫϧ
    γΣΞϦϯάαʔϏεͰ໰୊ʹͳΔͷ͕ɺϦΞϧࣾձͰͷෆਖ਼ߦҝ
    - γΣΞͨ͠ंʹইΛ͚ͭͨͷʹഛঈۚΛࢧ෷Θͳ͍
    - ͓ۚΛࢧ෷ͬͨͷʹγΣΞϋ΢εʹೖΕͳ͍
    τʔΫϯϗϧμʔ
    ෆਖ਼ใࠂऀ
    ෆਖ਼ٙ࿭ͷਓ
    τʔΫϯ
    τʔΫϯ
    ෆਖ਼ٙ࿭ͷਓɿ80ˋ
    ෆਖ਼ใࠂऀɿ20ˋ
    Ͳ͕ͬͪෆਖ਼ʁ

    View Slide

  19. ධՁͱΞΠσϯςΟςΟͷ࿈ܞ
    γΣΞϦϯάαʔϏεͷج൫ͱͳΔϓϩτίϧͰϨϐϡςʔγϣϯΛ

    ڞ༗Խ͢Δ͜ͱͰɺѱ͍ߦ͍Λ͢Δ͜ͱͷσϝϦοτΛେ͖͘͢Δ
    - Ϩϐϡςʔγϣϯ͕Լ͕Δ
    - ͋ΒΏΔγΣΞϦϯάαʔϏε͕࢖͍ʹ͘͘ͳΔ
    ERC725΍uPortͳͲΛ༻͍ͯɺSNSͷΞΧ΢ϯτ΍ݸਓ৘ใͱOrigin Protocol಺ͷ

    ධՁΛ࿈ܞ͍ͯ͘͠

    View Slide

  20. ΨόφϯεʹΑΔγεςϜͷΞοϓάϨʔυ
    ։ൃνʔϜ͕উखʹγεςϜͷΞοϓάϨʔυΛͰ͖ΔΑ͏ʹͯ͠͠·͏ͱɺ
    ϢʔβʔʹͱͬͯෆརͳγεςϜʹͳͬͯ͠·͏͜ͱ͕͋Δ
    - ෼ࢄతʹϓϩτίϧΛΨόφϯε͢Δඞཁੑ
    τʔΫϯϗϧμʔʹΑΔ౤ථͷ݁ՌͰγεςϜͷΞοϓάϨʔυΛՄೳʹ͢Δ
    ྫ͑͹ɺτʔΫϯΛଟ͍࣋ͬͯ͘Δ΄Ͳଟ͘ͷ౤ථݖΛಘΒΕΔΑ͏ʹ͢Δɻ
    - ϢʔβʔʹෆརͳΞοϓάϨʔυΛ͢ΔͱτʔΫϯͷՁ͕֨Լམ͠ɺࣗ਎͕ෆརʹɻ
    ver.1
    ver.2
    ίϯτϥΫτ
    ౤ථ
    τʔΫϯϗϧμʔ

    View Slide

  21. ·ͱΊ
    ΠʔαϦΞϜͷεϚʔτίϯτϥΫτ͸νϡʔϦϯά׬શͰɺ
    ॊೈͳΠϯηϯςΟϒઃܭ͕Մೳ
    ୅දతͳεϚʔτίϯτϥΫτͷ՝୊
    - εέʔϥϏϦςΟ
    - ΞοϓάϨʔμϏϦςΟ
    - ΦϥΫϧ
    - ϓϥΠόγʔ
    - ΞΠσϯςΟςΟ
    ϒϩοΫνΣʔϯ × εϚʔτίϯτϥΫτͷಛੑΛ׆͔ͨ͠dApps

    Λ࡞͍ͬͯ͜͏ʂ

    View Slide