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

スマートコントラクトをHTTPで実行する

 スマートコントラクトをHTTPで実行する

スマートコントラクトをHTTPで実行する

91d36c66b64ce58f3e749d9d921aae69?s=128

Shuichi Nagao

June 22, 2018
Tweet

Transcript

  1. εϚʔτίϯτϥΫτ ΛHTTPͰͨͨ͘ 18/6/22 @ngo275 !1

  2. ಺༰ • εϚʔτίϯτϥΫτͱ͸ • HTTPͰ࣮ߦ͢Δ্Ͱͷ՝୊ • ۩ମతͳ࣮૷ !2

  3. εϚʔτίϯτϥΫτͱ͸ • ϒϩοΫνΣʔϯ্Ͱಈ͘ϓϩάϥϜ • όοΫΤϯυΛϒϩοΫνΣʔϯʹஔ͘Πϝʔδ • ϑϩϯτΤϯυ͸ैདྷͷٕज़Ͱ໰୊ͳ͍ • Ethereum͕ͦͷϓϥοτϑΥʔϜͱͯ͠΋ͬͱ΋ར༻͞Εͯ ͍Δɻ͜͜Ͱ͸EthereumΛ૝ఆ͢Δ

    • ࣮ߦ͢ΔͨΊʹ͸࣮ߦऀͷൿີ伴ʹΑΔॺ໊ͱ࣮ߦʹ͔͔Δ Ψε୅ͷࢧ෷͍͕ඞཁ !3
  4. εϚʔτίϯτϥΫτͱ͸ ~࣮ߦ·Ͱͷϑϩʔ~ Private key ࣮ߦ !4 Txੜ੒ʹඞཁͳσʔλΛ·ͱΊΔ ൿີ伴Ͱॺ໊͢Δ Ethereum Client͕

    ωοτϫʔΫʹ఻͑Δ
  5. εϚʔτίϯτϥΫτͱ͸ ~࣮ߦ·Ͱͷϑϩʔ~ Private key ࣮ߦ !5 Txੜ੒ʹඞཁͳσʔλΛ·ͱΊΔ ൿີ伴Ͱॺ໊͢Δ ஫ʣTxͱ͸ɺεϚʔτίϯτϥΫτ࣮ߦʹඞཁͳॺ໊ࡁΈσʔλͷ͜ͱͰɺ TxΛϒϩοΫνΣʔϯʹϒϩʔυΩϟετ͢Δ͜ͱͰɺ

    εϚʔτίϯτϥΫτ͕࣮ߦ͞ΕΔ Ethereum Client͕ ωοτϫʔΫʹ఻͑Δ
  6. εϚʔτίϯτϥΫτͱ͸ ~࣮ߦ·Ͱͷϑϩʔ~ Private key ࣮ߦ ࣮ߦऀ͕͜ͷϑϩʔΛߦ͏ඞཁ͕͋Δ ㅟ ㅟ ㅟ ㅟ

    ଟ͘ͷΞϓϦ(DApp)Ͱ͸͜Ε͸Ϣʔβ͕ߦ͏ !6 Txͷੜ੒ Txੜ੒ʹඞཁͳσʔλΛ·ͱΊΔ ൿີ伴Ͱॺ໊͢Δ Ethereum Client͕ ωοτϫʔΫʹ఻͑Δ
  7. εϚʔτίϯτϥΫτͱ͸ ~࣮ߦ·Ͱͷϑϩʔ~ Private key ࣮ߦ ࣮ߦऀ͕͜ͷϑϩʔΛߦ͏ඞཁ͕͋Δ ㅟ ㅟ ㅟ ㅟ

    ଟ͘ͷΞϓϦ(DApp)Ͱ͸͜Ε͸Ϣʔβ͕ߦ͏ => αʔϏεଆ͕ݞ୅ΘΓͰ͖ͳ͍ͷ͔…?? !7 Txͷੜ੒ Txੜ੒ʹඞཁͳσʔλΛ·ͱΊΔ ൿີ伴Ͱॺ໊͢Δ Ethereum Client͕ ωοτϫʔΫʹ఻͑Δ
  8. ཁ͸͜ΕΛ࣮ݱ͍ͨ͠ • Ϣʔβ͕εϚʔτίϯτϥΫτΛ࣮ߦ͠ͳ͍ • Ϣʔβ͸αʔϏεʹHTTPͰϦΫΤετ͢Δ͚ͩ • αʔϏεଆ͕ॺ໊͠ɺΨε୅΋ෛ୲ͯ͠εϚʔτίϯτϥ ΫτΛ࣮ߦ͢Δ !8

  9. HTTPͰ࣮ߦ͢Δ্Ͱͷ՝୊ • αʔόʹൿີ伴Λஔ͔ͳ͍ͱ͍͚ͳ͍ • αʔό͸Ψε୅ͷETHΛ͍࣋ͬͯͳ͍ͱ͍͚ͳ͍ • EthereumͷTxੜ੒͸͍͍ͤͥඵؒʹ਺ճ͔͠Ͱ͖ͳ͍ • DDoS߈ܸΛ৯Β͏ͱΨε୅͕ແବʹൃੜ͢Δ !9

  10. ۩ମతͳ࣮૷ ~ྫ~ • τʔΫϯͷ഑෍Λ۩ମྫʹݟ͍ͯ͘͜ͱʹ͢Δ • Ϣʔβ͕HTTPͰτʔΫϯ͘ΕϦΫΤετΛ͢Δͱɺ αʔό͕εϚʔτίϯτϥΫτΛ࣮ߦͯ͠Ϣʔβʹ τʔΫϯΛૹΔ • Txੜ੒ճ਺ΛݮΒͨ͢Ίʹ֤ΞυϨεʹରͯ͠ૹΔ

    ͷͰ͸ͳ͘ɺbatchTransfer(ಉ࣌ʹෳ਺ΞυϨεʹૹ ۚ͢Δ)ؔ਺Λ࣮ߦ͢Δ !10
  11. ۩ମతͳ࣮૷ ~ઃܭ~ • ൿີ伴͸KMSΛ࢖ͬͯ҆શʹ؅ཧ͢Δ • Ϣʔβ͔ΒͷϦΫΤετΛΩϡʔΠϯάͯ͠ɺͦΕΛ؂ࢹ ͢ΔαʔόΛཱ͓ͯͯ͘ • ؂ࢹ͍ͯ͠Δαʔό͕TxΛੜ੒ͯ͠εϚʔτίϯτϥΫτ Λ࣮ߦ͢Δ

    • ؂ࢹ͍ͯ͠Δαʔό͸Πϯλʔωοτ͔ΒΞΫηεͰ͖ͳ ͍Α͏ʹ͢Δ !11
  12. ۩ମతͳ࣮૷ ~ઃܭ~ !12

  13. ۩ମతͳ࣮૷ ~ઃܭ~ 1. HTTPϦΫΤετ͕ਖ਼͍͔͠ݕূ 2. ϦΫΤετͷEthereumΞυϨεݕূ(ෆ ਖ਼ͳΞυϨεΛ͸͘͡) 3. reCAPTCHAτʔΫϯͷݕূ(DDoSର ࡦ)

    !13
  14. ۩ମతͳ࣮૷ ~ઃܭ~ 1. KMSʹൿີ伴ΛऔΓʹߦ͘ 2. PubSubʹೖ͍ͬͯΔෳ਺ͷΞυϨεʹ ରͯ͠τʔΫϯΛૹۚ͢Δɺͱ͍͏Tx Λੜ੒͢Δ(Ұ݅΋ͳ͍ͱ͖͸ऴྃ) 3. Web3ܦ༝ͰEthereumωοτϫʔΫʹ

    ϒϩʔυΩϟετ͢ΔΑ͏ʹ఻ୡ 4. batchTransferͱ͍͏ؔ਺͕ωοτϫʔ Ϋ಺Ͱ࣮ߦ͞ΕΔ !14
  15. ۩ମతͳ࣮૷ ~ϋϚΓͲ͜ᶃ~ • Txੜ੒͸Nonce͕ඞཁͰߴεϧʔϓοτ͕ٻΊΒΕΔͳΒΠϯΫϦϝϯ τ͢Δ࢓૊ΈΛ࡞Δඞཁ͕͋Δ • Nonceʹ͸࣮ߦΞΧ΢ϯτͷTransactionCountΛ༻͍Δ͜ͱ͕ଟ͍ ͕ɺϒϩοΫ͕৽نੜ੒͞ΕΔεϐʔυΑΓૣ͘ॲཧ͢Δʹ͸ TransactionCountΛNonceʹར༻Ͱ͖ͳ͍ •

    ͕ͨͬͯ͜͜͠Ͱ͸ɺTransactionCountΛNonceʹར༻͢ΔͨΊ ʹɺϦΞϧλΠϜੑΛ٘ਜ਼ʹͯ͠batchͰॲཧ͢ΔίϯτϥΫτΛ ࡞੒ͨ͠ • ଞͷํ๏ͱͯ͠͸ίϯτϥΫτΛ࣮ߦ͢ΔΞΧ΢ϯτΛNݸʹ͢Ε ͹εϧʔϓοτ΋NഒʹͳΔ !15
  16. ۩ମతͳ࣮૷ ~ϋϚΓͲ͜ᶄ~ • EthereumΞυϨεͷݕূʹ͸EcrecoverΛར༻͢Δ • ͦͷϢʔβ͸ຊ౰ʹͦͷΞυϨεʹରͯ͠ൿີ伴Λ͍࣋ͬͯͯॺ໊ Ͱ͖ΔΑͶɺͱ͍͏֬ೝΛͯ͠σλϥϝͳΞυϨεʹτʔΫϯΛ͹ Β·͘ͷΛ๷͙ • ϝοηʔδΛൿີ伴Ͱॺ໊ͨ݁͠Ռ͔ΒΞυϨεΛநग़͢Δํ๏

    • ϝοηʔδ͑͞෼͔͍ͬͯΕ͹ΞυϨε͕Θ͔Δ • EthereumAddress / message / sign Λड͚औͬͯॺ໊(sign)͔Β messageΛ࢖ͬͯEthereumAddressΛܭࢉ͠ɺ౉͖ͬͯͨ EthereumAddressͱಉ͡ʹͳΕ͹ਖ਼౰ͩͱΈͳͤΔ !16
  17. ۩ମతͳ࣮૷ ~ϋϚΓͲ͜ᶅ~ • GCP(AppEngineϝΠϯ)Ͱ࡞͕ͬͨɺ૝૾Ҏ্ʹ੍໿͕ଟ͔ͬͨ • Cloud Functions͕ར༻Ͱ͖ΔͳΒAppEngineᶄͷ෦෼͸Cloud FunctionsͰΑ͔ͬͨ • αʔόϨεʹͯ͠Πϯλʔωοτ͔Βִ཭͔ͨͬͨ͠

    • AWSͳΒLambdaҰ୒͔΋ • GAE StandardͰ͸Goͷ௿ϨΠϠʔͷAPI͕ར༻Ͱ͖ͣEtheruemܥ ͷϥΠϒϥϦ͸࢖͑ͳ͔ͬͨ • ݁ՌతʹFlexibleͷnodejsͰ࣮૷͢Δ͜ͱʹ !17
  18. ·ͱΊ • αʔόʹൿີ伴Λஔ͔ͳ͍ͱ͍͚ͳ͍ • => KMSΛར༻ • αʔό͸Ψε୅ͷETHΛ͍࣋ͬͯͳ͍ͱ͍͚ͳ͍ • =>

    αʔόΛΠϯλʔωοτ͔ΒͰ͖Δִ͚ͩ཭͢Δ • EthereumͷTxੜ੒͸͍͍ͤͥඵؒʹ਺ճ͔͠Ͱ͖ͳ͍ • => batchॲཧ͕Ͱ͖ΔΑ͏ʹίϯτϥΫτΛ࣮૷͠ɺPubSubͰ ΩϡʔΠϯά͢Δ • DDoS߈ܸΛ৯Β͏ͱΨε୅͕ແବʹൃੜ͢Δ • => reCAPTCHAͰରԠ !18