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

スマートコントラクトを利用した約定照合をやってみた

 スマートコントラクトを利用した約定照合をやってみた

Ethereumを利用して、株式・債券取引の約定照合システムのようなものを、ほふり(証券保管振替機構)の仕様を参考に作ってみました。作ったコードは、こちらをご参照ください。不安定ですが、Dockerでも動作するようになっています。
https://github.com/kkoiwai/SolidityTradeMatcher

Kosuke Koiwai

May 11, 2016
Tweet

More Decks by Kosuke Koiwai

Other Decks in Programming

Transcript

  1. εϚʔτίϯτϥΫτΛར༻ͨ͠ ໿ఆর߹Λ΍ͬͯΈΔςετ ̎̌̍̒೥݄̑̍̍೔ খؠҪߤհ

  2. ҰԠɾɾɾ ɾ͜ͷεϥΠυ͸ɺ׬શʹ༨ՋͰ࡞ͬͯ·͢ɻ ɾॴଐ͢Δձࣾͷࢿݯ͸શ͘࢖ͬͯ·ͤΜɻ ɾॴଐ͢Δձࣾɺͦͷؔ࿈ձ͕ࣾϒϩοΫνΣʔϯ ʹؔ࿈ͯ͠Կ͔͍ͯ͠Δͱͯ͠΋ɺ͜ͷࢿྉͷ࡞੒ ࣌఺Ͱɺެ։৘ใΛআ͖ɺશ͘஌Γ·ͤΜɻ ɾͦ΋ͦ΋ձࣾͰ։ൃͷ͓࢓ࣄ͸͍ͯ͠·ͤΜɻ 

  3. εϚʔτίϯτϥΫτͱ͸ ઐ໳ՈͰ΋ҙݟ͸෼͔ΕΔΒ͍͠ɻ (*1) • σδλϧͷܗͷ໿ଋࣄ (֓೦ఏএऀͷNick Szaboͷఆٛ) • ݡ͍ܖ໿ (௚༁ͯ͠ɺݴ༿Λͦͷ··ʹղऍ)

    • ϓϩάϥϜԽ͞Εͨܖ໿ • ࣗྗࣥߦݖͷ͋Δܖ໿ (self-enforcing contract by Nicola Dorier) • εϚʔτίϯτϥΫτɾϓϥοτϑΥʔϜ্Ͱಈ͘ϓϩάϥ Ϝͷ͜ͱ ◦ ڱٛͰEthereum্Ͱಈ͘ϓϩάϥϜɺίϯτϥΫτͷ͜ ͱ  IUUQRJJUBDPNITIJNPJUFNTGCCBGCCB 
  4. εϚʔτίϯτϥΫτͱ͸ ͨͿΜɺ͜͏͍͏͜ͱɻʢࣗ෼ͷউखͳཧղʣ ɾϒϩοΫνΣʔϯ্Ͱಈ͘ϓϩάϥϜ͕͋Δ ɾͦͷϓϩάϥϜͰɺԿΒ͔ͷݖརͷʮঢ়ଶʯʢ໊ٛ ਓɺޱ࠲࢒ߴͱ͔ʣ͕ܭࢉ͞Εɺࣔ͞ΕΔ ɾ ࢀՃऀશһ͕ɺͦͷϓϩάϥϜ্ͷʮঢ়ଶʯͱݱ ࣮ͷݖར͕ඥ෇͘ͱ߹ҙ͍ͯ͠Δ 

  5. Ͱ͖Δ͜ͱ w ͨͱ͑͹ɺΫϥ΢υϑΝϯσΟϯά w ग़ࢿऀ͕ɺ͋ΔϓϩδΣΫτʹग़ࢿͷਃ͠ࠐΈΛͯ͠ɺʮίϯ τϥΫτʯʹϏοτίΠϯΛૹۚ͢Δ w ʮίϯτϥΫτʯ͸ɺҰఆظؒ಺ʹे෼ͳࢿ͕ۚू·ͬͨΒɺ ϓϩδΣΫτͷ࣮ߦऀʹશֹΛૹۚ͢Δ w

    ʮίϯτϥΫτʯ͸ɺҰఆظؒ಺ʹे෼ͳࢿ͕ۚू·Βͳ͔ͬ ͨΒɺग़ࢿऀʹग़ࢿֹΛฦۚ͢Δ w ͜͏͍͏͜ͱ͕ɺ͍ͬͨΜʮίϯτϥΫτʯΛ࡞ͬͯ͠·͑͹ɺ ਓͷखΛհࡏͤͣʹͰ͖ΔɻϒϩοΫνΣʔϯ্Ͱಈ͔͘Βɺෆ ਖ਼΋ͳ͍͠ɺ಑ݩʢγεςϜΛӡ༻͢Δਓʣ΋ඞཁͳ͍ɻ 
  6. ূ݊ۀքͰ࢖͑ͦ͏ͳ Ϣʔεέʔε w ʮ΄;Γʯͷ΍͍ͬͯΔ͜ͱʢҰྫɿ௒؆୯ʹʣ w ʮऔҾর߹ʯˠʮ࠴຿Ҿडʯˠʮਫ਼ࢉʯ w औҾর߹ɿऔҾઌಉ͕࢜໿ఆσʔλΛૹ৴ͯ͠ɺ͓ޓ͍ ͷೝ͕ࣝ߹க͢Δ͜ͱΛ֬ೝʣ w

    ࠴຿ҾडɿऔҾর߹͕ऴΘͬͨ໿ఆʹ͍ͭͯɺ΄;Γ͕ ͦͷऔҾΛอূʢ͜ͷ࣌఺ͰऔҾ૬ख͸औҾઌ͔Β΄ ;ΓʹมΘΔɿ͜͜·Ͱݪଇ໿ఆ೔౰೔தʹ׬ྃʣ w ਫ਼ࢉɿಉ͡໏ฑͷചങΛ૬ࡴʢωοςΟϯάʣͯ͠ɺܾ ࡁΛ࣮ߦ 
  7. ূ݊ۀքͰ࢖͑ͦ͏ͳ Ϣʔεέʔε w ʮ΄;Γʯͷ΍͍ͬͯΔ͜ͱʢҰྫɿ௒؆୯ʹʣ w ʮऔҾর߹ʯˠʮ࠴຿Ҿडʯˠʮਫ਼ࢉʯ w औҾর߹ɿऔҾઌಉ͕࢜໿ఆσʔλΛૹ৴ͯ͠ɺ͓ޓ͍ ͷೝ͕ࣝ߹க͢Δ͜ͱΛ֬ೝʣ w

    ࠴຿ҾडɿऔҾর߹͕ऴΘͬͨ໿ఆʹ͍ͭͯɺ΄;Γ͕ ͦͷऔҾΛอূʢ͜ͷ࣌఺ͰऔҾ૬ख͸औҾઌ͔Β΄ ;ΓʹมΘΔɿ͜͜·Ͱݪଇ໿ఆ೔౰೔தʹ׬ྃʣ w ਫ਼ࢉɿಉ͡໏ฑͷചങΛ૬ࡴʢωοςΟϯάʣͯ͠ɺܾ ࡁΛ࣮ߦ ϏοτίΠϯݐ࠴݊ͱ͔ͳΒͰ͖ͦ͏ɻ 
  8. ͱ͍͏͜ͱͰࠓճ͸ɺ ʮऔҾর߹ʯʹߜͬͯ ΍ͬͯΈ·͢ɻ

  9. औҾর߹ w ΄;Γʢূ݊อ؅ৼସػߏʣͷϗʔϜϖʔδΛࢀর
 ʢ஫ɿ΋ͪΖΜҰൠతʹެ։͞Ε͍ͯΔ৘ใͰ͢ʣ w Ұ൪γϯϓϧͳɺʮೋऀؒηϯλɾϚονϯάܕʯ ͷর߹Λ࣮૷ͯ͠Έ·͢ɻ
 
  ࢀরɿܾࡁর߹γεςϜ֓ཁઆ໌IUUQTXXXKBTEFDDPNEPXOMPBEpOBODF[email protected]QEG

  10. औҾর߹  ࢀরɿܾࡁর߹γεςϜ֓ཁઆ໌IUUQTXXXKBTEFDDPNEPXOMPBEpOBODF[email protected]QEG "ূ݊ w ೋऀؒηϯλɾϚονϯάܕ ɹᶃ૒ํ͔Β΄;ΓʹऔҾσʔλΛૹ৴ ɹᶄ΄;Γ͔Β૒ํʹϚονͨ͜͠ͱΛ௨஌ ΄;Γ #ূ݊

    ᶃ ᶃ ᶄ ᶄ
  11. औҾর߹  ࢀরɿʮܾࡁর߹γεςϜʯγεςϜ֓ཁIUUQXXXKBTEFDDPNEPXOMPBEUPQJDTDQEG w র߹৚݅ʢԼઢ͕Ωʔʣ  ໿ఆর߹Ωʔ  ػؔ౤ࢿՈ 

    ചΓख  ങ͍ख  ϑΝϯυίʔυ  ໏ฑίʔυ  ໿ఆ೔  ܾࡁ೔  ചങ۠෼  ਺ྔ  ୯Ձ  ໿ఆֹۚ  ফඅ੫  ࠃ಺ख਺ྉ  ܾࡁֹۚɹ ΁͐ɺʮ໿ఆֹۚʯͬͯ৚݅ʹೖΒͳ͍Μͩɻ ˠখ਺఺ͷ༗ޮܻ਺౳Ͱɺܭࢉޡ͕ࠩ͋ͬͯ ΋Ϛον͢ΔͨΊͱࢥΘΕɻ
  12. औҾর߹  ࢀরɿʮܾࡁর߹γεςϜʯγεςϜ֓ཁIUUQXXXKBTEFDDPNEPXOMPBEUPQJDTDQEG w ͱΓ͋͑ͣࠓճ͸ɺԼهͷ৚͚݅ͩΛର৅ͱ͠·͢ɻ  ചΓख  ങ͍ख 

    ໏ฑίʔυ  ໿ఆ೔  ܾࡁ೔  ਺ྔ  ୯Ձ  ໿ఆֹۚ
  13. ࣮૷ w ࢖ͬͨϓϥοτϑΥʔϜ w &UIFSFVNϒϩοΫνΣʔϯ w 4PMJEJUZɿ&UIFSFVN্ͷϓϩάϥϜݴޠ w .FUFPSɿ&UIFSFVNͱ࿈ܞ͢Δ8FCϑϨʔϜϫʔΫ w

    1)1࣮ࡍ͸αʔόαΠυͰ࿈ܞ͢Δ࢓૊Έ͕NFUFPS ʹແ͔ͬͨͷͰࣗલͰ&UIFSFVN HFUI ͱͷΠϯ λʔϑΣʔεΛ࣮૷ 
  14. &UIFSFVNωοτϫʔΫ ࣮૷ "ূ݊ #ূ݊ $ূ݊  w ʢ̎ࣾ͡Όҙຯͳ͍ͷͰʣ̏ࣾͷࢀՃͱԾఆ w ͦΕͧΕɺ&UIFSFVNͷϊʔυ͕̍୆ͣͭࢀՃ

    &UIFSFVNϊʔυ 8FCαʔό ΫϥΠΞϯτ &UIFSFVNϊʔυ 8FCαʔό ΫϥΠΞϯτ &UIFSFVNϊʔυ 8FCαʔό ΫϥΠΞϯτ
  15. &UIFSFVNωοτϫʔΫ ࣮૷ "ূ݊ #ূ݊ $ূ݊  w ʢ̎ࣾ͡Όҙຯͳ͍ͷͰʣ̏ࣾͷࢀՃͱԾఆ w ͦΕͧΕɺ&UIFSFVNͷϊʔυ͕̍୆ͣͭࢀՃ

    &UIFSFVNϊʔυ 8FCαʔό ΫϥΠΞϯτ &UIFSFVNϊʔυ 8FCαʔό ΫϥΠΞϯτ &UIFSFVNϊʔυ 8FCαʔό ΫϥΠΞϯτ ࠓճ͸.JDSPTPGU"[VSF্ʹ 6CVOUVͷαʔόΛ̏୆ܖ໿ɻ ແྉମݧ̏̌೔ؒɻ "84ΑΓएׯ࢖͍উख͍͍͔΋ɻ
  16. ࣮૷  w (JU)VC΁ͷϦϯΫ w IUUQTHJUIVCDPNLLPJXBJ4PMJEJUZ5SBEF.BUDIFS w ίϯτϥΫτࣗମͷϓϩάϥϜΑΓɺͦΕΛૢ࡞͢Δ(6* Λ࡞Δํ͕େม w

    4PMJEJUZίϯτϥΫτɿߦʢίϝϯτɺۭߦؚΉʣ w 1)1ΠϯλʔϑΣʔεɿߦʢಉ্ʣ w NFUFPSͰ࡞ͬͨ(6*ʢࣗ෼Ͱॻ͍ͨ෦෼ʣɿ໿ߦ
  17. None
  18. None
  19. σϞ 

  20. ࣮૷ w ࠔͬͨ͜ͱʢݴޠͱͯ͠ͷ࢓༷ɾ੍໿ʣ w %BUFܕ͕ͳ͍ʂখ਺ܕʢ'MPBUͱ͔%FDJNBMͱ͔ʣ΋ͳ͍ʂ
 ɹˠɹߏ଄ମ TUSVDU ΛఆٛͰ͖Δ͚Ͳɺߏ଄ମΛҾ਺ʹ΋ ฦ஋ʹ΋Ͱ͖ͳ͍ʂ w

    VJOUJͷͱ͖ʹJͪ͠Ό͏ͱXIJMF J ͕ແ ݶϧʔϓ w ·ͩ։ൃஈ֊ͳͷͰࣗ෼Ͱख࡞Γ͠ͳ͍ͱ͍͚ͳ͍෦෼͕ଟ͍ w Ͱ΋&UIFSFVN಺෦͸όΠτίʔυͳͷͰ୯ʹίϯύΠϥ͕ ਐԽ͢Ε͹΋͏ָ͢͜͠ʹͳΓͦ͏ 
  21. ࣮૷ w ࠔͬͨ͜ͱ ϒϩοΫνΣʔϯͱͯ͠ͷ࢓༷ɾ੍໿  w τϥϯβΫγϣϯ͕ൃੜ͢Δ৔߹ʢϒϩοΫνΣʔϯ ্Ͱঢ়ଶ͕มԽ͢Δ৔߹ʣɺฦ஋ SFUVSOWBMVF ͕

    ໭ͬͯ͜ͳ͍ɻͭ·Γૹ৴ʹ੒ޭͨ͠ͷ͔෼͔Βͳ͍ɺ ϒϩοΫνΣʔϯ্ͷऔҾͷϢχʔΫ*%͕෼͔Βͳ͍ w ૹ৴ଆͰݸผʹϢχʔΫ*%Λৼ͓͍ͬͯͯɺHFUUFS Ͱௐ΂Δ͔͠ͳ͍ 
  22. ߟ࡯ w ݱ࣮Ͱ࢖͏લʹߟ͑ͳ͍ͱ͍͚ͳ͍͜ͱ w ಺༰νΣοΫ w ΋ͪΖΜʮܖ໿ʯͳΜ͔ͩΒͲΜͳܖ໿Ͱ΋૒ํ͕߹ҙ͢Ε͹͍͍ Μ͚ͩͲɺͲ͜·ͰνΣοΫ͢Ε͹Α͍͔ w ͋Γಘͳ͍೔෇

    w աڈ೔ͱ͔ɺʮ݄̍̏̏̎೔ʯͱ͔ɺ࠴݊ͷঈؐظݶա͗ͯΔύλʔϯ w ͋Γ͑ͳ͍௨՟ w ̍̌̌ສθχʔͷ࠴݊ͱ͔ w ࢀՃऀશһʹखͷ಺ݟΒΕͪΌ͏ɻ w ࣮૷ͷखஈ͸͋Δɻͱࢥ͏ɻʢൿີ伴ެ։伴ʣ w ϩδοΫΛೖΕΕ͹ೖΕΔ΄Ͳෳࡶʹͳͬͯɺ࣮ߦ଎౓΋མͪɺόά ΋ࠞ͟Δ w ʮӡ༻ͰΧόʔʯɿࠔͬͨΒ൓ରചങ͢Δ͜ͱʹ͢Δʁ 
  23. ߟ࡯ w ݱ࣮Ͱ࢖͏લʹߟ͑ͳ͍ͱ͍͚ͳ͍͜ͱ w ॲཧεϐʔυɾܭࢉྔɾܭࢉίετ w ܭࢉࢀՃऀ͕૿͑ͯ΋ܭࢉྔ͸૿͑ͳ͍ w ύϒϦοΫωοτϫʔΫͰ͢Βɺશମͱͯ͠ݹ͍εϚϗ̍୆෼ ͷܭࢉྗ͔͠ͳ͍ʁΒ͍͠ʁʢཁݕূ

     w ύϒϦοΫωοτϫʔΫͩͱɺ͜ͷ؆୯ͳϓϩάϥϜͰ͢Βɺ ࠓͷ૬৔Ͱ̍औҾ͋ͨΓ໿̎̌̌̌ԁ͔͔Δܭࢉ w ࠴݊औҾͳΒ·ͩݱ࣮ຯ͋Δ͚ͲɺגऔҾ͸Ͳ͏ͩΖ͏ɻɻɻ  *) “Ethereum network, regardless of the number of nodes that forms it, is equal to a single smartphone from 1999.” https://dappsforbeginners.wordpress.com/tutorials/your-first-dapp/
  24. ߟ࡯ w ࠴຿ҾडͬͯՄೳͳͷ͔͠Β w Ҿ͖ड͚ΔͨΊͷ༷ʑͳ৚݅Λ͢΂ͯϓϩάϥϜͱͯ͠ه ࡌ͢Δͷ͸૬౰େม w ݱ࣮తʹ͸Ҿडਓʢ΄;ΓʣͷݩͰผͰಈ͘ϓϩάϥϜ ͕औҾ಺༰Λঝೝ͢ΔΑ͏ͳ࢓૊Έ͕ඞཁͦ͏ w

    ͦ΋ͦ΋ʮݖҖ͋Δୈࡾऀʯ͕հࡏ͢Δ࣌఺Ͱ࠴຿Ҿड ͸ϒϩοΫνΣʔϯతͰ͸ͳ͍ؾ͕͢Δ ɾɾɾͳͲͱɺ͜͏͍ͬͨײ͡Ͱ༷ʑͳ஌ݟΛಘΑ͏ͱ͍ͯ͠ Δͷ͕ࡢࠓͷ֤ࣾͷऔΓ૊ΈͱࢥΘΕΔʢໝ૝ʣ 
  25. Ҏ্ɺ͝ਗ਼ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