Solidity学习代码示例 - 第二节

今天我们继续在《Solidity学习代码示例 - 第一节》的基础上再继续构造器constructor,修改器modifier,require的使用,以及事件event的使用。具体的使用,可以详看代码注释。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract SaveData3 {

    event SETDATA(string); // 声明一个事件

    address public owner; // 部署合约的当前用户,任何人都可看见

    string private data; // 声明一个变量,这个变量是private,不让其他人查看

    string[] datas; // 声明一个数组,这里不给它声明是否可见

    mapping(address=>string[]) maps; // 映射 address代表用户的地址,string[]代表data的数据

    struct Account {
        address user;
    }

    constructor() { // 声明一个构造器,也就是在部署合约时就初始化数据。在这里,只要合约部署了,合约的owner就是msg.sender,也就是部署合约的当前用户
        owner = msg.sender;
    }

    modifier onlyOwnerCanCall { // 修改器。只有部署合约的用户才能够执行
        require(owner == msg.sender,"only owner can call!"); // require意思是要求的意思。这里要求owner必须是部署合约的用户。如果不满足这个条件,则报提示的错误。
        _;
    }

    function setData(string memory _data) external onlyOwnerCanCall { // 这里将修改器的限制条件放在方法的后面即可
        data = _data;
        datas.push(_data); // 将每次存放的data的值装到数组里
        maps[msg.sender] = datas; // 将存放的数据与用户的地址绑定在一起。这里的msg.sender在solidity的语法里代表的是当前的调用方法的这个用户

        emit SETDATA(_data); // 监听事件
    }

    function getAllData() view external returns(string[] memory) { // 获取所有的datas,通过这个方法,我们可以查看到所有存放的datas的值
        return datas;
    }

    function getUserData() view external returns(string[] memory) { // 查看当前调用这个方法的用户的所有数据
        return maps[msg.sender];
    }

}

至此,solidity的常用的一些简单的入门写法我们已经掌握了。在下一节,我们通过发行代币的合约示例来带着大家怎么去发行自己的代币,以及代币里合约的具体逻辑的学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值