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

总结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

http://www.kler.cn/a/591219.html

相关文章:

  • 【Lava SE】认识异常
  • 注解与设计模式:解锁Java编程的魔法与艺术!
  • RocketMQ 性能优化与调优策略(二)
  • Diffie-Hellman 加密协议介绍 (DH,DHE,ECDHE)
  • 路由器安全研究|D- Link DIR-823G v1.02 B05 复现与利用思路
  • Git:速查手册
  • K8S学习之前站五:清理docker的overlay2 目录
  • 解决vscode连接失败问题--ssh试图写入的管道不存在
  • svn-1.7.22安装
  • 涨薪技术|Kubernetes(k8s)之认识Pod
  • 前端(vue)学习笔记(CLASS 4):组件组成部分与通信
  • Qt 读取数据库
  • 每日一题:动态规划
  • 第17章-用6050走直线和转90度功能 平衡车入门---MPU6050陀螺仪的使用 超详细陀螺仪MPU6050模块输出姿态角(有完整版源码)
  • Oracle 启用 Sql 跟踪的方式
  • 微软OneNote无法同步解决方案
  • 记一次ElasticSearch参数调优
  • Bash环境定制git分支提示符暨JDK版本切换脚本
  • C 语言格式化输入输出详解
  • 译:《Converting a Hugging Face Model to a GGUF Model》转化HuggingFace原生模型为GGUF格式