3.VariableType
variable只是用于存储值的预留位置。因此,用户可以为某个变量预留任意数量的内存。
Solidity 包含了大量的值类型,例如布尔值、双精度浮点数、整数、字符等。
操作系统将负责分配内存并选择要存储在特定变量中的数据。
Variable Type¶
从位置上来说,variables分为三类
- State Variables:在contract内,function外。state variable永久存储在区块链中。
- Local Variables:存在于function内。方法执行的时候存在,方法结束的时候销毁。
- Global Variables:在全局命名空间中存在特殊变量,用于获取有关区块链的信息。
State Variable¶
- 定义在方法外,contrast内
- 存储在区块链中
- 更新state variable的时候需要发送交易,但是读取state variable的时候不需要transaction fee
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.1;
contract StateVariables{
// 将value存储在了blockchain
// state varibale定义在contract中,function外
uint public myUnit=123;
function foo() external {
// 调用这个方法的时候创建这个变量,调用结束后销毁
uint notStateVariable=456;
myUnit=notStateVariable; //该方法结束后,myUnit=456
}
}
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.1;
import "./Function.sol" as myFuntion;
contract FirstContract {
uint var1;
function set(uint x) public {
var1 = x;
}
function get() public view returns (uint) {
return var1;
}
}
Local Variable¶
- 定义在function内,方法结束的时候变量销毁
- 不会存储在区块链中
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.1;
contract LocalVariables {
// State variables
uint public i;
bool public b;
address public myAddress;
function foo() external {
// Local variable
uint x=123;
bool f=false;
x+=345;
f=true;
// 改变了区块链中的值, state才会改变,local在方法结束时,改变失效
i=125;
b=true;
myAddress=address(1);
}
}
Global Variable¶
https://docs.soliditylang.org/en/v0.8.17/units-and-global-variables.html
- 提供关于区块链的信息
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.1;
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);
/*
0:
address: 0x5B38Da6a701c568545dCfcB03FcB875f56beddC4
1:
uint256: 1694958611
2:
uint256: 14
*/
}
}