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
Solidityの複数コントラク ト連携を色々試してる話
Search
yudetamago
April 10, 2018
Programming
2.4k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Solidityの複数コントラク ト連携を色々試してる話
yudetamago
April 10, 2018
More Decks by yudetamago
See All by yudetamago
ブロックチェーンとIndexer
yudetamago
0
990
Unityでブロックチェーンアプリを作る
yudetamago
0
1.9k
DApps開発特有の_ハマりポイントご紹介.pdf
yudetamago
1
1.5k
スマートコントラクトの監査について
yudetamago
2
650
DApps開発事例 ~CryptoCrystal概要編~
yudetamago
3
350
Gasを誰が払うのか問題について
yudetamago
5
4.7k
Dapps開発におけるSoliidityのはまりどころ
yudetamago
3
2.5k
Other Decks in Programming
See All in Programming
Performance Optimization With LLMs
xleitix
0
230
Kotlinize Is Not Just Converting to Kotlin
chigichan24
1
210
Long Living Tokens, Die, Die, Die! (or: The One Ring is Banned in Modern)
sylph01
0
400
JIS keyboard support in Omarchy
lef237
0
180
Spec-driven Development with AI
simas
PRO
0
2.2k
エージェントを使い続けるためのメタワーク / Meta-work for keeping using the agent
rkaga
6
2.1k
Materialが消えた日 〜真っ白なFlutterキャンバスにRenderObjectで絵を描く〜
umigishiaoi
0
130
Spec-Driven Development - Why Vaadin Is the Perfect Fit
simas
PRO
0
200
最近”作らせてる” ローカルAIアプリの話
akit37
0
530
AI時代のシニアエンジニアとは
yosuke_furukawa
PRO
14
11k
自作Discord音声botをLambda MicroVMsに移行した話 / Migrating My Discord Voice Bot to Lambda MicroVMs
akihisaikeda
1
240
Seven New Principles of Software Engineering
yegor256
0
410
Featured
See All Featured
From π to Pie charts
rasagy
1
430
Between Models and Reality
mayunak
4
540
KATA
mclloyd
PRO
35
16k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.6k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
780
[RailsConf 2023] Rails as a piece of cake
palkan
59
7.1k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
350
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
510
The Cost Of JavaScript in 2023
addyosmani
55
10k
How to Talk to Developers About Accessibility
jct
2
600
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
730
Joys of Absence: A Defence of Solitary Play
codingconduct
1
570
Transcript
Solidityの複数コントラク ト連携を⾊々試してる話 blockchain.tokyo #7 LT 2018-04-10 ゆで卵 1
⾃⼰紹介 名前: ゆで卵 Twitter: @takayukib Github: yudetamago 所属: フリーランス •
blockchain.tokyo #6 でもLTしてた⼈ • ブロックチェーン界隈に来たのはわりと最近(2ヶ⽉前ぐらい) • 業務でDapps作ってます 2
複数Contract連携の経緯 • 複数のトークンを扱うような処理が出てきたので必然 的に複数のContractになった • しかも、複数のContractでアトミックな処理が必要に なった • トークンのContract同⼠だけで頑張って解決しようと したら難しくなったので他のContractを導⼊して⾒通
しを良くしようとした • そもそもContractの役割ってロジックとストレージの 管理で2種類あるよね? ←イマココ 3
• publicやexternalを付けた関数はどこからでも呼べてしまう • contractAの関数AとcontractBの関数Bを必ず同時に実⾏したい 場合は? 4 複数Contract間のアトミックな処理 Contract A Contract
B function A() public function B() public User Account User Account アトミックに 実⾏したい
アクセス制御の⽅法 • 呼び出し元(msg.sender)を制限するには、アドレスで判断する 5
例: Zeppelin-SolidityのOwnable • Ownableを継承してContractを作るとonlyOwnerという modifierが使えるようになる • onlyOwnerが付けられた関数はContractの作成者(デプロイし た⼈)しか呼べなくなる 6 https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/ownership/Ownable.sol
解決⽅法 7 Frontend Contract Backend Contract A Backend Contract B
function A() public onlyAcceptable function B() public onlyAcceptable function useAB() Owner setAcceptable(Frontend.address) setAcceptable(Frontend.address) https://github.com/yudetamago/solidity-example/blob/master/contracts/AtomicProcess.sol
(1Dapps開発者から⾒た)Contractの役割 • ロジック • アプリケーションの要件に応じて作るところ • ストレージの管理 • (ERC20のような)トークンの実装が特化してい るところ
•トークン以外の追加の情報の保存 8 これら2つの処理が混在しているので例えば…
例: 変数への代⼊とストレージ書き込み 9 オンメモリな変数への代⼊とストレージ書き込みがぱっと⾒では同じ
⽅針 • Contractではロジックとストレージへの書き込みが混 在している • ロジック⽤のContractとストレージ⽤のContractを分 けると⾒通しがよくなるのでは? • すでに考えている⼈がいた •
ref. https://medium.com/rocket-pool/upgradable- solidity-contract-design-54789205276d 10
利点/⽋点 • 利点: 柔軟性 • ロジック⽤のContractをいつでも変えられる(アップグレー ド可能) • ⽋点: gasコスト上昇
• Contractのサイズが⼤きくなるのでデプロイ時のgasが上が る • 外部Contract呼び出し(DELEGATECALL)のコストが⾼い 11
Contractを分けた時の図 12 Logic Contract Token A Token B Storage Contract
まとめ • Contractの数を少なくする(≒継承して作る)か多くする かはgasとの戦い • アクセス制御がアドレスベースでしか出来ないのは地 味につらい • (誰か良い⽅法知っていたら教えてください) 13
スライド中のコード: https://github.com/yudetamago/solidity-example