スマートコントラクトとは:ブロックチェーン上で自動実行されるコードの仕組み

スマートコントラクトとは:ブロックチェーン上で自動実行されるコードの仕組み

スマートコントラクトとは、ブロックチェーン上に保存されたプログラムであり、トランザクションや別のコントラクトから呼び出されると、そのコードに書かれた条件を自動的に実行します。プログラムとは、コンピューターへの命令の集まりです。ブロックチェーンとは、新しい記録が次々と追加されていく共有の記録簿です。トランザクションとは、ブロックチェーンに送られるリクエストのことです。

スマートコントラクトはどこに存在するのか?

スマートコントラクトは、ブロックチェーン上のあるアドレスに保存されます。アドレスとは、ブロックチェーン上でユーザーまたはスマートコントラクトを識別する識別子です。コントラクトのコードと、そのコードが保持するデータは、このアドレスに保存されます。状態(ステート)とは、スマートコントラクトが保持するデータのことで、次にそのコントラクトが実行されるときにも、そのデータが残っているようにするためのものです。

スマートコントラクトをデプロイするとは、そのコードを含んだトランザクションによって、コードをブロックチェーン上に配置することを意味します。デプロイ後、コントラクトはアドレスを持ち、そのアドレス宛にトランザクションを送れるようになります。

スマートコントラクトはどのように機能するのか?

スマートコントラクトは、トランザクションや別のコントラクトがその関数の1つを呼び出したときに実行されます。関数を呼び出すとは、コントラクトにその関数を実行するよう依頼することです。関数とは、コントラクトのコードの中にある、名前の付いた一部分です。コントラクトのアドレス宛に送られるトランザクションには、呼び出す関数の名前と、その関数が必要とするデータである入力値が含まれます。

ブロックチェーンネットワークのノードが、スマートコントラクトのコードを実行します。ノードとは、ブロックチェーンネットワークのソフトウェアを実行し、ネットワーク上の他のコンピューターと接続しているコンピューターのことです。コードがコントラクトの状態を変更すると、その変更はブロックチェーン上に記録されます。

アカウントとは、ブロックチェーン上の記録であり、アドレスと残高を持っています。残高とは、アカウントが保有するブロックチェーンのネイティブコインの量のことです。ネイティブコインとは、BitcoinにおけるBTCのように、あるブロックチェーン固有の単位のことです。

Ethereumの公式ドキュメントによれば、アカウントには2種類あります。ユーザーアカウントは、秘密鍵を持つ個人によって管理されます。秘密鍵とは、トランザクションに署名するための秘密の数値です。コントラクトアカウントはコードを保持しており、スマートコントラクトはこのコントラクトアカウントのアドレスに保存されます。

スマートコントラクトへの呼び出しは、ユーザーアカウントまたは別のコントラクトから行われます。本記事では、「自己実行」という表現は、コントラクトが呼び出された際に、そのコードが自ら命令を実行することを指します。これは、コントラクトが自発的に実行を開始することを意味するものではありません。コントラクトアカウントは、トランザクションを受け取った場合にのみメッセージを送信できるためです。

架空の例で、ある1回の呼び出しを示します。実際のコントラクトは、保持するデータや関数の書き方がそれぞれ異なります。この例では、あるコントラクトが2つのアドレスそれぞれについて、保有する単位数を管理しています。単位とは、コントラクトが管理するカウント(数量)のことです。アドレスAは100単位を、アドレスBは20単位を保有しています。

  1. あるユーザーアカウントが、コントラクトのtransfer関数を呼び出すトランザクションを送信し、アドレスAからアドレスBへ30単位を移動するよう要求します。
  2. ノードがコントラクトのコードを実行します。
  3. コードは、アドレスAが少なくとも30単位を保有していることを確認します。
  4. コードは、アドレスAを70単位に減らし、アドレスBを50単位に増やします。
  5. この変更はブロックチェーン上に記録されます。呼び出しの前も後も、2つのアドレスが保有する単位の合計は120単位のままです。

スマートコントラクトは何を保持し、何ができるのか?

スマートコントラクトは、ユーザーアカウントと同様に、ブロックチェーンのネイティブコインの残高を保持できます。また、スマートコントラクトはその状態の中に、各アドレスごとのカウントなどの記録を保持することができ、その関数の1つを呼び出すことでこれらの記録を変更できます。

スマートコントラクトは他のコントラクトを呼び出すことができ、これにより1つのコントラクトのコードが別のコントラクトの関数を利用できるようになります。関数はイベントを記録することができ、これはブロックチェーン外のソフトウェアが監視できる、ブロックチェーン上の通知です。

トークンコントラクトとは、トークンを作成し追跡するスマートコントラクトです。ネイティブコインとは異なり、トークンとは既存のブロックチェーン上でスマートコントラクトを通じて発行される単位です。トークン規格とは、トークンコントラクトが提供する関数とイベントについて定めた、公開された仕様のことです。

スマートコントラクトの挙動は何によって決まり、それでも変更は可能なのか?

スマートコントラクトのアドレスに保存されたコードが、そのコントラクトの動作を決定します。スマートコントラクトは、そのコードに書かれている通りに動作するのであり、これは作成者の意図とは異なる場合があります。スマートコントラクトのアドレスにあるコード自体は、デプロイ後に変更されることはありませんが、実行される挙動を差し替えられるように設計することは可能です。

スマートコントラクトは、その挙動を差し替えられるように設計することができます。1つのコントラクトが、2つ目のコントラクトのアドレスを保存しておき、呼び出しをそこへ転送することができます。最初のコントラクトが、保存されているアドレスを変更できるように設計されていれば、最初のコントラクトのアドレス自体は変わらないまま、実行される挙動を変更することができます。このように設計されたコントラクトでは、呼び出し先のアドレスを変更できるアカウントを指定することもできます。

Bitcoinにおけるスマートコントラクトに相当するものは何か?

コインとしてBTCを持つ暗号資産ネットワークであるBitcoinには、スクリプトという対応するものがあります。スクリプトとは、Bitcoinのスクリプト言語で書かれた規則であり、一定量のBTCを移動させる前に満たされていなければならない条件です。2026年10月時点で、Bitcoinの公式ドキュメントでは、このスクリプト言語は意図的に機能が制限されていると説明されています。BTCFi(Bitcoin-native financeの略)とは、スマートコントラクトをはじめとするさまざまな設計を含め、BTCを中心に構築される金融活動を指して、各方面で使われる呼称です。

スマートコントラクトのコードレビューとは何か?

スマートコントラクトのコードレビューとは、作成者以外の人物がそのコードをチェックし、誤りがないかを読み解いて確認することです。監査(オーディット)は、コードレビューの一つの方法です。レビューでも誤りを見逃すことがあるため、レビューを行ったからといって、コントラクトのコードに誤りがないことが保証されるわけではありません。

スマートコントラクトの限界とは何か?

オラクルがなければ、スマートコントラクトはそれが実行されているブロックチェーン上のデータしか扱えません。オラクルとは、外部のデータをコントラクトに送るサービスのことです。外部データとは、外部の日時や外部の結果など、そのコントラクトのブロックチェーン上に保存されていないデータのことです。

デプロイされたスマートコントラクトのコードに誤りがあった場合、そのコントラクトが挙動を差し替えられるように設計されていない限り、その誤りはそのまま残り続けることになります。

2025年11月27日

GoMiningニュース

興味があるかもしれない: