【CryptoZombies - 1 Solidity 教程】006函数返回值与修饰符

目录

一、前言

二、返回值(return values)

1、返回值格式

三、修饰符(modifiers)

1、view

2、pure

四、实战


一、前言

看了一些区块链的教程,论文,在网上刚刚找到了一个项目实战,CryptoZombies。从这篇博客开始总结自己的学习笔记,与大家一同分享。

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

二、返回值(return values

1、返回值格式

在Solidity 里,函数的定义里可包含返回值的数据类型(如本例中 string)。

返回值格式示例如下:

string greeting = "What's up dog";

function sayHello() public returns (string) {
  return greeting;
}

注:

1.返回值放在函数的共有私有属性后面;

2.返回用returns,而不是return。

三、修饰符(modifiers)

1、view

上面提到的函数实际上没有改变 Solidity 里的状态,即,它没有改变任何值或者写任何东西。这种情况下我们可以把函数定义为 view, 意味着它只能读取数据不能更改数据

2、pure

pure 函数, 表明这个函数甚至都不访问应用里的数据

示例如下:

function _multiply(uint a, uint b) private pure returns (uint) {
  return a * b;
}

使用修饰符注意点如下:

1.修饰符放在共有私有属性后面;

2.放在函数返回值前面。

四、实战

1.要求

1.创建一个 private 函数,命名为 _generateRandomDna。它只接收一个输入变量 _str (类型 string), 返回一个 uint 类型的数值。

2.此函数只读取我们合约中的一些变量,所以标记为view

3.函数内部暂时留空。

2.代码

 

pragma solidity ^0.4.25;

contract ZombieFactory {

    uint dnaDigits = 16;
    uint dnaModulus = 10 ** dnaDigits;

    struct Zombie {
        string name;
        uint dna;
    }

    Zombie[] public zombies;

    function _createZombie (string _name, uint _dna) private {
        zombies.push(Zombie(_name,_dna));
    }
    // start here
    function _generateRandomDna(string _str) private view returns (uint) {

    }

}

 

Solidity 函数访问修饰符用于限制函数的访问权限,以确保只有满足特定条件的地址或账户才能调用该函数。以下是 Solidity 常用的访问修饰符及其用法: 1. public:公共函数,任何地址都可以调用。 2. private:私有函数,只能在当前合约内部调用。 3. internal:内部函数,只能在当前合约内部或继承该合约的合约访问。 4. external:外部函数,只能通过外部交互(如消息调用)方式调用,不能在合约内部直接调用。 以下是一个简单示例,演示如何使用访问修饰符限制函数的访问权限: ``` pragma solidity ^0.8.0; contract AccessControl { address public owner; constructor() { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner, "Only owner can call this function"); _; } function changeOwner(address _newOwner) public onlyOwner { owner = _newOwner; } function publicFunction() public { // 可以被任何地址调用 } function privateFunction() private { // 只能在当前合约内部调用 } function internalFunction() internal { // 只能在当前合约内部或继承该合约的合约访问。 } function externalFunction() external { // 只能通过外部交互(如消息调用)方式调用,不能在合约内部直接调用。 } } ``` 在上述示例,我们定义了一个 onlyOwner 修饰符,用于限制只有合约所有者才能调用 changeOwner 函数。而 publicFunction 可以被任何地址调用,而 privateFunction 只能在当前合约内部调用,internalFunction 只能在当前合约内部或继承该合约的合约访问,externalFunction 只能通过外部交互方式调用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值