GeneScienceInterface合约

这个合约没有源码,从名字看已经很明显,就是猫的基因工程,用于决定新出生猫的基因。
这里仅仅定义了一个接口,没有具体实现,后续的调用请看后续代码分析

/// @title SEKRETOOOO
contract GeneScienceInterface {/// @dev simply a boolean to indicate this is the contract we expect to befunction isGeneScience() public pure returns (bool);/// @dev given genes of kitten 1 & 2, return a genetic combination - may have a random factor/// @param genes1 genes of mom/// @param genes2 genes of sire/// @return the genes that are supposed to be passed down the childfunction mixGenes(uint256 genes1, uint256 genes2, uint256 targetBlock) public returns (uint256);
}
  • kitties数组,所有的猫都会存储在 kitties数组里,这个数组会不断增长,kittyId其实就是Kitty对象在这个数组中的下标。而kittyId其实就是erc721的tokenId。kitties数组建立了erc721 token 和猫数据结构的映射关系。通过erc721的tokenid就能够获取到Kitty对象数据.
  • kittyIndexToOwner表,通过这个映射,可以快速的知道,哪知猫是谁的。那为什么owner属性为什么不放在Kitty的数据结构里呢?笔者推测,很多场景并不需要获取Kitty上具体数据,如果每次要先找到猫再获取主人,效率可能比较低,毕竟智能合约的执行是要钱的。
  • ownershipTokenCount表,记录了谁有几只猫。
  • kittyIndexToApproved表,记录了一种授权操作,你可以把你的猫授权给某个地址,比如你进行拍卖的时候,你的猫其实授权给了拍卖合约,这个合约有权利将你的猫转给他人。
  • sireAllowedToAddress表,你可以把你的猫拿去配种,对方要和你猫的配种,必须要得到你的授权,那这张表记录了,你把你的那种猫允许谁配种。
    这几个属性几乎记录了,所有猫的所有权和配种操作。

KittyOwnership合约

上面讲的好几个合约,其实都是抽象基类,并没有部署在以太坊上,他们都是为了节约代码抽出来的。
KittyOwnership合约是一个真正部署在以太坊上的合约,他定义了一个 ERC721代币。KittyOwnership把KittyBase和ERC721的接口桥接起来了。
里面的很多代码,基本都是KittyBase合约的接口转换

需要部署的是这个合约

KittyCore:以太猫的主合约
KittyCore 合约地址就是以太猫DApp的合约地址, 这个合约把之前提到的所有合约链接在一起,提供完整的DApp功能。这个合约继承了之前提到的所有合约,并追加了几个方法

各合约的继承关系

contract ERC721contract Ownable
contract Pausable is Ownable
contract ClockAuctionBase                (ClockAuctionBase内实例化了ERC721)
contract ClockAuction is Pausable, ClockAuctionBase (构造函数需要传参 ERC721的地址和交易抽水万分比)
$ contract SiringClockAuction is ClockAuction       (构造函数需要传参 ERC721的地址和交易抽水万分比)
$ contract SaleClockAuction is ClockAuction     (构造函数需要传参 ERC721的地址和交易抽水万分比)$ contract GeneScienceInterface                 (猫的基因合约)
$ contract ERC721Metadata                       (负责生成小猫元数据的外部合约)contract KittyAccessControl
contract KittyBase is KittyAccessControl         (KittyBase内实例化了SiringClockAuction siringAuction和SaleClockAuction saleAuction)
contract KittyOwnership is KittyBase, ERC721         (KittyOwnership内实例化了ERC721Metadata)
contract KittyBreeding is KittyOwnership         (KittyBreeding内实例化了GeneScienceInterface,并且可以替换合约地址)
contract KittyAuction is KittyBreeding           (并且可以替换SiringClockAuction和SaleClockAuction合约地址)
contract KittyMinting is KittyAuction
$ contract KittyCore is KittyMinting             (升级主合约setNewAddress)

带 payable 的合约函数

KittyBreeding    function breedWithAuto(uint256 _matronId, uint256 _sireId)
ClockAuction    function bid(uint256 _tokenId)
SiringClockAuction  function bid(uint256 _tokenId)
SaleClockAuction    function bid(uint256 _tokenId)
KittyAuction    bidOnSiringAuction(uint256 _sireId,uint256 _matronId)
KittyCore   function() external payable

调用方法例如: siringAuction.bid.value(msg.value - autoBirthFee)(_sireId);


往期精彩回顾:
区块链知识系列
密码学系列
零知识证明系列
共识系列
公链调研系列
比特币系列
以太坊系列
EOS系列
Filecoin系列
联盟链系列
Fabric系列
智能合约系列
Token系列

