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

CryptoKittiesを技術的に理解する/Technical understanding of CryptoKitties

Ara
April 20, 2018

CryptoKittiesを技術的に理解する/Technical understanding of CryptoKitties

Ara

April 20, 2018
Tweet

More Decks by Ara

Other Decks in Technology

Transcript

  1. 参考:実際にやってみた手順 • 取引所 bitFlyer で ETH 購入(今回は 2000 円相当) •

    MetaMask のアドレスに送金 • CryptoKitties のサイトでアカウント作成 (メールアドレスがあればOK) • ネコ購入(約170円×2) • ネコ交配(約500円)
  2. ネコ = ブロックチェーン上に記録されるトークン struct Kitty { uint256 genes; uint64 birthTime;

    uint64 cooldownEndBlock; uint32 matronId; uint32 sireId; uint32 siringWithId; uint16 cooldownIndex; uint16 generation; } 遺伝子 生成時刻 次に交配できるブロック 母親の ID 父親の ID 夫の ID(妊娠中に使用) 出産後のクールダウン時間 世代
  3. ネコ = ブロックチェーン上に記録されるトークン Kitty[] kitties; mapping (uint256 => address) public

    kittyIndexToOwner; KittyBase.sol ・・・ コード詳細:https://github.com/dapperlabs/cryptokitties-bounty/blob/master/contracts/KittyBase.sol #1 #2 : : #1 #2
  4. トークンは、ERC721 という仕様に従って作られている 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); } https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
  5. CryptoKitties の課題 アプリサーバー コントラクト = = ブロックチェーン ユーザー 中央集権 これがここにあっていいの…?

    従来サービスと一体何が違うのか 現状のブロックチェーンでは 画像まですべて保存しづらい
  6. 参考情報 • 全ソースコード(Etherscan より) https://etherscan.io/address/0x06012c8cf97bead5deae237070f9587f8e7a266d#code • CryptoKitties のソースコード解説 - Qiita

    https://qiita.com/yamamoto_ban/items/389b520659d4856e31bb • 仮想仔猫ゲーム CryptoKitties のコントラクトを読んでみる - Qiita https://qiita.com/blueplanet/items/fa005a1c9457169a7391 • 以太坊猫(CryptoKitties)猫交配交易用例 时序图 - 知乎 ※中国語だけど、シーケンスが一番良くまとまっている https://zhuanlan.zhihu.com/p/32491728 • CryptoKittiesで使われているNFT(Non-Fungible Token)なERC721 Tokenとは? https://tomokazu-kozuma.com/what-is-non-fungible-token-erc-721-token-used-in-cryptokitties/ • ERC721とは? – ブロックチェーン総合研究所【BRI】 – Medium https://medium.com/blockchain-research-institute/erc721%E3%81%A8%E3%81%AF-38e80ea2b328 • Cryptokittiesの新規性とEthereumへの今後の影響を考える(ビットコイナー反省会) - YouTube https://www.youtube.com/watch?v=zkJeWHfHuso • Kitty Sales https://kittysales.herokuapp.com/ • CryptoKittiesの全体の5%以下しかいない特長を持ったレア猫を一覧にして紹介! http://xn--o9j473hsypxwkza4937abff.com/virtual-currency/game/cryptokitties-tokucho/
  7. DApps の開発プラットフォーム • Ethereum ― 「ワールドコンピュータ」を目指す ◦ 言語:Solidity, Viper ◦

    独自トークンを作りやすい • NEO ― 中国版 Ethereum ◦ 言語:C#, Java, Python, JavaScript ◦ 様々な言語が使える • LISK ― アメリカ版 Ethereum ◦ 言語:JavaScript ◦ 処理をサイドチェーンで行うためスケーラビリティが高い 現状、Ethereum 一択か…?
  8. Ethereum の開発言語 • Solidity ◦ 現在のデファクトスタンダード ◦ JavaScript ライク •

    Viper ◦ セキュリティまわりの実装を簡便化した言語 ◦ Python ライク これから学ぶなら Viper?… それとも、まずは Solidity?