時価総額: $2.6475T 3.45%
ボリューム(24時間): $156.7174B -3.99%
恐怖と貪欲の指数:

17 - 極度の恐怖

  • 時価総額: $2.6475T 3.45%
  • ボリューム(24時間): $156.7174B -3.99%
  • 恐怖と貪欲の指数:
  • 時価総額: $2.6475T 3.45%
暗号
トピック
暗号化
ニュース
暗号造園
動画
トップクリプトスペディア

言語を選択する

言語を選択する

通貨の選択

暗号
トピック
暗号化
ニュース
暗号造園
動画

スマートコントラクトストレージはどのように機能しますか?

Smart contract storage in Ethereum is a persistent key-value store where variables like state data are kept, with gas costs for reading and writing, and optimized through slot packing and efficient data structuring.

2025/07/29 07:35

スマートコントラクトストレージメカニズムの理解

スマートコントラクトストレージは、特にEthereumのようなプラットフォームでのブロックチェーンテクノロジーの基本的な側面です。ストレージとは、契約が関数呼び出し間で維持する永続的なデータを指します。トランザクションごとに一時的でリセットされるメモリやスタックとは異なり、ストレージは永続的であり、ブロックチェーンに無期限に残ります。状態変数などの契約で宣言された各変数は、保管に保存され、このデータにアクセスまたは変更するにはガスコストが発生します。

Ethereumでは、ストレージはキー価値ストアとして実装され、各キーは32バイトのスロットで、各値も32バイトです。この構造は、全体的なイーサリアムステートトリーの一部であるストレージトリーとして知られています。ストレージスロットへの変数のマッピングは、コンパイラによって決定されます(例えば、堅さ)。このマッピングを理解することは、ガスの使用量を最適化するために重要です。

スマートコントラクトに変数が保存される方法

開発者が変数を堅牢性で宣言すると、コンパイラはそれらがストレージスロットにどのように梱包されるかを決定します。たとえば、複数の変数が単一の32バイトスロットに適合する場合、スペースを節約し、ガスコストを削減するために一緒に詰め込まれます。ただし、この動作は、使用される変数のタイプに依存します。 uint8booladdressなどの小さなデータ型は、連続して宣言されている場合は、単一のスロットに一緒に保存できます。

対照的に、 uint256stringなどの大型タイプは、独自のストレージスロットを占めています。データは宣言されたスロットに直接保存されないため、動的配列とマッピングはより複雑です。代わりに、スロットはベース参照として機能し、実際のデータはハッシュ機能を使用して派生位置に保存されます。たとえば、動的配列の長さはベーススロットに保存され、要素はkeccak256(baseSlot) + indexに保存されます。

貯蔵アクセスのガスコストと効率

ストレージへのアクセスと変更は、イーサリアムで最も高価な操作です。ストレージ(SLOAD)からの読み取りは100ガスのコストがかかりますが、書き込み(SSTORE)はかなり高価です。執筆のコストは、値がゼロから非ゼロ(20,000ガス)、非ゼロから非ゼロ(5,000ガス)、または非ゼロからゼロ(ガスを払い戻す)から変化しているかどうかによって異なります。このガスモデルは、ストレージアクセスを最小限に抑え、データの構造を最適化するように開発者を奨励します。

効果的な最適化の1つは、複数の変数を単一のストレージスロットに梱包することです。たとえば、 booluint8 、およびuint16を1つのスロットに組み合わせると、SSTORE操作の数を減らすことができます。別の最適化では、ストレージロジックはより複雑でコストがかかるため、必要な場合にのみマッピングまたは配列を使用することが含まれます。

複雑なデータ構造のストレージレイアウト

マッピングや構造体などの複雑なデータ構造には、ストレージの割り当て方法をより深く理解する必要があります。マッピングには長さがなく、キーは直接保存されません。代わりに、マッピングmのキーkの値はkeccak256(k ++ m_slot)に保存されます。ここで、 ++連結を示します。このハッシュメカニズムにより、すべてのキーが一意のストレージ場所にマッピングされることが保証されます。

構造体は、最初の宣言された変数から開始して、保管に連続して保存されます。構造体に単一のスロットに適合する複数の変数が含まれている場合、それらは一緒に詰め込まれます。ただし、コンパイラのルールに応じて、アラインメントのために変数間にパディングが追加される場合があります。構造体のレイアウトを理解することは、ストレージのメンバーを読み取ったり書いたりするときに、ストレージを最適化し、ガスコストを削減するために不可欠です。

ストレージデータの取得と変更

スマートコントラクトのストレージからデータを取得するには、 web3.jsやethers.jsなどの外部ツールを使用してブロックチェーンを照会できます。これらのライブラリは、開発者が特定のスロットでストレージを検査できるようにするgetStorageAt(address, position)などの方法を提供します。ただし、返されたデータを解釈するには、契約で使用されるストレージレイアウトとエンコードスキームの知識が必要です。

ストレージの変更は、状態変数を更新する関数呼び出しを介して行われます。各変更にはガスがかかるため、開発者は多くの場合、アップデートをバッチバッチまたは使用して最終値を計算してから保存にコミットします。さらに、イベント(ログ)を使用すると、ストレージトリエ全体をクエリすることなくストレージの変更を追跡するのに役立ち、オフチェーンモニタリングがより効率的になります。

スマートコントラクトストレージにおけるセキュリティ上の考慮事項

ストレージの不適切な取り扱いは、ストレージの衝突、不正アクセス、ガス枯渇攻撃などの脆弱性につながる可能性があります。非初期化されたポインターまたは誤ったスロット計算を使用する契約は、意図しないデータを上書きする場合があります。さらに、適切なアクセス制御なしにマッピングまたは配列が公開されている場合、外部契約は潜在的にストレージを操作できます。

1つの一般的な攻撃ベクトルは、プロキシ契約のストレージ衝突です。ここでは、実装契約とプロキシ契約が同じストレージレイアウトを共有しています。レイアウトが不一致の場合、アップグレードは既存のデータを破損する可能性があります。これを軽減するには、開発者は透明なプロキシやUUP(ユニバーサルアップグレード可能なプロキシ標準)などの確立されたアップグレード性パターンを使用する必要があります。

よくある質問

Q:別の契約のストレージに直接アクセスできますか?いいえ、スマート契約内から別の契約のストレージを直接読み取ることはできません。 web3.jsやethers.jsなどの外部ツールを使用して、鎖オフチェーンのストレージスロットを照会できますが、オンチェーンアクセスは契約のストレージに制限されています。

Q:堅牢性におけるストレージとメモリの違いは何ですか?ストレージは永続的であり、トランザクション間でデータを保持しますが、メモリは一時的であり、各関数呼び出し後にクリアされます。保管操作は、メモリと比較してガスの点でより高価です。

Q:貯蔵の変更中にガス払い戻しはどのように機能しますか?ストレージスロットがゼロ(つまり、クリアされた)に設定されている場合、ガスの払い戻しが適用されます。これにより、開発者は未使用のデータをクリーンアップすることが促進されます。ただし、払い戻しは制限されており、ストレージへの書き込みの初期ガスコストを部分的にはしかのみ相殺します。

Q:ストレージ変数はブロックチェーンで暗号化されていますか?いいえ、スマートコントラクトに保存されているすべてのデータは公開されており、ブロックチェーンにアクセスできる人なら誰でも表示されます。プライバシーが必要な場合、開発者は暗号化メカニズムを鎖外に実装するか、ゼロ知識証明などのプライバシー提供テクノロジーを使用する必要があります。

免責事項:info@kdj.com

提供される情報は取引に関するアドバイスではありません。 kdj.com は、この記事で提供される情報に基づいて行われた投資に対して一切の責任を負いません。暗号通貨は変動性が高いため、十分な調査を行った上で慎重に投資することを強くお勧めします。

このウェブサイトで使用されているコンテンツが著作権を侵害していると思われる場合は、直ちに当社 (info@kdj.com) までご連絡ください。速やかに削除させていただきます。

関連知識

暗号通貨契約ポジションを手動または自動でクローズするにはどうすればよいですか?

暗号通貨契約ポジションを手動または自動でクローズするにはどうすればよいですか?

2026-02-01 23:19:36

手動ポジション決済プロセス1. 契約が有効な取引プラットフォームにログインし、「ポジション」または「オープンオーダー」タブに移動します。 2. シンボル、サイズ、エントリー価格、レバレッジレベルを確認して、特定の契約ポジションを見つけます。 3. ポジションの横にある「クローズ」または「清算」ボタン...

Bitcoin ETF が暗号通貨契約に与える影響を理解するにはどうすればよいですか?

Bitcoin ETF が暗号通貨契約に与える影響を理解するにはどうすればよいですか?

2026-02-01 16:19:51

Bitcoin ETF と市場の流動性1. Bitcoin ETF は機関資本をスポット市場に直接導入し、オーダーブックの厚みを増し、大規模取引のスリッページを減らします。 2. 裁定取引者が先物や永久スワップを使用して ETF ポジションをヘッジするため、流動性の向上はデリバティブ市場にも波及しま...

現在の流動性の急増中に DeFi 契約を取引するにはどうすればよいでしょうか?

現在の流動性の急増中に DeFi 契約を取引するにはどうすればよいでしょうか?

2026-02-01 07:00:25

DeFiプロトコルにおける流動性のダイナミクスを理解する1. DeFiにおける流動性の急上昇は、多くの場合、イールド・ファーミング・インセンティブ、トークンの排出、クロスチェーン・ブリッジング活動からの調整された資本流入によって引き起こされます。 2. 自動マーケットメーカーは、大規模な流動性プール...

ソーシャルトレードを利用して暗号通貨契約の専門家をコピーするにはどうすればよいでしょうか?

