Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ブロックチェーン(DApp)で作る 世界を変える分散型ゲームの世界

oggata
September 06, 2018
15k

ブロックチェーン(DApp)で作る 世界を変える分散型ゲームの世界

oggata

September 06, 2018
Tweet

Transcript

  1. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    ブロックチェーン(DApp)で作る
    世界を変える分散型ゲームの世界
    株式会社ディーエヌエー
    コマース&インキュベーション事業本部
    コマース企画グループ
    エンジニア
    緒方文俊
    1

    View full-size slide

  2. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    2
    経歴:
    大学卒業後、ベンチャー企業にて、システム開発の経験のあと
    2012年に株式会社ディー・エヌ・エーに転職 .
    mobageの決済システム開発を経て、
    nodejsを用いたリアルタイム対戦の HTML5ゲームタイトルの開発、
    Cocos2d-xやUnityによるゲームアプリ開発、
    実況動画サービスの動画配信サーバーの開発 .
    キュレーション( FindTravel)の広告システム刷新、
    フィンテック関連新規事業の立ち上げエンジニア .
    現在は、ブロックチェーンを活用した R&D開発を行っている .
    自己紹介+導入

    View full-size slide

  3. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    3
    個人で、ゲーム作ってます
    http://oggata.tumblr.com/
    自己紹介+導入

    View full-size slide

  4. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    4
    自己紹介+導入
    ゾンビゾゾン遊び方動画
    https://www.youtube.com/watch?v=-_ZRgWWLJ14

    View full-size slide

  5. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    5
    ブロックチェーンゲームのプロトタイプを作ってい
    ます.
    自己紹介+導入

    View full-size slide

  6. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    6
    ブロックチェーン(DApp)で作る
    世界を変える分散型ゲームの世界
    自己紹介+導入

    View full-size slide

  7. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    7
    ブロックチェーン(DApp)で作る
    世界を変える分散型ゲームの世界
    自己紹介+導入

    View full-size slide

  8. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    8
    今日のアジェンダ
    自己紹介+導入

    View full-size slide

  9. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    9
    ブロックチェーン(DApp)で作る世界を変える分散型ゲームの世界
    1.ブロックチェーンとは何か
    2.ブロックチェーンxゲームの事例と遊び方
    3.普通のゲームと何が違うのか?
    4.Let’sTRY -ARGO369惑星トークンを保有してみよう-
    5.ARGO369のコードリファレンス
    6.開発のTips
    7.ERC721で新しいゲームの世界へ
    自己紹介+導入

    View full-size slide

  10. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    10
    Cipher Browser Shift
    Mist Asch
    Moon Status
    MetaMask Lisk
    Blockstack parity
    Toshi Trust Wallet
    Dapp Browserを使います.
    事前にダウンロードして頂けるとスムーズです。

    View full-size slide

  11. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    11
    ブロックチェーンという言葉をよく
    聞きますがどのような技術なのでしょうか?
    ブロックチェーン基礎

    View full-size slide

  12. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    12
    MASTERING BITCOIN
    The Bitcoin Book–Programming the Open Blockchain
    https://bitcoinbook.info/translations-of-mastering-bitcoin/
    ブロックチェーン基礎

    View full-size slide

  13. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    13
    今日はここがメインではないので、
    簡単に説明します
    ブロックチェーン基礎

    View full-size slide

  14. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    14
    ブロックチェーン基礎
    引用:
    平成27年度 我が国経済社会の情報化・サービス化に係る基盤整備報告書概要資料
    商務情報政策局 情報経済課
    http://www.meti.go.jp/press/2016/04/20160428003/20160428003-1.pdf

    View full-size slide

  15. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    15
    モバコインの最初の取引
    が知りたい
    ブロックチェーン基礎

    View full-size slide

  16. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    16
    ブロックチェーン基

    引用:
    平成27年度 我が国経済社会の情報化・サービス化に係る基盤整備報告書概要資料
    商務情報政策局 情報経済課
    http://www.meti.go.jp/press/2016/04/20160428003/20160428003-1.pdf

    View full-size slide

  17. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    17
    エンジニアとして
    転職する以外、知る手段がない
    (かもしれない)
    ブロックチェーン基

    View full-size slide

  18. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    18
    ビットコインの最初の取
    引が知りたい
    ブロックチェーン基

    View full-size slide

  19. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    19
    ブロックチェーン基

    引用:
    平成27年度 我が国経済社会の情報化・サービス化に係る基盤整備報告書概要資料
    商務情報政策局 情報経済課
    http://www.meti.go.jp/press/2016/04/20160428003/20160428003-1.pdf

    View full-size slide

  20. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    20
    +2010年5月22日、あるプログラマーが1万 ビットコインをパパ・ジョン
    ズの2枚のピザと交換した。
    +これはビットコインを使った世界初の現実世界での取り引きとされ
    る。
    +8年後の今、1万ビットコインの価値は8200万ドル(約90億円)を超
    えた。
    +この取り引きを祝して、5月22日は“ビットコイン・ピザ・デー”と呼ば
    れている。
    ブロックチェーン基

    2010’s 10,000 Bitcoins Pizza Guy Repeats Feat With Historic Lightning Network Transaction
    The “Bitcoin pizza guy” is at it again.
    Laszlo Hanyecz, best known for making the first documented transaction in which Bitcoin was used to purchase a physical
    item, recently christened the Lightning Network (LN) with the help of a sympathetic pizza delivery driver and a jerry-rigged
    atomic swap.
    Hanyecz ensconced his place in Bitcoin lore on May 22, 2010, when he paid another early adopter 10,000 BTC to order him
    two pizzas. This transaction — believed to be the first in which a seller accepted a Bitcoin payment for a physical item —
    spawned both Bitcoin Pizza Day and the “Bitcoin Pizza Index,” which calculates the present value of coins used in that
    historic transaction.
    引用:https://www.ccn.com/bitcoin-pizza-guy-lightning-network/

    View full-size slide

  21. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    21
    https://blockchain.info/tx/a1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80
    e9d5fbf5d48d
    ブロックチェーン基

    View full-size slide

  22. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    22
    一体どのようなことに使われる
    技術なのか?
    ブロックチェーン基

    View full-size slide

  23. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    23
    ブロックチェーン基

    引用:
    平成27年度 我が国経済社会の情報化・サービス化に係る基盤整備報告書概要資料
    商務情報政策局 情報経済課
    http://www.meti.go.jp/press/2016/04/20160428003/20160428003-1.pdf

    View full-size slide

  24. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    24
    ブロックチェーン基

    引用:
    平成27年度 我が国経済社会の情報化・サービス化に係る基盤整備報告書概要資料
    商務情報政策局 情報経済課
    http://www.meti.go.jp/press/2016/04/20160428003/20160428003-1.pdf

    View full-size slide

  25. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    25
    世の中は、ブロックチェーン技術に溢れて
    いてもおかしくないはず?
    現状は?
    ブロックチェーン基

    View full-size slide

  26. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    26
    ブロックチェーン基

    実証実験の段階の物が多い
    引用:
    平成27年度 我が国経済社会の情報化・サービス化に係る基盤整備報告書概要資料
    商務情報政策局 情報経済課
    http://www.meti.go.jp/press/2016/04/20160428003/20160428003-1.pdf

    View full-size slide

  27. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    27
    引用:「仮想通貨取引についての現状報告」一般社団法人日本仮想通貨交換業協会 作成
    https://www.fsa.go.jp/news/30/singi/20180410-3.pdf
    ブロックチェーン基

    View full-size slide

  28. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    28
    ICOなどを目的とした、
    「投資」の方に注目が集まっている状況。
    ブロックチェーン基

    View full-size slide

  29. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    29
    認識 > 保有 > 活用
    ブロックチェーン基

    View full-size slide

  30. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    30
    投資としてのブロックチェーンから、利用としての
    ブロックチェーンへ
    新しいサービスを生み出そう!
    ゲーム x ブロックチェーン
    の世界

    View full-size slide

  31. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    31
    改めて今日テーマは
    ゲーム x ブロックチェーン
    の世界

    View full-size slide

  32. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    32
    ゲーム x ブロックチェーン
    の世界
    引用:
    平成27年度 我が国経済社会の情報化・サービス化に係る基盤整備報告書概要資料
    商務情報政策局 情報経済課
    http://www.meti.go.jp/press/2016/04/20160428003/20160428003-1.pdf

    View full-size slide

  33. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    33
    ゲーム x ブロックチェーン
    の世界
    引用:
    平成27年度 我が国経済社会の情報化・サービス化に係る基盤整備報告書概要資料
    商務情報政策局 情報経済課
    http://www.meti.go.jp/press/2016/04/20160428003/20160428003-1.pdf

    View full-size slide

  34. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    34
    ゲーム x ソー
    シャル
    ゲーム x ブロックチェーン
    の世界
    事例紹介:「怪盗ロワイヤル」http://www.mbga.jp/pc/html/sg_kt/

    View full-size slide

  35. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    35
    ゲーム x ブロック
    チェーン
    ゲーム x ブロックチェーン
    の世界
    事例紹介:「CryptoKitties」https://www.cryptokitties.co/

    View full-size slide

  36. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    36
    ブロックチェーン(DApp)で作る世界を変える分散型ゲームの世界
    1.ブロックチェーンとは何か
    2.ブロックチェーンxゲームの事例と遊び方
    3.普通のゲームと何が違うのか?
    4.Let’sTRY -ARGO369惑星トークンを保有してみよう-
    5.ARGO369のコードリファレンス
    6.開発のTips
    7.ERC721で新しいゲームの世界へ

    View full-size slide

  37. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    37
    世の中のブロックチェーンゲームを見てみ
    よう!
    ゲーム x ブロックチェーン
    の世界

    View full-size slide

  38. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    38
    ゲーム x ブロックチェーン
    の世界
    事例紹介:「CryptoKitties」https://www.cryptokitties.co/
    ブロックチェーンの元祖とも言われる存在。
    Kittiesを使った関連ゲームなども続々と登場する予定

    View full-size slide

  39. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    39
    ゲーム x ブロックチェーン
    の世界
    事例紹介:「くりぷ豚」 https://chibera.com/
    CriptKittiesのような豚のトレーディ
    ングゲーム。
    豚を取引する。
    国内初のブロックチェーンゲームと
    言われている。
    クリプトと豚をかけていると思われ
    る.

    View full-size slide

  40. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    40
    ゲーム x ブロックチェーン
    の世界
    事例紹介:「イーサ三国志」 https://cryptosaga.io/

    View full-size slide

  41. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    41
    ゲーム x ブロックチェーン
    の世界
    事例紹介:「BEtheremon」 https://www.etheremon.com

    View full-size slide

  42. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    42
    ゲーム x ブロックチェーン
    の世界
    事例紹介:「CryptoSaga」 https://cryptosaga.io/
    RPGのゲーム。
    登場するキャラクターを
    暗号通貨でやりとりする。

    View full-size slide

  43. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    43
    ゲーム x ブロックチェーン
    の世界
    事例紹介:「CryptoBaseball」 https://cryptosaga.io/

    View full-size slide

  44. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    44
    ゲーム x ブロックチェーン
    の世界
    事例紹介:「Crypko」 https://crypko.ai/#/market-place
    ホワイトペーパー : https://crypko.ai/static/files/crypko-whitepaper.pdf
    ブロックチェーンを使うことで、あるCrypkoが一枚しか存在し
    ないことや偽造、変造が難しいことを保証.
    GANを使うことで、着せ替えフラッシュ的なパーツごとの変化
    ではなく、
    連続的で一貫性のある多様な形質変化が実現.
    GAN(Generative Adversarial Network)
    https://twitter.com/lark1115caster/status/1002542499087302658/vi
    deo/1

    View full-size slide

  45. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    45
    ゲーム x ブロックチェーン
    の世界
    事例紹介:「CryptoIdols」 https://www.cryptoidols.io/
    ユーザーが書いたイラストをマーケットで売買するという比較
    的ゲームとしては珍しい類で、
    デジタルコンテンツの取引という特徴を持っている.

    View full-size slide

  46. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    46
    ゲーム x ブロックチェーン
    の世界
    事例紹介:「EOS Knights」 https://eosknights.io/
    EOS初となるDAppsゲーム「EOS Knights」のベータテストが
    開始.
    androidのアプリまたはchromeで動作.
    iOS版のアプリは8月にリリース予定.
    「EOS Knights」をはじめる場合はScatterが必要。
    ScatterはメタマスクのようなものでイーサリアムとEOS対応の
    ウォレット

    View full-size slide

  47. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    47
    ゲーム x ブロックチェーン
    の世界
    事例紹介:「CHIBERA」 https://chibera.com/
    Steemブロックチェーンを利用
    (ブロックチェーンSNS:現在登録者
    は100万人を超えている)
    「Steem」というブロックチェーンを
    利用.

    View full-size slide

  48. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    48
    ゲーム x ブロックチェーン
    の世界
    事例紹介:「CHIBERA」 https://chibera.com/
    Enjin Coinのプラットフォーム活用
    ERC-1155(Enjin Coin)
    RPG(探索)
    PVPバトル
    難解なパズル
    数種類のカード
    Rustbits

    View full-size slide

  49. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    49
    ゲーム x ブロックチェーン
    の世界
    事例紹介:「LOOMGAMES」 https://loom.games/
    DAppチェーンでイーサリアムを用いる
    Plasmaも採用予定
    ブロックチェーンゲームのための開発基盤
    Zombie Battlegroundでキックスターター
    Loomトークン=>ERC-20
    ERC-721も対応

    View full-size slide

  50. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    50
    どのようなゲームなのか、プレイの
    流れを見てみましょう!
    ゲーム x ブロックチェーン
    の世界

    View full-size slide

  51. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    51
    「Marketplace」で
    Kittyを購入
    交配に出して、子供を
    産ませる
    自分のKitty同士を交
    配する
    「Brees」をクリックして、「 Sire to the public」で
    スタート価格、終了価格、期間を入れます。
    子供が誕生。
    販売する。
    自分が持っている Kittieをマーケットプレイスに
    出す
    欲しい人と
    トレードする、
    マーケットに出

    ゲーム x ブロックチェーン
    の世界

    View full-size slide

  52. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    52
    遺伝子情報
    jakeeirjqwjvckszwfrjwjd
    cscdcdaeqlkmkmdkml
    sc
    遺伝子情報
    jakeeirjqwjvckszwfrjwjd
    cscdcdaeqlkmkmdkml
    sc
    ゲーム x ブロックチェーン
    の世界

    View full-size slide

  53. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    53
    ゲーム x ブロックチェーン
    の世界
    https://github.com/cryptocopycat
    s/awesome-cryptokitties/tree/mas
    ter/genes

    View full-size slide

  54. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    54
    ゲーム x ブロックチェーン
    の世界

    View full-size slide

  55. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    55
    ブロックチェーン(DApp)で作る世界を変える分散型ゲームの世界
    1.ブロックチェーンとは何か
    2.ブロックチェーンxゲームの事例と遊び方
    3.普通のゲームと何が違うのか?
    4.Let’sTRY -ARGO369惑星トークンを保有してみよう-
    5.ARGO369のコードリファレンス
    6.開発のTips
    7.ERC721で新しいゲームの世界へ

    View full-size slide

  56. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    56
    通常のゲームとの違いとは?
    通常のゲームとの違いと
    は?

    View full-size slide

  57. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    1
    57

    View full-size slide

  58. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    1.購入したものがxxxxになる可能性がある
    通常、ゲームは遊んだら終わりだが、
    ブロックチェーンゲームはプレイヤーがゲーム
    に投資してきた
    お金や時間がxxxxxされると
    一般的に言われている
    58
    通常のゲームとの違いと
    は?

    View full-size slide

  59. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    59
    通常のゲームとの違いと
    は?
    1.購入したものが「資産」になる可能性がある
    通常、ゲームは遊んだら終わりだが、
    ブロックチェーンゲームはプレイヤーがゲーム
    に投資してきた
    お金や時間が資産化されると
    一般的に言われている

    View full-size slide

  60. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    60
    1400万円の子猫が売買された
    事例がブロックチェーンに記載されている
    通常のゲームとの違いと
    は?

    View full-size slide

  61. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    61
    https://opensea.io/assets/0x06012c8cf97bead5deae237070f9587f8e7a266d/18#bids
    通常のゲームとの違いと
    は?

    View full-size slide

  62. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    62
    100ETHの利益
    通常のゲームとの違いと
    は?

    View full-size slide

  63. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    2
    63

    View full-size slide

  64. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    64
    通常のゲームとの違いと
    は?
    スマートコントラクトによるセキュアな取引。
    見える化されているので公平な取引が可能。

    View full-size slide

  65. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    65
    _createKitty関数は、
    母猫及び父猫のID、猫
    の世代数、256ビットの
    遺伝子コード、所有者の
    アドレスをパラメーターと
    して保持。
    この関数では猫を生成
    してマスターのKitty配
    列に格納した後
    _transfer()関数を呼
    び出して、猫を所有者の
    元へ割り当てます。
    Apple、ガチャ課金の確率表示を義務

    https://mobilelaby.com/blog-entry-ap
    ple-gacha-odds-probability-disclosur
    e.html
    ソースコードが公開されている(ものもあ
    る)
    通常のゲームとの違いと
    は?

    View full-size slide

  66. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    66
    (盗難時のトランザクション )
    http://chain.nem.ninja/#/transfer/f05bc90416ba4a4
    35120cff3cef5bbba2c832c48a437ddbfb6dee6d785
    28cc56
    (盗難タグづけされたもの )
    http://chain.nem.ninja/#/mosaic/52954b2e17d8fa26
    89eb84e48c16a7cbcfe5d103ace3e036283c00f475
    29646f/0c
    盗難など何か起きた場合、第三者が公平に調べることが可能。
    通常のゲームとの違いと
    は?
    引用: 「Daily」 https://www.daily.co.jp/gossip/2018/01/29/0010938900.shtml
    コインチェック事件、17歳女子ハッカーが犯人特定か 劇的展開にネット沸騰
     仮想通貨取引所「コインチェック」(東京)で、不正アクセスにより仮想通貨「NEM(ネ
    ム)」約580億円相当が外部流出した問題で、ネット上で日本人の17歳女子高生の天才ホワ
    イトハッカーが、犯人を追跡し、盗まれた通貨の所在を特定したとの見方が広がり、経緯など
    を解説するHPが続々と登場している。
     この「ホワイトハッカー」と言われている人物は、流出事件があった26日夕方にツイッ
    ターに「ハッカーのアカウント監視はじめるか」と投稿。27日未明には「NEM財団が、流出資
    金自動追跡プログラムの作成を開始しました。

    View full-size slide

  67. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    67
    関連ツールを作ることもできる.
    通常のゲームとの違いと
    は?

    View full-size slide

  68. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    68
    KittiyExplorer.com
    http://www.kitt
    yexplorer.com
    KittiyExplorer.com」はクリプトキティ全体の統計
    データを見ることのできるサイト。
    分の持っている猫を検索すると、その特徴を持つ
    猫がどれくらいいるかがすぐにわかります。
    通常のゲームとの違いと
    は?

    View full-size slide

  69. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    69
    CryptoKittiydex
    猫のゲノム(遺伝子)解析を行うサイトです。

    供の遺伝子を解析して、両親のどの特徴を引き継
    いでいるのかがわかります。
    通常のゲームとの違いと
    は?

    View full-size slide

  70. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    3
    70

    View full-size slide

  71. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    71
    トークンの「交換」や「互換性」
    そこの活動によりいわゆる「経済」らしきものが
    発生すると期待されている
    通常のゲームとの違いと
    は?

    View full-size slide

  72. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    72
    通常のゲームとの違いと
    は?

    View full-size slide

  73. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    73
    ライブのチケット
    var maisu
    var sendTicket
    家の鍵
    var amount
    var send
    パン屋のポイント
    var point
    var soushin
    美容室のポイント
    var biyou
    var sendToken
    ゲームのアイテム
    var ko
    var sendItem
    通常のゲームとの違いと
    は?

    View full-size slide

  74. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    74
    通常のゲームとの違いと
    は?
    引用:「CryptoIdols」 https://cryptosaga.io/
    ヤマサ醤油、Mobage「農園ホッコリーナ」とタイアップしたチャリティキャンペーン開催
    2011年09月02日 10時09分更新
    9月1日~9月28日の期間、「ヤマサ昆布ぽん酢 スーパーマイルド」キャンペーンシール対応商品を購入し、
    専用のシールをめくりQRコードを読み込んでサイトにアクセスすると、ユーザーは「農園ホッコリーナ」で使
    用できるオリジナルレアアイテム「ヤマポンの木」が入手できる。「ヤマポンの木」は、育成すると捕獲アイテ
    ム「昆布ぽん酢 スーパーマイルド」に成長するという。
    (引用)
    Social Game Info
    https://gamebiz.jp/?p=33766

    View full-size slide

  75. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    75
    ブロックチェーン(DApp)で作る世界を変える分散型ゲームの世界
    1.ブロックチェーンとは何か
    2.ブロックチェーンxゲームの事例と遊び方
    3.普通のゲームと何が違うのか?
    4.Let’sTRY -ARGO369惑星トークンを保有してみよう-
    5.ARGO369のコードリファレンス
    6.開発のTips
    7.ERC721で新しいゲームの世界へ

    View full-size slide

  76. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    76
    ERC20規格の
    トークンを手元に落としてみよう。
    実践編-1 独自コインを使う

    View full-size slide

  77. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    77
    実践編-1 独自コインを使う

    View full-size slide

  78. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    78
    ERC20の説明
    実践編-1 独自コインを使う

    View full-size slide

  79. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    79
    ライブのチケット
    var maisu
    var sendTicket
    家の鍵
    var amount
    var send
    パン屋のポイント
    var point
    var soushin
    美容室のポイント
    var biyou
    var sendToken
    ゲームのアイテム
    var ko
    var sendItem
    通常のゲームとの違いと
    は?

    View full-size slide

  80. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    規格がバラバラだと、
    管理が煩雑になり、シームレスな接続が難しくな
    るので...
    通常のゲームとの違いと
    は?

    View full-size slide

  81. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    規格を統一しようという動きがあ
    る。
    通常のゲームとの違いと
    は?

    View full-size slide

  82. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    82
    通常のゲームとの違いと
    は?

    View full-size slide

  83. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    83
    ライブのチケット
    var amount
    var sendToken
    家の鍵
    var amount
    sendToken send
    パン屋のポイント
    var amount
    var sendToken
    美容室のポイント
    var amount
    var sendToken
    ゲームのアイテム
    var amount
    var sendToken
    通常のゲームとの違いと
    は?

    View full-size slide

  84. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    84
    実践編-1 独自コインを使う

    View full-size slide

  85. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    85
    ウォレットをインストール
    Ropstenに接続する
    faucetでテスト用のethereumを保有する
    etehreumを特定のアドレスに送信する
    トークンを受け取る
    実践編-1 独自コインを使う

    View full-size slide

  86. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    86
    Cipher Browser Shift
    Mist Asch
    Moon Status
    MetaMask Lisk
    Blockstack parity
    Toshi Trust Wallet
    Dapp Browser
    実践編-1 独自コインを使う

    View full-size slide

  87. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    87
    実践編-1 独自コインを使う
    ダウンロードする

    View full-size slide

  88. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    88
    実践編-1 独自コインを使う
    セットアップする

    View full-size slide

  89. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    89
    実践編-1 独自コインを使う
    環境をRopstenに繋ぐ

    View full-size slide

  90. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    90
    実践編-1 独自コインを使う
    faucetからtestetherをもらう http://faucet.ropsten.be

    View full-size slide

  91. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    91
    //開発用のetherを入れる
    $ curl -X POST -H "Content-Type: application/json" -d
    '{"toWhom":"0x54E8D9C0678082EE489796984f3E65FF3258142b"}'
    https://ropsten.faucet.b9lab.com/tap
    //確認
    https://ropsten.etherscan.io/address/0x54E8D9C0678082EE489796984f3E65FF325814
    2b
    実践編-1 独自コインを使う
    faucetからtestetherをもらう( コマンドでも叩けます )

    View full-size slide

  92. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    92
    実践編-1 独自コインを使う
    トークンをセットしておく

    View full-size slide

  93. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    93
    実践編-1 独自コインを使う
    Ethereumを送信する

    View full-size slide

  94. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    94
    実践編-1 独自コインを使う
    Ethereumをコントラクトアドレスに送信する

    View full-size slide

  95. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    95
    実践編-1 独自コインを使う

    View full-size slide

  96. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    96
    ブロックチェーン(DApp)で作る世界を変える分散型ゲームの世界
    1.ブロックチェーンとは何か
    2.ブロックチェーンxゲームの事例と遊び方
    3.普通のゲームと何が違うのか?
    4.Let’sTRY -ARGO369惑星トークンを保有してみよう-
    5.ARGO369のコードリファレンス
    6.開発のTips
    7.ERC721で新しいゲームの世界へ

    View full-size slide

  97. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    97
    ここから、これまでのやりとりが
    どのように実現されているのか見てみ
    ましょう
    実践編-1 独自コインを使う

    View full-size slide

  98. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    98
    実践編-1 独自コインを使う

    View full-size slide

  99. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    99
    ソースコードを書く前提知識
    実践編-1 独自コインを使う

    View full-size slide

  100. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    10
    0
    1.storageとして変数に格納する
    pragma solidity ^0.4.19;
    contract HelloWorld{
    string public greeting;
    function HelloWorld(string _greeting)public{
    greeting = _greeting;
    }
    function setGreeting(string _greeting)public{
    greeting = _greeting;
    }
    function greet() public constant returns (string) {
    return greeting;
    }
    }
    実践編-1 独自コインを使う

    View full-size slide

  101. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    10
    1
    pragma solidity ^0.4.18;
    contract AnonemouseBank {
    address public sugarDaddy;
    uint public initialBalance;
    function AnonemouseBank() public payable {
    sugarDaddy = msg.sender;
    initialBalance = msg.value; // wei 単位で記録される
    }
    function getBalance() public constant returns(uint)
    {
    return this.balance;
    }
    function withDraw(uint256 _amount) public
    returns(bool) {
    return msg.sender.call.value(_amount)();
    }
    }
    実践編-1 独自コインを使う
    2.payableをつけると送金可能な関数にな
    る.

    View full-size slide

  102. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    10
    2
    Framework : OpenZippelinを使おう
    一問一答

    View full-size slide

  103. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    10
    3
    pragma solidity ^0.4.18;
    import "./SafeMath.sol";
    import "./Ownable.sol";
    import "./ERC20.sol";
    contract Algo369 is ERC20Token, Ownable {
    using SafeMath for uint256;
    event TokenPurchased(address indexed buyer, uint256 value, uint256
    tokens);
    mapping(address => uint256) balances;
    mapping (address => mapping (address => uint256)) internal allowed;
    uint256 totalSupply_;
    //100000000000000 wei = 0.0001 ether = 5YEN
    //uint256 public tokenPrice = 100000000000000 * (uint256(10) **
    decimals); // In Wei per (1 token * 10^decimals)
    uint256 public tokenPrice = 100000000000000;
    string public constant symbol = "ALG";
    string public constant name = "Algo369";
    uint8 public constant decimals = 0;
    //function Alpaca() public ERC20Token {}
    //function Alpaca(string name, string symbol) public ERC20Token(name,
    symbol) {}
    function Alpaca() public {
    //10億
    totalSupply_ = 1000000 * (uint256(10) ** decimals);
    //totalSupply_ = 1000000000;
    balances[owner] = totalSupply_;
    }
    function() public payable {
    uint256 _tokensAmount = msg.value / tokenPrice;
    require(msg.sender != address(0));
    require(_tokensAmount <= balances[owner]);
    balances[owner] = balances[owner].sub(_tokensAmount);
    balances[msg.sender] = balances[msg.sender].add(_tokensAmount);
    emit Transfer(owner, msg.sender, _tokensAmount);
    function send() public payable {
    uint256 _tokensAmount = msg.value / tokenPrice;
    require(msg.sender != address(0));
    require(_tokensAmount <= balances[owner]);
    balances[owner] = balances[owner].sub(_tokensAmount);
    balances[msg.sender] = balances[msg.sender].add(_tokensAmount);
    emit Transfer(owner, msg.sender, _tokensAmount);
    emit TokenPurchased(msg.sender, msg.value, _tokensAmount);
    }
    function totalSupply() public constant returns (uint256) {
    return totalSupply_;
    }
    function balanceOf(address _owner) public constant returns (uint256 balance)
    {
    return balances[_owner];
    }
    function allowance(address _owner, address _spender) public constant returns
    (uint256) {
    return allowed[_owner][_spender];
    }
    function transfer(address _to, uint256 _amount) public returns (bool) {
    require(_to != address(0));
    require(_amount <= balances[msg.sender]);
    balances[msg.sender] = balances[msg.sender].sub(_amount);
    balances[_to] = balances[_to].add(_amount);
    emit Transfer(msg.sender, _to, _amount);
    return true;
    }
    function approve(address _spender, uint256 _amount) public returns (bool) {
    allowed[msg.sender][_spender] = _amount;
    emit Approval(msg.sender, _spender, _amount);
    return true;
    }
    function transferFrom(address _from, address _to, uint256 _amount) public
    returns (bool) {

    View full-size slide

  104. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    10
    4
    function increaseApproval(address _spender, uint _addedValue) public
    returns (bool) {
    allowed[msg.sender][_spender] =
    allowed[msg.sender][_spender].add(_addedValue);
    emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
    }
    function decreaseApproval(address _spender, uint _subtractedValue)
    public returns (bool) {
    uint oldValue = allowed[msg.sender][_spender];
    if (_subtractedValue > oldValue) {
    allowed[msg.sender][_spender] = 0;
    } else {
    allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
    }
    emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
    }
    function setTokenPrice(uint256 _value) public onlyOwner {
    require(_value > 0);
    tokenPrice = _value;
    }
    function withdraw(uint amount) onlyOwner returns(bool) {
    // uint amount = pendingWithdraws[msg.sender];
    // pendingWithdraws[msg.sender] = 0;
    // msg.sender.transfer(amount);
    require(amount < this.balance);
    owner.transfer(amount);
    return true;
    }
    function getBalanceContract() constant returns(uint){
    return this.balance;
    }
    }

    View full-size slide

  105. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    10
    5
    contract Algo369 is ERC20Token, Ownable {
    using SafeMath for uint256;
    In Wei per (1 token * 10^decimals)
    uint256 public tokenPrice = 100000000000000;
    string public constant symbol = "ALG";
    string public constant name = "Algo369";
    uint8 public constant decimals = 0;
    //function Alpaca() public ERC20Token {}
    //function Alpaca(string name, string symbol) public ERC20Token(name, symbol)
    {}
    function Alpaca() public {
    //10億
    totalSupply_ = 1000000 * (uint256(10) ** decimals);
    //totalSupply_ = 1000000000;
    balances[owner] = totalSupply_;
    }

    View full-size slide

  106. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    10
    6
    function() public payable {
    uint256 _tokensAmount = msg.value / tokenPrice;
    require(msg.sender != address(0));
    require(_tokensAmount <= balances[owner]);
    balances[owner] = balances[owner].sub(_tokensAmount);
    balances[msg.sender] = balances[msg.sender].add(_tokensAmount);
    emit Transfer(owner, msg.sender, _tokensAmount);
    emit TokenPurchased(msg.sender, msg.value, _tokensAmount);
    }

    View full-size slide

  107. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    10
    7
    contract address :
    0x28899653C0951D29635A4a123b8A43Eb15744f64
    send ether
    get token
    contract amount : 0.01ether
    0.01ether
    owner address :
    0x28899653C0951D2963
    5A4a123b8A43Eb15744f6
    4
    user address :
    0x28899653C0951D2963
    5A4a123b8A43Eb15744f6
    4
    実践編-1 独自コインを使う

    View full-size slide

  108. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    10
    8
    ブロックチェーン(DApp)で作る世界を変える分散型ゲームの世界
    1.ブロックチェーンとは何か
    2.ブロックチェーンxゲームの事例と遊び方
    3.普通のゲームと何が違うのか?
    4.Let’sTRY -ARGO369惑星トークンを保有してみよう-
    5.ARGO369のコードリファレンス
    6.開発のTips
    7.ERC721で新しいゲームの世界へ

    View full-size slide

  109. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    10
    9
    開発のTips
    Let’s Development

    View full-size slide

  110. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    11
    0
    Platform
    Let’s Development

    View full-size slide

  111. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    11
    1
    Let’s Development

    View full-size slide

  112. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    11
    2
    現状で、正解と呼べるものはないが、
    ICOされているコインのプラットフォームをみると
    手がかりになるかもしれない。
    Let’s Development

    View full-size slide

  113. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    11
    3
    Let’s Development

    View full-size slide

  114. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    11
    4
    GasPrice
    Let’s Development

    View full-size slide

  115. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    11
    5
    突然GASが高騰する場合がある ..
    Let’s Development

    View full-size slide

  116. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    11
    6
    デメリットとして、マイニング費
    用が高騰することがある
    https://gitcoin.co/gas/history?t=1533664759
    Let’s Development

    View full-size slide

  117. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    11
    7
    Let’s Development
    引用)プラズマがイーサリアムのスケーラビリティ問題を解決する理由と仕組み
    https://zoom-blc.com/plasma-ethereum
    引用)PlasmaからPlasma Cashへ。その仕組みとメリットと課題点
    https://zoom-blc.com/what-is-plasma-cash
    プラズマとは、高速かつスケーラブルな
    トランザクションの実行を実現するため
    に提案されたスマートコントラクト実行フ
    レームワークです。
    具体的には、イーサリアムのブロック
    チェーンを親ブロックチェーンとして、プ
    ラズマブロックチェーンを階層的なブロッ
    クチェーンのTree(木)を作っていくアイ
    デアになります。
    下図のようにイーサリアムのブロック
    チェーンをルートチェーンとして、階層的
    にプラズマブロックチェーンを接続してい
    きます。

    View full-size slide

  118. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    11
    8
    Private or
    Public ?
    Let’s Development

    View full-size slide

  119. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    11
    9
    引用:一つの組織に管理されるブロックチェーン「プライベートチェーン」
    http://gaiax-blockchain.com/private-chain
    Let’s Development

    View full-size slide

  120. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    12
    0
    Security
    Let’s Development

    View full-size slide

  121. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    12
    1
    pragma solidity ^0.4.18;
    contract TransactionOrdering {
    uint256 price;
    address owner;
    event Purchase(address _buyer, uint256 _price);
    event PriceChange(address _owner, uint256 _price);
    modifier ownerOnly() {
    require(msg.sender == owner);
    _;
    }
    function TransactionOrdering() {
    // constructor
    owner = msg.sender;
    price = 100;
    }
    function buy() returns (uint256) {
    Purchase(msg.sender, price);
    return price;
    }
    function setPrice(uint256 _price) ownerOnly() {
    price = _price;
    PriceChange(owner, price);
    }
    }
    Let’s Development

    View full-size slide

  122. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    12
    2
    smart
    contract
    buy()
    setPrice()
    buy.sendTransaction(3,{from
    :eth.account[0],gasPrice:100
    00000000})
    setPrice.sendTransaction(3,{
    from:eth.account[0],gasPrice
    :120000000000})
    var filter =
    web3.eth.filter(‘pending’);
    filter.watch(function(error,r
    esult){
    })
    Let’s Development

    View full-size slide

  123. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    12
    3
    ブロックチェーン(DApp)で作る世界を変える分散型ゲームの世界
    1.ブロックチェーンとは何か
    2.ブロックチェーンxゲームの事例と遊び方
    3.普通のゲームと何が違うのか?
    4.Let’sTRY -ARGO369惑星トークンを保有してみよう-
    5.ARGO369のコードリファレンス
    6.開発のTips
    7.ERC721で新しいゲームの世界へ

    View full-size slide

  124. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    12
    4
    自己紹介+導入
    ERC721を読む

    View full-size slide

  125. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    12
    5
    DAppブラウザとは何か?
    ERC721を読む

    View full-size slide

  126. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    12
    6
    アプリ1
    アプリ2
    アプリ3
    アドレス : ABCD
    残高 : ¥1000
    鍵:xxxxx
    アドレス : ABCD
    残高 : ¥1000
    鍵:xxxxx
    アドレス : ABCD
    残高 : ¥1000
    鍵:xxxxx
    ERC721を読む

    View full-size slide

  127. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    12
    7
    アプリ1
    アドレス : ABCD
    残高 : ¥1000
    鍵:xxxxx
    アプリ2
    アプリ3
    ERC721を読む

    View full-size slide

  128. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    12
    8
    PlanetTravelersで遊んでみよう
    ERC721を読む

    View full-size slide

  129. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    12
    9
    PlanetTravelers遊び方 https://youtu.be/aNrT8q3JPng
    ERC721を読む

    View full-size slide

  130. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    13
    0
    ERC721を読む
    惑星1つ1つは、
    同じものはないという構造

    View full-size slide

  131. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    13
    1
    ERC721を読む
    NFT(Non-FungibleToken)
    非代替性

    View full-size slide

  132. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    13
    2
    ERC721を読む
    それぞれのトークンが
    固有の希少性や独自
    性を持つようされた設

    NFT(Non-Fungible Token)
    非代替性

    View full-size slide

  133. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    13
    3
    ERC721を読む
    ERC20 ERC7
    21
    tokenの価値はコイン全体として、上
    昇する
    個別の価値をそれぞれのトークンが
    もつ

    View full-size slide

  134. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    13
    4
    ERC721を読む

    View full-size slide

  135. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    13
    5
    ERC721を読む
    独自に「非代替性」を作ること

    当然できるが、
    他のアプリケーションとのやり
    とりを考えると統一できるとよ
    り良い

    View full-size slide

  136. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    13
    6
    ライブのチケット
    var amount
    var sendTicket
    家の鍵
    var amount
    var send
    パン屋のポイント
    var amount
    var soushin
    美容室のポイント
    var amount
    var sendToken
    ゲームのアイテム
    var amount
    var sendItem
    通常のゲームとの違いと
    は?

    View full-size slide

  137. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    13
    7
    ERC721を読む
    このような用途で考えられたのが
    「ERC721」という規格

    View full-size slide

  138. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    13
    8
    ERC721を読む
    すでにマーケットがいくつか登場して
    いて、
    ERC721準拠のものは
    簡単に展開することができるように
    なっています。

    View full-size slide

  139. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    13
    9
    ERC721を読む
    事例紹介:
    OpenSea

    View full-size slide

  140. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    14
    0
    ERC721を読む
    事例紹介:
    Rare Bits

    View full-size slide

  141. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    14
    1
    ERC721を読む
    CryptKittiesの
    ソースコードを参考にすれば、
    自分でブロックチェーンゲームを
    作ることができるようになる!
    (かもしれない)

    View full-size slide

  142. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    14
    2
    ERC721を読む
    https://ethfiddle.com/ysJblby7gB

    View full-size slide

  143. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    14
    3
    ERC721を読む
    contract KittyAccessControl
    contract KittyBase is KittyAccessControl
    contract KittyOwnership is KittyBase, ERC721
    contract KittyBreeding is KittyOwnership
    contract KittyAuction is KittyBreeding
    contract KittyMinting is KittyAuction
    contract KittyCore is KittyMinting
    6つのコントラクによって作られている。

    View full-size slide

  144. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    14
    4
    ERC721を読む
    modifier onlyCLevel() {
    require(
    msg.sender == cooAddress ||
    msg.sender == ceoAddress ||
    msg.sender == cfoAddress
    );
    _;
    }
    //...some other stuff
    // Only the CEO, COO, and CFO can execute this function:
    function pause() external onlyCLevel whenNotPaused {
    paused = true;
    }
    contract KittyAccessControl
    このコントラクトは、マネージメントに関するものをまとめている。
    CEO、CFO、COOという特定のイーサリアムのアドレスに権限を持たせてい
    る。
    CEOアドレスのみが関数を実行できるよう制限する
    onlyCEOという定義を持
    ち、
    コントラクトや資金引き出しの停止を可能にする
    pause関数を持っている。

    View full-size slide

  145. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    14
    5
    ERC721を読む
    struct Kitty {
    uint256 genes;
    uint64 birthTime;
    uint64 cooldownEndBlock;
    uint32 matronId;
    uint32 sireId;
    uint32 siringWithId;
    uint16 cooldownIndex;
    uint16 generation;
    }
    contract KittyBase
    genes — 256ビット整数で、猫の遺伝子情報を表現。猫の見た目などを制御。
    birthTime— 猫が誕生したブロックのタイムスタンプ。
    cooldownEndBlock— 再度ブリーディングできるようになるまでの最小のタイムス
    タンプ。
    matronId & sireId— 母猫と父猫のID。
    siringWithId— 猫が妊娠中であれば、父親となる相手の猫の
    IDを設定。妊娠して
    いない場合は0。
    cooldownIndex— 現在のクールダウン時間のインデックス。ブリーディング後、再
    度ブリーディングするまでにどのくらい待つか、インデックスごとに時間が設定。
    generation — 猫の「ジェネレーション数」。親のジェネレーション数にプラス1された
    ものになる。最もはじめの猫達はジェネレーション
    0。

    View full-size slide

  146. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    14
    6
    ERC721を読む
    function _createKitty(
    uint256 _matronId,
    uint256 _sireId,
    uint256 _generation,
    uint256 _genes,
    address _owner
    )
    internal
    returns (uint)
    {
    // These requires are not strictly necessary, our calling code
    should make
    // sure that these conditions are never broken. However!
    _createKitty() is already
    // an expensive call (for storage), and it doesn't hurt to be
    especially careful
    // to ensure our data structures are always valid.
    require(_matronId == uint256(uint32(_matronId)));
    require(_sireId == uint256(uint32(_sireId)));
    require(_generation == uint256(uint16(_generation)));
    // New kitty starts with the same cooldown as parent gen/2
    uint16 cooldownIndex = uint16(_generation / 2);
    if (cooldownIndex > 13) {
    cooldownIndex = 13;
    }
    Kitty memory _kitty = Kitty({
    genes: _genes,
    birthTime: uint64(now),
    cooldownEndBlock: 0,
    matronId: uint32(_matronId),
    sireId: uint32(_sireId),
    uint256 newKittenId = kitties.push(_kitty) - 1;
    // It's probably never going to happen, 4 billion cats is A LOT
    but
    // let's just be 100% sure we never let this happen.
    require(newKittenId == uint256(uint32(newKittenId)));
    // emit the birth event
    Birth(
    _owner,
    newKittenId,
    uint256(_kitty.matronId),
    uint256(_kitty.sireId),
    _kitty.genes
    );
    // This will assign ownership, and also emit the Transfer
    event as
    // per ERC721 draft
    _transfer(0, _owner, newKittenId);
    return newKittenId;
    }
    猫が作られるところの関数。
    kittiesという配列に _kittyがpushされているのがわかる。

    View full-size slide

  147. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    14
    7
    ERC721を読む
    /// @title Interface for contracts conforming to ERC-721: Non-Fungible Tokens
    /// @author Dieter Shirley (https://github.com/dete)
    contract ERC721 {
    // Required methods
    function totalSupply() public view returns (uint256 total);
    function balanceOf(address _owner) public view returns (uint256 balance);
    function ownerOf(uint256 _tokenId) external view returns (address owner);
    function approve(address _to, uint256 _tokenId) external;
    function transfer(address _to, uint256 _tokenId) external;
    function transferFrom(address _from, address _to, uint256 _tokenId) external;
    // Events
    event Transfer(address from, address to, uint256 tokenId);
    event Approval(address owner, address approved, uint256 tokenId);
    // Optional
    // function name() public view returns (string name);
    // function symbol() public view returns (string symbol);
    // function tokensOfOwner(address _owner) external view returns (uint256[]
    tokenIds);
    // function tokenMetadata(uint256 _tokenId, string _preferredTransport) public view
    returns (string infoUrl);
    // ERC-165 Compatibility (https://github.com/ethereum/EIPs/issues/165)
    function supportsInterface(bytes4 _interfaceID) external view returns (bool);
    }
    contract KittyOwnership
    CryptoKittiesのトークン仕様はERC721に準拠していて、このコント
    ラクトではベーシックなERC721準拠のNFT(Non-fungible token:非代
    替トークン)のトランザクションに必要なメソッドが記述されています。

    View full-size slide

  148. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    14
    8
    ERC721を読む
    /// @dev Internal utility function to initiate breeding, assumes that all breeding
    /// requirements have been checked.
    function _breedWith(uint256 _matronId, uint256 _sireId) internal {
    // Grab a reference to the Kitties from storage.
    Kitty storage sire = kitties[_sireId];
    Kitty storage matron = kitties[_matronId];
    // Mark the matron as pregnant, keeping track of who the sire is.
    matron.siringWithId = uint32(_sireId);
    // Trigger the cooldown for both parents.
    _triggerCooldown(sire);
    _triggerCooldown(matron);
    // Clear siring permission for both parents. This may not be strictly necessary
    // but it's likely to avoid confusion!
    delete sireAllowedToAddress[_matronId];
    delete sireAllowedToAddress[_sireId];
    // Every time a kitty gets pregnant, counter is incremented.
    pregnantKitties++;
    // Emit the pregnancy event.
    Pregnant(kittyIndexToOwner[_matronId], _matronId, _sireId,
    matron.cooldownEndBlock);
    }
    contract KittyBreeding
    猫をブリーディングするのに必要なメソッドが記述。
    猫同士の遺伝子を組み合わせる
    geneScience(ジーンサイエンス)コントラクト
    というものが存在しているが、オープンソースではない。
    externalな関数setGeneScienceAddressはonlyCEOの修飾詞を持ち、
    CEOだけが引数にアドレスを設定して子猫の遺伝子を決定する関数を呼び出
    すことが可能。
    ロジック内でどのような猫同士を掛け合わせればレアな猫が生まれるかなど。

    View full-size slide

  149. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    14
    9
    ERC721を読む
    geneScience(ジーンサイエン
    ス)知りたい。

    View full-size slide

  150. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    15
    0
    ERC721を読む
    geneScience知りたい。
    https://etherscan.io/address/0xf97e0a5b616dffc913e72455fde9ea8bbe94
    6a2b#code

    View full-size slide

  151. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    15
    1
    ERC721を読む
    https://medium.com/@kaigani/the-cryptokitties-genome-project-68582016f687
    猫の配合サンプルから解析したり、bytecodeか
    ら解析している人たちもいるので、調べてみるの
    も面白いかも。

    View full-size slide

  152. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    15
    2
    ERC721を読む
    contract KittyAuction is KittyBreeding {
    /// @dev The address of the ClockAuction contract that handles sales of Kitties. This
    /// same contract handles both peer-to-peer sales as well as the gen0 sales which are
    /// initiated every 15 minutes.
    SaleClockAuction public saleAuction;
    /// @dev The address of a custom ClockAution subclassed contract that handles siring
    /// auctions. Needs to be separate from saleAuction because the actions taken on success
    /// after a sales and siring auction are quite different.
    SiringClockAuction public siringAuction;
    /// @dev Sets the reference to the sale auction.
    /// @param _address - Address of sale contract.
    function setSaleAuctionAddress(address _address) public onlyCEO {
    SaleClockAuction candidateContract = SaleClockAuction(_address);
    // NOTE: verify that a contract is what we expect -
    https://github.com/Lunyr/crowdsale-contracts/blob/cfadd15986c30521d8ba7d5b6f57b4fefcc7ac38/contracts/LunyrToken.s
    ol#L117
    require(candidateContract.isSaleClockAuction());
    // Set the new contract address
    saleAuction = candidateContract;
    }
    contract KittyAuctions
    猫の売買及び貸し出しに関するメソッド。
    CryptoKittiesは、通常の猫の販売、そしてブリーディングのために
    猫を貸し出す2つのオークション機能を保持。
    KittyAuctionsコントラクトは、setSaleAuctionAddress()と
    setSiringAuctionAddress()の2つの関数から作られている。
    これらは前出の setGeneScienceAddress()のようにCEOのみが
    呼び出せ、外部コントラクトアドレスを利用できる関数として。

    View full-size slide

  153. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    15
    3
    ERC721を読む
    /// @dev we can create promo kittens, up to a limit. Only callable by COO
    /// @param _genes the encoded genes of the kitten to be created, any value is accepted
    /// @param _owner the future owner of the created kittens. Default to contract COO
    function createPromoKitty(uint256 _genes, address _owner) external onlyCOO {
    address kittyOwner = _owner;
    if (kittyOwner == address(0)) {
    kittyOwner = cooAddress;
    }
    require(promoCreatedCount < PROMO_CREATION_LIMIT);
    promoCreatedCount++;
    _createKitty(0, 0, 0, _genes, kittyOwner);
    }
    /// @dev Creates a new gen0 kitty with the given genes and
    /// creates an auction for it.
    function createGen0Auction(uint256 _genes) external onlyCOO {
    require(gen0CreatedCount < GEN0_CREATION_LIMIT);
    uint256 kittyId = _createKitty(0, 0, 0, _genes, address(this));
    _approve(kittyId, saleAuction);
    saleAuction.createAuction(
    kittyId,
    _computeNextGen0Price(),
    0,
    GEN0_AUCTION_DURATION,
    address(this)
    );
    contract KittyMinting
    Gen0の猫を生成するためのメソッド。Gen0はプロモーション配
    布用の猫は5000匹、その他のGen0猫は45000匹までの作成と
    制限。
    通常のGen0猫は生成後すぐに、あるアルゴリズムによって決め
    られた値段で販売される。
    uint256 public constant PROMO_CREATION_LIMIT = 5000;
    uint256 public constant GEN0_CREATION_LIMIT = 45000;

    View full-size slide

  154. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    15
    4
    ERC721を読む
    /// @notice Returns all the relevant information about a specific kitty.
    /// @param _id The ID of the kitty of interest.
    function getKitty(uint256 _id)
    external
    view
    returns (
    bool isGestating,
    bool isReady,
    uint256 cooldownIndex,
    uint256 nextActionAt,
    uint256 siringWithId,
    uint256 birthTime,
    uint256 matronId,
    uint256 sireId,
    uint256 generation,
    uint256 genes
    ) {
    Kitty storage kit = kitties[_id];
    // if this variable is 0 then it's not gestating
    isGestating = (kit.siringWithId != 0);
    isReady = (kit.cooldownEndBlock <= block.number);
    cooldownIndex = uint256(kit.cooldownIndex);
    nextActionAt = uint256(kit.cooldownEndBlock);
    siringWithId = uint256(kit.siringWithId);
    birthTime = uint256(kit.birthTime);
    matronId = uint256(kit.matronId);
    sireId = uint256(kit.sireId);
    generation = uint256(kit.generation);
    contract KittyCore

    View full-size slide

  155. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    15
    5
    ERC721を読む

    View full-size slide

  156. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    15
    6
    ERC721を読む
    これらを活用することで
    色々なゲームを作ることがで
    きるかも?

    View full-size slide

  157. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    15
    7
    ERC721を読む
    http://gahag.net/011816-dog-animal/
    犬のゲームとか

    View full-size slide

  158. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    15
    8
    ERC721を読む
    https://www.irasutoya.com/2014/08/blog-post_
    106.html
    陶芸のゲームとか

    View full-size slide

  159. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    15
    9
    ゲーム x
    ソーシャル
    ゲーム x ブロック
    チェーン

    View full-size slide

  160. Copyright (C) 2018 DeNA Co.,Ltd. All Rights
    16
    0
    ERC721を読む
    ご静聴ありがとうございました。

    View full-size slide