kkmory;

エンジニア系ふわふわ大学生(だった)の雑記帳

登壇しますよ

今週金曜日、Hi-Ether Meetup #7 で登壇します。

"Swarm: The distributed storage platform"
というタイトルで、分散ストレージの話をします。

 

予習するならこのあたり
Swarm 0.3 documentation
Swarmとは? - イーサリアム wiki | イーサリアム・ジャパン

 

クローズなMeetupでしたが一般公開されたみたいなので共有。ブロックチェーンアプリケーション開発の教科書(青い本)の著者であるDMMの篠原さんもいらっしゃいます。

緊張するよーーーーー

GitHubで.solファイルのシンタックスハイライトを有効にする

世の中には2種類のプロジェクトがある。 それは、GitHub上のSolidityファイルがシンタックスハイライトされるプロジェクトと、そうではないプロジェクトだ。
ー Keisuke Mory


...という茶番はさておき。

スマートコントラクトを設計するときに他のプロジェクトのGitHubを見て参考にしたりすることがあるんですが、シンタックスハイライトされない.solファイルをよむのはつらいです。

せめて自分が作るDappsではちゃんとシンタックスハイライトされるようにして、自分を含めてPRなどでコードを読む人がつらい思いをしないようにしたい。ということで、GitHubの.solファイルにシンタックスハイライトを適用する方法を調べてみました。


用意するもの

  • git
  • お好きなターミナル
  • vim
    宗教上の理由でvimを使えない方は他のでも大丈夫です。


やること

該当するプロジェクトに .gitattributes を作成します。

touch .gitattributes

中に以下の構文を記述します

*.sol linguist-language=Solidity

コミットしてプッシュします。

おわり


ひとこと

このあたりを参考にしました。

medium.com

github.com

CryptoZombies Cp.1 まとめ

忙しいなぁなんて思っていたらなんやかんやで1ヶ月経ちました。
Bancor Protocolの後半記事はいつ書くねん!と総ツッコミをもらいそうですが...実はですね...

普段は下書きをMarkdownで書いているのですが、先日何を思ったかファイルを上書きしてしまい、8割方書きかけていた下書きを吹っ飛ばしました。ということで心がポキっといったので、現在ちまちまと少しづつ書いてます。完成までもうしばらくお待ちを。

Git、大事。


で、今日はCryptoZombiesのチャプター1のまとめを書きたいと思います。 7月9日(今日!)のCryptoZombiesもくもく会向けに書いてたりします。ちなみに当日のスライドはこちら。


CryptoZombiesとは

Solidity(Ethereumのスマートコントラクトを記述する高級言語。実質デファクト)を学習できるサイト。日本語化されていて、実際に手を動かしながら勉強できるし、解説が丁寧なのでおすすめ。

cryptozombies.io


符号なし整数

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代がバカ高くなる問題があるから」らしいです。

y-nakajo.hatenablog.com


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

めっちゃ使う。グローバル関数。
そのユーザーを呼び出したユーザー(コントラクト)のアドレスを参照する