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
0318Substrateプレゼン資料.pdf
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Stake Technologies
March 18, 2019
Technology
630
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
0318Substrateプレゼン資料.pdf
Stake Technologies
March 18, 2019
More Decks by Stake Technologies
See All by Stake Technologies
Plasma NFT Deposit Range
staketechnologies
0
80
Substrate ink!
staketechnologies
0
39
Plasma on Substrate @Fukuoka
staketechnologies
0
79
Sub0 Recap Japanese
staketechnologies
0
69
Plasm Introduction
staketechnologies
1
120
2019.01ブロックチェーントレンド
staketechnologies
0
42
Other Decks in Technology
See All in Technology
SteampipeとExcel Power QueryでAWS構成定義書の作成を自動化する
jhashimoto
0
180
OTel × Datadog で 「AI活用」を計測し、改善に繋げる
shihochan
2
640
レガシーな広告配信システムでのAI駆動開発/運用の挑戦
i16fujimoto
0
120
AI-DLCを “そのまま導入しなかった”話 ~組織に合わせてアジャストした 私たちの実践共有~
hiroramos4
PRO
1
430
Lightning近況報告
kozy4324
0
220
AI Agentをシステムに組み込む前にゆるく向き合ってみる
hayama17
0
140
When Platform Engineering Meets GenAI
sucitw
0
170
GitHub Copilot 最新アップデート – 「一歩先」の実践活用術
moulongzhang
5
1.7k
現場のトークンマネジメント
dak2
1
190
徹底討論!ECS vs EKS!
daitak
3
1.7k
FPC(フレキシブル)基板にZephyr実装してみた。
iotengineer22
0
170
AWS Security Agent といっしょに脅威モデリングをやってみよう
amarelo_n24
1
210
Featured
See All Featured
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
170
SEO for Brand Visibility & Recognition
aleyda
0
4.6k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
610
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
55k
Tell your own story through comics
letsgokoyo
1
960
How to Ace a Technical Interview
jacobian
281
24k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
How to train your dragon (web standard)
notwaldorf
97
6.7k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
66
55k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.7k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Transcript
Staked Substrate 2019.03.18 勉強会プレゼンスライド @StakedT
山下琢巳(@public_sate) 東京大学大学院 未踏クリエーター2018 昔の趣味 競技プログラミング (ACM-ICPC 2016-2017 World Final)
Splatoon(WiiU) (Splatoon 甲子園関東3位) スマブラ (地元最強) 週刊少年ジャンプ Twitter / 同人誌(C91) 自己紹介 2
SubstrateとはParity Technologiesが開発をしているOSSプロジェクト。ブロックチェーンを作 るとき必要となるコンポネントをフレームワーク化して提供している。 SubstrateはEthereumとPolkadotを作る上で学んだレッスンを活かし、その知見がツールに落とし 込まれている。そして、ユーザーはその恩恵を無料で手に入れることができるのだ。 Dr. Gavin Wood フレームワークを細かく見てみると、大きく分けて
Substrate Core Substrate Runtime Module Library(SRML) という2つによって構成されている。 Substrate Coreでブロックチェーンを作るのに最低限必要なコン ポネントを提供し、SRMLをプラグインすることによってブロックチェーンをカスタマイズすることがで きる。 3 Substrate Introduction
4 Overview
1. ブロックの同期 2. JSON-RPC API エンドポイント 3. 暗号技術に関するライブラリー 4. 安全で普及性の高い
libp2p 5. ストレージ 6. テレメトリー(リアルタイムの情報を遠隔サーバーに送信するための遠隔通信システム) 7. ライトクライアント 8. チェーンとバージョン管理 9. プラグイン可能なコンセンサス 10. JavaScript utils(JSのクラス) 11. トランザクションとブロック生成のメカニズム 12. WebAssenbly インタープレター 13. Polkadotによおるインターチェーンコネクティビティー 5 Substrate Core
1. Accounts & Balances(暗号通貨の残高を確認するアカウント) 2. Assets(ファンジブルアセット) 3. Consensus(コンセンサスのアップデート機能) 4. Contracts(スマートコントラクト機能)
5. Council(プライベート投票機能) 6. Democracy(公開投票機能) 7. Sessions(Authoritiesのローテーション機能) 8. Staking(PoS機能) 9. Timestamp(タイムスタンプ機能) 10. Treasury(DAO機能) 6 Substrate Runtime Module Library
Transaction Life Cycle 7 Substrate Node Transaction Tx Tx Tx
Tx Transaction 検証 Tx0 Tx1 Tx2 順序付け Block 実行 Substrate Nodes Broad Cast Client
Substrate is a fully extendable and customizable framework, it is
possible to define your own custom consensus algorithm. 例:GRANDPA: GHOST-based Recursive Ancestor Deriving Prefix Agreement 単一のブロックに投票するのではなく、highest blockに対して投票を行う。2/3を 得ているブロックが確定される。 • ブロックの生成とファイナリティを完全に分岐する。 • 並列に生成されたブロックについて、並列に検証する。 • 過半数の投票を得たブロックの最近祖先が最終確定する。 この図の場合、A,B,Cが確定される。 8 Consensus
9 インストールから起動 Reference: https://docs.substrate.dev/docs/creating-a-custom-substrate-chain
新しいモジュールを作る(demo:賭けゲーム) 10 今回のサンプルチェーンでは SRML で定義されているバランスを扱う Trait を継承する。 balances::Trait は system::Trait
を継承している。 Trait を定義する。 SRML で既に定義されている Trait をベースとして継承すると楽に書ける。
ストレージを定義する 11 decl_storage! マクロを用いて定義する。 Reference: https://wiki.parity.io/decl_storage 文法 <ストレージ名(UpperCamel)> get(<ストレージ名(snake_camel)>): build(<初期化式>):
<ストレージの型> キーバリューストレージ型の定義 <ストレージの型> := map <キー値の型> => <バリュー値の型>
ストレージを定義する 12 Map version
Rust で標準的に使用可能な型に加え以下の型が Storage の型として利用できるプリミティブな型として用意されている。 • type AccountId = <Signature as
Verify>::Signer = H256 • type AccountIndex = u32 • type Balance = u128 • type Block = Block<Header, UncheckedExtrinsic> • type BlockId = BlockId<Block> • type BlockNumber = u64 • type Hash = H256 • type Header = Header<BlockNumber, BlakeTwo256, DigestItem<Hash, SessionKey>> • type Index = u64 • type SessionKey = Ed25519AuthorityId • type Signature = Ed25519Signature • type Timestamp = u64 • type UncheckedExtrinsict = OpaqueExtrinsict 13 ストレージを定義する。 ハッシュ関数: BLAKE2
ストレージを定義する 14 今回のサンプルチェーンでは簡単な賭けゲームを作る。 - 賭け金を設定する Payment - 現在溜まっている金額 Pot -
乱数を生成するための変数 Nonce をストレージとして用意する。
モジュールを定義する 15 Reference: https://docs.substrate.dev/docs/decl_module
モジュールを定義する 16 ※おまじない ※イベント を呼び出す予約関数を使えるようにする。 自分で定義した 公開メソッド (エントリポイント) 第一引数は `origin`
で固定 型 Origin を省略して書く。 Origin の実際の中身は Root/SignedAccountId/Inherent のいずれか 返り値 Result は `Result<(), &'static str>` 成功時は Ok(()) を返す。
モジュールを定義する(注意) 17 1. トランザクションは実行中に中断されたとしても変更は永続的である。 a. 問題点 i. つまり、トランザクションが途中で終了してもロールバックが発生しない。 ii. 設計者にトランザクションのアトミック性の保証を委ねている。
b. 解決策 i. デザインパターンで解決を模索。 ii. コード解析で解決策を模索。 2. DoS 対策をすべきである。 a. 問題点 i. 計算コストが少なからず発生するため、実行者はそこにリスクが無い限り 容易に大量の関数を叩く攻撃が可能である。 ii. invalid な関数を大量に投げることでも DoS 攻撃が可能である。 b. 解決策 i. 利用者の balance から手数料を引くなどの設計をする。 ii. 攻撃者に対するペナルティを設ける。
モジュールを定義する 18 変更は必ず最後にまとめて行う
テストを書く 19 1. Test 環境に Origin を実装 2. Test 環境にTrait
を実装 Reference: https://github.com/satellitex/example_substrate/blob/master/runtime/src/demo.rs#L91 簡単のためテスト環境では AccountId は u64型
テストを書く 20 簡単のためテスト環境では AccountId を u64型で代用できる。
UI の設定 21 + + Reference: https://github.com/satellitex/example_ui_substrate
https://qiita.com/SotaWatanabe/items/f8c1d2cf6ff2606b42a9 22 参考 https://github.com/satellitex/example_substrate https://github.com/satellitex/example_ui_substrate 今回書いた Sample Code リンクまとめ 公式ドキュメント
> cargo doc --package substrate --open
4/9 DOT DAY in Tokyo で登壇します(いまのところ) 23 アナウンス