メインコンテンツへスキップ
Change page

スマート・コントラクト言語

イーサリアムの素晴らしい点は、比較的開発者に優しい言語を使用してスマート・コントラクトをプログラミングできることです。 Pythonや波括弧を使用する言語 (opens in a new tab)の経験があれば、馴染みのある構文を持つ言語を見つけることができます。

最も活発にメンテナンスされている2つの言語は以下の通りです。

  • Solidity
  • Vyper

Remix IDEは、SolidityとVyperの両方でコントラクトを作成およびテストするための包括的な開発環境を提供します。 コーディングを始めるには、ブラウザベースのRemix IDEをお試しください (opens in a new tab)

より経験豊富な開発者は、イーサリアム仮想マシン (EVM)の中間言語であるYulや、Yulの拡張であるYul+を使用することもできます。

好奇心旺盛で、現在も活発に開発されている新しい言語のテストに協力したい場合は、まだ初期段階にある新興のスマート・コントラクト言語であるFeを試すことができます。

前提条件

プログラミング言語、特にJavaScriptやPythonの予備知識があると、スマート・コントラクト言語の違いを理解するのに役立ちます。 また、言語の比較を深く掘り下げる前に、概念としてのスマート・コントラクトを理解しておくことをお勧めします。 スマート・コントラクトの紹介

Solidity

  • スマート・コントラクトを実装するためのオブジェクト指向の高水準言語。
  • C++から最も強い影響を受けた波括弧を使用する言語。
  • 静的型付け (変数の型がコンパイル時に決定される)。
  • 以下の機能をサポート:
    • 継承 (他のコントラクトを拡張できる)。
    • ライブラリ (他のオブジェクト指向プログラミング言語における静的クラスの静的関数のように、異なるコントラクトから呼び出せる再利用可能なコードを作成できる)。
    • 複雑なユーザー定義型。

コントラクトの例

この例から、Solidityのコントラクト構文がどのようなものかを感じ取れるはずです。 関数や変数の詳細については、ドキュメントを参照してください (opens in a new tab)

Vyper

  • Python風のプログラミング言語
  • 強い型付け
  • 小さく理解しやすいコンパイラコード
  • 効率的なバイトコード生成
  • コントラクトをより安全で監査しやすくすることを目的として、意図的にSolidityよりも機能を少なくしています。 Vyperは以下をサポートしていません:
    • 修飾子 (Modifiers)
    • 継承
    • インラインアセンブリ
    • 関数のオーバーロード
    • 演算子のオーバーロード
    • 再帰呼び出し
    • 無限ループ
    • 2進固定小数点

詳細については、Vyperの基本理念をお読みください (opens in a new tab)

この例から、Vyperのコントラクト構文がどのようなものかを感じ取れるはずです。 関数や変数の詳細については、ドキュメントを参照してください (opens in a new tab)

YulとYul+

イーサリアムが初めてで、スマート・コントラクト言語でのコーディング経験がない場合は、SolidityまたはVyperから始めることをお勧めします。 スマート・コントラクトのセキュリティのベストプラクティスやEVMの操作の仕様に精通してから、YulやYul+を検討してください。

Yul

  • イーサリアムの中間言語。
  • EVMと、イーサリアム向けWebAssemblyであるEwasm (opens in a new tab)をサポートしており、両プラットフォームで利用可能な共通基盤となるように設計されています。
  • EVMとEwasmの両プラットフォームに等しく恩恵をもたらす、高度な最適化段階の優れたターゲットです。

Yul+

  • Yulの低水準で高効率な拡張。
  • 当初はオプティミスティック・ロールアップのコントラクト用に設計されました。
  • Yul+は、Yulに新機能を追加する実験的なアップグレード提案と見なすことができます。

コントラクトの例

以下の簡単な例は、累乗関数を実装しています。 これはsolc --strict-assembly --bin input.yulを使用してコンパイルできます。 この例はinput.yulファイルに保存する必要があります。

すでにスマート・コントラクトの経験が豊富な場合、Yulでの完全なERC-20実装をこちら (opens in a new tab)で見つけることができます。

Fe

  • イーサリアム仮想マシン (EVM) 向けの静的型付け言語。
  • PythonとRustに影響を受けています。
  • イーサリアムエコシステムが初めての開発者にとっても、学びやすいことを目指しています。
  • Feの開発はまだ初期段階にあり、2021年1月にアルファ版がリリースされました。

コントラクトの例

以下は、Feで実装されたシンプルなコントラクトです。

選び方

他のプログラミング言語と同様に、基本的には適材適所で適切なツールを選ぶことと、個人の好みの問題です。

まだどの言語も試したことがない場合は、以下の点を考慮してみてください。

Solidityの素晴らしい点は?

  • 初心者向けに、多くのチュートリアルや学習ツールが用意されています。 詳細については、コーディングによる学習のセクションを参照してください。
  • 優れた開発者ツールが利用可能です。
  • Solidityには大規模な開発者コミュニティがあるため、疑問に対する答えをすぐに見つけられる可能性が高いです。

Vyperの素晴らしい点は?

  • スマート・コントラクトを書きたいPython開発者にとって、始めるのに最適な方法です。
  • Vyperは機能数が少ないため、アイデアの迅速なプロトタイピングに最適です。
  • Vyperは、監査が容易で、人間にとって最大限に読みやすいことを目指しています。

YulとYul+の素晴らしい点は?

  • シンプルで機能的な低水準言語です。
  • 生のEVMに非常に近いレベルで操作できるため、コントラクトのガス使用量を最適化するのに役立ちます。

言語の比較

基本的な構文、コントラクトのライフサイクル、インターフェース、演算子、データ構造、関数、制御フローなどの比較については、Auditlessによるチートシート (opens in a new tab)を確認してください。

参考文献