Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
DAppsを支えるバックエンド開発の話
Search
jkcomment
November 10, 2018
Technology
970
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
DAppsを支えるバックエンド開発の話
20181110 hi-con登壇資料
jkcomment
November 10, 2018
More Decks by jkcomment
See All by jkcomment
なぜBlockchainはRustを選ぶのか #roppongirs / why-blockchain-chooses-rust
jkcomment
2
2.4k
Ethereumを支えるネットワークの話
jkcomment
11
5.4k
Other Decks in Technology
See All in Technology
Building Audio Plugin Ecosystem for Android in 2026
atsushieno
2
150
現場を動かすAIエージェント#2_製造業現場でのAI活用から見た、ハマる罠と実践知
kintotechdev
2
170
Sizing, Benchmarking and Performance Tuning Apache Flink Clusters
rmetzger
0
110
AWS構成から考えるWebセキュリティ ― WordPressの構築経験から考える公開範囲と更新運用【JAWS FESTA 2026 in AKITA】
cscengineer
PRO
1
190
AWSを利用する上で知っておきたい名前解決の話 2026
nagisa53
4
2.4k
You Have Agency(サンキュー、Ruby)
snoozer05
PRO
5
680
バックオフィスに染み出すTypeScript ── clasp で安全に仕組みを作る
nealle
1
180
視野はAIに、視座は人に / ai-for-breadth-humans-for-perspective
nkzn
6
3.1k
AI時代のエンジニアの情報発信〜個人の発信を組織の力に変える〜
ryo_kawamata
1
7.3k
生き様としてのSRE
hokkai7go
1
170
Deep Data Security 機能解説
oracle4engineer
PRO
3
1k
Oracle Database Security 詳細解説
oracle4engineer
PRO
2
250
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Mind Mapping
helmedeiros
1
430
Code Reviewing Like a Champion
maltzj
529
40k
How STYLIGHT went responsive
nonsquared
100
6.4k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.4k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Raft: Consensus for Rubyists
vanstee
143
7.8k
The Pragmatic Product Professional
lauravandoore
37
7.5k
How GitHub (no longer) Works
holman
316
150k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
520
The Curious Case for Waylosing
cassininazir
1
610
Transcript
DAppsを支えるバックエンド開発の話
金 志京 ・合同会社DMM.com テクノロジー本部 ブロックチェーン研究室 リードエンジニア ・ブロックチェーンとか、ネットワークとか ・ロードバイク、育児、(スニーカー) @jkcomment
Session01 DApps開発で悩んだこと アジェンダ Session02 DApps開発でハマったこと Session03 まとめ
Session01 DApps開発で悩んだこと Session02 DApps開発でハマったこと Session03 まとめ
すべてのデータをコントラクトに持たせるのは難しいのでは? DApps開発におけるデータの制御
すべてのデータをコントラクトに持たせるのは難しいのでは? ・ガスコスト ・言語仕様による難しさ DApps開発におけるデータの制御
すべてのデータをコントラクトに持たせるのは難しいのでは? ・ガスコスト ・言語仕様による難しさ DApps開発におけるデータの制御 解決策
すべてのデータをコントラクトに持たせるのは難しいのでは? ・ガスコスト ・言語仕様による難しさ DApps開発におけるデータの制御 解決策 ・コントラクトやめる
すべてのデータをコントラクトに持たせるのは難しいのでは? ・ガスコスト ・言語仕様による難しさ DApps開発におけるデータの制御 解決策 ・コントラクトやめる
すべてのデータをコントラクトに持たせるのは難しいのでは? ・ガスコスト ・言語仕様による難しさ DApps開発におけるデータの制御 解決策 ・コントラクトやめる
すべてのデータをコントラクトに持たせるのは難しいのでは? ・ガスコスト ・言語仕様による難しさ DApps開発におけるデータの制御 解決策 ・コントラクトやめる ・コントラクト + データベース(RDB) ・コントラクト
+ Swarm(もしくはIPFS)とか
すべてのデータをコントラクトに持たせるのは難しいのでは? ・ガスコスト ・言語仕様による難しさ DApps開発におけるデータの制御 解決策 ・コントラクトやめる ・コントラクト + データベース(RDB) ・コントラクト
+ Swarm(もしくはIPFS)とか <- 決定!
2種類の処理が必要 ・コントラクト側のデータ処理 ・バックエンド側のデータ処理 DApps開発におけるデータの制御
考えられるデータ制御フロー DB -> コントラクト順 同時にやる -> 同期 コントラクト -> DB順
同時にやる -> 同期
同時にやる -> 同期 片方の処理が失敗するとデータ不整合が発生する!
DB -> コントラクト順
DB -> コントラクト順 秘密鍵の管理が、、
コントラクト -> DB順
コントラクト -> DB順 やってみますか!
Session01 DApps開発で悩んだこと Session02 DApps開発でハマったこと Session03 まとめ
Questの開発環境 開発環境 ・環境構築: Docker ・言語: Go(パッケージ管理はdep) ・ライブラリ(?): go-ethereum ・privatenet: ganache-cli
-> geth
開発環境 ・環境構築: Docker ・言語: Go(パッケージ管理はdep) ・ライブラリ(?): go-ethereum ・privatenet: ganache-cli ->
geth Questの開発環境 なぜGoなのか ・そこそこ速くて、かつ覚えやすい言語だから ・go-ethereumがGoで実装されている
ganache-cliとGoは相性が悪い!? ・ganache-cliから値(レシートとか)を取得しようとすると、 というエラーが発生。ganache-cli + truffleは問題なく動作する ハマったこと1 原因 ・ganache-cliは長さが0のデータフィールドの場合、0x0を返す (0xが正しい。go-ethereumは0xに0がつくとエラーとみなす) まぁ、ganache-cliのバグですねー
解決策 ・ganache-cliをやめました ローカルにgethを入れてテストしたらちゃんと動きました!! ハマったこと1
解決策 ・ganache-cliをやめました ローカルにgethを入れてテストしたらちゃんと動きました!! . . . 最近対応されたっぽい https://github.com/trufflesuite/ganache-core/issues/51 ハマったこと1
gethにしたらコントラクトのイベントが検知できない ・イベントがきたらDBを更新する ・ganache-cliはイベントの検知ができたけど、gethだとできない ・geth + web3.jsはイベント検知ができるのに!? ハマったこと2 原因 ・gethのエンドポイントのプロトコルがhttpの場合、 イベントの検知ができない(エラー:
notifications not supported) ・web3.jsの場合、0.x系はlong pollingでイベント検知(1.0系はws)
解決策 ・gethの起動コマンドを叩く際にws(ローカル・Remote)か、もしくは ipc(ロー カルのみ)のオプションを追加する 例 ハマったこと2
getTransactionReceiptのstatusが取得できない ・Transactionの確認のため使う (0: 失敗、1: 成功) ハマったこと3
getTransactionReceiptのstatusが取得できない ・Transactionが成功したかどうかの確認のため使う (0: 失敗、1: 成功) ハマったこと3 <- そもそもフィールドがない
原因 ・genesis.jsonのconfigにByzantiumBlockの設定しないとstatusは 取得できない ・configの内容はブロックチェーンのバージョンを意味 ハマったこと3
解決策 ・genesis.jsonのconfigにByzantiumBlock:0を設定する ハマったこと3 <- これ!
Contractで定義されているeventにindexedがついている フィールドがある場合、その値の取得方法がわからない ハマったこと4 <- これ!
Goで取得したイベント内容 通常の場合、Dataをunpackして内容を取得 ハマったこと4
・Solidityのイベント ・実行 ハマったこと4
Goで取得したイベント内容 unpackしても_creatorは0x00000000000000000000000... ハマったこと4
Goで取得したイベント内容 indexedの場合、Topicsを確認 ハマったこと4
Goで取得したイベント内容 ①: 定義したイベントをKeccak256で求めたハッシュ値 crypto.Keccak256Hash("RoomCreated(address,address,uint256)") ②: indexedがついているフィールド値をKeccak256で求めたハッシュ値 common.BytesToAddress(event.Topics[1].Bytes()) ->
_creatorのアドレス ハマったこと4 ① ②
これ以外にもハマったこと たくさんあったのですが、、、T-T 実は、、、
Session01 DApps開発で悩んだこと Session02 DApps開発でハマったこと Session03 まとめ
Go言語でのDApps開発はあり(最初大変だったけど!) コントラクトですべてのデータを持つ必要はない(と思う!) データベースとの組み合わせも良い選択肢である(はず!) もっともっと良いもの作っていきましょう:D まとめ
ご清聴ありがとうございました