$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
スマートコントラクトをHTTPで実行する
Search
Shuichi Nagao
June 22, 2018
Programming
0
140
スマートコントラクトをHTTPで実行する
スマートコントラクトをHTTPで実行する
Shuichi Nagao
June 22, 2018
Tweet
Share
More Decks by Shuichi Nagao
See All by Shuichi Nagao
UX for Key Management
ngo275
0
120
深センではテクノロジーを使う人がイノベーションを起こしている
ngo275
0
610
スマートコントラクトのデプロイって何だろう
ngo275
0
830
プロトタイピングするならFirebaseを使ってみよう
ngo275
0
1.8k
Ethereumで開発を始めるなら知っておきたいこと
ngo275
10
5.1k
EOSでスマートコントラクトを実行してみる
ngo275
0
1.2k
iOSアプリエンジニアがReact Nativeを使ってみて
ngo275
0
280
中東のシリコンバレーことイスラエルに行ってきた
ngo275
0
150
ペイモのアーキテクチャ
ngo275
0
690
Other Decks in Programming
See All in Programming
堅牢なフロントエンドテスト基盤を構築するために行った取り組み
shogo4131
8
2.3k
認証・認可の基本を学ぼう前編
kouyuume
0
190
まだ間に合う!Claude Code元年をふりかえる
nogu66
5
730
非同期処理の迷宮を抜ける: 初学者がつまづく構造的な原因
pd1xx
1
700
新卒エンジニアのプルリクエスト with AI駆動
fukunaga2025
0
200
【CA.ai #3】ワークフローから見直すAIエージェント — 必要な場面と“選ばない”判断
satoaoaka
0
240
著者と進める!『AIと個人開発したくなったらまずCursorで要件定義だ!』
yasunacoffee
0
130
tsgolintはいかにしてtypescript-goの非公開APIを呼び出しているのか
syumai
6
2.1k
Context is King? 〜Verifiability時代とコンテキスト設計 / Beyond "Context is King"
rkaga
9
1.1k
関数実行の裏側では何が起きているのか?
minop1205
1
680
How Software Deployment tools have changed in the past 20 years
geshan
0
29k
Why Kotlin? 電子カルテを Kotlin で開発する理由 / Why Kotlin? at Henry
agatan
2
7k
Featured
See All Featured
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.6k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Into the Great Unknown - MozCon
thekraken
40
2.2k
Build The Right Thing And Hit Your Dates
maggiecrowley
38
3k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
70k
Writing Fast Ruby
sferik
630
62k
Speed Design
sergeychernyshev
33
1.4k
[SF Ruby Conf 2025] Rails X
palkan
0
500
Embracing the Ebb and Flow
colly
88
4.9k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.8k
Transcript
εϚʔτίϯτϥΫτ ΛHTTPͰͨͨ͘ 18/6/22 @ngo275 !1
༰ • εϚʔτίϯτϥΫτͱ • HTTPͰ࣮ߦ͢Δ্Ͱͷ՝ • ۩ମతͳ࣮ !2
εϚʔτίϯτϥΫτͱ • ϒϩοΫνΣʔϯ্Ͱಈ͘ϓϩάϥϜ • όοΫΤϯυΛϒϩοΫνΣʔϯʹஔ͘Πϝʔδ • ϑϩϯτΤϯυैདྷͷٕज़Ͱͳ͍ • Ethereum͕ͦͷϓϥοτϑΥʔϜͱͯͬ͠ͱར༻͞Εͯ ͍Δɻ͜͜ͰEthereumΛఆ͢Δ
• ࣮ߦ͢ΔͨΊʹ࣮ߦऀͷൿີ伴ʹΑΔॺ໊ͱ࣮ߦʹ͔͔Δ Ψεͷࢧ͍͕ඞཁ !3
εϚʔτίϯτϥΫτͱ ~࣮ߦ·Ͱͷϑϩʔ~ Private key ࣮ߦ !4 TxੜʹඞཁͳσʔλΛ·ͱΊΔ ൿີ伴Ͱॺ໊͢Δ Ethereum Client͕
ωοτϫʔΫʹ͑Δ
εϚʔτίϯτϥΫτͱ ~࣮ߦ·Ͱͷϑϩʔ~ Private key ࣮ߦ !5 TxੜʹඞཁͳσʔλΛ·ͱΊΔ ൿີ伴Ͱॺ໊͢Δ ʣTxͱɺεϚʔτίϯτϥΫτ࣮ߦʹඞཁͳॺ໊ࡁΈσʔλͷ͜ͱͰɺ TxΛϒϩοΫνΣʔϯʹϒϩʔυΩϟετ͢Δ͜ͱͰɺ
εϚʔτίϯτϥΫτ͕࣮ߦ͞ΕΔ Ethereum Client͕ ωοτϫʔΫʹ͑Δ
εϚʔτίϯτϥΫτͱ ~࣮ߦ·Ͱͷϑϩʔ~ Private key ࣮ߦ ࣮ߦऀ͕͜ͷϑϩʔΛߦ͏ඞཁ͕͋Δ ㅟ ㅟ ㅟ ㅟ
ଟ͘ͷΞϓϦ(DApp)Ͱ͜ΕϢʔβ͕ߦ͏ !6 Txͷੜ TxੜʹඞཁͳσʔλΛ·ͱΊΔ ൿີ伴Ͱॺ໊͢Δ Ethereum Client͕ ωοτϫʔΫʹ͑Δ
εϚʔτίϯτϥΫτͱ ~࣮ߦ·Ͱͷϑϩʔ~ Private key ࣮ߦ ࣮ߦऀ͕͜ͷϑϩʔΛߦ͏ඞཁ͕͋Δ ㅟ ㅟ ㅟ ㅟ
ଟ͘ͷΞϓϦ(DApp)Ͱ͜ΕϢʔβ͕ߦ͏ => αʔϏεଆ͕ݞΘΓͰ͖ͳ͍ͷ͔…?? !7 Txͷੜ TxੜʹඞཁͳσʔλΛ·ͱΊΔ ൿີ伴Ͱॺ໊͢Δ Ethereum Client͕ ωοτϫʔΫʹ͑Δ
ཁ͜ΕΛ࣮ݱ͍ͨ͠ • Ϣʔβ͕εϚʔτίϯτϥΫτΛ࣮ߦ͠ͳ͍ • ϢʔβαʔϏεʹHTTPͰϦΫΤετ͢Δ͚ͩ • αʔϏεଆ͕ॺ໊͠ɺΨεෛ୲ͯ͠εϚʔτίϯτϥ ΫτΛ࣮ߦ͢Δ !8
HTTPͰ࣮ߦ͢Δ্Ͱͷ՝ • αʔόʹൿີ伴Λஔ͔ͳ͍ͱ͍͚ͳ͍ • αʔόΨεͷETHΛ͍࣋ͬͯͳ͍ͱ͍͚ͳ͍ • EthereumͷTxੜ͍͍ͤͥඵؒʹճ͔͠Ͱ͖ͳ͍ • DDoS߈ܸΛ৯Β͏ͱΨε͕ແବʹൃੜ͢Δ !9
۩ମతͳ࣮ ~ྫ~ • τʔΫϯͷΛ۩ମྫʹݟ͍ͯ͘͜ͱʹ͢Δ • Ϣʔβ͕HTTPͰτʔΫϯ͘ΕϦΫΤετΛ͢Δͱɺ αʔό͕εϚʔτίϯτϥΫτΛ࣮ߦͯ͠Ϣʔβʹ τʔΫϯΛૹΔ • TxੜճΛݮΒͨ͢Ίʹ֤ΞυϨεʹରͯ͠ૹΔ
ͷͰͳ͘ɺbatchTransfer(ಉ࣌ʹෳΞυϨεʹૹ ۚ͢Δ)ؔΛ࣮ߦ͢Δ !10
۩ମతͳ࣮ ~ઃܭ~ • ൿີ伴KMSΛͬͯ҆શʹཧ͢Δ • Ϣʔβ͔ΒͷϦΫΤετΛΩϡʔΠϯάͯ͠ɺͦΕΛࢹ ͢ΔαʔόΛཱ͓ͯͯ͘ • ࢹ͍ͯ͠Δαʔό͕TxΛੜͯ͠εϚʔτίϯτϥΫτ Λ࣮ߦ͢Δ
• ࢹ͍ͯ͠ΔαʔόΠϯλʔωοτ͔ΒΞΫηεͰ͖ͳ ͍Α͏ʹ͢Δ !11
۩ମతͳ࣮ ~ઃܭ~ !12
۩ମతͳ࣮ ~ઃܭ~ 1. HTTPϦΫΤετ͕ਖ਼͍͔͠ݕূ 2. ϦΫΤετͷEthereumΞυϨεݕূ(ෆ ਖ਼ͳΞυϨεΛ͘͡) 3. reCAPTCHAτʔΫϯͷݕূ(DDoSର ࡦ)
!13
۩ମతͳ࣮ ~ઃܭ~ 1. KMSʹൿີ伴ΛऔΓʹߦ͘ 2. PubSubʹೖ͍ͬͯΔෳͷΞυϨεʹ ରͯ͠τʔΫϯΛૹۚ͢Δɺͱ͍͏Tx Λੜ͢Δ(Ұ݅ͳ͍ͱ͖ऴྃ) 3. Web3ܦ༝ͰEthereumωοτϫʔΫʹ
ϒϩʔυΩϟετ͢ΔΑ͏ʹୡ 4. batchTransferͱ͍͏͕ؔωοτϫʔ ΫͰ࣮ߦ͞ΕΔ !14
۩ମతͳ࣮ ~ϋϚΓͲ͜ᶃ~ • TxੜNonce͕ඞཁͰߴεϧʔϓοτ͕ٻΊΒΕΔͳΒΠϯΫϦϝϯ τ͢ΔΈΛ࡞Δඞཁ͕͋Δ • Nonceʹ࣮ߦΞΧϯτͷTransactionCountΛ༻͍Δ͜ͱ͕ଟ͍ ͕ɺϒϩοΫ͕৽نੜ͞ΕΔεϐʔυΑΓૣ͘ॲཧ͢Δʹ TransactionCountΛNonceʹར༻Ͱ͖ͳ͍ •
͕ͨͬͯ͜͜͠ͰɺTransactionCountΛNonceʹར༻͢ΔͨΊ ʹɺϦΞϧλΠϜੑΛ٘ਜ਼ʹͯ͠batchͰॲཧ͢ΔίϯτϥΫτΛ ࡞ͨ͠ • ଞͷํ๏ͱͯ͠ίϯτϥΫτΛ࣮ߦ͢ΔΞΧϯτΛNݸʹ͢Ε εϧʔϓοτNഒʹͳΔ !15
۩ମతͳ࣮ ~ϋϚΓͲ͜ᶄ~ • EthereumΞυϨεͷݕূʹEcrecoverΛར༻͢Δ • ͦͷϢʔβຊʹͦͷΞυϨεʹରͯ͠ൿີ伴Λ͍࣋ͬͯͯॺ໊ Ͱ͖ΔΑͶɺͱ͍͏֬ೝΛͯ͠σλϥϝͳΞυϨεʹτʔΫϯΛ Β·͘ͷΛ͙ • ϝοηʔδΛൿີ伴Ͱॺ໊ͨ݁͠Ռ͔ΒΞυϨεΛநग़͢Δํ๏
• ϝοηʔδ͔͍͑ͬͯ͞ΕΞυϨε͕Θ͔Δ • EthereumAddress / message / sign Λड͚औͬͯॺ໊(sign)͔Β messageΛͬͯEthereumAddressΛܭࢉ͠ɺ͖ͬͯͨ EthereumAddressͱಉ͡ʹͳΕਖ਼ͩͱΈͳͤΔ !16
۩ମతͳ࣮ ~ϋϚΓͲ͜ᶅ~ • GCP(AppEngineϝΠϯ)Ͱ࡞͕ͬͨɺ૾Ҏ্ʹ੍͕ଟ͔ͬͨ • Cloud Functions͕ར༻Ͱ͖ΔͳΒAppEngineᶄͷ෦Cloud FunctionsͰΑ͔ͬͨ • αʔόϨεʹͯ͠Πϯλʔωοτ͔Βִ͔ͨͬͨ͠
• AWSͳΒLambdaҰ͔ • GAE StandardͰGoͷϨΠϠʔͷAPI͕ར༻Ͱ͖ͣEtheruemܥ ͷϥΠϒϥϦ͑ͳ͔ͬͨ • ݁ՌతʹFlexibleͷnodejsͰ࣮͢Δ͜ͱʹ !17
·ͱΊ • αʔόʹൿີ伴Λஔ͔ͳ͍ͱ͍͚ͳ͍ • => KMSΛར༻ • αʔόΨεͷETHΛ͍࣋ͬͯͳ͍ͱ͍͚ͳ͍ • =>
αʔόΛΠϯλʔωοτ͔ΒͰ͖Δִ͚ͩ͢Δ • EthereumͷTxੜ͍͍ͤͥඵؒʹճ͔͠Ͱ͖ͳ͍ • => batchॲཧ͕Ͱ͖ΔΑ͏ʹίϯτϥΫτΛ࣮͠ɺPubSubͰ ΩϡʔΠϯά͢Δ • DDoS߈ܸΛ৯Β͏ͱΨε͕ແବʹൃੜ͢Δ • => reCAPTCHAͰରԠ !18