先日からJavaScriptの勉強をはじめて、
「簡単なdAppsゲームを素人が作れるのか?」
というのを検証しています。
JavaScriptの基本演習が終わったので、クリプトゾンビによるsolidityの学習に移っていきます。
ここまでの流れは「Progateの有料verにトライ!JavaScriptを習得してdApps作成のベースをゲット」をご覧ください。
ちなみに、本格的にブロックチェーン技術やスマートコントラクトを学びたいのであれば、FLOCブロックチェーン大学がおすすめです。
Contents
クリプトゾンビの概要
クリプトゾンビとは、イーサリアム上でゲームの作り方を学べるオンラインレッスンです。
イーサリアム上で使われるsolidityという言語を学ぶことができます。
具体的には、これからゾンビゲームを作っていきます。そのレッスンを通じて、solidityの基本的な書き方を習得することができますよ!
このクリプトゾンビはLoom Networkが、なんと無償で提供しています。ブロックチェーン革命を後押ししたいという願いがあるようですね。
クリプトゾンビ1日目、ゾンビファクトリーの作成
レッスン1の内容は、「ゾンビファクトリー」でゾンビを作るところからスタートします。
ランダムゾンビを作成するというコントラクトが最終的には出来上がります。
レッスンはいくつかのチャプターに別れており、そこでは学習事項が提供されています。
その学習事項を記録もかねてまとめていきます。
コントラクト
契約。solidityのコードを格納しておく場所および、イーサリアムアプリケーションの基本単位のこと。
スマートコントラクトという呼び方でなじみのある方が多いと思います。
Version Pragma
solidityの全てのコードは、「Version Pragma」でスタートする必要があります。コードが使用するコンパイラを宣言することで、コンパイラのバージョンを原因とした不具合を防ぐことができます。
コンパイラ・・・人間にわかり易いようにかかれたコードを、コンピューターがわかりやすいプログラムに書き換えるしくみのこと
状態変数と符号なし整数
状態変数とはコントラクト内に永遠に保管され続けるもので、ブロックチェーン上に記載される。データベースと考えて良い。
符号なし整数は”uint”で規定できる。
ゾンビのDNAは16桁の数字で決まる設定にするので、コントラクトの中身は以下のように記載する。
数式演算
数式演算はJavaScriptと全く一緒。後々のために、dnaModulusを作っておく。
構造体
JavaScriptでいうオブジェクトと同じかな?構造体を使えば、複数のプロパティをもつ複雑なデータ型を作成することができる。
structで規定する。今回はZombieという構造体に、nameとdnaというプロパティを持たせた。
配列
solidityにもJavaScriptと同様に、「配列」という概念が存在する。
以下ではパブリックなZombie構造体を作成し、zombiesと名付けた。publicで宣言した配列は他のコントラクトもこの配列を読めるが、書き込むことはできない。
関数の宣言
ここもJavaScriptと同様。createZombie関数をnameとdnaをパラメーターの元に作成。
新しい構造体をつくる
先程作成した構造体にあてはめて、新しいZombieを作成し、zombies配列に格納した。
Private/Public 関数
特に設定しない場合、作成した関数はpublic関数となり、他のコントラクトからでも自由に利用できる。
脆弱性の観点から関数を自由に使われるのは望ましくないので、Private関数を設定すべきである。
関数名の前にアンダースコア(_)、後ろに「private」と記載する。createZombie関数をprivate関数に変更した。
戻り値
関数の戻り値に関数の型を宣言できる。
関数に引数をわたすと戻り値がかえってくることを復習。
修飾子
関数を読み取り専用にする際は「view」、コントラクトのデータへのアクセスを禁止するなら「pure」を使用する。
文字列からランダムなDNA番号を生成するヘルパー関数を作りたい。
_generateRandomDnaという名前のprivate関数を作成せよ。
パラメーターは _str(string)という名前で、戻り値をuintに設定せよ。
この関数はコントラクトの変数を読み込むことはあるが、編集することはない。そこで修飾子をviewと設定せよ。
関数の中身は空にせよ。中身は後で書き込むぞ。
この要求に合うコードはコチラ。
Keccak256と型キャスト
ここら辺からよく分からなくなってきた。そもそもKeccak256と型キャストってなんやねん。
テストの要望はこれ。
クリプトゾンビ、1日目にして挫折の予感、、、。 pic.twitter.com/P7qiPqXnEs
— アーリー出川兵団/大学院生ブロガー (@yasushi_crypto) July 23, 2018
要求を見てコードはかけるものの何をやりたいのかよくわからない、、、。
統合
よく分からんけど統合しはじめた。分かったら追記する。
イベント
新しいゾンビを作成するごとにアプリにそれを表示させたいので、イベントを定義する。
その他もろもろ追記。zombies配列に新しいゾンビが追加されたらnewZombieイベントが発生する。
Web3.js
イーサリアム上にはWeb3.jsというJavaScriptライブラリがある。Web3.jsがコントラクトとやり取りをし、実際にウェブブラウザでその動きを見ることができるようになる。
ここでのコードは省略する。
最後にゾンビに名前を与えてやると、見た目の変化を観察することができる。「アーリー出川兵団」はこんな感じ。
クリプトゾンビ1日目を終えて
多くの内容はJavaScriptの基礎ができていればできそうだと感じました。
これまでにプログラムを触ったことがある人からすれば余裕だと思います。
ただ私自身はJavaScriptをたった一日しか触ってない身なので、書いたコードが実際に動いていることをイメージできず、
「指定に沿ってコードは書けるけどイマイチわからない」
みたいな現象が多発してしまいました。
これを改善するためには、もう少しJavaScript自体やプログラム一般になれることが必要だと思いました。最後までたどり着けない気がしてきました(笑)
本日はこれにて終了です!明日からも頑張ります。
↓↓dApps作成0日目↓↓