時価総額: $2.607T 0.90%
ボリューム(24時間): $88.5549B -12.29%
恐怖と貪欲の指数:

64 - 貪欲

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

言語を選択する

言語を選択する

通貨の選択

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

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

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) までご連絡ください。速やかに削除させていただきます。

関連知識

SOL先物の出来高と建玉を確認するにはどうすればよいですか?

SOL先物の出来高と建玉を確認するにはどうすればよいですか?

2026-09-14 00:40:03

SOL 先物市場データへのアクセス1. Bybit、OKX、Bitget など、SOL 永久先物または四半期先物がリストされている公式取引所プラットフォームに移動します。 2. SOL/USDT または SOL/USD 先物取引ペアのページに移動し、「契約概要」または「市場データ」タブに切り替えます...

XRP先物の出来高と建玉を確認するにはどうすればよいですか?

XRP先物の出来高と建玉を確認するにはどうすればよいですか?

2026-09-15 05:00:12

リアルタイムのXRP先物データへのアクセス1. Binance、Bybit、OKX、Bitget など、XRP 無期限および四半期先物契約をリストしている主要なデリバティブ取引所にアクセスします。 2. XRP/USDT または XRP/USD 取引ペアのページに移動し、出来高と建玉の数値がリアルタ...

DOGE 先物の出来高と建玉を確認するにはどうすればよいですか?

DOGE 先物の出来高と建玉を確認するにはどうすればよいですか?

2026-09-12 08:39:38

DOGE 先物ボリュームを理解する1. 先物取引高とは、特定の時間枠内で取引される DOGE 件の先物契約の総数を指し、通常は 1 日または 1 時間ごとに測定されます。 2. 出来高が多いということは、多くの場合、市場への参加が強力であることを示しており、価格変動の状況に応じてトレンドの継続または...

ETH先物の出来高と建玉を確認するにはどうすればよいですか?

ETH先物の出来高と建玉を確認するにはどうすればよいですか?

2026-09-16 19:00:18

リアルタイムの ETH 先物データへのアクセス1. Binance、Bybit、OKX などの主要な集中取引所は、ETH の無期限および四半期先物の出来高と建玉を表示するライブ ダッシュボードを提供します。これらの指標は 5 ~ 10 秒ごとに更新され、公開市場ページからログインせずにアクセスできま...

BTC先物の出来高と建玉を確認するにはどうすればよいですか?

BTC先物の出来高と建玉を確認するにはどうすればよいですか?

2026-09-12 15:19:55

BTC先物指標のデータソース1. CoinGlass API v4 は、30 以上の取引所にわたるリアルタイムの資金調達レート、清算ヒートマップ、および詳細な建玉の内訳を提供します。 2. Binance Futures API は、ビッドアスク深度、契約固有の出来高履歴、マージン率スナップショット...

DOGEUSDT 無期限契約チャートの見方

DOGEUSDT 無期限契約チャートの見方

2026-09-11 19:19:48

DOGEUSDT 無期限チャートの価格アクションを理解する1. ローソク足の形成は、当面の市場センチメントを明らかにします。緑のローソクは買い優勢を示し、赤のローソクはその期間中の売り圧力を示します。 2. 本体の上下の芯は、価格の高値または低値の拒否を示します。不安定なミームコイン市場では、長い上...

SOL先物の出来高と建玉を確認するにはどうすればよいですか?

SOL先物の出来高と建玉を確認するにはどうすればよいですか?

2026-09-14 00:40:03

SOL 先物市場データへのアクセス1. Bybit、OKX、Bitget など、SOL 永久先物または四半期先物がリストされている公式取引所プラットフォームに移動します。 2. SOL/USDT または SOL/USD 先物取引ペアのページに移動し、「契約概要」または「市場データ」タブに切り替えます...

XRP先物の出来高と建玉を確認するにはどうすればよいですか?

XRP先物の出来高と建玉を確認するにはどうすればよいですか?

2026-09-15 05:00:12

リアルタイムのXRP先物データへのアクセス1. Binance、Bybit、OKX、Bitget など、XRP 無期限および四半期先物契約をリストしている主要なデリバティブ取引所にアクセスします。 2. XRP/USDT または XRP/USD 取引ペアのページに移動し、出来高と建玉の数値がリアルタ...

DOGE 先物の出来高と建玉を確認するにはどうすればよいですか?

DOGE 先物の出来高と建玉を確認するにはどうすればよいですか?

2026-09-12 08:39:38

DOGE 先物ボリュームを理解する1. 先物取引高とは、特定の時間枠内で取引される DOGE 件の先物契約の総数を指し、通常は 1 日または 1 時間ごとに測定されます。 2. 出来高が多いということは、多くの場合、市場への参加が強力であることを示しており、価格変動の状況に応じてトレンドの継続または...

ETH先物の出来高と建玉を確認するにはどうすればよいですか?

ETH先物の出来高と建玉を確認するにはどうすればよいですか?

2026-09-16 19:00:18

リアルタイムの ETH 先物データへのアクセス1. Binance、Bybit、OKX などの主要な集中取引所は、ETH の無期限および四半期先物の出来高と建玉を表示するライブ ダッシュボードを提供します。これらの指標は 5 ~ 10 秒ごとに更新され、公開市場ページからログインせずにアクセスできま...

BTC先物の出来高と建玉を確認するにはどうすればよいですか?

BTC先物の出来高と建玉を確認するにはどうすればよいですか?

2026-09-12 15:19:55

BTC先物指標のデータソース1. CoinGlass API v4 は、30 以上の取引所にわたるリアルタイムの資金調達レート、清算ヒートマップ、および詳細な建玉の内訳を提供します。 2. Binance Futures API は、ビッドアスク深度、契約固有の出来高履歴、マージン率スナップショット...

DOGEUSDT 無期限契約チャートの見方

DOGEUSDT 無期限契約チャートの見方

2026-09-11 19:19:48

DOGEUSDT 無期限チャートの価格アクションを理解する1. ローソク足の形成は、当面の市場センチメントを明らかにします。緑のローソクは買い優勢を示し、赤のローソクはその期間中の売り圧力を示します。 2. 本体の上下の芯は、価格の高値または低値の拒否を示します。不安定なミームコイン市場では、長い上...

すべての記事を見る

User not found or password invalid

Your input is correct