Web3 智能合约: Solidity 基础数据类型
基本的变量
Solidity 主要用到的类型和使用方法其他编程语言大差不差,例如bool,string,int,uint,struct 等等,还要其他很多的类型,具体的各种细节可以看官方的文档,这里记录一下刚开始学习自己认为需要记录的地方:
uint
uint类型中还包含uint8, uint16.....uint32.....uint256 (关键字 uint8 到 uint256 ,以 8 位为步长递增。 uint 是 uint256别名),int类型同理。
使用uint类型应当注意类型的选择,因为选择不当的话,智能合约在处理数据的时候,可能会产生额外的gas消耗。例如在struct中,如果有多个uint类型,应当尽可能的选择小的uint类型,并把他们放在一起,Solidity会把他们打包在一起,节省内存空间,如果是单个uint类型,尽量使用uint256。
address类型
address类型顾名思义就是地址,这是一种特殊类型,长度20个字节,40个16进制字符,用来表示以太坊地址:address publicaddr=0x5B38Da6a701c568545dCfcB03FcB875f56beddC4;
映射类型
映射类型关键字为:mapping
映射类型使用语法 mapping(KeyType KeyName? => ValueType ValueName?)
有点像c#中的字典或者hash表,总之这个类型就是建立一对一的映射。
mapping(address => uint) public ethCount;
//可以定义某个地址有多少个eth
ethCount[msg.sender] = 1000;
//msg.sender 是调用合约的发送方地址。
//这里将 1000 存储为 msg.sender 对应的值
定长与变长字节数组
字节数组一般用于处理原始二进制数据。
-
• 定长字节:bytes1, bytes2, bytes3, ..., bytes32 代表从1到32的字节序列,数字代表了数组的固定长度,超出就会发生越界错误。 -
• 变长字节数组:bytes或者byte[]
bytes public data;
byte[] public data;
bytes 与 byte[] 的区别
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
string字符串类型
用法和其他编程语言中的大差不差,solidity 中的string其实也是一种变长字节数组,不过和c语言中的不同处,这里没有结束符,几个字符长度就是几。 string可以转换为变长字节数组:bytes16 samevar = "helloworld"
杂项
所有的 Solidity 源码都必须冠以 "version pragma" — 标明 Solidity 编译器的版本: (以避免将来新的编译器可能破坏你的代码)
-
• pragma solidity 0.4.19
你可以在版本号前加^符合,意思是编译器兼容大版本内所有的版本。
pragma solidity ^0.4.1 - 编译器版本可以是从0.4.1~0.5.0
推荐阅读:
部署属于自己的EDR对抗环境
让数字x60杀软核晶失效的自适应模式
对抗杀软的父进程检测
银狐木马:杀死核晶状态下的x60
更多干货文章工具等资源,欢迎加入下方交流圈👇:
这是一个纯粹,开放,前沿的技术交流社区,成员主要有互联网大厂安全部门任职的成员,乙方红队专家,以及正在学习入门的小白等,社区涉及的领域知识包括但不限于渗透,免杀开发,红蓝对抗,安全建设,考试认证,岗位招聘等等方面,还可以结识很多志同道合的朋友,提升自己的技术栈,开阔视野,提升眼界👇👇👇
欢迎加入交流圈
扫码获取更多精彩
原文始发于微信公众号(黑晶):Web3 智能合约: Solidity 基础数据类型
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论