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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
yudetamago
March 16, 2018
Technology
2.4k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Dapps開発におけるSoliidityのはまりどころ
yudetamago
March 16, 2018
More Decks by yudetamago
See All by yudetamago
ブロックチェーンとIndexer
yudetamago
0
970
Unityでブロックチェーンアプリを作る
yudetamago
0
1.9k
DApps開発特有の_ハマりポイントご紹介.pdf
yudetamago
1
1.5k
スマートコントラクトの監査について
yudetamago
2
640
DApps開発事例 ~CryptoCrystal概要編~
yudetamago
3
340
Gasを誰が払うのか問題について
yudetamago
5
4.7k
Solidityの複数コントラク ト連携を色々試してる話
yudetamago
1
2.4k
Other Decks in Technology
See All in Technology
クラウドファンディング版StackChan 3体(4体)をインタラクティブな体験型作品にして展示もした話 / スタックチャンお誕生日会2026
you
PRO
0
250
FinOps X 2026 Recap from Engineer Side #JapanFinOps
chacco38
0
170
打造你的 AI 工作流:Agent Skill + MCP 實戰工作坊
appleboy
0
230
デジタル・デザイン構想 by Sayaka Ishizuka
y150saya
0
110
From Prompt Engineering to Loop Engineering
shibuiwilliam
1
290
SRE歴2ヶ月でも開発6年の知見を活かして、チームで止まっていた環境改善を前に進めた話
a_ono
0
140
ご挨拶「10周年を迎える共創ラボのこれまでとこれから」
iotcomjpadmin
0
160
從觀望到全公司落地:AI Agentic Coding 導入實戰 — 流程整合與安全治理
appleboy
0
220
小さいから、全部わかる。— 常駐AI "xangi" のすすめ
sugupoko
0
180
AI-DLCを “そのまま導入しなかった”話 ~組織に合わせてアジャストした 私たちの実践共有~
hiroramos4
PRO
1
460
AWS Security Hub CSPMの成功・失敗体験
cmusudakeisuke
0
610
『AIに負けない』より『AIと遊ぶ』」〜ワクワクが最強のテスト・QA学習戦略_公開用
odan611
1
190
Featured
See All Featured
The Pragmatic Product Professional
lauravandoore
37
7.3k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
870
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
170
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
How to make the Groovebox
asonas
2
2.2k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.4k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Designing for Timeless Needs
cassininazir
1
260
Rebuilding a faster, lazier Slack
samanthasiow
85
9.5k
The Curse of the Amulet
leimatthew05
2
13k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
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