Token系列 - 加密猫智能合约源码分析相关推荐

  1. WeIdentity智能合约源码分析

    WeIdentity智能合约 介绍 本文结合WeIdentity智能合约文档对其源码进行阅读分析.当前,WeIdentity合约层面的工作目标主要包括两部分: WeIdentity DID智能合约,负 ...

  2. ENS最新合约源码分析二

    ENS(以太坊域名服务)智能合约源码分析二 0.简介 ​ 本次分享直接使用线上实际注册流程来分析最新注册以太坊域名的相关代码.本次主要分析最新的关于普通域名注册合约和普通域名迁移合约,短域名竞拍合约不 ...

  3. c+智能指针源码分析_C ++中的智能指针

    c+智能指针源码分析 In this article, we'll take a look at how we can use Smart Pointers in C++. 在本文中,我们将研究如何在 ...

  4. Neural Turing Machines-NTM系列(三)ntm-lasagne源码分析

    Neural Turing Machines-NTM系列(三)ntm-lasagne源码分析 在NTM系列文章(二)中,我们已经成功运行了一个ntm工程的源代码.在这一章中,将对它的源码实现进行分析. ...

  5. EOS智能合约:system系统合约源码分析

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. eosio.system 概览 笔者使用的IDE是VScode,首先来看eosio.system的源码结构.如下图所示. ...

  6. 【精】EOS智能合约:system系统合约源码分析

    系统合约在链启动阶段就会被部署,是因为系统合约赋予了EOS链资源.命名拍卖.基础数据准备.生产者信息.投票等能力.本篇文章将会从源码角度详细研究system合约. 关键字:EOS,eosio.syst ...

  7. 【C++】Android (Light)RefBase-sp-wp引用计数-智能指针源码分析

    文章目录 1.RefBase简介 2.RefBase源码分析 3.RefBase使用注意事项 4.总结 1.RefBase简介 什么是RefBase?RefBase是Android中的一个C++类,用 ...

  8. Java 集合系列(四)—— ListIterator 源码分析

    以脑图的形式来展示Java集合知识,让零碎知识点形成体系 Iterator 对比   Iterator(迭代器)是一种设计模式,是一个对象,用于遍历集合中的所有元素.   Iterator 包含四个方 ...

  9. 条件队列java_Java并发系列(4)AbstractQueuedSynchronizer源码分析之条件队列

    AbstractQueuedSynchronizer内部维护了一个同步状态和两个排队区,这两个排队区分别是同步队列和条件队列. 我们还是拿公共厕所做比喻,同步队列是主要的排队区,如果公共厕所没开放,所 ...

最新文章

  1. Python爬虫之urllib模块2
  2. java 之 语言基础
  3. linux 从行查看文件,linux 查看文件内容
  4. jquery ui 自動完成對中文字搜尋Bug(firefox)
  5. python中要使用导入全部的是什么符号-在python格式字符串中使用标点符号
  6. 《大道至简》阅读笔记02
  7. JavaScript学习(十一)—selected属性、checked属性、class属性的操作
  8. Base64编码格式详解
  9. word图片嵌入式为何只能看到一部分_如何巧妙选择打印Word文档内容?
  10. 阿里巴巴代码规范考试
  11. 数据字典的一个简单案例
  12. La3713 Astronauts 2-Sat
  13. 自动化测试金字塔与反模式
  14. 身份验证中的allow users=\?\ /中的?和*各是什么意思?
  15. grep命令详解(如何匹配多个字符串)(grep指令)(grep -q)
  16. 星际战魂java_星际战甲 专精聚魂选择推荐
  17. 世界数学难题——哥尼斯堡七桥问题 哥尼斯堡七桥问题
  18. Particle for alexa smart home skill (1)
  19. vue el-select远程搜索
  20. 用 Java 实现贪吃蛇小游戏

热门文章

  1. Echoing an XML File with the SAX Parser
  2. matlab时间延迟怎么写,大家帮我看一下这个c_c方法时间延迟的程序运行结果??...
  3. 如何官网下载Eclipse历史版本
  4. 音标、音节、音素、音符
  5. OPPO云VPC网络实践
  6. 计算机软件录音注意事项,GOLDWAVE录音软件使用教程
  7. Calcite优化规则之ProjectAggregateMergeRule
  8. Atmel at91rm9200的armlinux的bootloader启动代码分析
  9. 【动手学习pytorch笔记】28.机器翻译数据集
  10. HGMF: Heterogeneous Graph-based Fusion for Multimodal Data with Incompleteness【多模态 异质图 不完整数据学习】