变量分为三种,分别为 状态变量、局部变量和全局变量;
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函数前的值为:
调用foo函数后的值为:
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);
}
}
运行结果: