はじめに
SolidityとVyperはどちらもEthereumやQuorumの開発で利用できる言語ですが、どちらを選ぶか迷うことがあると思います。
本記事ではSolidityとVyperはそもそも何かということから説明し、両者を正しく選べるように分かりやすく解説していきます。
Solidityとは
SolidityはJavaScriptに似た構文を持つスマートコントラクト開発のための言語です。
Solidityで記述されたスマートコントラクトはEVM(Ethereum Virtual Machine)上で動くバイトコードにコンパイルされるため、SolidityはEthereumの他, QuorumなどのEVMと互換性を持つブロックチェーンで利用できます。
ブロックチェーン上で動くプログラムであるスマートコントラクトは不特定多数のノード上で実行され同じ結果を返す必要があります。
そのため、スマートコントラクトのプログラムはランダム性を含んでいてはいけない(決定性)、メモリやストレージを消費しすぎてはいけないなどの制約があります。
また、一度デプロイしたスマートコントラクトは書き換える事ができず、プログラムにバグがあった場合多額の通貨の損失につながる可能性があります
Solidityはこのような制約のなかでスマートコントラクトのプログラムを記述するための言語として開発されました。
Vyperとは
VyperはPythonに似た構文を持つスマートコントラクト開発のための言語で、Solidityと同様にEVM上で動くバイトコードにコンパイルされます。
VyperはSolidityの様々なセキュリティー上の問題を解決するために開発され、2020年1月現在においてベータ版でリリースされています。*Vyper github
VyperはSolidityよりも制約が強くシンプルで分かりやすい言語です。また、Solidityはチューリング完全ですが、Vyperはチューリング完全の言語ではありません。
VyperはSolidityにあったprivate
, internal
などのモディファイアー, クラスの継承、再帰呼び出しなどのセキュリティー上問題のある機能を失くしています。
SolidityとVyperの利用状況
GithubのリポジトリーでSolidityとVyperのファイル数を比較してみましょう。
執筆した現在、Solidityファイル数が約37万なのに対して、Vyperファイル数は約200であり、圧倒的にSolidityの方が利用されています。
Vyperがほとんど利用されていないのは、まだベータ版の開発段階であり、SolidityほどVyperのドキュメントが成熟していないためです。
Vyperは使うべきではないのか?
Solidityが大多数だからVyperを使わない方がいいかというと、決してそんな事はありません。
ブロックチェーン上でのプログラムのミスは多額の資産の損失に繋がります。
Vyperはそのようなミスが含まれないよう、プログラムが複雑になる機能を排除していて、Solidityよりセキュアな記述ができる言語です。
2020年1月現在Vyperはベータ版のため本番利用すべきではありませんが、今のうちに概要を掴んでおく方が良い言語でしょう。
VyperはSolidityを代替するのか?
VyperはSolidityを置き換えるために開発された言語ではありません。
VyperもSolidityも同じEVM上のバイトコードを生成する言語であり、共に利用する事ができます。
ある研究ではSolidityで書かれたスマートコントラクトのうち3000個のコントラクが脆弱性を含んでいると言われていますが、VyperはSolidityよりも高いセキュリティーが求められる場合に使用するのが良いでしょう。
Vyperのフレームワークサポート状況
Ethereum開発のデファクトスタンダードであるTruffleではバージョンv5からVyperがサポートされるようになりました。現在はTruffleを利用してSolidityとVyperによるスマートコントラクト開発が行えます。
▼詳細情報
Truffleとは – 全体像と開発の流れを簡単に把握しよう!
Vyper それとも Solidity ?
現在はSolidityが主流でありVyperは現在ベータ版のため本番利用は避けるべきですが、Vyperはよりセキュアなスマートコントラクトを記述するために有用な言語です。
また、Solidityを利用しつつVyperも利用することはなんら問題ありません。
Vyperの正式版がリリースされ、かつセキュリティー要件を重視するのであれば是非利用を検討してみるべきでしょう。
その他リンクなど
SolidityとVyperを理解するのに便利なサイトなどを紹介します。
- ブロックチェーンを基礎から学ぶには: オンライン学習サイトEnterChain
- Solidityのオンライン学習には: クリプトゾンビ
- VyperとSolidityの構文の違いをみるには: Solidity vs Vyperチートシート
- Solidityをブラウザですぐ試すには: Remix
- Vyperをブラウザですぐ試すには: Vyper Online Compiler