はじめに
ConsenSys社から、イーサリアム開発用ツールリスト(GitHub)が公開されています。ConsenSys社は、ブロックチェーン技術として主にイーサリアムベースの分散型アプリケーションの開発を幅広く手掛ける企業で、UPort、Balanc3、Gnosis、Singular等の開発に寄与するなど、世界規模のブロックチェーンベンチャー企業です。
本記事では、そんなConsenSys社が公表したイーサリアム開発に使用するツールを把握する事で、世界のイーサリアム開発手法トレンドを学ぶ一助となるべく作成しました。
本記事は、過去にコンセンサス・ベイスが主宰していたオンラインサロンの記事です。記事は2017年~2018年にかけて執筆されたため、一部は、既に古くなっている可能性があります。あらかじめご了承ください。
スマートコントラクト用言語
スマートコントラクト用のプログラミング言語はSolidityが広く使われていますが、他にもスマートコントラクト用のプログラミング言語がいくつか存在し、現在開発が進められている状態です。
Solidity
Solidityは現在最も主要なスマートコントラクト開発言語です。言語構文がJavascriptに似ており、静的型付言語となっています。Solidityはsolcと呼ばれるSolidity用のコンパイラなどを通して、実行な可能な低級言語のEVM(Ethereum Virtual Machine)コードに変換しEVM上でプログラムが実行されます。Solidityは他のコントラクト言語と比べ、実利用が進んでおり、様々なイーサリアム上で動作するアプリケーションで利用されています。
Solidity
https://solidity.readthedocs.io/en/latest/
Bamboo
Bambooは、Solidityに代わる新しいスマートコントラクト開発言語です。a language for morphing smart contracts(スマートコントラクトをモーフィングする言語)と言われており、その文法は状態遷移を可視しやすい構文で、”The DAO事件”で問題となった “再起呼び出しによる攻撃” をデフォルトで回避できるとされています。まだコンパイラにバグが残っているらしく、今後の安定板リリースに期待です。
Bamboo – github
https://github.com/pirapira/bamboo
Vyper
Vyperはプログラミング言語Pythonのようなシンプルで書き易い新たなスマートコントラクト開発言語です。Vyperの指針と最終目標はセキュアなスマートコントラクトの開発、言語仕様・コンパイラのユーザービリティの向上、コードの可読性の向上(実装のミスを減らすため)です。自由な言語機能であるModifiersやClass inheritanceですが、その自由度により複雑なコントラクトを作成する原因となっている側面があります。そして、その複雑さがコントラクトの脆弱性を引き起こします。VyperではModifiersなどを削除し、脆弱性の解消に尽力しています。
Vyper – github
https://github.com/ethereum/vyper
LLL
LLL(Lisp Like Language)は、関数型言語Lispの構文を踏襲したコントラクト開発言語です。Solidityより低レベルの言語で、すべてのEVMコードに直接アクセスできる為、より小さなバイトコードにコンパイルできる等の特徴があります。gas節約の為、局所的にLLLを導入するといった選択肢もありうるでしょう。
LLL – medium
https://media.consensys.net/an-introduction-to-lll-for-ethereum-smart-contract-development-e26e38ea6c23
Flint
Fintは安全性の高いスマートコントラクトの記述を可能にする静的型付けされたプログラミング言語です。その安全性の高さはasset typeやstate transaction、safe integersなどによるものです。Fintはコントラクト内のセンシティブな関数を誰が利用できるか設定することが可能であったり、不可分操作をアセットに適用しアセットの作成や複製を不可能にし、それにより二重支払いやRe-entrancy関連の攻撃を防ぎます。現在、開発が進められている状態です。
Flint
https://docs.flintlang.org/
フレームワーク
フレームワークは、開発を行う際に必ず必要な機能(画面遷移、汎用ライブラリ等)をまとめて提供してくれるものです。ソフトウェア開発にフレームワークは不可欠ですが、イーサリアム用フレームワークも複数種類用意されています。
Truffle
Consensysによって開発されたスマートコントラクトの開発、テスト、デプロイのためのフレームワークです。アプリケーション開発に特化したもので、オープンなネットワークを使用する際には主にgethを使用します。特徴として、スマートコントラクトのコンパイル、リンク、デプロイ、バイナリ管理が挙げられます。また、拡張可能なフレームワークや対話式のコンソールの使用が可能です。truffleを利用している企業としては、ZEPPELINなどが挙げられます。
TRUFFLE SUITE
https://truffleframework.com/
Embark
EmbarkはDappsを簡単に開発・デプロイ可能にするフレームワークです。Embarkは分散型ストレージであるIPFS(InterPlanetary File System )、Swarmや分散型コミュニケーションプラットフォームであるWhisperなどでデプロイが可能です。Embarkは自動でコントラクトをデプロイし、JSコード内のコントラクトを利用可能とします。また、変更を監視しユーザーがコントラクトに変化を加えると、自動でコントラクトとDappsを再度デプロイしてくれます。
Embark – github
https://github.com/embark-framework/embark
Dapp
Dappフレームワークは、DAppleフレームワークの後継です(分散型アプリケーションDappsとは違う意味なので注意)。バックボーンとして”DappHub”(GitHubのDapps版)を展開する様です。現在、GitHubリポジトリは移動され参照できない状態となっており、まだ開発段階の様です。
dapp.tools
https://dapp.tools/dapp/
Populus
Populusは、Python が得意なイーサリアム開発者が楽しく作業できる様に設計された、統合スマートコントラクト用フレームワークです。SolidityやVyperに対応しており、デプロイやテストコードをPythonで記述する事が出来る特徴を持っています。
Populus
https://populus.readthedocs.io/en/latest/
Etherlime
Etherlime(イーサ・ライム)は、ethers.js(JavaScriptイーサリアムライブラリ)をベースとして作られた、開発・デプロイを支援するフレームワークです。他のweb3.jsベースのフレームワークに代わる、開発者自身でコントロールが出来るフレームワークを目指しています。開発におけるデプロイ・コンパイル・ユニットテストの煩雑さを緩和し、安定した動作を提供します。但しマイルストーンによると、トランザクションのデバッグ機能等、まだ完全には実装されていません。今後の発展に期待です。
Etherlime
https://etherlime.readthedocs.io/en/latest/
Parasol
Parasolはテスト、INFURAでのデプロイなどを備えているアジャイルのスマートコントラクト開発環境です。また、自由なカスタマイズができる柔軟で特定の設定に固執しない設計になっています。Parasolは「関心の分離(Separation of Concerns)」、「自由」、「アジャイル」の三つを指針に掲げています。また、Parasolの特徴として「Natspec + ABI使用のmarkdownコントラクトドキュメンテーション」などが挙げられます。
Parasol
https://developer.lamarkaz.com/parasol
IDE(統合開発環境)
IDE(統合開発環境)は、開発に必要なエディタ、静的解析ツール、コンパイラ、デバッガ、テストツール、バージョン管理ソフト(git等)を一つに組み合わせ、同じ操作画面で便利に操作できる様にしたツールです。チームでのソフト開発に導入する事で、学習コストを大幅に抑える事ができます。
Remix
Remix (リミックス) は以前、Browser-Solidityという名前でした。その名前からもわかるように ChromeやFirefoxといったWebブラウザ上で動作するSolidity IDEです。JavaScriptで書かれたイーサリアムのVM上でコントラクトを動作させ、デバッグを行うこともできます。また、ローカルのGethにアクセスして本番用のネットワークにデプロイすることも可能です。Remixでは「GUIによるデプロイ済みコントラクトの取得」、「トランザクションの送信」、「コントラクトのデバッグ、コンパイル、デプロイ」、「リアルタイムシンタックスチェック(Linter)」などが可能です。
Remix
https://remix.ethereum.org/
Superblocks Lab
Superblocks Lab は、WEBベースで使えるスマートコントラクト統合開発環境です。ドキュメント(英語)が充実しており、WEBベースなのでで環境構築の手間もありません。コーディングからデベロップまで開発の全てを網羅できると宣伝されています。EVM (イーサリアム仮想マシン) も搭載されておりスタンドアロンでテスト実行する事もできます。
Superblocks Lab
https://superblocks.com/lab/
Atom
AtomエディターではAtom Solidity Linter、 Etheratomなどのパッケージを利用してSolidityを利用した開発を行ないます。Etheratomはイーサリアムブロックチェーン上のノードとやり取りするためにweb3jsを利用します。また、Etheratomの利用にはGanacheの利用あるいはgethのインストールが必要です。
etheratom – Atom
https://atom.io/packages/etheratom
Pragma
PragmaはSolidity用の非常にシンプルなweb IDE(統合開発環境)で、スマートコントラクト用の自動生成インターフェースでもあります。簡単にスマートコントラクトの記述・デプロイを可能にする開発環境であり、自分のユーザーと共有できるUIを取得できます。また、作成したコントラクトのイベントログの閲覧も可能です。
Pragma
https://www.withpragma.com/
Vim solidity
Linux環境で使い慣れている方も多いVimテキストエディタに、Solidityのシンタックスハイライトを追加できて便利です。コントラクトのコンパイル・デプロイ等の機能はありません。
Vim solidity – github
https://github.com/tomlion/vim-solidity
Visual Studio Code
Solidityの利用を加えたVisual Studio Codeの拡張機能です。Visual Studio codeはMac、Windows、Linuxどれからでもスマートコントラクトの開発が可能です。また、Visual Studio Codeはシンタックスハイライト、スニペット、コントラクトのコンパイルをサポート出来ます。利用してみたい方はまず、Visual Studio Codeをインストールし、その後拡張機能である「Solidity」と「Material Icon Theme」をインストールしてください。
solidity – Visual Studio Marketplace
https://marketplace.visualstudio.com/items?itemName=JuanBlanco.solidity
Intellij Solidity Plugin
Intellij Solidity Pluginは「シンタックスハイライト」、「フォーマット」、「コード補完」などの機能を備えているオープンソースのJetBrains IntelliJ IDEA プラグインです。しかし機能としてコントラクトのコンパイル・デプロイは出来ません。
intellij-solidity – github
https://github.com/intellij-solidity/intellij-solidity/wiki
YAKINDU Solidity Tools
YAKINDU Solidity ToolsはEclipseベースのIDEです。「コード補完」、「クイックフィックス」、「コードナビゲーション」などの特徴を持っている。「クリックフィックス」はプログラマーが記述するであろうコードを推測します。「コードナビゲーション」は簡単にプログラム内の別の場所で定義された関数、変数に移動することを可能にします。関数のオーバーロードや拡張メソッドの混在時に便利です。
yakindu / solidity-ide – github
https://github.com/Yakindu/solidity-ide
Eth Fiddle
Loom Networkが開発しているEth FiddleはJS FiddleのSolidity版です。ブラウザ上でコントラクトの記述が可能であるため、スマートコントラクトのテストとデバックが行い易いです。コードのパーマリンクの共有はURLを貼るだけで出来ます。またチャット機能がついていてコードなどについての質問などが出来ます。Solidityのコード中心としたコミュニケーションを取りながらの開発をしたい方は、Eth Fiddleを利用してみても良いかもしれません。
Eth Fiddle
https://ethfiddle.com/
テスト用ブロックチェーンネットワーク
ブロックチェーンネットワーク(メインネット)には金額的価値が発生している為、テスト不十分なDappsをいきなり動かすにはリスクがあり、一般的な開発ではまずテスト用ネットワークの構築が行われます。ネットワークを円滑にセットアップする為の構築手法は複数用意されており、一からセットアップせずにこれら支援スクリプト等を活用することで、テスト開発環境をを素早く円滑に構築できます。
Ganache
Ganacheは、ビジュアルUIとログを備えているイーサリアムブロックチェーンのテストネット構築サービスです。簡単にローカルでスマートコントラクトのテストを行なうことが出来ます。GUI(Graphical User Interface) でトランザクションなどを参照することが出来ます。また、それによりDappsの動きをチェックすることが出来ます。
trufflesuite / ganache – github
https://github.com/trufflesuite/ganache
Kaleido
Kaleido は、企業向けブロックチェーン SaaS サービスです。Enterprise Ethereum (Ethereum互換の企業向けスマートコントラクト技術) を採用しており、企業独自のブロックチェーンを簡単に構築でき実証実験を行う事が出来ます。
Kaleido
https://kaleido.io/
Cliquebait
Cliquebaitは、gethクライアントと Proof of Authority 単一ノードを包括したDockerコンテナを提供します。起動時に、テスト用ETHが振り込まれたいくつかのイーサリアムアカウントが自動的に用意される等、ちょっとしたテスト目的でイーサリアムローカルネットワークを立ち上げる為の最適な選択肢かもしれません。
f-o-a-m / cliquebait – github
https://github.com/f-o-a-m/cliquebait
Local Raiden
Local Raiden は、送金速度が遅い等のスケーラビリティー問題を解決すべく開発が進んでいるプロジェクトの一つ Raiden Network をテストする為のローカル環境です。Dockerコンテナを使い簡単にテストネットを構築する事で、Ropsten Testnet を使うよりも簡単に実験出来る事を目標としています。但し、Raidenは開発者プレビュー段階にある為、利用には注意が必要です。
ConsenSys / Local-Raiden
https://github.com/ConsenSys/Local-Raiden
Private networks deployment scripts
Dockerコンテナを使って、簡単にPoA(Proof of Authority)プライベートネットワークを構築する事ができるスクリプトです。PoAはマイニングを行わないコンセンサスアルゴリズムです。高速な承認を行うプライベートネットワークを素早く構築し、開発効率を高める事が期待できます。
ConsenSys / private-network-deployment-scripts – github
https://github.com/ConsenSys/private-networks-deployment-scripts
Local Ethereum Network
プライベートPoWネットワークを利用可能とするためのすぐに使える構築手順です。gethのインストール、イーサリアムノードの初期化、他のイーサリアムノードとの通信、EOAの作成、マイニング、etherの送金、他のローカルネットワークノードへの接続方法が書かれています。
ConsenSys / local_ethereum_network
https://github.com/ConsenSys/local_ethereum_network
Ethereum on Azure
Microsoft社が立ち上げた PoA (Proof of Authority) を採用したネットワークで、正式名称は「Ethereum Proof-of-Authrity on Azure (Ethereum PoA)」です。PoAなので高速にテストできる特徴があり、またParityクライアントの Wasm (Web Assembly) ツールキットを使用することで、C・C++・Rust等の開発言語を追加し、Solidityを理解している開発者が少ない現状を克服できる環境を提供しています。
Ethereum proof-of-authority consortium – Microsoft Azure
https://docs.microsoft.com/ja-jp/azure/blockchain/templates/ethereum-poa-deployment
テスト用faucets
開発時は、まずテスト用ネットワークで十分にテストを行うのがセオリーですが、テスト用ネットワークでのみ使えるETHが別途必要です。たいていの場合テストネット上で使用するETHを無償で供給してくれるサイトが用意されており、それらはfaucetsと呼ばれています。faucetsとは蛇口の事で、蛇口をひねる様にテストネット用のETH通貨を入手できる事からこの様に名付けられています。各テストネットはそれぞれ独立しており、ETHを相互交換する事は出来ません。
Rinkeby faucet
イーサリアムテストネットのひとつ”Rinkeby”で使えるETHを貰う事ができます。貰う為には手順が必要で、Twitter・Google+・FacebookのいずれかにETHアドレスを含む記事を投稿し、そのリンクを下記リンクに張り付ける必要があります。一度に3~18.75ETHまで取得することが出来ますが、もう一度貰う場合は8時間~3日間待たなければなりません。
Rinkeby – faucet
https://faucet.rinkeby.io/
Kovan faucet
イーサリアムテストネットのひとつ”Kovan”で利用できるKEth(Kovan Ether)を無料でもらうことができます。KEtheには金銭的価値はなく、テストネットでの利用に限られます。Kovanネットワークでは少量のgasでトランザクションを実行できることから、ユーザーは1~3KEthまで取得することが可能となっています。https://faucet.kovan.network/にアクセスし、自らのkovanのアドレスを送信することで24時間ごとに1KEthを取得することができます。
Kovan – faucet
https://faucet.kovan.network/
Ropsten faucet
イーサリアムテストネットのひとつ”Ropsten”で使える rETH (Ropsten Ether) を貰う事ができます。
Ropsten – faucet
https://faucet.ropsten.be/
イーサリアム各テストネットのコンセンサスアルゴリズム
イーサリアムのコンセンサスアルゴリズムは PoW (Proof of Work)であり、将来的には PoS (Proof of Stake) に移行する予定ですが、各テストネットは異なるコンセンサスアルゴリズムが使われています。
Mainnet PoW (Proof of Work)→将来 PoS (Proof of Stake) へ移行予定
Testnet Rinkeby PoA (Proof of Authority)
Testnet Kovan PoA (Proof of Authority)
Testnet Ropsten PoW (Proof of Work)
PoA (Proof of Authority)とは、承認(登録)されたノードのみがイーサリアムブロック生成の承認を行うアルゴリズムです。PoWとは異なりマイニング競争が無い為、高速動作が期待できます。テストネットKovanは、ブロック生成間隔が4秒に設定されているので(メインネットは15秒程度)、複雑で時間がかかるテストを自動化し素早く実施するのに向いています。
各テストネット用etherscan.io
イーサリアムのトランザクション(取引情報)を確認するには、etherscan サイトを使うと便利ですが、このサイトは全てのテストネットに対応しています。下記リンクを参考にして下さい。
メインネット – etherscan.io
https://etherscan.io/
テストネット Rinkeby – etherscan.io
https://rinkeby.etherscan.io/
テストネット Kovan – etherscan.io
https://kovan.etherscan.io/
テストネット Ropsten – etherscan.io
https://ropsten.etherscan.io/
まとめ、次回予告
今回は、ethereum-developer-tools-listの中から、Developing Smart Contrats ~ Test Ether faucets 迄をお届けしました。次回は、Communicating with Ethereum 以降をお送りする予定です。
参考資料
ConsenSys/ethereum-developer-tools-list
https://github.com/ConsenSys/ethereum-developer-tools-list
免責事項
本記事に掲載されている記事の内容につきましては、正しい情報を提供することに務めてはおりますが、提供している記事の内容及び参考資料からいかなる損失や損害などの被害が発生したとしても、弊社では責任を負いかねます。実施される際には、法律事務所にご相談ください。
技術・サービス・実装方法等のレビュー、その他解説・分析・意見につきましてはblock-chani.jp運営者の個人的見解です。正確性・正当性を保証するものではありません。本記事掲載の記事内容のご利用は読者様個人の判断により自己責任でお願いいたします。
ブロックチェーン学習に最適の書籍の紹介
図解即戦力 ブロックチェーンのしくみと開発がこれ1冊でしっかりわかる教科書
本書は、ブロックチェーン技術に興味を持ったエンジニアや、その仕組みを学び、自分の仕事に活かしたいビジネスパーソンを対象にして、ブロックチェーンのコア技術とネットワーク維持の仕組みを平易な言葉で解説しています。この本を読んだうえで、実際にコードを書くような専門書、ブロックチェーンビジネスの解説書を読むことで、理解度が飛躍的に高まるでしょう。(はじめにより)
会社紹介
弊社(コンセンサス・ベイス株式会社)は、2015年設立の国内で最も古いブロックチェーン専門企業です。これまでに、大手企業の顧客を中心に、日本トップクラスのブロックチェーンの開発・コンサルティング実績があります。ブロックチェーンに関わるビジネスコンサル・システム開発・教育・講演などご希望でしたら、お気軽にお問い合わせください。
会社ホームページ
https://www.consensus-base.com/