当前位置: 首页 > news >正文

总结Solidity 的数据类型

数据类型

在 Solidity 中,类型系统非常丰富,主要分为 值类型(Value Types)和 引用类型(Reference Types)。此外,还有一些特殊类型和全局变量。

一.值类型

布尔型(bool)

bool isActive = true;

二. 整数型(int/uint)

  • int:带符号整数(可以是负数),uint:无符号整数(只能是非负数)
  • 指定位宽:int8int256(步长为 8 位),默认 int 等于 int256
  • 同理,uint 默认等于 uint256
int256 minValue = -1000;
uint256 maxValue = 1000;

三. 地址类型(address 和 address payable)

可以使用 balance 属性查询地址的余额,并使用 transfer 函数向可支付地址发送以太币(以 wei 为单位)

address payable x = payable(0x123);
address myAddress = address(this);
if (x.balance < 10 && myAddress.balance >= 10) x.transfer(10);

固定长度字节数组(bytes1 到 bytes32)

bytes32 data = "hello";

动态字节数组(bytes 和 string)

//bytes:动态长度的字节数组,适合存储任意二进制数据
//string:动态长度的 UTF-8 字符串
bytes dynamicData = "Hello";
string greeting = "Hello, World!";

枚举(enum)

enum Status { Pending, Shipped, Accepted, Rejected, Canceled }
Status public currentStatus = Status.Pending;

函数类型(function)

//分为 internal 和 external,表示合约内外的函数调用方式。

function add(uint a, uint b) public pure returns (uint) {
    return a + b;
}

二.引用类型(Reference Types)

引用类型的数据存储在内存(Memory)或存储(Storage)中,传递时是「引用传递」,改变值会影响原数据。

数组(Array)

  • 固定长度数组:uint[5] arr;
  • 动态长度数组:uint[] dynamicArr;
  • 可以使用 push()pop()length 等方法操作。
uint[] numbers;
numbers.push(1);

结构体(Struct)

自定义数据结构,用于封装多种类型的变量

struct Person {
    string name;
    uint age;
}
Person public person = Person("Alice", 30);

映射(Mapping)

类似哈希表,key 映射到 valuekey 可以是任何基本类型,但 value 可以是任意类型。

mapping(address => uint) public balances;

存储位置(Data Location)

  • memory:函数调用时使用的临时内存,函数返回后即丢弃。
  • storage:合约的持久存储,状态变量默认是 storage
  • calldata:函数的参数存储在 calldata 中,无法修改,节省 Gas 费。

三、特殊类型和全局变量

合约类型(Contract)

可以定义合约类型,支持合约之间的交互。

contract MyContract {
    function greet() public pure returns (string memory) {
        return "Hello!";
    }
}

全局变量

提供区块链信息和交易信息:

  • msg.sender:调用合约的地址
  • msg.value:调用时发送的以太币数量
  • block.timestamp:当前区块的时间戳
address sender = msg.sender;

总结

  • 值类型boolint/uintaddressbytesstringenumfunction
  • 引用类型arraystructmapping
  • 存储位置memorystoragecalldata
  • 特殊类型contractinterfacelibrary

相关文章:

  • 蓝桥杯动态规划实战:从数字三角形到砝码称重
  • 波士顿咨询X大型制造业数字化转型战略规划项目(98页PPT)(文末有下载方式)
  • 知行之桥数据追踪实战指南:三种定位数据的精准方法
  • C++差分风暴:区间修改终极模板
  • SpringBoot实现发邮件功能+邮件内容带模版
  • 理解大模型的function call ,思维链COT和MCP 协议
  • H-ZERO自定义全局字体 支持项目个性化字体需求
  • 【WRF-Urban】城市冠层/建筑楼层设置
  • C++ 学习笔记(三)—— 入门+类和对象
  • MySQL 8主从复制配置最佳实践
  • uniapp 实现微信小程序电影选座功能
  • leetcode-50.Pow(x,n)
  • 火山云对比阿里云的优势在哪里
  • 【Linux操作系统——学习笔记二】Linux简单导航命令操作
  • 安徽建筑安全员A证考试的报名条件是什么?
  • spring boot 过滤器简单demo
  • Java实现字符串大写字母转小写的多种方法及优化策略
  • Web Component 教程(三):生命周期方法的触发时机与实际应用
  • 【C++】树和二叉树的实现(下)
  • 数据库:一文掌握 MongoDB 的各种指令(MongoDB指令备忘)
  • 习近平圆满结束对俄罗斯国事访问并出席纪念苏联伟大卫国战争胜利80周年庆典
  • 巴基斯坦空袭印度多地空军基地,巴战机进入印领空
  • 印称一名高级官员在巴基斯坦发动的袭击中死亡
  • 新城市志|上海再攻坚,营商环境没有最好只有更好
  • 中俄就应对美加征所谓“对等关税”等问题进行深入交流
  • 陕西澄城樱桃在上海推介,向长三角消费者发出“甜蜜之邀”