0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Solidity入門 CryptoZombies Lesson1

Posted at

はじめに

NFTゲームを作りたいと思い、solidityの勉強を始めることにしました。
まずは、CryptoZombiesで基本的な勉強を行なっていきます。

Lesson1の学習内容サマリ

  • Contractとバージョンの記法
  • 変数の定義方法
  • 算術演算子
  • struct(構造体)の定義方法
  • 配列
  • function(関数)の定義方法
  • アクセス修飾子
  • 型キャスト
  • Events

Contractとバージョンの記法

pragma solidity >=0.5.0 <0.6.0; //solidityのバージョン定義

//contract定義
contract HelloWorld {

}

バージョン定義はおまじないみたいなもので、contract定義はJavaとかでいうところのClass定義ですね。

変数の定義方法

uint unsignedInteger = 100;

他の言語と大差ないですね。
uintはuint256(256ビット符号なし整数)と同義です。
そのほかにもuint8,uint16,uint32など、各ビット数で定義が可能です。

算術演算子

uint power = 10 ** 2; // equal to 10^2 = 100

基本的な算術演算子が利用可能です。

  • 足し算: x + y
  • 引き算: x - y
  • 掛け算: x * y
  • 割り算: x / y
  • 剰余: x % y (割り算の余りのことです。16 / 3 の場合、5余り1なので、1が結果として返されます)

struct(構造体)の定義方法

// 構造体定義
struct Person {
  uint age;
  string name;
}
// インスタンス生成
Person person = Person(20, "name");

普通の書き方ですね。クラス定義と大差ありませんが、関数の定義が不可です。
構造体のインスタンス生成にはnewは必要ないようです。

配列

// 固定長配列
uint[2] fixedArray;
// 可変超配列
uint[] dynamicArray;
dynamicArray.push(1);

固定長配列と、可変超配列での定義が可能です。
値を追加する場合は、push関数を呼び出します。

function(関数)の定義方法

function functionName(string memory _arg1, uint _arg2) public {

}

グローバル変数と区別するために、引数の変数名は"_"をつけるようです。
アクセス修飾子等が後ろにつくのは個人的に慣れないですね。

アクセス修飾子

アクセス修飾子には、関数のスコープを表すprivate,public,internal,externalの4つと、
関数の動作を表すpure,viewの2つがあります。

  • private : 同一のcontract内からのみ呼び出すことが可能です。
  • public : 同一のcontract、外部のcontract問わずどこからでも呼び出すことが可能です。
  • internal(Lesson1未登場) : 同一のcontractと、そのcontractを継承したサブクラスからのみ呼び出すことが可能です。
  • external(Lesson1未登場) : 外部のcontractからのみ呼び出すことが可能です。
  • pure : 引数のみを利用し、contract内の他のデータを利用しない場合に付与します。
  • view : データの参照のみで、更新を行わない場合に付与します。

型キャスト

uint a = 1;
uint8 b = 2;
// これは型が違うのでエラー
uint8 c = a * b;
// これは型を同じに変換しているのでOK
uint8 d = a * uint8(b);

キャストは上記のように変数を型で囲むことで可能です。

Events

Eventsは関数呼び出し元のfrontendとやりとりするための機能です。
solidityで定義、発火し、

// eventの宣言
event IntegersAdded(uint x, uint y, uint result);

function add(uint _x, uint _y) public returns (uint) {
  uint result = _x + _y;
  // イベントの発火
  emit IntegersAdded(_x, _y, result);
  return result;
}

frontendでは受け取って処理を行います。

YourContract.IntegersAdded(function(error, result) {
  // イベント受け取り後の処理
})

終わりに

keyccakやweb3jsなど、一部割愛しましたが、Lesson1で学んだ内容です。
プログラミング経験のある人の場合すんなり理解できると思います。
次回はLesson2を紹介します。
Qiitaの書き方も勉強しながらやっていきたいと思います。
よろしくお願いいたします。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?