しっかり学ぶICOのベストプラックティス

F3f79bc832cd80f7935923b0414b2343?s=47 syrohei
December 11, 2017

 しっかり学ぶICOのベストプラックティス

ICOを行うためにどのようなコードを書けば良いのか?心がけるポイントと存在するリスクについて解説します。 オープンソースフレームワークであるtruffleとRICOフレームワークで公平なICOを実現する方法などを合わせて解説しています。合わせてSlackコミュニティもはじめました。https://dri-slack.now.sh/

F3f79bc832cd80f7935923b0414b2343?s=128

syrohei

December 11, 2017
Tweet

Transcript

  1. しっかり学ぶ ICOのベストプラクティス 2017/12/11 千賀 優作 Yusaku Senga DRI代表 senga@dri.network @syrohei

  2. 1. ICOを実現するには - ICO(イニシャルコインオファーリング)とは - ICOを技術的な視点から考えてみると - ICOを実現する時に困るのは… - 現時点での、ICOのベストプラクティスとは

    2. RICOとTruffleフレームワークによるベストでナイスなICO開発 - Ethereumの大まかな仕組み - Ethereumの独自のウェークポイント - Solidity言語による開発の心得 - コントラクトアーキテクチャ - TruffleではじめるナイスなテストとCI - RICOによるProof of Donationによる寄付証明とイベントハンドリング - RICOとTruffle使ってスムーズなICOを実現する 3. まとめ
  3. 1. ICO を実現するには

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

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

  6. - セキュリティ要件が不明確 - あつまった資金管理の複雑さ - そもそもUXが悪い ⇨ 改善するには、技術的な問題が山積み ⇨ 法的リスクもある。 “技術的にできること” と

    ”ビジネス的にできること”の ベストミックスを見つけるのが大変 ICOを実現する時に困るのは…
  7. / スムーズなICOを実現するための準備をする - 技術的にメンテナンスしやすいアプリケーション構成 - なりすましや、フィッシング詐欺に適切な対処が可能 / スマートコントラクトのメリットを強力に活用 - Trusted(信用可能な)アプリケーションで低コストで稼働

    - 開発コミュニティとのコミュニケーションが円滑にできる / コードの信頼性を維持する - 絶対にバグを産まないコードを心がける 現時点での、ICOのベストプラクティスとは
  8. 2. RICOとTruffleフレームワークによる ベストでナイスなICO開発

  9. - Ethereumのトランザクションは、ABI encodeされたシーケンスデータを含め ることができる - EVMは入力としてABI encoded dataを持ち、Solidity、Viper、Serpentなど 各々のコンパイラでビルドされたアプリケーションを 実行する

    - EVMの実行結果はアドレスごとにmerkle-patricia-treeに含まれ、ルートの 状態ハッシュのみがEthereumのblockに書き込まれる - Ethereumの最新Blockには全てのアカウントの状態のハッシュのみが保存 され、BitcoinのようなUTXOは存在しない Ethereumの大まかな仕組み
  10. - Ethereumのtxは一つのtxで一つのmethodしか実行できない - スケールさせるために、設計を考え直すこともしばしば - スマートコントラクトの無限ループが発生しやすい - 再帰的呼び出しに弱い (The DAO

    の 攻撃) - 設計が複雑になりやすい - アプリケーションの挙動を正確に把握しないと非効率で ガスが無駄になりやすい どう向き合うか? ⇨ ベストなコントラクトアーキテクチャを手探りで探すしかない   (資金を失うリスクがあってもトライアンドエラーを重ねる) Ethereum独自のウェークポイント
  11. - 構造体が使いにくい。構造体の代わりにコントラクトを新規に生成 - function ()は多用しない (無限ループの脆弱性) - できる限り外部変数に依存しない設計を考える Solidity言語によるICO開発の心得

  12. - 条件分岐 (if else) を多用しすぎるとテストしづらくなるので、 適度に列挙型enumで状態遷移を明確にする - 複数のコントラクトのパーミッションを分け、疎結合の関係を 心がける -

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

  14. - RICOは、DRIが開発している ”ICOに最適化されたオープンソース フレームワーク” - いわゆる”DecentralizedなICO”実現の手法を提案している - RICOの基本的なアーキテクチャは、Proof of Donation

    (寄付の証明) をトリガーとして実行する”スマートPoD”と呼ばれる マイクロコントラクトサービス - 様々なPoDを作成でき、ICOのみならず汎用的に活用できる RICOにおける、Proof of Donationによる寄付証明と イベントハンドリング
  15. RICOとTruffle使ってスムーズなICOを実現する - Truffleを使って独自にカスタマイズしたPoDを、 新規に作成してみましょう - RICOにカスタマイズしたPoDを接続して、 テストしてみましょう - 実際に、テストネットでICOコントラクトを デプロイしてみましょう

  16. 3. まとめ - 結局ICOコントラクトどう開発すればいいのか? - Truffleを使えばだいたいカバレッジできる、RICOは開発コストをかなり 下げてくれる - セキュリティの担保とICOのユーザビリティは両立可能 -

    多くのプロジェクトが困っているのは法的制約やコミュニケーションの複雑 性 (telegram, slack, rocketchat の使い方が大変) - ICOコントラクトがしっかりしていれば、チームの代わりに コントラクトが信用を担保してくれる
  17. 参考文献 - 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
  18. 告知 DRIのコミュニティSlackができました。誰でも参加できます! - RICO使いたいけどわからない。といった質問も受け付けています。 - 日本語でのやり取りは #rico_ja で - 「どうすればよりよいICOが実現するか」などのトピックを議論する部屋もあ

    ります。ただし、個別のICOの相談は受け付けません。 → 詳しくは以下をご覧ください   RICOのGithub もしくは https://dri-slack.now.sh/