05-Solidity8.0-变量(状态变量、局部变量、全局变量)

456 阅读1分钟

变量分为三种,分别为 状态变量、局部变量和全局变量;

1 状态变量和局部变量

状态变量相当于把数据写入区块链上,如果不写修改方法,那么就永远保存在链上了;

调用foo函数时 这个局部变量才会在以太坊虚拟机的内存中产生;

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

contract Funn{
//状态变量
    uint public myUint = 123;
    uint public i;
    bool public b;
    address public myAddress;

    function foo() external { 
//局部变量
        uint x = 456;
        bool f =false;
//more code;
        x += 234;
        f = false;
        i = 2;
        b =true;
        myAddress=address(111);
    }
}

调用foo函数前的值为:

image.png

调用foo函数后的值为:

image.png

2 全局变量

先写几个比较常用的全局变量

msg.sender 调用合约的地址 可能是人也可能是合约地址

block.timestamp 当前块的时间戳

block.number 当前块的数量

pragma solidity ^0.8.7;


contract GlobalVariables{
    function globalVars () external view returns (address,uint,uint){
        address sender =msg.sender;
        uint timestamp =block.timestamp;
        uint blockNum=block.number;
        return(sender,timestamp,blockNum);
    }
}

运行结果:

image.png