ソーシャルトレードを利用して暗号通貨契約の専門家をコピーするにはどうすればよいでしょうか?

2026-02-02 07:40:22

ソーシャル取引プラットフォームを理解する1. ソーシャル取引プラットフォームは、リアルタイムの市場データとユーザー対話機能を統合し、トレーダーが他の人が開いたポジションを観察、フォロー、複製できるようにします。 2. これらのプラットフォームでは通常、アカウントの検証、ステーブルコインまたはネイティ...

BNB契約を取引して取引手数料を節約するにはどうすればよいですか?

BNB契約を取引して取引手数料を節約するにはどうすればよいですか?

2026-02-03 00:39:37

BNB契約取引の仕組みを理解する1. BNB 契約はバイナンス先物で取引されるデリバティブ商品であり、ユーザーは原資産を保有することなく BNB/USDT へのレバレッジエクスポージャーを得ることができます。 2. これらの契約は USDT で決済され、永久および四半期ごとの有効期限形式の両方をサポ...

2026 年に向けた一貫した暗号通貨契約取引計画を構築するにはどうすればよいでしょうか?

2026 年に向けた一貫した暗号通貨契約取引計画を構築するにはどうすればよいでしょうか?

2026-02-02 22:59:54

契約仕様の定義1. 原資産を選択するには、流動性の深さ、過去のボラティリティ、Binance Futures、Bybit、OKX などの主要なデリバティブ取引所全体の取引所サポートを評価する必要があります。 2. 契約サイズはポジションサイジングのロジックと一致する必要があります。標準化された BT...

暗号通貨契約ポジションを手動または自動でクローズするにはどうすればよいですか?

暗号通貨契約ポジションを手動または自動でクローズするにはどうすればよいですか?

2026-02-01 23:19:36

手動ポジション決済プロセス1. 契約が有効な取引プラットフォームにログインし、「ポジション」または「オープンオーダー」タブに移動します。 2. シンボル、サイズ、エントリー価格、レバレッジレベルを確認して、特定の契約ポジションを見つけます。 3. ポジションの横にある「クローズ」または「清算」ボタン...

Bitcoin ETF が暗号通貨契約に与える影響を理解するにはどうすればよいですか?

Bitcoin ETF が暗号通貨契約に与える影響を理解するにはどうすればよいですか?

2026-02-01 16:19:51

Bitcoin ETF と市場の流動性1. Bitcoin ETF は機関資本をスポット市場に直接導入し、オーダーブックの厚みを増し、大規模取引のスリッページを減らします。 2. 裁定取引者が先物や永久スワップを使用して ETF ポジションをヘッジするため、流動性の向上はデリバティブ市場にも波及しま...

現在の流動性の急増中に DeFi 契約を取引するにはどうすればよいでしょうか?

現在の流動性の急増中に DeFi 契約を取引するにはどうすればよいでしょうか?

2026-02-01 07:00:25

DeFiプロトコルにおける流動性のダイナミクスを理解する1. DeFiにおける流動性の急上昇は、多くの場合、イールド・ファーミング・インセンティブ、トークンの排出、クロスチェーン・ブリッジング活動からの調整された資本流入によって引き起こされます。 2. 自動マーケットメーカーは、大規模な流動性プール...

ソーシャルトレードを利用して暗号通貨契約の専門家をコピーするにはどうすればよいでしょうか?

ソーシャルトレードを利用して暗号通貨契約の専門家をコピーするにはどうすればよいでしょうか?

2026-02-02 07:40:22

ソーシャル取引プラットフォームを理解する1. ソーシャル取引プラットフォームは、リアルタイムの市場データとユーザー対話機能を統合し、トレーダーが他の人が開いたポジションを観察、フォロー、複製できるようにします。 2. これらのプラットフォームでは通常、アカウントの検証、ステーブルコインまたはネイティ...

BNB契約を取引して取引手数料を節約するにはどうすればよいですか?

BNB契約を取引して取引手数料を節約するにはどうすればよいですか?

2026-02-03 00:39:37

BNB契約取引の仕組みを理解する1. BNB 契約はバイナンス先物で取引されるデリバティブ商品であり、ユーザーは原資産を保有することなく BNB/USDT へのレバレッジエクスポージャーを得ることができます。 2. これらの契約は USDT で決済され、永久および四半期ごとの有効期限形式の両方をサポ...

2026 年に向けた一貫した暗号通貨契約取引計画を構築するにはどうすればよいでしょうか?

2026 年に向けた一貫した暗号通貨契約取引計画を構築するにはどうすればよいでしょうか?

2026-02-02 22:59:54

契約仕様の定義1. 原資産を選択するには、流動性の深さ、過去のボラティリティ、Binance Futures、Bybit、OKX などの主要なデリバティブ取引所全体の取引所サポートを評価する必要があります。 2. 契約サイズはポジションサイジングのロジックと一致する必要があります。標準化された BT...

すべての記事を見る

User not found or password invalid

Your input is correct