Solidity中的数值类型,变量类型与数据位置

数值类型

solidity中常用的基本数值类型(value types)有以下几种

  • uint: 正整数,可以通过添加数字的方式声明取值范围。 uint8,16,…256, 以8为步长, 默认是 uint256 [0 - 2256 - 1]。
  • int: 整数可以为负数。 int8,16,…256, 以8为步长, 默认是int256 [-2256 ~ +2256-1]
  • string: 字符串,实际是bytes数组。
  • boolean: 布尔类型,true/false
  • address: solidity特有的数据类型,以0x开头的20个字节用来声明以太坊地址,比如0x001d3f1ef827552ae1114027bd3ecf1f086ba0f9
  • bytes:声明字节,bytes1,2,3…32

常用的引用类型(reference types)有

  • struct: 结构体,类似于类的定义和使。可以包含不同的数据类型。
  • array: 数组。默认是动态数组,长度不固定。当然也可以声明固定长度的数组,比如 People[3] public threePeople
  • mapping: 映射。可用来定义key, value的映射。

变量类型

Solidity中有三种变量类型:状态变量,局部变量,全局变量

  • 状态变量: 在合约函数外声明的变量,在函数内更改。存储在区块链的内存里,gas的消耗较高。
  • 局部变量:函数执行过程中的变量,不上链,gas消耗较低。
  • 全局变量:全局范围工作的变量,不上链,都是solidity预留关键字,可以在函数内不声明直接使用,比如msg.sender, block.number

数据位置

Solidity有可以声明数据存储的位置: storage , memory, calldata

  • storage: 合约里的状态变量默认都是storage,存储在链上
  • memory: 函数里的参数和临时变量存在memory, 不上链
  • calldata: 跟memory一样,唯一区别是calldata不能修改immutable,一般用于函数参数。

这里有一个节省gas的小技巧: 如果在函数中频繁的对状态变量进行读写操作的话,可以将状态变量赋给一个memory 变量,因为读写操作比较耗费gas,具体多少可以查阅执行的机器指令来得出,跟别的指令相比,SLOADSSTORE 还是非常昂贵的操作。
在这里插入图片描述
完整的机器指令gas消耗表可以参考这里: EVM opcodes

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值