Solidity——什么是状态变量
在以太坊(Ethereum)的智能合约中:
✅ 状态变量(State Variables)是指:
存储在区块链上的数据。
它们的值保存在以太坊的永久存储(也叫 storage)中,而不是临时的内存(memory)或堆栈(stack)中。
📌 语法上怎么写状态变量?
在 Solidity 中,只要你在**合约作用域内(合约的最外层)**声明一个变量,它默认就是状态变量。
✅ 例如:
pragma solidity ^0.8.0;contract MyContract {uint public myNumber; // 状态变量,写入链上 storage
}
这行 uint public myNumber;
就是一个状态变量。它的值将永久存储在链上,只要你部署了这个合约,myNumber
就存在于以太坊的存储中。
❌ 那下面这样的是不是状态变量?
function foo() public {uint temp = 1; // 局部变量,不是状态变量,只存在于内存
}
不是状态变量,这叫局部变量,仅存在于函数调用期间,不写入链上。
总结判断标准:
变量位置 | 是否状态变量 | 是否写入链上状态 |
---|---|---|
合约作用域定义 | ✅ 是 | ✅ 是 |
函数内部定义 | ❌ 不是 | ❌ 否(临时内存) |
⚠️ 注意:
只有状态变量的写操作才会修改链上状态,读操作不会。
写操作:
myNumber = 42; // 修改了状态变量,写入链上
读操作:
return myNumber; // 只是读取,不改变链上状态
如果你需要,我可以讲解 memory、storage、calldata 的区别,以及它们在函数参数和局部变量中的使用方式。是否继续?