Copyright © 2022-2024 aizws.net · 网站版本: v1.2.6·内部版本: v1.23.3·
页面加载耗时 0.00 毫秒·物理内存 65.8MB ·虚拟内存 1300.5MB
欢迎来到 AI 中文社区(简称 AI 中文社),这里是学习交流 AI 人工智能技术的中文社区。 为了更好的体验,本站推荐使用 Chrome 浏览器。
Solidity 支持三种类型的变量:
Solidity 是一种静态类型语言,这意味着需要在声明期间指定变量类型。
每个变量声明时,都有一个基于其类型的默认值。没有 undefined 或 null 的概念。比如 int 类型的默认值为 0。
状态变量是变量值永久保存在合约存储空间中的变量。状态变量的定义形式类似于类中的成员变量。
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract SolidityTest { uint storedData; // 状态变量 constructor() { storedData = 10; // 使用状态变量 } }
局部变量是变量值仅在函数执行过程中有效的变量,函数退出后,变量无效。函数参数也是局部变量。
局部变量不会上链,只存在于所处函数的生命周期。
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract SolidityTest { function sum() public view returns(uint){ uint a = 1; // 局部变量 uint b = 2; uint result = a + b; return result; // 访问局部变量 } }
运行上述程序,输出:
0: uint256: 3
全局变量是指全局工作区中存在的特殊变量,提供有关区块链和交易属性的信息。
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract SolidityTest { // 获取当前区块号、时间戳、调用者地址 function getGlobalVars() public view returns(uint,uint,address){ return (block.number,block.timestamp,msg.sender); } }
名称 | 返回 |
---|---|
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) | 交易的发送方 |
在为变量命名时,请记住以下规则:
特殊变量/全局变量,是全局可用的变量,提供关于区块链的信息。下面列出了常用的特殊变量:名称返回blockhash(uint blockNumber) returns (bytes32)给定区块的哈希值 ...