Solidityとは?
イーサリアムのスマートコントラクト上で動作するアプリケーションを開発するために開発された言語です。
文法は、「JavaScriptに似ている」と言われているそうですが、僕個人の感想としては、今の所そんな印象はないですね(笑)
Crypto Zombies
Dappsの開発にあたって、Solidityの習熟は必須です。
Solidityの習熟に関しては、正直、僕のテキトーなブログを読むよりか、Crypto Zombies をプレーする方が数万倍理解が深まるので、今すぐ Crypto Zombies をプレイしてみてください!(笑)
Solidityの開発環境の構築
Crypto Zombiew を一通りプレーした開発者であれば、もう何かDappsを開発したくてソワソワしているに違いありません。
早速、Solidityの開発環境を構築するとしましょう。
エディタ
僕個人は、どの言語も大抵vimで書いてしまうので、Solidityに関しても同様にvimで書く事にします。
ひとまず、シンタックスハイライトが機能するように、 vim-solidty
をインストールします。
(dein を使っている事前提になっています)
他のエディタではどうすればいいかって?知らんがな。好きなエディタで好きなように書けばいいんや…!
コンパイル環境
homebrewなどで、solc
(Solidityのコンパイラ)などをインストールしてもいいんですが、ローカルのマシンに開発のためのいろいろを入れるのって、バージョン管理を含めると本当に面倒ですよね。
常に最新を使えばいいのであればいいのですが、開発言語はプロジェクト毎にバージョンがマチマチだったりで…。
なので、今回は、dockerで開発環境を整えたいと思います。
これで、単純なコンパイルは行えるようになりました
テスト環境
実装したアプリケーションのテストを行うにあたって、実際にスマートコントラクト上にデプロイしないといけないとなると、ちょっと大変ですよね?
なにより、スマートコントラクト上に展開されたロジックは、以降改変不可能になります。
なので、実際にスマートコントラクト上にデプロイする前に、ローカルでテストを行えるように、「Populus」というスマートコントラクト開発フレームワークを活用してみましょう。
PopulusはまだDocker関係が整備されてないので、自前で書きます。
うん、インストールできた!
初期化も問題なさそう。
生成されたサンプルのコンパイルも問題なさそうですね!
テストの実行も問題なし!
warningが出るやもですが、ライブラリのバージョン依存関係が今うまく連携とれていないようなので、それぞれ最新でいけるようになったら解消されると思います。
さあ、デプロイをしてみましょう…!
成功…!
上記は、ローカルのテストネット上にデプロイしているのですが、もちろんメインネットに向けてデプロイする事も可能です。
これで、Dappsを開発するための環境が整いましたね…!
振り返り
今回、Dockerで開発環境を構築したのですが、テストの実行を py.test
ではなく populus test
のように実行できるといいなと思いました。
その方が、docker-compose に渡す引数の数を減らせるんですよね。
あと、pip でインストールするライブラリのバージョン指定がつらいw
もしかしたら、何も考えずに全て最新入れればいいようにできるのかもですが、僕の試したタイミングではダメでした。
また今度試してみようと思います。