『プログラミング初心者がイーサリアム「Solidity」を勉強する理由・勉強方法』で書いた通り、早速「CryptoZombies(クリプトゾンビ)」をプレイしてみました。
まずはレッスン1を試してみましたので、感想と学んだことをメモしておきます。
目次
「CryptoZombies(クリプトゾンビ)」のレッスン1をプレイしてみた

CryptoZombiesのレッスン構成
「CryptoZombies(クリプトゾンビ)」は6つのレッスンで構成されており、段階的に学習することができます。
今回は初めてなので、「レッスン1:ゾンビファクトリーの作成」を受講しました。開発環境を用意する必要が無く、インターネットと端末があれば簡単に始められます。
上画像のように始まります。日本語対応しているのは嬉しいです。味のある日本語で、CryptoZombiesの世界観に引き込まれました。

CryptoZombiesのレッスン内容
上画像の通り、「学ぶべきこと」と「テスト」が用意されていて理解が深まります。
レッスン1を経て、僕が作ったゾンビは上画像の通り。何とも愛らしいですね…。
レッスン1で学習した技術のメモ
CryptoZombies(クリプトゾンビ)のレッスン1で学んだことをメモしておきます。
- バージョンの宣言
- 空のコントラクトを作成
- 変数の扱い方
- 数式演算
- 構造体
- 配列
- 関数の宣言
- 構造体と配列の操作
- Private/Public関数
- 関数の戻り値と修飾子
- Keccak256と型キャスト
- イベント
①バージョンの宣言
Solidityのソースコードは全て”version pragma“で始まる。コードが使用するSolidityのコンパイラのバージョンを宣言するもの。
pragma solidity ^0.4.19;
②空のコントラクトを作成
Solidityのコードは「コントラクト」内にカプセル化されている。コントラクトは、イーサリアムアプリケーションの基本ブロックのこと。
contract HelloWorld { }
③変数の扱い方
状態変数はコントラクト内に永遠に保管され続けるもの。
- uint…符号なし整数のデータ型(負数ではない)
- int…符号付整数
contract Example { // この部分がブロックチェーン上に記載される uint ID = 1000; }
④数式演算
演算方法は一般的であり、以下のように表現できる。
- 加算:x + y
- 減算:x – y
- 乗算:x * y
- 除算:x / y
- 剰余:x % y
- 指数:x ** y(xのy乗)
uint x = 1 + 2;
⑤構造体
複雑なデータ型が必要になる場合に備え、Solidityは構造体を用意している。
struct Person { uint age; string name; }
⑥配列
Solidityには2種類の配列が用意されている。(固定長配列と可変長配列)
配列をpublicで宣言することで、他のコントラクトもこの配列を読むことができる。
⑦関数の宣言
グローバル変数と区別できるように、関数パラメータ変数名に「アンダースコア」をつけるのが一般的。
//関数の宣言 function eatApple(string _name, uint _amount) { }
//関数の呼び出し eatApple("Taro", 2);
⑧構造体と配列の操作
配列にデータを格納する方法は2通り。以下②の方がスッキリする。
①
Person taro = Person(20, "Taro");
people.push(taro);
②
people.push(Person(20, "Taro"));
⑨Private/Public関数
Solidityの関数はデフォルトでpublicになっているため、誰でもコントラクトの関数を呼び出し&実行できる。
自分だけが使いたい関数はprivate、公開して良い関数はpublicに設定すればOK。
- 関数名の後にprivateを付与。
- 関数名の前にアンダースコアを付与するのが一般的。
⑩関数の戻り値と修飾子
以下は戻り値の例。Solidityでは関数の宣言に戻り値の型を含む。
string greeting = "Hello"; function sayHello() public returns (string) { return greeting; }
関数の修飾子は「view」と「pure」がある。
- view…データの読み取り専用で編集できない
- pure…アプリ内のデータにアクセスできない
⑪Keccak256と型キャスト
イーサリアムにはSHA3のバージョンの1つ「keccak256」が組み込まれており、文字列をランダムな256ビットの16進数にマッピングしてくれる。
keccak256("abcde");
場合によっては、データ型を変更する必要がある。
uint8 a = 1; uint b = 2; uint8 c = a * uint8(b);
⑫イベントの宣言
eventはブロックチェーンで何かが生じた時、コントラクトがアプリのフロントエンドに伝えることが可能。
特定のイベントをlistening状態にして、何かあった時にアクションを起こせる。
//イベントの宣言 event IntegersAdded(uint x, uint y, uint result); function add(uint _x, uint _y) public { uint result = _x + _y; //関数が呼び出されたことをアプリに伝えるためにイベントを発生 IntegersAdded(_x, _y, result); return result; }
さいごに感想:初心者にはハードル高めだが、しっかり学べる
「CryptoZombies(クリプトゾンビ)」は、初心者にはハードルが高いように感じました。説明文をじっくり読みつつ、ヒントに頼らずテストを受けると時間がかかります。
しかし無料なのにコンテンツがしっかりしているので、大変良い勉強になりました。挫けずにレッスン2に挑戦していきます!