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

スマート・コントラクトの紹介

スマート・コントラクトとは?

「スマート・コントラクト」とは、単にイーサリアム・ブロックチェーン上で実行されるプログラムのことです。イーサリアム・ブロックチェーン上の特定のアドレスに存在する、コード(関数)とデータ(状態)の集合体です。

スマート・コントラクトは、イーサリアム・アカウントの一種です。つまり、残高を持ち、トランザクションの宛先になることができます。しかし、ユーザーによって制御されるのではなく、ネットワークにデプロイされ、プログラムされた通りに実行されます。ユーザー・アカウントは、スマート・コントラクトで定義された関数を実行するトランザクションを送信することで、スマート・コントラクトと対話できます。スマート・コントラクトは、通常の契約(コントラクト)のようにルールを定義し、コードを通じて自動的に強制することができます。スマート・コントラクトはデフォルトでは削除できず、それらとの対話は不可逆的です。

前提条件

これから始める方や、技術的でない紹介をお探しの場合は、スマート・コントラクトの紹介をお勧めします。

スマート・コントラクトの世界に飛び込む前に、アカウントトランザクション、およびイーサリアム仮想マシンについて読んでおいてください。

デジタル自動販売機

ニック・サボ (opens in a new tab)が説明しているように、スマート・コントラクトの最も適切な比喩はおそらく自動販売機でしょう。正しい入力があれば、特定の出力が保証されます。

自動販売機からスナックを取り出すには:

お金 + スナックの選択 = スナックの提供

このロジックは自動販売機にプログラムされています。

スマート・コントラクトには、自動販売機のようにロジックがプログラムされています。この自動販売機がSolidityで書かれたスマート・コントラクトだった場合、どのようになるかの簡単な例を以下に示します。

自動販売機が販売員を不要にするように、スマート・コントラクトは多くの業界で仲介者を置き換えることができます。

パーミッションレス

誰でもスマート・コントラクトを書いてネットワークにデプロイできます。スマート・コントラクト言語でのコーディング方法を学び、コントラクトをデプロイするのに十分なETHを持っているだけで済みます。スマート・コントラクトのデプロイは技術的にはトランザクションであるため、単純なETHの送金でガスを支払う必要があるのと同じように、ガスを支払う必要があります。ただし、コントラクトのデプロイにかかるガス・コストははるかに高くなります。

イーサリアムには、スマート・コントラクトを書くための開発者フレンドリーな言語があります。

  • Solidity
  • Vyper

言語の詳細

ただし、イーサリアムの仮想マシンがコントラクトを解釈して保存できるように、デプロイする前にコンパイルする必要があります。コンパイルの詳細

コンポーザビリティ

スマート・コントラクトはイーサリアム上で公開されており、オープンなAPIと考えることができます。つまり、自分のスマート・コントラクト内で他のスマート・コントラクトを呼び出すことで、可能なことを大幅に拡張できます。コントラクトが他のコントラクトをデプロイすることさえ可能です。

スマート・コントラクトのコンポーザビリティについてさらに学ぶ。

制限事項

スマート・コントラクト単独では、オフチェーンのソースからデータを取得できないため、「現実世界」のイベントに関する情報を取得することはできません。つまり、現実世界のイベントに対応することはできません。これは意図的な設計です。外部情報に依存すると、セキュリティと分散化にとって重要なコンセンサスを危険にさらす可能性があります。

しかし、ブロックチェーン・アプリケーションがオフチェーンのデータを使用できることは重要です。その解決策がオラクルであり、これはオフチェーンのデータを取り込み、スマート・コントラクトで利用できるようにするツールです。

スマート・コントラクトのもう一つの制限は、コントラクトの最大サイズです。スマート・コントラクトの最大サイズは24KBであり、それを超えるとガス不足になります。これはダイヤモンド・パターン (opens in a new tab)を使用することで回避できます。

マルチシグ・コントラクト

マルチシグ(複数署名)・コントラクトは、トランザクションを実行するために複数の有効な署名を必要とするスマート・コントラクト・アカウントです。これは、大量のイーサやその他のトークンを保持するコントラクトの単一障害点を回避するのに非常に役立ちます。また、マルチシグはコントラクトの実行と鍵管理の責任を複数の当事者間で分割し、単一の秘密鍵の紛失が不可逆的な資金の損失につながるのを防ぎます。これらの理由から、マルチシグ・コントラクトはシンプルなDAOガバナンスに使用できます。マルチシグを実行するには、M個の許容可能な署名のうちN個の署名(N ≤ M、かつM > 1)が必要です。N = 3, M = 5N = 4, M = 7が一般的に使用されます。4/7のマルチシグでは、7つの有効な署名のうち4つが必要です。つまり、3つの署名が失われても資金は回収可能です。この場合、コントラクトを実行するには、鍵保持者の過半数が同意して署名する必要があることも意味します。

スマート・コントラクトのリソース

オープンツェッペリン・コントラクト - 安全なスマート・コントラクト開発のためのライブラリ。

参考文献

チュートリアル: イーサリアム上のスマート・コントラクト署名 (EIP-1271)