🧟

【CryptoZombies】チャプター5:構造体の設計

2025/01/09に公開

Solidityの入門はCryptoZombiesがいいらしいので、挑戦の記録。
チャプター1から4は前の記事へ

チャプター5:構造体

チャプター1でゾンビを作った時、自分のゾンビはどんな部分を変えたか覚えているだろうか?
髪型、目の色、肌の色、服の種類、服の色。
これらの特徴をまとめる時に必要なのが構造体になる。

struct Zombie {
    string 髪型;
    string 目の色;
    string 肌の色;
    string 服の種類
    string 服の色;
}

この時、髪型や目の色などの構造体を構成する要素はプロパティと呼ぶ。

練習問題

最初は復習。
すでに記載されているが、コードの1行目はコンパイラのバージョンの宣言だった。

pragma solidity ^0.4.19;

次に、記述する空のコントラクトを設置する.
今回のコントラクト名はZombieFactoryとする

pragma solidity ^0.4.09;

contract ZombieFactory {

}

設置したZombieFactoryの中に、dnaDigitsという変数を定義したい。
dnaDigitsは、負の値ではない数値であり、今回は16と指定したい。

pragma solidity ^0.4.19;

contract ZombieFactory {

    // ここにdnaDigitsを定義するのだ
    uint dnaDigits = 16;

}

10のdnaDigitsを自然数として、変数dnaModulusに格納する。

pragma solidity ^0.4.19;

contract ZombieFactory {

    uint dnaDigits = 16;
    // ここにdnaModulusを定義するのだ
    uint dnaModulus = 10 ** dnaDigits;

}

ここから本題。
まずコントラクト内に、Zombiという構造体名の構造体を作成する。

pragma solidity ^0.4.19;

contract ZombieFactory {

    uint dnaDigits = 16;
    uint dnaModulus = 10 ** dnaDigits;
    
    // ここにZombieというstructを定義するのだ
    struct Zombie {
        
    }
}

次に、Zombieという構造体に、文字列のnameと自然数のdnaというプロパティを設定したい。

pragma solidity ^0.4.19;

contract ZombieFactory {

    uint dnaDigits = 16;
    uint dnaModulus = 10 ** dnaDigits;
    
    // ここにZombieというstructを定義するのだ
    struct Zombie {
        string name;
        uint dna;
    }
}

nameとdnaはZombieという構造体の中の要素なので、インデントに注意。

Discussion