本文へ移動

スマートコントラクト

スマートコントラクトの意味、ブロックチェーンノードによる実行、外部データとアップグレード権限の関係、操作前の確認事項を解説します。

更新日

教育目的のみであり、投資助言ではありません。スマートコントラクト取引は取り返せない損失を生む可能性があります。

直接の答え

スマートコントラクトは、ブロックチェーンまたは同様の分散実行ネットワークにデプロイされたプログラムです。コードと、多くのプラットフォームでは永続的な状態を持ちます。トランザクションや別のコントラクトが関数を呼び出すと、ネットワークの各ノードが同じ規則を実行し、検証と合意形成の手続きを通じて状態変更を受け入れます。

「スマート」はプログラムが意図を理解することを意味せず、「コントラクト」という名称だけで法的強制力のある契約になるわけでもありません。この言葉は、実行環境で利用できる機能とデータの範囲内で、指定された条件を強制できるコードを指します。

スマートコントラクトは次のことができます。

  • プログラムされた条件に従ってデジタル資産を保有または移転する。
  • アプリケーションの状態を記録し更新する。
  • 他のコントラクトと組み合わせ、取引所、融資システム、ゲーム、ガバナンスツールなどのオンチェーンアプリケーションを構築する。

予測可能性が及ぶのは、実装されたコードと入力までです。コードどおりに正確に実行されても、欠陥、悪意ある設計、侵害された権限、不正確な外部データによって望まない結果になり得ます。

仕組み

一般的な操作は次の手順で進みます。

  1. 開発者がソースコードを作成してテストし、プラットフォームが求める場合はコンパイルして、生成されたプログラムをトランザクションでデプロイします。
  2. デプロイによりプログラムへオンチェーンの識別子またはアドレスが割り当てられ、状態や管理者の役割が初期化されることがあります。
  3. ユーザー、アプリケーション、または別のコントラクトが、関数セレクター、引数、場合によっては資産を含む呼び出しを送信します。
  4. 各検証ノードが同一の仮想マシンとプロトコル規則に従って呼び出しを実行します。必要条件を満たさないと呼び出しは取り消される場合がありますが、取引手数料は課され得ます。
  5. 呼び出しが成功してネットワークに取り込まれると、状態変更と発行イベントがブロックチェーン記録の一部になります。

実行が決定論的なのは、合意された実行環境内で利用できる情報についてだけです。コントラクトはインターネットから天候、市場価格、銀行決済を自力で取得できません。オフチェーンの事実が必要なアプリケーションは、オラクル、署名済みメッセージ、ブリッジ、権限を持つ運用者を利用するため、コード以外の信頼前提と障害要因が加わります。

デプロイ済みコードだけがシステム全体とは限りません。変更不能なコントラクトもありますが、プロキシやガバナンスの仕組みは呼び出しを新しいロジックへ向けたり、パラメーターを変更したりできます。表示中の画面だけでなく、アップグレード鍵、管理者権限、一時停止機能、オラクル設計、接続先コントラクトも確認する必要があります。

署名前に次を確認してください。

  • 独立した信頼できる情報源によるネットワークと完全なコントラクトアドレス。
  • デコードされた関数、引数、資産量、受取人。
  • 呼び出しによって作られるトークン許可額または運用者権限。
  • コントラクトが検証済みか、アップグレード可能か、一時停止中か、特権アカウントに管理されているか。
  • 実行可能なら、少額テストで予定する入口と出口の経路を確認できること。

デジタルサービス用のエスクローコントラクトを考えます。買い手が 1,000 USDC を預けると、コントラクトは買い手、売り手、金額、決済条件を記録します。買い手が納品を承認すれば売り手へ資金を放出し、条件が 24 時間以内に満たされなければ、プログラムされた返金経路が利用可能になります。

設計から事実を与えられない限り、コントラクトはサービスへの満足度を知りません。承認が買い手の鍵に依存するなら、鍵の侵害で放出を許可される恐れがあります。オラクルや管理者が結果を決めるなら、その当事者も信頼モデルの一部です。アクセス制御やトークン処理の不具合も、意図したエスクロー規則を破り得ます。自動実行は一部の手作業を減らしますが、すべての依存関係を評価する必要は残ります。

リスクと対策

  • コードの欠陥:再入、誤った会計、安全でない外部呼び出し、境界条件により資産が失われたり固定されたりします。小さく十分にテストされた設計を優先し、監査済み表示だけでなくデプロイ済みコードを確認します。
  • 権限とアップグレードのリスク:管理者はシステム停止、ロジック交換、手数料変更、資産移動を行える場合があります。各役割の管理者、タイムロックやマルチシグの有無、変更可能な範囲を確認します。
  • オラクルと統合のリスク:正しいコードでも、古い値、操作された値、桁を誤った値に基づいて動作し、トークン、ブリッジ、他のコントラクトの障害が連鎖することがあります。
  • 取引と承認のリスク:悪意ある画面は誤ったアドレス、関数、受取人、無制限の許可額を表示できます。要求をデコードし、権限を必要な範囲に限定します。
  • 経済設計のリスク:有効な取引でも、清算、価格操作、インセンティブ破綻、限られた流動性への取り付けを引き起こします。コードの正しさは経済的な支払能力を保証しません。
  • 運用リスク:混雑、チェーン再編、シーケンサー停止、フロントエンド障害により、コントラクトが存在していても操作が遅れることがあります。
  • 不可逆性:公開チェーンの取引には通常チャージバックがありません。誤った関数や敵対的コントラクトへ資金を送ると、回収できない可能性があります。

監査は特定のコード版と範囲についての証拠であり、保証ではありません。デプロイ済みバイトコードまたは検証済みソースが監査対象版と一致するか、後のアップグレード、依存関係、設定変更が監査範囲外でないかを調べてください。

よくある誤解

  • 「コードは取引なしで自動実行される。」状態を変える関数の大半はトランザクションか別のオンチェーン呼び出しを必要とし、時刻に基づく動作には外部の実行者が必要な場合があります。
  • 「コードは変更できない。」変更不能なコントラクトは自身のデプロイ済みバイトコードを書き換えられませんが、プロキシ、ガバナンス、移行設計によりユーザーが到達するロジックは変わり得ます。
  • 「コードが公開されていれば安全だ。」公開はレビューに役立ちますが、正しさ、誠実な管理、健全な経済性を証明しません。
  • 「監査は安全を保証する。」レビューには時期と範囲の限界があり、欠陥を見落としたり運用・経済リスクを対象外にしたりします。
  • 「取引成功は意図した処理の完了を意味する。」成功は呼び出したコードが取り消されなかったという意味にすぎず、宛先、デコードされたイベント、資産移動、最終権限の確認が必要です。

関連トピック

出典

ナビゲーション

Wiki を検索...