-
Bitcoin
$119200
0.25% -
Ethereum
$3871
-0.57% -
XRP
$3.180
-2.86% -
Tether USDt
$0.0000
-0.02% -
BNB
$828.1
-3.28% -
Solana
$186.3
-2.99% -
USDC
$0.9999
0.00% -
Dogecoin
$0.2318
-4.50% -
TRON
$0.3297
2.05% -
Cardano
$0.8083
-3.53% -
Hyperliquid
$44.40
0.75% -
Sui
$3.992
-5.98% -
Stellar
$0.4332
-2.18% -
Chainlink
$18.56
-3.71% -
Hedera
$0.2744
-3.93% -
Bitcoin Cash
$579.3
-0.37% -
Avalanche
$25.47
-3.66% -
Litecoin
$110.5
-3.82% -
UNUS SED LEO
$8.969
0.02% -
Toncoin
$3.276
-4.28% -
Shiba Inu
$0.00001365
-3.60% -
Ethena USDe
$1.001
0.02% -
Uniswap
$10.61
-3.81% -
Polkadot
$4.073
-4.66% -
Monero
$320.0
-2.27% -
Dai
$1.000
0.03% -
Bitget Token
$4.649
-0.85% -
Pepe
$0.00001212
-6.53% -
Cronos
$0.1455
-1.74% -
Aave
$294.9
-3.80%
スマートコントラクトストレージはどのように機能しますか?
Ethereumのスマートコントラクトストレージは、状態データなどの変数が保持され、読み書きのためのガスコストとスロットパッキングと効率的なデータ構造を介して最適化された永続的なキー価値ストアです。
2025/07/29 07:35

スマートコントラクトストレージメカニズムの理解
スマートコントラクトストレージは、特にEthereumのようなプラットフォームでのブロックチェーンテクノロジーの基本的な側面です。ストレージとは、契約が関数呼び出し間で維持する永続的なデータを指します。トランザクションごとに一時的でリセットされるメモリやスタックとは異なり、ストレージは永続的であり、ブロックチェーンに無期限に残ります。状態変数などの契約で宣言された各変数は、保管に保存され、このデータにアクセスまたは変更するにはガスコストが発生します。
Ethereumでは、ストレージはキー価値ストアとして実装され、各キーは32バイトのスロットで、各値も32バイトです。この構造は、全体的なイーサリアムステートトリーの一部であるストレージトリーとして知られています。ストレージスロットへの変数のマッピングは、コンパイラによって決定されます(例えば、堅さ)。このマッピングを理解することは、ガスの使用量を最適化するために重要です。
スマートコントラクトに変数が保存される方法
開発者が変数を堅牢性で宣言すると、コンパイラはそれらがストレージスロットにどのように梱包されるかを決定します。たとえば、複数の変数が単一の32バイトスロットに適合する場合、スペースを節約し、ガスコストを削減するために一緒に詰め込まれます。ただし、この動作は、使用される変数のタイプに依存します。 uint8
、 bool
、 address
などの小さなデータ型は、連続して宣言されている場合は、単一のスロットに一緒に保存できます。
対照的に、 uint256
やstring
などの大型タイプは、独自のストレージスロットを占めています。データは宣言されたスロットに直接保存されないため、動的配列とマッピングはより複雑です。代わりに、スロットはベース参照として機能し、実際のデータはハッシュ機能を使用して派生位置に保存されます。たとえば、動的配列の長さはベーススロットに保存され、要素はkeccak256(baseSlot) + index
に保存されます。
貯蔵アクセスのガスコストと効率
ストレージへのアクセスと変更は、イーサリアムで最も高価な操作です。ストレージ(SLOAD)からの読み取りは100ガスのコストがかかりますが、書き込み(SSTORE)はかなり高価です。執筆のコストは、値がゼロから非ゼロ(20,000ガス)、非ゼロから非ゼロ(5,000ガス)、または非ゼロからゼロ(ガスを払い戻す)から変化しているかどうかによって異なります。このガスモデルは、ストレージアクセスを最小限に抑え、データの構造を最適化するように開発者を奨励します。
効果的な最適化の1つは、複数の変数を単一のストレージスロットに梱包することです。たとえば、 bool
、 uint8
、および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) までご連絡ください。速やかに削除させていただきます。
- ビットコイン、クリプトマイニング、フィンランド:2025年の北欧のブーム
- 2025-07-29 20:30:12
- Crypto Carnage:KNCと1000catが今日のトップの暗号敗者の中で1000cat
- 2025-07-29 20:30:12
- Genius Act:Stablecoin Regulationが米国で熱くなります
- 2025-07-29 18:50:13
- Crypto Presale Mania:Punisher Coinは次のビットコインですか?
- 2025-07-29 18:50:13
- Dogecoinから10ドル?ビットコインの相棒はムーンショットです!
- 2025-07-29 19:10:12
- スポットライトのdefiトークン:カルダノとリップルはミューストゥムファイナンスに地面を失っていますか?
- 2025-07-29 19:10:13
関連知識

