EGO-LOG

40代2児の父。主にプログラム学習と開発、仮想通貨、メタバース、たまに関係ないことを綴る。

CryptoZombiesにSolidityを学ぶ Lesson.1

スマートコントラクトを構築するための言語、Solidity。

名前だけは聞いたことがあったが、とっかかりがなくて除外していた。

言語名で検索してみたら、cryptozombiesというサイトがあり、

ここで開発を学べるのだそう。

cryptozombies.io

 

掴みだけでもやってみましょう。

え?ゾンビが何なの?とか余計なことを考えてはいけない。

 

よろしくお願いします。

ここから先は、Solidity言語の基本構文をチャプター15までかけて学ぶ。

 

コントラクト

Solidityのコードはコントラクト内にカプセル化される。

pragma solidity ^0.4.19; // 1. solidityのバージョンをここに入力するのだ

// 2. ここにコントラクトを作成するのだ
contract ZombieFactory {

}

 

■状態変数と整数

状態変数、永遠に保管され続ける値ということで定数扱いでいいかな。
uint dnaDigits = 16;

■数式演算

四則演算やね。
+ - * / % は普通で、べき乗は **
uint dnaDigits = 16;
uint dnaModlus = 10 ** dnaDigits;
 

■構造体

コントラクトが構造体のように見えるけど別もの
struct Zombie {
string name;
uint dna;
}
 
 

■配列

publicにすると自動的にgetterメソッドを作成してくれる。

Zombie public zombies;
 

■関数の宣言

function createZombie(string _name, uint _dna){

}
 

■構造体と配列の操作

配列に値や構造体を追加するときはpush
Zombie public zombies;

function createZombie(string _name, uint _dna) {
zombies.push(Zombie(_name, _dna));
}
 

■Private/Public

contract内だけでアクセスさせたい関数はprivateにする。

// createZombie関数をprivateに変更するのだ
function _createZombie(string _name, uint _dna) private {
zombies.push(Zombie(_name, _dna));
}
 

■関数の戻り値

関数から値を返したい場合の記述。
view関数の場合値を編集しない。
この関数はアプリから読み込むことすらできない。つまり戻り値が関数のパラメーターのみに依存することになる。この場合pure関数として宣言することができる。
pure関数は受け取ったパラメータのみ使用する。
↓はview関数
function _generateRandomDna(string _str) public view returns (uint){
}
 

■Keccak256と型キャスト

keccak256は文字列をランダムな256ビットの16進数に変換する機能。
uint rand = uint(keccak256(_str));
return rand % dnaModulus;
 
■イベント
Events は、ブロックチェーンで何かが生じたときに、コントラクトがアプリのフロントエンドに伝えることができるものだ。
イベントの定義
event NewZombie(uint zombieId, string name, uint dna);
イベントを発生させる
NewZombie(id, _name, _dna);
 

■フロントエンド(Web3.js)

Solidity自体は裏で動く処理で、フロントエンド、画面側はjavascriptで記述するようだ。
Web3.jsというライブラリが提供されている。
 
まぁ相当端折ってるんだろうけど、ゾンビ生成!

ほんとに言語の基本的なところを学びました。
基本だけでも結構がっつりあった感触。
次のレッスンにも進めるけど一旦ここまで。
 
続く