CryptoZombiesにSolidityを学ぶ Lesson.1
スマートコントラクトを構築するための言語、Solidity。
名前だけは聞いたことがあったが、とっかかりがなくて除外していた。
言語名で検索してみたら、cryptozombiesというサイトがあり、
ここで開発を学べるのだそう。
掴みだけでもやってみましょう。
え?ゾンビが何なの?とか余計なことを考えてはいけない。
よろしくお願いします。
ここから先は、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;
■イベント
イベントの定義
event NewZombie(uint zombieId, string name, uint dna);
イベントを発生させる
NewZombie(id, _name, _dna);
■フロントエンド(Web3.js)
Solidity自体は裏で動く処理で、フロントエンド、画面側はjavascriptで記述するようだ。
Web3.jsというライブラリが提供されている。
まぁ相当端折ってるんだろうけど、ゾンビ生成!
ほんとに言語の基本的なところを学びました。
基本だけでも結構がっつりあった感触。
次のレッスンにも進めるけど一旦ここまで。
続く