えんじにゃーず・ハイ

主にエンジニアや技術情報についてつらつら書き連ねるブログです

CryptoZombies勉強会#5を開催しました

終盤に突入

いいペースで開催できてる。頑張っていきましょう。

f:id:areph:20180630011325p:plain

ということでCryptoZombies勉強会#5を開催しました。

今回はレッスン5を進めていきます。

レッスン5でやったこと

レッスン5は遂にトークンが出てきます。トークンを自前で実装することで、他のDAppsとやり取りができるようになります。

  • ERC
    • EthereumのRFC
    • Ethereumの規格を指す
    • ERCの後に続く番号は規格として策定された番号を指す
  • ERC721トーク
    • 同じトークンでも同じ価値ではないトーク
    • 例えば、100円は100円と交換できるが遊戯王カードのレアが高いカードと低いカードは価値が異なるため交換できない
    • 有名なのはCryptoKitties。1トークンで1300万円もの値が付いたのは有名
    • 今回はゾンビをERC721トークンとして扱う
  • 多重継承
    • Solidityでは複数のコントラクトを継承することが可能
  • Nick Szabo
  • Hal Finney
  • ERCトークンのインターフェース
    • ERCトークンは定義されているインターフェースを自身のDAppsに組み込む
    • ここで不要な関数を削除したり関数名を変更したりすると定義されているものと異なってしまうため必ず従うこと
  • balanceOf関数
  • ownerOf関数
  • transfer関数
    • 送金処理を実装する
    • この送り主がtransfer関数を呼び出すことで送金が行われる(Push型)
  • approve&takeOwnership関数
    • transfer関数と同じく送金処理を実装する
    • transfer関数との違いは
      • 送り主がまずapprove関数を呼ぶといったんコントラクト内に送信先のアドレスと送金額を保持する
      • 受け取り先がtakeOwnership関数を呼ぶことで初めて送金処理が行われる(Pull型)
  • _transfer関数の共通化
    • なぜ共通化が必要なのか
    • transferとapprove&takeOwnershipでは各々送金処理を行うが、CryptoZombiesでは送金処理が行われる際にゾンビの所有物を変更する処理が発生するため共通化
  • オーバー/アンダーフロー対策
    • 2進数のお話から
    • なぜオーバー/アンダーフローが起きるのか
    • signとunsign
    • 数値範囲の確認
  • ライブラリ
    • contractとは異なる
    • 型に対してusing宣言することで、宣言した型でライブラリで定義したメソッドが使えるようになる
  • SafeMath
    • openzeppelinが提供している演算用ライブラリ
    • 加算/減算/乗算/除算を行う際にオーバー/アンダーフローが発生しないかチェックしてくれる
    • もし発生した場合は例外が送出される
    • そのため、例外が送出された場合に後続の処理に影響がないよう考慮する必要がある

2進数

ITパスポートや基本情報処理技術者試験などで勉強していれば2進数もわかるけれど、知らない人はそこからの話になるので時間を厚めに取った

f:id:areph:20180709185234j:plain

総括

ERCトークンとセキュリティ対策がメインとなった内容でした。次でいよいよ現時点でラストのレッスンになります。