Slide 1

Slide 1 text

しっかり学ぶ ICOのベストプラクティス 2017/12/11 千賀 優作 Yusaku Senga DRI代表 [email protected] @syrohei

Slide 2

Slide 2 text

1. ICOを実現するには - ICO(イニシャルコインオファーリング)とは - ICOを技術的な視点から考えてみると - ICOを実現する時に困るのは… - 現時点での、ICOのベストプラクティスとは 2. RICOとTruffleフレームワークによるベストでナイスなICO開発 - Ethereumの大まかな仕組み - Ethereumの独自のウェークポイント - Solidity言語による開発の心得 - コントラクトアーキテクチャ - TruffleではじめるナイスなテストとCI - RICOによるProof of Donationによる寄付証明とイベントハンドリング - RICOとTruffle使ってスムーズなICOを実現する 3. まとめ

Slide 3

Slide 3 text

1. ICO を実現するには

Slide 4

Slide 4 text

- 新たな暗号通貨を作るプロジェクトをキックスタートすること - 暗号通貨を媒介とした、経済圏を構築すること - プロジェクトを直接支援すること ICO(イニシャルコインオファーリング)とは

Slide 5

Slide 5 text

ICOを技術的な視点から考えてみると - ICOのためのスマートコントラクトが必要 - ICO規格が統一されていない (EIP20Token以外) - 開発コストがそもそも高い (学習コストも高い)

Slide 6

Slide 6 text

- セキュリティ要件が不明確 - あつまった資金管理の複雑さ - そもそもUXが悪い ⇨ 改善するには、技術的な問題が山積み ⇨ 法的リスクもある。 “技術的にできること” と ”ビジネス的にできること”の ベストミックスを見つけるのが大変 ICOを実現する時に困るのは…

Slide 7

Slide 7 text

/ スムーズなICOを実現するための準備をする - 技術的にメンテナンスしやすいアプリケーション構成 - なりすましや、フィッシング詐欺に適切な対処が可能 / スマートコントラクトのメリットを強力に活用 - Trusted(信用可能な)アプリケーションで低コストで稼働 - 開発コミュニティとのコミュニケーションが円滑にできる / コードの信頼性を維持する - 絶対にバグを産まないコードを心がける 現時点での、ICOのベストプラクティスとは

Slide 8

Slide 8 text

2. RICOとTruffleフレームワークによる ベストでナイスなICO開発

Slide 9

Slide 9 text

- Ethereumのトランザクションは、ABI encodeされたシーケンスデータを含め ることができる - EVMは入力としてABI encoded dataを持ち、Solidity、Viper、Serpentなど 各々のコンパイラでビルドされたアプリケーションを 実行する - EVMの実行結果はアドレスごとにmerkle-patricia-treeに含まれ、ルートの 状態ハッシュのみがEthereumのblockに書き込まれる - Ethereumの最新Blockには全てのアカウントの状態のハッシュのみが保存 され、BitcoinのようなUTXOは存在しない Ethereumの大まかな仕組み

Slide 10

Slide 10 text

- Ethereumのtxは一つのtxで一つのmethodしか実行できない - スケールさせるために、設計を考え直すこともしばしば - スマートコントラクトの無限ループが発生しやすい - 再帰的呼び出しに弱い (The DAO の 攻撃) - 設計が複雑になりやすい - アプリケーションの挙動を正確に把握しないと非効率で ガスが無駄になりやすい どう向き合うか? ⇨ ベストなコントラクトアーキテクチャを手探りで探すしかない   (資金を失うリスクがあってもトライアンドエラーを重ねる) Ethereum独自のウェークポイント

Slide 11

Slide 11 text

- 構造体が使いにくい。構造体の代わりにコントラクトを新規に生成 - function ()は多用しない (無限ループの脆弱性) - できる限り外部変数に依存しない設計を考える Solidity言語によるICO開発の心得

Slide 12

Slide 12 text

- 条件分岐 (if else) を多用しすぎるとテストしづらくなるので、 適度に列挙型enumで状態遷移を明確にする - 複数のコントラクトのパーミッションを分け、疎結合の関係を 心がける - 常にガスの利用を意識した処理を心がける (ストレージをなるべく使わない) コントラクトアーキテクチャ

Slide 13

Slide 13 text

- TruffleはSolidityベースのスマートコントラクトを作成するのに最適 - 最低限のコントラクト管理機能があり、テストも簡単にかける - Truffleにデバッガーが搭載されたことで、コントラクトの状態を 把握しながら開発がしやすくなった - Truffleを使ったICOコントラクトが量産されてきており、実用的 Truffleで始めるナイスなテストとCI

Slide 14

Slide 14 text

- RICOは、DRIが開発している ”ICOに最適化されたオープンソース フレームワーク” - いわゆる”DecentralizedなICO”実現の手法を提案している - RICOの基本的なアーキテクチャは、Proof of Donation (寄付の証明) をトリガーとして実行する”スマートPoD”と呼ばれる マイクロコントラクトサービス - 様々なPoDを作成でき、ICOのみならず汎用的に活用できる RICOにおける、Proof of Donationによる寄付証明と イベントハンドリング

Slide 15

Slide 15 text

RICOとTruffle使ってスムーズなICOを実現する - Truffleを使って独自にカスタマイズしたPoDを、 新規に作成してみましょう - RICOにカスタマイズしたPoDを接続して、 テストしてみましょう - 実際に、テストネットでICOコントラクトを デプロイしてみましょう

Slide 16

Slide 16 text

3. まとめ - 結局ICOコントラクトどう開発すればいいのか? - Truffleを使えばだいたいカバレッジできる、RICOは開発コストをかなり 下げてくれる - セキュリティの担保とICOのユーザビリティは両立可能 - 多くのプロジェクトが困っているのは法的制約やコミュニケーションの複雑 性 (telegram, slack, rocketchat の使い方が大変) - ICOコントラクトがしっかりしていれば、チームの代わりに コントラクトが信用を担保してくれる

Slide 17

Slide 17 text

参考文献 - Solidityの仕様など  - https://solidity.readthedocs.io/en/latest/ - EVMのスタック、メモリロード、ストレージについて - https://solidity.readthedocs.io/en/latest/introduction-to-smart-contracts.html#storage-memory- and-the-stack - ERC-642 Fairer token crowdsale with proportional token allocation - https://github.com/ethereum/EIPs/issues/642 - RICOのgithub - https://github.com/DRI-network/RICO - Smart-contract-best-practices-solidity - https://lightrains.com/blogs/smart-contract-best-practices-solidity - ABI-encodingのシーケンス仕様 - http://solidity.readthedocs.io/en/latest/abi-spec.html?highlight=abi#formal-specification -of-the-encoding

Slide 18

Slide 18 text

告知 DRIのコミュニティSlackができました。誰でも参加できます! - RICO使いたいけどわからない。といった質問も受け付けています。 - 日本語でのやり取りは #rico_ja で - 「どうすればよりよいICOが実現するか」などのトピックを議論する部屋もあ ります。ただし、個別のICOの相談は受け付けません。 → 詳しくは以下をご覧ください   RICOのGithub もしくは https://dri-slack.now.sh/