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

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

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

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

Avatar for Kosuke Koiwai

Kosuke Koiwai

May 11, 2016
Tweet

More Decks by Kosuke Koiwai

Other Decks in Programming

Transcript

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

    • ϓϩάϥϜԽ͞Εͨܖ໿ • ࣗྗࣥߦݖͷ͋Δܖ໿ (self-enforcing contract by Nicola Dorier) • εϚʔτίϯτϥΫτɾϓϥοτϑΥʔϜ্Ͱಈ͘ϓϩάϥ Ϝͷ͜ͱ ◦ ڱٛͰEthereum্Ͱಈ͘ϓϩάϥϜɺίϯτϥΫτͷ͜ ͱ  IUUQRJJUBDPNITIJNPJUFNTGCCBGCCB 
  2. Ͱ͖Δ͜ͱ w ͨͱ͑͹ɺΫϥ΢υϑΝϯσΟϯά w ग़ࢿऀ͕ɺ͋ΔϓϩδΣΫτʹग़ࢿͷਃ͠ࠐΈΛͯ͠ɺʮίϯ τϥΫτʯʹϏοτίΠϯΛૹۚ͢Δ w ʮίϯτϥΫτʯ͸ɺҰఆظؒ಺ʹे෼ͳࢿ͕ۚू·ͬͨΒɺ ϓϩδΣΫτͷ࣮ߦऀʹશֹΛૹۚ͢Δ w

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

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

    ࠴຿ҾडɿऔҾর߹͕ऴΘͬͨ໿ఆʹ͍ͭͯɺ΄;Γ͕ ͦͷऔҾΛอূʢ͜ͷ࣌఺ͰऔҾ૬ख͸औҾઌ͔Β΄ ;ΓʹมΘΔɿ͜͜·Ͱݪଇ໿ఆ೔౰೔தʹ׬ྃʣ w ਫ਼ࢉɿಉ͡໏ฑͷചങΛ૬ࡴʢωοςΟϯάʣͯ͠ɺܾ ࡁΛ࣮ߦ ϏοτίΠϯݐ࠴݊ͱ͔ͳΒͰ͖ͦ͏ɻ 
  5. औҾর߹  ࢀরɿʮܾࡁর߹γεςϜʯγεςϜ֓ཁIUUQXXXKBTEFDDPNEPXOMPBEUPQJDTDQEG w র߹৚݅ʢԼઢ͕Ωʔʣ  ໿ఆর߹Ωʔ  ػؔ౤ࢿՈ 

    ചΓख  ങ͍ख  ϑΝϯυίʔυ  ໏ฑίʔυ  ໿ఆ೔  ܾࡁ೔  ചങ۠෼  ਺ྔ  ୯Ձ  ໿ఆֹۚ  ফඅ੫  ࠃ಺ख਺ྉ  ܾࡁֹۚɹ ΁͐ɺʮ໿ఆֹۚʯͬͯ৚݅ʹೖΒͳ͍Μͩɻ ˠখ਺఺ͷ༗ޮܻ਺౳Ͱɺܭࢉޡ͕ࠩ͋ͬͯ ΋Ϛον͢ΔͨΊͱࢥΘΕɻ
  6. ࣮૷ w ࢖ͬͨϓϥοτϑΥʔϜ w &UIFSFVNϒϩοΫνΣʔϯ w 4PMJEJUZɿ&UIFSFVN্ͷϓϩάϥϜݴޠ w .FUFPSɿ&UIFSFVNͱ࿈ܞ͢Δ8FCϑϨʔϜϫʔΫ w

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

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

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

    4PMJEJUZίϯτϥΫτɿߦʢίϝϯτɺۭߦؚΉʣ w 1)1ΠϯλʔϑΣʔεɿߦʢಉ্ʣ w NFUFPSͰ࡞ͬͨ(6*ʢࣗ෼Ͱॻ͍ͨ෦෼ʣɿ໿ߦ
  10. ࣮૷ w ࠔͬͨ͜ͱʢݴޠͱͯ͠ͷ࢓༷ɾ੍໿ʣ w %BUFܕ͕ͳ͍ʂখ਺ܕʢ'MPBUͱ͔%FDJNBMͱ͔ʣ΋ͳ͍ʂ
 ɹˠɹߏ଄ମ TUSVDU ΛఆٛͰ͖Δ͚Ͳɺߏ଄ମΛҾ਺ʹ΋ ฦ஋ʹ΋Ͱ͖ͳ͍ʂ w

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

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

    w աڈ೔ͱ͔ɺʮ݄̍̏̏̎೔ʯͱ͔ɺ࠴݊ͷঈؐظݶա͗ͯΔύλʔϯ w ͋Γ͑ͳ͍௨՟ w ̍̌̌ສθχʔͷ࠴݊ͱ͔ w ࢀՃऀશһʹखͷ಺ݟΒΕͪΌ͏ɻ w ࣮૷ͷखஈ͸͋Δɻͱࢥ͏ɻʢൿີ伴ެ։伴ʣ w ϩδοΫΛೖΕΕ͹ೖΕΔ΄Ͳෳࡶʹͳͬͯɺ࣮ߦ଎౓΋མͪɺόά ΋ࠞ͟Δ w ʮӡ༻ͰΧόʔʯɿࠔͬͨΒ൓ରചങ͢Δ͜ͱʹ͢Δʁ 
  13. ߟ࡯ 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/
  14. ߟ࡯ w ࠴຿ҾडͬͯՄೳͳͷ͔͠Β w Ҿ͖ड͚ΔͨΊͷ༷ʑͳ৚݅Λ͢΂ͯϓϩάϥϜͱͯ͠ه ࡌ͢Δͷ͸૬౰େม w ݱ࣮తʹ͸Ҿडਓʢ΄;ΓʣͷݩͰผͰಈ͘ϓϩάϥϜ ͕औҾ಺༰Λঝೝ͢ΔΑ͏ͳ࢓૊Έ͕ඞཁͦ͏ w

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