• 二、基本类型及函数使用《2022 solidity8.+ 版本教程到实战》


    一、基本变量类型

    solidity 中的基本变量类型与一般编程中类似:

    // SPDX-License-Identifier: GPL-3.0
    pragma solidity ^0.8.0;
    contract Hello{
        string public say="Hello 1_bit";
        int public ival=-1;
        uint public uval=1;
        address public aval=0xd9145CCE52D386f254917e481eB44e9943F39138;
        bool public isTrue=false;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    从以上代码中可以看出,比较特殊的数据类型为 address,address 是一个地址类型,表示地址。

    常量

    一些不可改动的值可以定义为常量,通过合理的编写方式可使代码的 Gas 消耗降低,定义常量也将会降低 Gas,常量的定义使用 constant 例如以下代码:

    uint public constant U_val=1
    
    • 1

    在solidity 中,定义常量时对常量名有一种规范,大写开头,下划线做连接。

    二、函数

    函数类型

    在 solidity 中函数分为内部函数和外部函数,顾名思义 内部函数只能在当前合约内被调用 而 外部函数可以在外部调用;外部函数使用 external 标记 而 内部函数使用 internal 标记。下面是一个外部函数例子:

    function testfun() external returns (int){
        return 1;
    }
    
    • 1
    • 2
    • 3
    函数格式

    以上代码中 function 表示创建一个函数,testfun 是函数名,external 表示一个外部函数,returns 则表示返回值内容其 int 表示返回的类型。

    在以上代码中,花括号内为函数体代码,在此用作演示,返回一个 1;但在编译后会发生一个警告:
    在这里插入图片描述

    pure 不读取、改变状态变量

    此时警告为当前 function 的状态可以设置为 pure,这个pure 为一个修饰符,表示当前函数不改变也不读取状态变量(状态变量即永久存储在合约中的变量,不是局部或说一些即时销毁的变量),不需要矿工进行验证,这样函数就可以不用消耗 Gas ,那么此时直接加上 pure 即可:
    在这里插入图片描述
    此时部署合约后点击 testfun 即可得到对应的返回值:
    在这里插入图片描述

    view 读取但改变状态变量

    此时若修改代码,返回对应的 ival 值将会发生报错:
    在这里插入图片描述
    因为 pure 表示不读取也不修改,那么此时已经读取了 ival就不能使用 pure了,应该改写为 view(view 也不消耗 Gas):
    在这里插入图片描述

    三、变量类型

    在第二点中我们有说过什么是状态变量,除了状态变量还包括局部变量以及全局变量。

    局部变量是指在某一个局部中的变量,例如在函数中创建一个变量,该变量在函数使用时才会占用内存,函数调用完毕后即该变量的内存销毁。

    在 solidity 中全局变量值不用定义及有某值的变量,或者可以理解为“系统变量”,例如msg.sender、block.timestamp或者是block.number,其中msg.sender是当前合约中上一个上一个调用当前合约的对象、block.timestamp为当前区块时间戳、block.number为当前区块的号。

    如下代码示例:

    function osVal() external view returns(address,uint,uint){
        address sender=msg.sender;
        uint number=block.number;
        uint timestamp = block.timestamp;
        return (sender,number,timestamp);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    调用后其结果如下:
    在这里插入图片描述

  • 相关阅读:
    docker常用中间件安装
    《数据结构》队列
    python之Scipy
    3、从“人等机器”到“人机和谐”
    猿创征文|【FreeSwitch开发实践】使用sipp对FreeSwitch进行压力测试
    外连接,exists存在,(DML):用SQL录入数据,用SQL删除数据,用SQL更新数据
    为什么说 HashMap 是无序的
    开源项目汇总
    三、Keil安装芯片包、下载固件库、建立STM32工程模板
    选择器基础
  • 原文地址:https://blog.csdn.net/A757291228/article/details/126759338