Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
DAppsを支えるバックエンド開発の話
Search
jkcomment
November 10, 2018
Technology
940
2
Share
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.3k
Ethereumを支えるネットワークの話
jkcomment
11
5.3k
Other Decks in Technology
See All in Technology
Chasing Real-Time Observability for CRuby
whitegreen
0
260
弁護士ドットコム株式会社 エンジニア職向け 会社紹介資料
bengo4com
1
180
ハーネスエンジニアリングをやりすぎた話 ~そのハーネスは解体された~
gotalab555
5
1.8k
UIライブラリに依存しすぎないReact Native設計を目指して
grandbig
0
140
AzureのIaC管理からログ調査まで、随所に役立つSkillsとCustom-Instructions / Boosting IaC and Log Analysis with Skills
aeonpeople
0
260
データを"持てない"環境でのアノテーション基盤設計
sansantech
PRO
1
140
Oracle AI Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
4
2.4k
[OpsJAWS 40]リリースしたら終わり、じゃなかった。セキュリティ空白期間をAWS Security Agentで埋める
sh_fk2
3
250
AI駆動1on1〜AIに自分を育ててもらう〜
yoshiakiyasuda
0
150
国内外の生成AIセキュリティの最新動向 & AIガードレール製品「chakoshi」のご紹介 / Latest Trends in Generative AI Security (Domestic & International) & Introduction to AI Guardrail Product "chakoshi"
nttcom
4
1.4k
Route 53 Global Resolver で高額課金発生!
otanikohei2023
0
120
クラウドネイティブな開発 ~ 認知負荷に立ち向かうためのコンテナ活用
literalice
0
150
Featured
See All Featured
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
270
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
The Limits of Empathy - UXLibs8
cassininazir
1
310
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Agile that works and the tools we love
rasmusluckow
331
21k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.5k
Embracing the Ebb and Flow
colly
88
5k
Site-Speed That Sticks
csswizardry
13
1.2k
Leo the Paperboy
mayatellez
7
1.7k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
540
Automating Front-end Workflow
addyosmani
1370
200k
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 まとめ
ご清聴ありがとうございました