Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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を使います. 事前にダウンロードして頂けるとスムーズです。

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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/ ブロックチェーン基礎

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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/

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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対応の ウォレット

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

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

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

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

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

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

Slide 60

Slide 60 text

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

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

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

Slide 63

Slide 63 text

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

Slide 64

Slide 64 text

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

Slide 65

Slide 65 text

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 ソースコードが公開されている(ものもあ る) 通常のゲームとの違いと は?

Slide 66

Slide 66 text

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財団が、流出資 金自動追跡プログラムの作成を開始しました。

Slide 67

Slide 67 text

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

Slide 68

Slide 68 text

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

Slide 69

Slide 69 text

Copyright (C) 2018 DeNA Co.,Ltd. All Rights 69 CryptoKittiydex 猫のゲノム(遺伝子)解析を行うサイトです。 子 供の遺伝子を解析して、両親のどの特徴を引き継 いでいるのかがわかります。 通常のゲームとの違いと は?

Slide 70

Slide 70 text

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

Slide 71

Slide 71 text

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

Slide 72

Slide 72 text

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

Slide 73

Slide 73 text

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 通常のゲームとの違いと は?

Slide 74

Slide 74 text

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

Slide 75

Slide 75 text

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

Slide 76

Slide 76 text

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

Slide 77

Slide 77 text

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

Slide 78

Slide 78 text

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

Slide 79

Slide 79 text

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 通常のゲームとの違いと は?

Slide 80

Slide 80 text

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

Slide 81

Slide 81 text

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

Slide 82

Slide 82 text

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

Slide 83

Slide 83 text

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 通常のゲームとの違いと は?

Slide 84

Slide 84 text

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

Slide 85

Slide 85 text

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

Slide 86

Slide 86 text

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 独自コインを使う

Slide 87

Slide 87 text

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

Slide 88

Slide 88 text

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

Slide 89

Slide 89 text

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

Slide 90

Slide 90 text

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

Slide 91

Slide 91 text

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をもらう( コマンドでも叩けます )

Slide 92

Slide 92 text

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

Slide 93

Slide 93 text

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

Slide 94

Slide 94 text

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

Slide 95

Slide 95 text

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

Slide 96

Slide 96 text

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

Slide 97

Slide 97 text

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

Slide 98

Slide 98 text

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

Slide 99

Slide 99 text

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

Slide 100

Slide 100 text

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 独自コインを使う

Slide 101

Slide 101 text

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をつけると送金可能な関数にな る.

Slide 102

Slide 102 text

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

Slide 103

Slide 103 text

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) {

Slide 104

Slide 104 text

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; } }

Slide 105

Slide 105 text

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_; }

Slide 106

Slide 106 text

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); }

Slide 107

Slide 107 text

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 独自コインを使う

Slide 108

Slide 108 text

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で新しいゲームの世界へ

Slide 109

Slide 109 text

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

Slide 110

Slide 110 text

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

Slide 111

Slide 111 text

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

Slide 112

Slide 112 text

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

Slide 113

Slide 113 text

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

Slide 114

Slide 114 text

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

Slide 115

Slide 115 text

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

Slide 116

Slide 116 text

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

Slide 117

Slide 117 text

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(木)を作っていくアイ デアになります。 下図のようにイーサリアムのブロック チェーンをルートチェーンとして、階層的 にプラズマブロックチェーンを接続してい きます。

Slide 118

Slide 118 text

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

Slide 119

Slide 119 text

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

Slide 120

Slide 120 text

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

Slide 121

Slide 121 text

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

Slide 122

Slide 122 text

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

Slide 123

Slide 123 text

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で新しいゲームの世界へ

Slide 124

Slide 124 text

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

Slide 125

Slide 125 text

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

Slide 126

Slide 126 text

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

Slide 127

Slide 127 text

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

Slide 128

Slide 128 text

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

Slide 129

Slide 129 text

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

Slide 130

Slide 130 text

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

Slide 131

Slide 131 text

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

Slide 132

Slide 132 text

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

Slide 133

Slide 133 text

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

Slide 134

Slide 134 text

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

Slide 135

Slide 135 text

Copyright (C) 2018 DeNA Co.,Ltd. All Rights 13 5 ERC721を読む 独自に「非代替性」を作ること は 当然できるが、 他のアプリケーションとのやり とりを考えると統一できるとよ り良い

Slide 136

Slide 136 text

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 通常のゲームとの違いと は?

Slide 137

Slide 137 text

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

Slide 138

Slide 138 text

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

Slide 139

Slide 139 text

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

Slide 140

Slide 140 text

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

Slide 141

Slide 141 text

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

Slide 142

Slide 142 text

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

Slide 143

Slide 143 text

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つのコントラクによって作られている。

Slide 144

Slide 144 text

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関数を持っている。

Slide 145

Slide 145 text

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。

Slide 146

Slide 146 text

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されているのがわかる。

Slide 147

Slide 147 text

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:非代 替トークン)のトランザクションに必要なメソッドが記述されています。

Slide 148

Slide 148 text

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だけが引数にアドレスを設定して子猫の遺伝子を決定する関数を呼び出 すことが可能。 ロジック内でどのような猫同士を掛け合わせればレアな猫が生まれるかなど。

Slide 149

Slide 149 text

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

Slide 150

Slide 150 text

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

Slide 151

Slide 151 text

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

Slide 152

Slide 152 text

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のみが 呼び出せ、外部コントラクトアドレスを利用できる関数として。

Slide 153

Slide 153 text

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;

Slide 154

Slide 154 text

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

Slide 155

Slide 155 text

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

Slide 156

Slide 156 text

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

Slide 157

Slide 157 text

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

Slide 158

Slide 158 text

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

Slide 159

Slide 159 text

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

Slide 160

Slide 160 text

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