Blockchain Smart Contracts with Solidity · レッスン

状態変数とストレージレイアウト

storage、memory、calldataの違いと、状態変数がブロックチェーン上で保持される仕組みを理解します。

レッスン 1/412 ステップ

「状態変数とストレージレイアウト」はCoddyKit上の無料Blockchain Smart Contracts with Solidityレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはBlockchain Smart Contracts with Solidity学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Blockchain Smart Contracts with Solidityコースには全4レッスンが含まれています。

このレッスンの一部はまだ翻訳されておらず、英語で表示されています。

What are State Variables?

Welcome to understanding how data lives on the blockchain! In Solidity, state variables are special variables whose values are permanently stored in the contract's storage on the blockchain.

Think of them as the persistent memory of your smart contract. Their values are saved even after a function finishes executing and across different transactions.

Data Locations in Solidity

Solidity uses different data locations to manage where information is stored during contract execution. These locations have big impacts on gas costs and how your variables behave.

  • storage: Permanent state on the blockchain.
  • memory: Temporary data for function execution.
  • calldata: Read-only data for external function arguments.

Deep Dive into `storage`

Variables declared at the contract level (outside of any function) are automatically assigned to storage. These are your contract's state variables.

Data in storage is expensive to modify because every change is written to the blockchain, making it permanent and immutable (in the sense of its history).

`storage` in Action

This contract stores a number in a state variable. Notice how myNumber keeps its value between calls to setNumber and getNumber.

pragma solidity ^0.8.0;

contract StorageExample {
    uint public myNumber; // This is a state variable, lives in storage

    function setNumber(uint _num) public {
        myNumber = _num;
    }

    function getNumber() public view returns (uint) {
        return myNumber;
    }
}

Understanding `memory`

memory is a temporary data location. It's used for variables that exist only during a function call and are discarded once the function execution completes.

It's cheaper than storage for temporary data, making it ideal for arrays, strings, or structs that are created and used within a single function.

`memory` in Action

This function creates a string in memory, modifies it, and returns it. The string only exists for the duration of the function call.

pragma solidity ^0.8.0;

contract MemoryExample {
    function greet(string memory _name) public pure returns (string memory) {
        string memory greeting = "Hello, ";
        // Use abi.encodePacked for simple string concatenation
        return string(abi.encodePacked(greeting, _name, "!"));
    }
}

Introducing `calldata`

calldata is a special read-only data location used exclusively for external function parameters. It's even cheaper than memory because data is not copied into memory, just referenced.

You cannot modify calldata. It's typically used for large data passed to external functions, saving gas by avoiding copies.

`calldata` in Action

This external function takes a string as calldata. Notice it's read-only and efficient for external calls.

pragma solidity ^0.8.0;

contract CalldataExample {
    // This function can only be called externally
    function processData(bytes calldata _data) external pure returns (uint) {
        // You cannot modify _data directly, but can read its properties
        return _data.length; // Returns the byte length of the data
    }

    // Another example returning calldata directly
    function echoString(string calldata _message) external pure returns (string calldata) {
        return _message;
    }
}

Comparing Data Locations

Choosing the right data location is crucial for gas optimization and correct contract behavior:

  • Storage: Permanent, expensive, contract state.
  • Memory: Temporary, cheaper, within-function variables.
  • Calldata: Read-only, cheapest, external function arguments.

Always use the most restrictive and cheapest option possible.

How Storage is Organized

Solidity packs state variables into 256-bit (32-byte) storage slots to save space and gas. Smaller types (like uint8, bool) can be packed together into a single slot.

However, this packing can be complex and depends on the order of variable declarations. Understanding it helps optimize gas costs, especially with structs and arrays.

Data Location Quiz

Which data location is used for permanent storage of a contract's state variables on the blockchain?

Summary of Data Locations

Great job! You've learned about the fundamental data locations in Solidity: storage, memory, and calldata.

  • State variables live in storage, making them persistent.
  • memory is for temporary data during function execution.
  • calldata is for efficient, read-only external function arguments.

Understanding these helps you write more efficient and correct smart contracts. Next, we'll explore complex data structures like Mappings and Dynamic Arrays!

無料で開始

AI チューターと学ぶ Blockchain Smart Contracts with Solidity — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
12
レッスン
48

よくある質問

「状態変数とストレージレイアウト」レッスンは無料ですか?

はい。「状態変数とストレージレイアウト」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Blockchain Smart Contracts with Solidityコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Blockchain Smart Contracts with Solidityコースには全4レッスンが含まれています。

「状態変数とストレージレイアウト」で何を学びますか?

storage、memory、calldataの違いと、状態変数がブロックチェーン上で保持される仕組みを理解します。 ブラウザで直接実行するハンズオンコードでBlockchain Smart Contracts with Solidityを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Blockchain Smart Contracts with Solidityを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのBlockchain Smart Contracts with Solidityは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「状態変数とストレージレイアウト」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このBlockchain Smart Contracts with Solidityレッスンでコードを書いて実行できますか?

はい。すべてのBlockchain Smart Contracts with Solidityレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 状態変数とストレージレイアウト
  2. マッピングと動的配列
  3. イベントとログデータ
  4. ストレージスロットとガス最適化
← Blockchain Smart Contracts with Solidityに戻る