CryptoZombies Cp.1 まとめ
忙しいなぁなんて思っていたらなんやかんやで1ヶ月経ちました。
Bancor Protocolの後半記事はいつ書くねん!と総ツッコミをもらいそうですが...実はですね...
普段は下書きをMarkdownで書いているのですが、先日何を思ったかファイルを上書きしてしまい、8割方書きかけていた下書きを吹っ飛ばしました。ということで心がポキっといったので、現在ちまちまと少しづつ書いてます。完成までもうしばらくお待ちを。
Git、大事。
で、今日はCryptoZombiesのチャプター1のまとめを書きたいと思います。 7月9日(今日!)のCryptoZombiesもくもく会向けに書いてたりします。ちなみに当日のスライドはこちら。
CryptoZombiesとは
Solidity(Ethereumのスマートコントラクトを記述する高級言語。実質デファクト)を学習できるサイト。日本語化されていて、実際に手を動かしながら勉強できるし、解説が丁寧なのでおすすめ。
符号なし整数
uint : 符号なし整数
符号なし整数とは負数ではないということ。
uintはuint256(256bit)のエイリアス。
型キャスト
uint8 a = 5; //8bit uint uint b = 6; //256bit uint uint8 c = a * uint8(b); // 8bit uint
可変長配列
可変長配列はデータベースのように使うことができる。
配列をPublicで宣言すれば、自動的にgetterが作成される。
Publicをつければ、他のコントラクトもこの配列を参照できる(が、書き込めない)。
その性質を使って、コントラクトの公開データを格納するときに便利に使える。
HogeArray[] public hogeArrayName;
関数
Solidityでは、グローバル変数と区別するため、関数パラメーター変数名はアンダースコアをつけるのが通例。(必須ではない)
function hogeFuga(uint _fuga, string hoge){...}
関数はデフォルトでpublicになる。
公開する必要のない関数にはprivateに設定し、他の関数からだけ呼ぶことができるようにする。
function hogePrvt(uint _fuga) private {...}
関数の宣言に戻り値の型を含む
function hogeFunc(uint _fuga) private returns (string) {...}
View関数:読み取り専用関数
値を変更することもないし、書き込むこともない。
function sayHello() public view returns (string) {...}
Pure関数:アプリ内のデータにすらアクセスできない。
戻り値が関数のパラメータに依存する。
function _multiply(uint a, uint b) private pure returns (uint) { return a * b; }
配列の要素を削除できない問題
なかじょさんの記事↓に詳しいですが、簡単に言うと 「適切なOPCODEがなく、gas代がバカ高くなる問題があるから」らしいです。
Keccak256の使い方
文字列をランダムな256bitの16進数にマッピングする。 https://y-nakajo.hatenablog.com/entry/2018/01/29/180920
Event
Events は、ブロックチェーンで何かが生じたときに、コントラクトがアプリのフロントエンドに伝えることができる。特定のイベントを'listening'状態にして、何かあった時にアクションを起こすこともできる。
event IntegersAdded(uint x, uint y, uint result); function add(uint _x, uint _y) public { uint result = _x + _y; IntegersAdded(_x, _y, result); // イベントを発生 return result; }
Mapping
データの保管と参照のためのキーバリューストア。
Rubyのハッシュみたいにキーと値のペアで構成。
// uint:キー、string:場バリュー
mapping (uint => string) userIdToName;
msg.sender
めっちゃ使う。グローバル関数。
そのユーザーを呼び出したユーザー(コントラクト)のアドレスを参照する
bancor protocolとはなんぞや -1-
先日のRubyKaigiで、「bancor: Token economy made with Ruby」というセッションを聞きました。bancor protocolをRubyで実装したぜ!という話。
bancor: Token economy made with Ruby - RubyKaigi 2018
それ以降、bancor protocolの中身について興味を持ったので、仙台から帰ってきてからホワイトペーパーを読んだりして調べてみました。
今日と次回で、備忘録としてまとめてみます。
はじめに、ホワイトペーパー(日本語訳)の要約です。
...... ナニイッテンダ?
わけが分からないので、基礎的なところから調べてみました。
欲求の二重一致問題
これが何かというと、物々交換がクソ難しいということ。
流動性リスクの問題
RubyKaigiで感動した話
5/31〜6/2に仙台国際センターで開催された"RubyKaigi2018"に行ってきました。
2日目3日目の各セッションごとにレポートするつもりでしたが、体力気力がもたなかったのでまとめだけ書きます!
最終日 : TRICK
RubyKaigi2018最後のセッション。
TRICKとは。
「変なRubyプログラムを書いたら勝ち」 というコンテストらしい。
今回、自分は初めてTRICKの存在を知ったのですが、そこには想定以上に頭のおかしいコードの世界が広がっていました。
例えば、ソースコードにはAAのように"Merry Christmas"と読めるコードが書かれていて、それを実行するとコンソール上に3Dのクリスマスツリーがレンダリングされるやつ。しっかり雪も降っててすごく手が込んでました。
The video quality is poor, sorry. But look! Ascii art animation. #rubykaigi #rubykaigia pic.twitter.com/VfH3ra2idC
— Jason Truesdell, YuzuTen LLC (@YuzuTenCo) June 2, 2018
実行結果としては何も表示されないのですが、エラーが出てないのがすごい。
defとかendとかの順番や階層構造を意識した上でプログラミングしないとエラーが出ますよね。でもこれはエラーがでない。すご...
と、エントリーされていた方々のコードがどれも変態的だったんですが、TRICKのセッション中の会場の雰囲気がすごくエモくて。 というのも、日本中世界中から1017人のRubyistが仙台に集まって、ソースを見てみんなで笑ってる。そんな光景がなんか、すごくエモかったです(語彙力)
会場の一体感、Rubyコミュニティの温かさを感じました。
最終日:Close session
最終日、TRICKが終わった後のクロージングです。 熱い3日間が終わるんだなぁという寂しさと、また来年があるんだというワクワクした気持ちと。
そして司会の@a_matsudaさんによるクロージングがすごくエモかった。
@a_matsudaさんの話を要約すると、
「仙台でのRubyKaigi、参加者が1017人、千台にのりました!(ドヤァ)」
「RubyKaigiはみんなのおかげだよ、Rubyist、そうYouのおかげ。RubyKaigiは人間賛歌ッ!!」
「来年は海を越えます。九州?......福岡! 4/18〜4/20でRubyKaigi2019やるよ!」
と、
えっ、ふくおか?
そう、来年のRubyKaigiは福岡です!
やったね!!!!! 来年の楽しみができました。
2日目:RubyKaraoke
カオスと話題のRubyKaraokeに参加してしまいました。
まあカオスなことカオスなこと。
海外Rubyistたちがはっちゃけてました。
そこで得られた知見としては
・YMCAはだいたいみんな分かる
・Queen歌っとけばだいたい大丈夫
というところです。現場からは以上です。
全体的にどうだったか
今回、初めてRubyKaigiに参加しました。
セッションの中には内容の理解が追いつかないものもあって、Ruby初心者がセッションを本気で楽しむことはできないかもしれません。というか、できません。
そんな自分でもRubyKaigi行ってよかったなぁと思えたのは
・Rubyコミュニティの中を覗くことができた
・知らないことばかりだってことを再認識できた
・断片的な知識が繋がる瞬間があった
からだと思ってます。
来年はもっとセッションの内容を理解できるように、これからも勉強を続けていかなければと気を引き締めました。これからも頑張りますよ
RubyKaigiに行くというきっかけをくださった小宮さん、ありがとうございました。