Solidity 支持三种类型的变量:
- 状态变量 – 变量值永久保存在合约存储空间中的变量。
- 局部变量 – 变量值仅在函数执行过程中有效的变量,函数退出后,变量无效。
- 全局变量 – 保存在全局命名空间,用于获取区块链相关信息的特殊变量。
Solidity 是一种静态类型语言,这意味着需要在声明期间指定变量类型。每个变量声明时,都有一个基于其类型的默认值。没有undefined
或null
的概念。
状态变量
变量值永久保存在合约存储空间中的变量。
pragma solidity ^0.5.0; contract SolidityTest { uint storedData; // 状态变量 constructor() public { storedData = 10; // 使用状态变量 } }
局部变量
变量值仅在函数执行过程中有效的变量,函数退出后,变量无效。函数参数是局部变量。
pragma solidity ^0.5.0; contract SolidityTest { uint storedData; // 状态变量 constructor() public { storedData = 10; } function getResult() public view returns(uint){ uint a = 1; // 局部变量 uint b = 2; uint result = a + b; return result; // 访问局部变量 } }
示例
pragma solidity ^0.5.0; contract SolidityTest { uint storedData; // 状态变量 constructor() public { storedData = 10; } function getResult() public view returns(uint){ uint a = 1; // 局部变量 uint b = 2; uint result = a + b; return storedData; // 访问状态变量 } }
全局变量
这些是全局工作区中存在的特殊变量,提供有关区块链和交易属性的信息。
名称 | 返回 |
---|---|
blockhash(uint blockNumber) returns (bytes32) | 给定区块的哈希值 – 只适用于256最近区块, 不包含当前区块。 |
block.coinbase (address payable) | 当前区块矿工的地址 |
block.difficulty (uint) | 当前区块的难度 |
block.gaslimit (uint) | 当前区块的gaslimit |
block.number (uint) | 当前区块的number |
block.timestamp (uint) | 当前区块的时间戳,为unix纪元以来的秒 |
gasleft() returns (uint256) | 剩余 gas |
msg.data (bytes calldata) | 完成 calldata |
msg.sender (address payable) | 消息发送者 (当前 caller) |
msg.sig (bytes4) | calldata的前四个字节 (function identifier) |
msg.value (uint) | 当前消息的wei值 |
now (uint) | 当前块的时间戳 |
tx.gasprice (uint) | 交易的gas价格 |
tx.origin (address payable) | 交易的发送方 |
Solidity 变量名
在为变量命名时,请记住以下规则。
- 不应使用 Solidity 保留关键字作为变量名。例如,
break
或boolean
变量名无效。 - 不应以数字(0-9)开头,必须以字母或下划线开头。例如,
123test
是一个无效的变量名,但是_123test
是一个有效的变量名。 - 变量名区分大小写。例如,
Name
和name
是两个不同的变量。
本文来自博客园,作者:大码王,转载请注明原文链接:https://www.cnblogs.com/huanghanyu/
分类:
区块链
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具