Solidity从入门到放弃:类型与变量

类型

//SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

contract Variables{
	// 定义常量,声明时就要赋值
    address public constant MGR_ADDR = 0x5B38Da6a701c568545dCfcB03FcB875f56beddC4;
    // immutable -- 不可变量,可以在声明时赋值,也可在构造函数赋值
    address public immutable OWNER_ADDR = 0x5B38Da6a701c568545dCfcB03FcB875f56beddC4;
    // 布尔值
    bool public _bool = true;
    // 字符串
    string public s = "Hello world";
    // 无符号整数
    uint public ui;
    // 有符号整数
    int public i;
    // 使用type(xx).min获取最小值
    int public minInt = type(int).min;
    // 使用type(xx).max获取最大值
    int public maxInt = type(int).max;
    // 地址类型
    address public addr = 0xD4Be041fb762980D242Bba468Eb51f836d18cD4B;
    // 地址余额
    uint256 public balance = addr.balance;
}

在solidity中,声明但没赋值的变量都有它的初始值或默认值

  • boolean: false
  • string:“”
  • int: 0
  • uint: 0
  • address:0x0000000000000000000000000000000000000000 (或 address(0))

布尔值的运算符,包括:
! (逻辑非)
&& (逻辑与, “and” )
|| (逻辑或, “or” )
== (等于)
!= (不等于)

常用的整型运算符包括:
比较运算符(返回布尔值): <=, <, ==, !=, >=, >
算数运算符: +, -, 一元运算 -, +, *, /, %(取余),**(幂)

变量作用域

状态变量:是数据存储在链上的变量,所有合约内函数都可以访问 ,gas消耗高。状态变量在合约内、函数外声明:

contract Variables {
   uint public a = 1;
   uint public b;
   string public c;

局部变量:是仅在函数执行过程中有效的变量,函数退出后,变量无效。局部变量的数据存储在内存里,不上链,gas低。局部变量在函数内声明:

function bar() external pure returns(uint){
	uint aa= 1;
	uint bb= 3;
	uint cc= aa+ bb;
	return(cc);
}

全局变量:是全局范围工作的变量,都是solidity预留关键字。他们可以在函数内不声明直接使用,下面是一些常用的全局变量,完整的列表请看这个链接

  • blockhash(uint blockNumber): (bytes32)给定区块的哈希值 – 只适用于256最近区块,
    不包含当前区块。
  • block.coinbase: (address payable) 当前区块矿工的地址
  • block.gaslimit: (uint) 当前区块的gaslimit
  • block.number: (uint) 当前区块的number
  • block.timestamp: (uint) 当前区块的时间戳,为unix纪元以来的秒
  • gasleft(): (uint256) 剩余 gas
  • msg.data: (bytes calldata) 完整call data
  • msg.sender: (address payable) 消息发送者 (当前 caller)
  • msg.sig: (bytes4) calldata的前四个字节 (function identifier)
  • msg.value: (uint) 当前交易发送的wei值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值