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
  2. Copyright (C) 2018 DeNA Co.,Ltd. All Rights 2 経歴: 大学卒業後、ベンチャー企業にて、システム開発の経験のあと

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

    2.ブロックチェーンxゲームの事例と遊び方 3.普通のゲームと何が違うのか? 4.Let’sTRY -ARGO369惑星トークンを保有してみよう- 5.ARGO369のコードリファレンス 6.開発のTips 7.ERC721で新しいゲームの世界へ 自己紹介+導入
  4. 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を使います. 事前にダウンロードして頂けるとスムーズです。
  5. 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/ ブロックチェーン基礎
  6. Copyright (C) 2018 DeNA Co.,Ltd. All Rights 14 ブロックチェーン基礎 引用:

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

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

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

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

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

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

    保有 > 活用 ブロックチェーン基 礎
  14. Copyright (C) 2018 DeNA Co.,Ltd. All Rights 32 ゲーム x

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

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

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

    ブロック チェーン ゲーム x ブロックチェーン の世界 事例紹介:「CryptoKitties」https://www.cryptokitties.co/
  18. Copyright (C) 2018 DeNA Co.,Ltd. All Rights 36 ブロックチェーン(DApp)で作る世界を変える分散型ゲームの世界 1.ブロックチェーンとは何か

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

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

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

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

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

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

    ブロックチェーン の世界 事例紹介:「CryptoBaseball」 https://cryptosaga.io/
  25. 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
  26. Copyright (C) 2018 DeNA Co.,Ltd. All Rights 45 ゲーム x

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

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

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

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

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

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

    ブロックチェーン の世界 https://github.com/cryptocopycat s/awesome-cryptokitties/tree/mas ter/genes
  34. Copyright (C) 2018 DeNA Co.,Ltd. All Rights 55 ブロックチェーン(DApp)で作る世界を変える分散型ゲームの世界 1.ブロックチェーンとは何か

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

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

    スマートコントラクトによるセキュアな取引。 見える化されているので公平な取引が可能。
  37. 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 ソースコードが公開されている(ものもあ る) 通常のゲームとの違いと は?
  38. 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財団が、流出資 金自動追跡プログラムの作成を開始しました。
  39. Copyright (C) 2018 DeNA Co.,Ltd. All Rights 68 KittiyExplorer.com http://www.kitt

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

    子 供の遺伝子を解析して、両親のどの特徴を引き継 いでいるのかがわかります。 通常のゲームとの違いと は?
  41. 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 通常のゲームとの違いと は?
  42. 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
  43. Copyright (C) 2018 DeNA Co.,Ltd. All Rights 75 ブロックチェーン(DApp)で作る世界を変える分散型ゲームの世界 1.ブロックチェーンとは何か

    2.ブロックチェーンxゲームの事例と遊び方 3.普通のゲームと何が違うのか? 4.Let’sTRY -ARGO369惑星トークンを保有してみよう- 5.ARGO369のコードリファレンス 6.開発のTips 7.ERC721で新しいゲームの世界へ
  44. 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 通常のゲームとの違いと は?
  45. 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 通常のゲームとの違いと は?
  46. Copyright (C) 2018 DeNA Co.,Ltd. All Rights 85 ウォレットをインストール Ropstenに接続する

    faucetでテスト用のethereumを保有する etehreumを特定のアドレスに送信する トークンを受け取る 実践編-1 独自コインを使う
  47. 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 独自コインを使う
  48. Copyright (C) 2018 DeNA Co.,Ltd. All Rights 90 実践編-1 独自コインを使う

    faucetからtestetherをもらう http://faucet.ropsten.be
  49. 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をもらう( コマンドでも叩けます )
  50. Copyright (C) 2018 DeNA Co.,Ltd. All Rights 94 実践編-1 独自コインを使う

    Ethereumをコントラクトアドレスに送信する
  51. Copyright (C) 2018 DeNA Co.,Ltd. All Rights 96 ブロックチェーン(DApp)で作る世界を変える分散型ゲームの世界 1.ブロックチェーンとは何か

    2.ブロックチェーンxゲームの事例と遊び方 3.普通のゲームと何が違うのか? 4.Let’sTRY -ARGO369惑星トークンを保有してみよう- 5.ARGO369のコードリファレンス 6.開発のTips 7.ERC721で新しいゲームの世界へ
  52. 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 独自コインを使う
  53. 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をつけると送金可能な関数にな る.
  54. Copyright (C) 2018 DeNA Co.,Ltd. All Rights 10 2 Framework

    : OpenZippelinを使おう 一問一答
  55. 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) {
  56. 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; } }
  57. 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_; }
  58. 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); }
  59. 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 独自コインを使う
  60. 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で新しいゲームの世界へ
  61. Copyright (C) 2018 DeNA Co.,Ltd. All Rights 11 2 現状で、正解と呼べるものはないが、

    ICOされているコインのプラットフォームをみると 手がかりになるかもしれない。 Let’s Development
  62. Copyright (C) 2018 DeNA Co.,Ltd. All Rights 11 6 デメリットとして、マイニング費

    用が高騰することがある https://gitcoin.co/gas/history?t=1533664759 Let’s Development
  63. 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(木)を作っていくアイ デアになります。 下図のようにイーサリアムのブロック チェーンをルートチェーンとして、階層的 にプラズマブロックチェーンを接続してい きます。
  64. 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
  65. 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
  66. 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で新しいゲームの世界へ
  67. Copyright (C) 2018 DeNA Co.,Ltd. All Rights 12 6 アプリ1

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

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

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

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

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

    独自に「非代替性」を作ること は 当然できるが、 他のアプリケーションとのやり とりを考えると統一できるとよ り良い
  73. 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 通常のゲームとの違いと は?
  74. Copyright (C) 2018 DeNA Co.,Ltd. All Rights 13 7 ERC721を読む

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

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

    CryptKittiesの ソースコードを参考にすれば、 自分でブロックチェーンゲームを 作ることができるようになる! (かもしれない)
  77. 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つのコントラクによって作られている。
  78. 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関数を持っている。
  79. 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。
  80. 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されているのがわかる。
  81. 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 <[email protected]> (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:非代 替トークン)のトランザクションに必要なメソッドが記述されています。
  82. 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だけが引数にアドレスを設定して子猫の遺伝子を決定する関数を呼び出 すことが可能。 ロジック内でどのような猫同士を掛け合わせればレアな猫が生まれるかなど。
  83. Copyright (C) 2018 DeNA Co.,Ltd. All Rights 14 9 ERC721を読む

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

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

    https://medium.com/@kaigani/the-cryptokitties-genome-project-68582016f687 猫の配合サンプルから解析したり、bytecodeか ら解析している人たちもいるので、調べてみるの も面白いかも。
  86. 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のみが 呼び出せ、外部コントラクトアドレスを利用できる関数として。
  87. 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;
  88. 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
  89. Copyright (C) 2018 DeNA Co.,Ltd. All Rights 15 6 ERC721を読む

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

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

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

    x ソーシャル ゲーム x ブロック チェーン
  93. Copyright (C) 2018 DeNA Co.,Ltd. All Rights 16 0 ERC721を読む

    ご静聴ありがとうございました。