CryptoZombies勉強会#1を開催しました
夏だ!海だ!Ethereumだ!DAppsだ!スマートコントラクトだ!
梅雨も明けましておめでとうございます。水不足にならないか心配です。
唐突ですが、みなさんCryptoZombiesというオンラインでスマートコントラクトを学習できるサイトをご存知でしょうか。
CryptoZombiesは、暗号からゾンビを生み出すゲームの開発を通じて、Solidityでスマートコントラクトの構築を学習できる、インタラクティブなオンラインレッスンです。
スマートコントラクトを学習するにあたり、かなり有名なオンライン学習サイトです。
画像にもあるとおり、日本語にも対応しています。
スマートコントラクト?
EthereumはブロックチェーンでありEthという仮想通貨を取り扱うことができますが、大きな特徴としてはスマートコントラクトというプログラミングをブロックチェーンに登録して動かすことができます。
このスマートコントラクトを使うことで、例えば
- クラウドファンディングで目標額に達したら自動で払い出しが行えたり
- ある良いことをしたらトークンがもらえたり
- 投票システムを作ったり
とか色々なアプリケーションをブロックチェーンに構築することができます。
と言っても、アプリケーションコードの全てをブロックチェーンへ構築するのではなく、データ周りの一部だけをスマートコントラクトとして実装するだけです。
ただし、ブロックチェーンに登録したスマートコントラクトはブロックチェーンの特性上、バグがあっても取り消すことができず時々セキュリティの脆弱性を突かれて大変なことになっていたりします。
そのため、セキュリティをよく知らない人やプログラミング初心者がいきなり手を出すと思わぬ結果になったりすることも。
CryptoZombies やってこ
CryptoZombiesでは有名なセキュリティの脆弱性もカバーしつつ、ゲーム形式でSolidityというスマートコントラクトの言語を習得するできるオンライン学習サイトです。
これだけでSolidityが書けるようになるかと言われるとそれは難しいと思いますが、Solidityを学習するのにはうってつけのサイトです。
ちょうど、私が住んでいるシェアハウスの住人が「CryptoZombiesやりたいけど、なかなか進められない」とのことだったので、じゃあちょっとした解説付きで進めてみましょうか、というのが今回開催のきっかけです。
開催しました、って言っても平日の14:00から身内3名だけなので大したことしていません。
そして、僕の素振りも兼ねています(僕は最新レッスンまで完了済み)
対象者
今回参加された方は
- プログラミング自体は知っているけどアプリは作ったことが無い
- プログラミング自体もそんなに経験しているわけではない
な方々でした。
そのため、CryptoZombiesではステップバイステップで進めるとともに、プログラミングの基礎知識も含めて脱線しつつ進めていきました。
進め方
- 大きいモニター一つでみんなで観る
- レッスンの各チャプターを読み進める
- 説明に載っていない内容を(特にプログラミング)補足で埋める
- 各チャプターにテストがあるので個々人でテストしてもらう
途中、休憩を挟みましたが脱線しまくったおかげでレッスン1を完了するのに3時間も掛かりました。ごめんなさい。
レッスン1でやったこと(+余談で話したこと)
- Contract
- 他の言語だとClassっぽいけどちょっと違う
- 状態変数
- ブロックチェーンに書き込まれる
- gasに影響
- 整数
- オーバーフロー
- 演算
- 他プログラミング言語とほとんどいっしょ
- 構造体
- データを表す
- 更に属性を持つことができる
- Classとは違う
- そういえば構造体ということは下記のコードでメモリ消費量増えるのかな?未検証
- データを表す
struct Person { uint age; string name; } Person person1 = Person(22, "hoge"); Person person2 = person1;
- 配列
- publicにするとコンパイラによってgetterが作成される
- 関数
- プログラムは全て
- 入力
- 処理
- 出力
- でできている
- プログラムは全て
- 構造体の配列
- 配列のindexがやっぱり理解しにくいみたい
- 可視性(publicとprivate)
- セキュリティを懸念
- solidityはハックされる時の影響がでかすぎるので、デフォルトでprivateにしてほしかった
- Keccak256
- ハッシュとは
- solidityは文字列の比較ができないので文字列をハッシュ化させてから比較
- Event
- web3.jsなどクライアント側がスマートコントラクトの実行を検知する仕組み
- web3.js
- 公式が提供するEthereumを参照したりコントラクトを呼び出したりできるライブラリ
- solidityやるならセットで覚える
- web3.pyは追いついていない
会場の様子
会場はウチのシェアハウスのリビングです。雑多。
次回
参加者からは概ね好評だったので、鉄が熱い内にこれからも続けていこうと思います。
ひとまずは少数の身内だけで進めていきます。