なぜ私のビットスタンプ先物の位置が清算されているのですか?
2025-07-23 11:08:15
ビットスタンプでの先物の清算を理解するビットスタンプでの先物取引には、資金を借りてレバレッジされたポジションを開くことが含まれ、潜在的な利益とリスクの両方を増幅します。マージンバランスが必要なメンテナンスのしきい値を下回ると、BitStampは借りた金額をカバーする清算プロセスを開始します。これは、...

BitStampは逆契約を提供しますか?
2025-07-23 13:28:52
暗号通貨取引における逆契約の理解暗号通貨デリバティブの領域では、逆契約は、定住と担保が、スタブコインやフィアット通貨ではなく、 BTCやETHなどの基本的な暗号通貨で宗派されている特定のタイプの未来または永続的な契約です。これは、トレーダーが逆契約でポジションを開くと、彼らの利益と損失(P&L)が基...

ビットスタンプの先物と永久の違いは何ですか?
2025-07-27 05:08:19
ビットスタンプで先物契約を理解するビットスタンプの先物契約は、トレーダーが所定の価格と日付でBitcoinやイーサリアムなどの暗号通貨の将来の価格を推測できるようにする金融デリバティブです。これらの契約の有効期限は固定されています。つまり、将来の特定の日に落ち着きます。先物契約が期限切れになると、ポ...

あなたのビットスタンプ先物の取引履歴を見つける方法は?
2025-07-23 08:07:56
ビットスタンプと先物取引の可用性を理解するBitStampのサービス提供の現在の状態の時点で、 BitStampが先物取引をサポートしていないことを明確にすることが重要です。このプラットフォームは、主にスポット暗号通貨交換として機能し、ユーザーがBitcoin、イーサリアム、その他の主要な暗号通貨な...

ビットスタンプ先物でトレーリングストップを使用できますか?
2025-07-23 13:42:32
暗号通貨取引におけるトレーリングストップの理解トレーリングストップは、資産の価格が好ましい方向に移動すると自動的に調整される動的なタイプのストップロス順序です。設定された価格レベルに固定された標準のストップロスとは異なり、後部の停留所は、指定された割合またはドルの金額で市場価格に従います。これにより...

ビットスタンプ先物でトレーリングストップを使用できますか?
2025-07-25 02:28:47
暗号通貨先物取引におけるトレーリングストップの理解トレーリングストップは、市場価格が好ましい方向に移動するにつれて自動的に調整される動的なタイプのストップロス順序です。設定された価格で固定された標準のストップロスとは異なり、トレーリングストップは、定義された割合またはドル距離で資産の価格に従います。...

なぜ私のビットスタンプ先物の位置が清算されているのですか?
2025-07-23 11:08:15
ビットスタンプでの先物の清算を理解するビットスタンプでの先物取引には、資金を借りてレバレッジされたポジションを開くことが含まれ、潜在的な利益とリスクの両方を増幅します。マージンバランスが必要なメンテナンスのしきい値を下回ると、BitStampは借りた金額をカバーする清算プロセスを開始します。これは、...

BitStampは逆契約を提供しますか?
2025-07-23 13:28:52
暗号通貨取引における逆契約の理解暗号通貨デリバティブの領域では、逆契約は、定住と担保が、スタブコインやフィアット通貨ではなく、 BTCやETHなどの基本的な暗号通貨で宗派されている特定のタイプの未来または永続的な契約です。これは、トレーダーが逆契約でポジションを開くと、彼らの利益と損失(P&L)が基...

ビットスタンプの先物と永久の違いは何ですか?
2025-07-27 05:08:19
ビットスタンプで先物契約を理解するビットスタンプの先物契約は、トレーダーが所定の価格と日付でBitcoinやイーサリアムなどの暗号通貨の将来の価格を推測できるようにする金融デリバティブです。これらの契約の有効期限は固定されています。つまり、将来の特定の日に落ち着きます。先物契約が期限切れになると、ポ...

あなたのビットスタンプ先物の取引履歴を見つける方法は?
2025-07-23 08:07:56
ビットスタンプと先物取引の可用性を理解するBitStampのサービス提供の現在の状態の時点で、 BitStampが先物取引をサポートしていないことを明確にすることが重要です。このプラットフォームは、主にスポット暗号通貨交換として機能し、ユーザーがBitcoin、イーサリアム、その他の主要な暗号通貨な...

ビットスタンプ先物でトレーリングストップを使用できますか?
2025-07-23 13:42:32
暗号通貨取引におけるトレーリングストップの理解トレーリングストップは、資産の価格が好ましい方向に移動すると自動的に調整される動的なタイプのストップロス順序です。設定された価格レベルに固定された標準のストップロスとは異なり、後部の停留所は、指定された割合またはドルの金額で市場価格に従います。これにより...

ビットスタンプ先物でトレーリングストップを使用できますか?
2025-07-25 02:28:47
暗号通貨先物取引におけるトレーリングストップの理解トレーリングストップは、市場価格が好ましい方向に移動するにつれて自動的に調整される動的なタイプのストップロス順序です。設定された価格で固定された標準のストップロスとは異なり、トレーリングストップは、定義された割合またはドル距離で資産の価格に従います。...
すべての記事を見る
