博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【CryptoZombies - 1 Solidity 教程】012 继承(Inheritance)和 引用 (import)
阅读量:4074 次
发布时间:2019-05-25

本文共 3288 字,大约阅读时间需要 10 分钟。

一、前言

看了一些区块链的教程,论文,在网上刚刚找到了一个项目实战,CryptoZombies。

如果你想了解更多有关于机器学习、深度学习、区块链、计算机视觉等相关技术的内容,想与更多大佬一起沟通,那就扫描下方二维码加入我们吧!

二、 继承(Inheritance)

1、讲解

继承是面向对象的一个很重要的一个功能,通过继承,我们可以让我们的代码更加简单,结构也更加好,相关关系也更加明确。在solidity中也有继承(Inheritance)。

例如下面的示例,我们创建一个小狗的合约,并创建一个新的狗宝宝合约来继承它。

contract Dog {    function speak() public returns (string) {        return "woof woof";    }}contract BabyDog is Dog {    function eat() public returns (string) {        return "milk";    }}

由于 BabyDog 是从 Dog 那里 inherits(继承) 过来的。 这意味着当你编译和部署了 BabyDog,它将可以访问speak()eat() 和其他在 Dog 中定义的公共函数。

这可以用于逻辑继承(比如表达子类的时候,Cat 是一种 Animal)。 但也可以简单地将类似的逻辑组合到不同的合约中以组织代码。

2、实战

1.要求

在 ZombieFactory 下创建一个叫 ZombieFeeding 的合约,它继承自 `ZombieFactory 合约。

2.代码

pragma solidity >=0.5.0 <0.6.0;contract ZombieFactory {    event NewZombie(uint zombieId, string name, uint dna);    uint dnaDigits = 16;    uint dnaModulus = 10 ** dnaDigits;    struct Zombie {        string name;        uint dna;    }    Zombie[] public zombies;    mapping (uint => address) public zombieToOwner;    mapping (address => uint) ownerZombieCount;    function _createZombie(string memory _name, uint _dna) private {        uint id = zombies.push(Zombie(_name, _dna)) - 1;        zombieToOwner[id] = msg.sender;        ownerZombieCount[msg.sender]++;        emit NewZombie(id, _name, _dna);    }    function _generateRandomDna(string memory _str) private view returns (uint) {        uint rand = uint(keccak256(abi.encodePacked(_str)));        return rand % dnaModulus;    }    function createRandomZombie(string memory _name) public {        require(ownerZombieCount[msg.sender] == 0);        uint randDna = _generateRandomDna(_name);        _createZombie(_name, randDna);    }}// Start herecontract ZombieFeeding is ZombieFactory {}

三、 引用(import)

1、讲解

这里的引用和python中的引用是一样的,我们可以引用我们写的其他文件中的合约或者函数,因为我们不可能把所有的代码都写在一个文件中。

例如下面的示例,我们在同文件夹下有一个sol文件:mySol.sol,现在我们想在我们这个文件中来引用它。引用的格式如下:

import "./mySol.sol";

引用写在版本号下面,写在其他代码上面,所以在一个新的sol文件中,我们的引用写在如下位置中:

pragma solidity ^0.4.19;import "./mySol.sol";contract newSol {    }

2、实战

1.要求

建立了一个多文件架构,并用 import 来读取来自另一个文件中合约的内容,将 zombiefactory.sol 导入到我们的新文件 zombiefeeding.sol 中。

其中zombiefactory.sol 文件内容如下:

pragma solidity >=0.5.0 <0.6.0;contract ZombieFactory {    event NewZombie(uint zombieId, string name, uint dna);    uint dnaDigits = 16;    uint dnaModulus = 10 ** dnaDigits;    struct Zombie {        string name;        uint dna;    }    Zombie[] public zombies;    mapping (uint => address) public zombieToOwner;    mapping (address => uint) ownerZombieCount;    function _createZombie(string memory _name, uint _dna) private {        uint id = zombies.push(Zombie(_name, _dna)) - 1;        zombieToOwner[id] = msg.sender;        ownerZombieCount[msg.sender]++;        emit NewZombie(id, _name, _dna);    }    function _generateRandomDna(string memory _str) private view returns (uint) {        uint rand = uint(keccak256(abi.encodePacked(_str)));        return rand % dnaModulus;    }    function createRandomZombie(string memory _name) public {        require(ownerZombieCount[msg.sender] == 0);        uint randDna = _generateRandomDna(_name);        _createZombie(_name, randDna);    }}

2.代码

pragma solidity >=0.5.0 <0.6.0;// put import statement hereimport "./zombiefactory.sol";contract ZombieFeeding is ZombieFactory {}

转载地址:http://vzyni.baihongyu.com/

你可能感兴趣的文章
springcloud 的eureka服务注册demo
查看>>
eureka-client.properties文件配置
查看>>
MODULE_DEVICE_TABLE的理解
查看>>
platform_device与platform_driver
查看>>
platform_driver平台驱动注册和注销过程(下)
查看>>
.net强制退出主窗口的方法——Application.Exit()方法和Environment.Exit(0)方法
查看>>
c# 如何调用win8自带的屏幕键盘(非osk.exe)
查看>>
build/envsetup.sh 简介
查看>>
Android framework中修改或者添加资源无变化或编译不通过问题详解
查看>>
linux怎么切换到root里面?
查看>>
linux串口操作及设置详解
查看>>
安装alien,DEB与RPM互换
查看>>
编译Android4.0源码时常见错误及解决办法
查看>>
Android 源码编译make的错误处理
查看>>
linux环境下C语言中sleep的问题
查看>>
ubuntu 12.04 安装 GMA3650驱动
查看>>
新版本的linux如何生成xorg.conf
查看>>
xorg.conf的编写
查看>>
启用SELinux时遇到的问题
查看>>
virbr0 虚拟网卡卸载方法
查看>>