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開発におけるSoliidityのはまりどころ
Search
yudetamago
March 16, 2018
Technology
3
2.2k
Dapps開発におけるSoliidityのはまりどころ
yudetamago
March 16, 2018
Tweet
Share
More Decks by yudetamago
See All by yudetamago
ブロックチェーンとIndexer
yudetamago
0
890
Unityでブロックチェーンアプリを作る
yudetamago
0
1.7k
DApps開発特有の_ハマりポイントご紹介.pdf
yudetamago
1
1.4k
スマートコントラクトの監査について
yudetamago
2
590
DApps開発事例 ~CryptoCrystal概要編~
yudetamago
3
300
Gasを誰が払うのか問題について
yudetamago
5
4.4k
Solidityの複数コントラク ト連携を色々試してる話
yudetamago
1
2.2k
Other Decks in Technology
See All in Technology
人間性を捧げる生成AI時代の技術選定
yo4raw
1
920
UIパフォーマンス最適化: AIを活用して100倍の速度向上を実現した事例
kinocoboy2
1
640
SONiCで構築・運用する生成AI向けパブリッククラウドネットワーク
sonic
1
460
経済メディア編集部の実務に小さく刺さるAI / small-ai-with-editorial
nkzn
2
500
4社統合におけるマスタデータ管理に立ち向かう / Towards master data management in the four-company integration
carta_engineering
0
220
LLMの開発と社会実装の今と未来 / AI Builders' Community (ABC) vol.2
pfn
PRO
2
220
Amplifyとゼロからはじめた AIコーディング。失敗と気づき
mkdev10
1
160
Coding Agentに値札を付けろ
watany
3
590
Docker Compose で手軽に手元環境を実現する / Simplifying Local Environments with Docker Compose #CinemaDeLT
nabeo
0
270
TanStack Start 技術選定の裏側 / Findy-Lunch-LT-TanStack-Start
iktakahiro
1
170
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
3
720
Previewでもここまで追える! Azure AI Foundryで始めるLLMトレース
tomodo_ysys
2
760
Featured
See All Featured
Fontdeck: Realign not Redesign
paulrobertlloyd
84
5.5k
Rebuilding a faster, lazier Slack
samanthasiow
81
9k
Fireside Chat
paigeccino
37
3.4k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.6k
How to Think Like a Performance Engineer
csswizardry
23
1.6k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
12k
How STYLIGHT went responsive
nonsquared
100
5.5k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
227
22k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2k
Balancing Empowerment & Direction
lara
0
43
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
48
5.4k
Transcript
DApps開発における Solidityのはまりどころ blockchain.tokyo #6 LT 2018-03-16 ゆで卵 1
⾃⼰紹介 名前: ゆで卵 Twitter: @takayukib Github: yudetamago 所属: フリーランス •
主にインフラ(AWS, GCP)・サーバサイド(Rails)の⼈ • ブロックチェーン界隈に来たのはわりと最近 • CryptoCrystalの中の⼈ (余談:先⽇まで渋⾕の緑の会社にいました) 2
DAppsとは?(おさらい) • Decentralized Applications(⾮中央集権型アプリケーション) • ちゃんとした定義としてはこちら。 • https://github.com/DavidJohnstonCEO/DecentralizedApplications • Ethereumで⾔えば…
• コードは全てコントラクトとして公開されている(=管理者が秘密に しているわけではない)。 • アプリケーションのデータもコントラクトを通してブロックチェーン 上に記録されている(=管理者しかアクセス出来ないサーバなどに保 存されているわけではない)。 3
Truffle スマートコントラクトの開発・テスト・デプロイ・フロントエン ドとの統合⽀援フレームワーク • コントラクトの単体テスト • プライベートネットの構築 • プライベートネットへのコントラクトのデプロイ https://github.com/trufflesuite/truffle
4
⾊々前置きしたのですが、 このスライドではほとんど Solidityの話しかしません。 5
Solidity周りのはまりどころ •⼩数を含む計算 •他コントラクト呼び出し時のmsg.sender •変数の初期値 •structのreturn 6
⼩数を含む計算 • Solidityにはまだ⼩数を表す型がないので、ちょっと⼯夫する 必要あり。 • GithubのIssueにはかなり前から挙げられていて、現在実装中 の模様。 • https://github.com/ethereum/solidity/issues/409 •
https://github.com/ethereum/solidity/pull/3389 7
⼩数を含む計算 https://ethereum.stackexchange.com/questions/18870/is-there-a-good-way-to-calculate-a-ratio-in- solidity-since-there-is-no-float-do 例えばパーセントの計算をしたい場合は、以下のような計算をする。 8 percent(101, 450, 3) => 224
// 22.4%
他コントラクト呼び出し時のmsg.sender • コントラクト呼び出し元のアドレスはmsg.senderで取れる。 • ただし、あるコントラクト内から別のコントラクトのメソッ ドを呼び出した場合は、コントラクト⾃体のアドレスになる。 ContractA ContractB Account msg.sender
msg.sender Address: 0xa88a49a814a04.... Address: 0xf222e7a6a6255.... Address: 0xa88a49a814a04c.... ContractB内で元のコントラクトを実⾏した⼈を知るには? 9
他コントラクト呼び出し時のmsg.sender • トランザクションに署名した⼈のアドレスが⼊るであろうと想 定されている tx.origin という変数が⽤意されている。 • tx.originはセキュリティ上の問題があるので、絶対に使っては いけない。 •
参考: https://consensys.github.io/smart-contract-best- practices/recommendations/#avoid-using-txorigin →メソッドを呼び出す時に引数にmsg.senderを渡す 10
他コントラクト呼び出し時のmsg.sender 11
変数の初期値 Solidityにはnullのような概念がないので、定義した変数は0、空 ⽂字、falseといった値で初期化されている。 https://ethereum.stackexchange.com/questions/40559/what-are-the-initial-zero-values-for- different-data-types-in-solidity 12
変数の初期値 keyが存在するかなどのチェックは0(空⽂字、false等)かどう かで⾏う。 (この辺りはGo⾔語のintやstringの感覚に近いかもしれない) 13
structのreturn • Solidityではまだstructを(外部に)returnすることが出来ないの で、要素を並べて返す必要あり。 14 https://ethereum.stackexchange.com/questions/36229/invalid-solidity-type-tuple
今後やるかもしれないこと • ローカルだけではなくて、社内共⽤のプライベートネット • DAppsと、コントラクトだけだと扱うのが難しい情報を配信す るバックエンドサーバーとのE2Eテスト環境 • e.g. 画像配信サーバ、キャッシュサーバ 15
参考⽂献 • Ethereum Smart Contract Best Practices • https://consensys.github.io/smart-contract-best-practices/ •
How does Ethereum work, anyway? • https://medium.com/@preethikasireddy/how-does-ethereum-work- anyway-22d1df506369 16