以太坊智能合约开发:Solidity 语言中的数据类型

2023-11-10

本文我们介绍Solidity语言的数据类型,重点是值类型,包括布尔类型、整型、地址类型、字节类型、字符串类型和枚举类型。并且通过两个智能合约例子,用于演示这些数据类型的声明与使用方法。

访问 Github 仓库 获取更多资料。

基本概念

Solidity中关于数据类型的定义如下:

  • Solidity是一种静态类型语言,这意味着每个变量都需要在编译时指定变量的类型;
  • Solidity中新声明的变量总是有一个默认值,具体的默认值跟类型有关,例如bool类型的默认值为false。

数据类型

值类型

Solidity提供的基本数据类型。这些类型的变量总是通过值传递的,变量在函数参数或赋值语句中使用时都会被复制。有以下几类值类型的数据类型:

布尔类型

bool:可接受 truefalse 两个值,默认为 false

整型

intuint:分别表示有符号和无符号的整数,默认为0。支持关键字 int8int256,以及 uint8uint256,从8位到256位,以8位为步长递增,intuint 分别是 int256uint256 的别名。

地址类型

address:包含一个20字节的值(代表一个以太坊地址的大小)。一个地址可以用来获取余额,也可以通过转账的方式来转移余额。

字节类型

bytes1bytes2,…,bytes32:字节用于存储固定大小的字符集,长度范围是1 ~ 32。字节的一个优点是它使用更少的Gas,所以当我们知道数据的长度时,最好使用它。

字符串类型

string:字符串用于存储等于或大于一个字节的字符集,字符串的长度是动态的。

枚举类型

enum:创建用户定义的数据类型,用于为一个整型常量分配一个名称,这使得合约具有可读性、可维护性和更不容易出错。枚举的选项可以用从0开始的无符号整数值表示。

语法如下:

enum <enum_name> { element 1, element 2, ..., element n } 

引用类型

引用类型变量存储数据的位置。在引用类型的定义中,两个不同的变量可以引用同一个位置,其中一个变量的任何更改都会影响另一个变量。引用类型包括数组、结构和映射。关于引用类型,我们将在后面的课程中单独介绍。

合约例子

例子1

基本数据类型的声明与用法。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

// 值类型
contract DataTypes {
    // 布尔类型
    bool public boo = true;
		
    // 整型
    uint8 public u8 = 123;
    uint256 public u256 = 456;
    uint public u = 789;
    
    int8 public i8 = -1;
    int256 public i256 = -456;
    int public i = -789;

    // 整型的最小值与最大值
    int public minInt = type(int).min;
    int public maxInt = type(int).max;

    // 地址类型
    address public addr = 0x5B38Da6a701c568545dCfcB03FcB875f56beddC4;
    uint public balance = addr.balance;

    // 字节类型
    bytes1 public b1 = 0x1a;
    bytes2 public b2 = 0x1a2b;
    bytes32 public b32 = 0x35c777b82e0fb4652a3562e28e1cf714ba503232888a7334e08377cb12cdd29c;
 
    // 字符串类型
    string public str = "this is a string data type";
 
    // 默认值
    bool public defaultBoo;         // false
    uint public defaultUint;        // 0
    int public defaultInt;          // 0
    address public defaultAddr;     // 0x0000000000000000000000000000000000000000
 }

输出:我们在Remix中编译、部署和运行上面的合约例子,执行结果如下图:

在这里插入图片描述

例子2

枚举类型的声明及用法。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

// 枚举类型
contract Enum {
    // 定义一个枚举类型
    enum Action { Up, Down, Left, Right }

    // 定义变量,默认值为第一个元素,即"Up"的值
    Action public action;

    // 设置默认值
    function setDefault() public {
        action = Action.Left;
    }

    // 设置,传递一个uint值(0-3)
    function set(Action _action) public {
        action = _action;
    }

    // 取值,返回一个uint值
    function get() public view returns(Action) {
        return action;
    }

    // 取最小值
    function getMinValue() public pure returns(Action) {
        return type(Action).min;
    }

    // 取最大值
    function getMaxValue() public pure returns(Action) {
        return type(Action).max;
    }
}

输出:我们在Remix中编译、部署和运行上面的合约例子,执行结果如下图:

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以太坊智能合约开发:Solidity 语言中的数据类型 的相关文章

  • 荐读

    本文转自 链闻 ChainNews 作者 Karen 虽然区块链技术诞生至今不过短短十余年 但是东西方天然的文化差异在加密世界中同样留下了一些痕迹 当社交媒体上关于 东方区块链 只关心币价 利益和投机而只有 西方区块链 才关心底层技术的革新
  • 在区块链世界中的token到底是什么?

    token的概念很广泛 在计算机领域中 无论是基础的网络架构还是服务系统的身份验证等 都有涉及到token的概念 然而在这里我想阐述的是在区块链世界中的token是什么 相信对区块链有些了解的朋友 都或多或少的听过或者看过关于token的描
  • 区块链能提供有效的身份管理?

    随着身份盗窃和数据泄露在世界各地越来越多的情况下 身份验证是一个主要问题 对访问数据的人进行身份验证实际上是他们要求的 每天 数以百万计的人在网上进行不同的活动 从研究一个学术话题 到购买新的项目 到在社交媒体平台上发表评论 甚至进行不同的
  • Gavin Wood Web3峰会最新演讲:波卡不是智能合约平台,而是平台的平台(全文)...

    在波卡上 每个平台都在用高性能 高效率和最优的方式做着自己擅长的事 而不必让它们的用户用底层平台的货币进行支付 从而将可定制性和灵活性提高了一个台阶 本文谨代表作者个人观点 不代表火星财经立场 该内容旨在传递更多市场信息 不构成任何投资建议
  • [区块链安全-CTF Protocol]区块链智能合约安全实战(已完结)

    区块链安全 CTF Protocol 区块链智能合约安全实战 前言 1 The Lost Kitty 2 RootMe 3 Trickster 4 The Golden Ticket 5 Smart Horrocrux 6 Gas Valv
  • 课程笔记3

    一 以太坊 比特币被称为区块链1 0 以太坊被称为区块链2 0 以太坊的符号是ETH 以太币的符号是Ether 单位是Wei 比特币的符号是BTC 单位是Satoshi 以太坊做出的改进 在以太坊中出块时间减少到十几秒 比特币的mining
  • 期货开户手续费的组成和收费模式

    期货公司的费用 公开透明 不会私自提高费率 A级别的期货公司 不会私自提高期货投资者的交易费率 不会私自提高期货投资者的保证金比例 说一下投资者最关系的费率问题 期货投资交易的手续费是由两部分组成 1 交易所手续费 这个是固定标准也是市场上
  • FISCO BCOS 2.0新特性解读

    FISCO BCOS是完全开源的联盟区块链底层技术平台 由金融区块链合作联盟 深圳 简称金链盟 成立开源工作组通力打造 开源工作组成员包括博彦科技 华为 深证通 神州数码 四方精创 腾讯 微众银行 亦笔科技和越秀金科等金链盟成员机构 代码仓
  • 区块链技术是如何应用到版权维护上?

    随着视频和音乐行业的迅速发展 数字出版已经形成完整的产业链 带来一些可观的收入 但是也伴随侵权的现象发生 那么区块链技术怎么运用到作品版权保护上呢 1 时间戳 我们知道区块链有一个 时间戳 这个可信时间戳由权威机构签发 能证明数据电文在一个
  • 阿里巴巴都害怕的区块链电商到底是什么?

    近日 区块链权威机构中国通信工业协会区块链专业委员会 CCIAPCB 发出倡议 联合各界将中共中央政治局10月24日集体学习区块链主席讲话日作为 区块链中国日 此次中央将区块链技术放在了国家战略层面高度上 让区块链一时间成了全民热点 特别是
  • 区块链数字存证平台有哪些功能模块

    区块链数字存证平台通常包括以下功能模块 数字存证 将数字文件的哈希值存储到区块链上 确保文件的完整性和不可篡改性 时间戳 记录数字文件的创建时间和存证时间 确保存证的时效性和证据的可信度 鉴定证书 提供数字文件的鉴定证书 证明文件的真实性和
  • Bridge Champ举办人机对战赛:NFT游戏与传统竞技共生发展编织新格局

    概要 现在 NFT与体育竞技正日益紧密地联系在一起 一些体育项目开始推出与赛事或球队相关的NFT 同时也有部分NFT游戏开始举办电子竞技赛事 这种共生发展正在改变体育竞技的生态 笔者采访了桥牌冠军项目相关负责人 探讨NFT游戏与传统体育竞技
  • 如何使用区块链技术保护个人隐私和数据安全

    区块链技术是一种分布式账本技术 它具有不可篡改 去中心化 透明度高等特点 区块链技术能够实现数据的可信存证 隐私保护和交易安全 并且能够通过智能合约的自动执行 因此被广泛应用于金融 电商 物流 社交网络等领域 区块链技术的核心是 分布式账本
  • 区块链+物联网 BOT

    不可否认 我们的一只脚已经迈入万物智联时代 但另一只脚迈入还存在一定的阻碍 区块链技术的出现将会促进这一进程的发展 智能音响 主人你好 我是小Q 现在是早上08点29分 上班时间要到咯 智能门锁 主人你摔疼我了 你总是这样匆忙 下次赶紧麻溜
  • 圆石说│彭一鸣:运用区块链技术赋能实体旅游产业;微软开放6万项专利包括一个开源区块链项目……

    智联招聘 区块链岗位需求主要集中在一线和新一线城市 智联招聘报告显示 从目前区块链职位的城市分布来看 该领域的岗位需求主要集中在一线和新一线城市中 其中 北京 上海和深圳位于第一梯队 职位占比分别达到24 20 和10 杭州 广州和成都紧随
  • 新加坡社区领袖卓顺发的荣誉与大爱精神

    2023年11月24日 善济医社义务执行主席卓顺发太平绅士JP BBM L PVPA受邀出席内政部主办的答谢活动2023 主宾为内政部长兼律政部长尚穆根先生 Mr K Shanmugam 2018年起 卓顺发受委为太平绅士后 应内政部邀请
  • 凌晨!比特币突破4万美元,本轮上涨分析与未来展望!

    比特币在上周五 1日 成功突破38000美元大关后 就持续震荡走高 在今晨06 30左右 更是一举突破4万大关 最高来到41750美元 再度刷下2023年新高 以太坊 ETH 在差不多同样时间 最高来到2265美元 刷新年内新高 近24小时
  • Solidity之旅(十)OOP-抽象合约

    抽象合约 abstractcontract 前文在讲合约继承的基类构造函数的参数时 有提到抽象合约 也就是说 如果派生合约未能给其继承的基合约指定构造函数参数时 那么 该派生合约必须声明为抽象合约 abstractcontract 我们知道
  • 一文了解Substrate

    Substrate是用于构建特定类型区块链的工具箱 它本身并不是一个区块链 而是开发者用来创建独特而强大的区块链的一套工具 Substrate允许开发者可以自己创建所需所想功能的区块链 无需受限于现有的设计 Substrate使用FRAME
  • 【网络安全】——区块链安全和共识机制

    区块链安全和共识机制 摘要 区块链技术作为一种分布式去中心化的技术 在无需第三方的情况下 使得未建立信任的交易双方可以达成交易 因此 区块链技术近年来也在金融 医疗 能源等多个行业得到了快速发展 然而 区块链为无信任的网络提供保障的同时 也

随机推荐

  • C++——STL库中迭代器以及其代码实现简介

    文章目录 一 STL库中迭代器的简介 1 迭代器的定义 2 迭代器常用的运算 3 vector和deque提供的额外运算 4 迭代器的取值范围 二 STL库中迭代器的代码实现 总结 一 STL库中迭代器的简介 1 迭代器的定义 迭代器 it
  • ARouter初始化及跳转原理

    ARouter初始化及跳转原理 编译后生成文件 仓库类 class Warehouse Cache route and metas static Map
  • GZipStream归纳总结

    GZipStream 类 提供用于压缩和解压缩流的方法和属性 创建压缩流实例有个参数枚举CompressionMode 它有两个值分别是Compress DeCompress 表示压缩和解压 压缩和解压代码 实例化FileStream对象i
  • ZGC垃圾收集器-JVM(十五)

    上篇文章说了G1的特性 无分代 复制算法 大内存就可以用G1 可预测stw时间等特性 G1垃圾收集分类 JVM 十四 ZGC收集器 XX UseZGC ZGC Z Garbage Collector 是在jdk11新加入的低延迟垃圾收集器
  • Junit中测试插入等无返回值的操作要注意的问题

    问题一 到底插不插进数据库 由于测试数据有时比较随意 插入数据库会对数据库进行污染 我们在测试的时候通过控制事务 一般不提交至数据库 例如通过spring控制事务提交 默认让其回滚 TransactionConfiguration defa
  • 【C/C++内功心法】剖析预处理过程,详解其他预处理指令,提升C/C++内功

    文章目录 前言 一 undef 二 命令行定义 三 条件编译 四 文件包含 1 头文件被包含的方式 2 嵌套文件包含 总结 前言 大家好啊 我是不一样的烟火a 今天我将会为大家详细讲解其他的预处理指令 虽然本文章读完后不能让大家代码写得飞起
  • 分布式事务总结

    这次使用分布式事务框架过程中了学习了一些分布式事务知识 所以本文我们就来聊聊分布式事务那些事 首先我们先回顾下什么是事务 事务 什么是事务 这个作为后端开发 日常开发中只要与数据库有交互 肯定就会使用过事务 现在摘抄一段wiki的解释 解释
  • 直播项目vue-video-player 播放 rtmp流

    最近写的一个项目是跟直播相关的 那就必须涉及到播放器 我选择用的是vue video player 记录几个自己遇到的坑 第一个就是直播画面卡住的问题 我遇到的问题很奇怪 flash也打开了 画面也有了 但是就是一直卡住不动 这个问题卡了我
  • css行高包含哪些,详解CSS行高

    行高 即CSS中line height所描述的属性 它表示两行文字间基线之间的距离 不允许使用负值 在弄清行高之前 我们先来了解几个概念 顶线 中线 基线 底线 上图所示线条从上到下为 1 2 3 4 5 6 7 8 9 10 vertic
  • 修改dns服务器转发器,域服务器dns设置转发器

    域服务器dns设置转发器 内容精选 换一换 CCE支持通过dnsPolicy标记每个Pod配置不同的DNS策略 None 表示空的DNS设置 这种方式一般用于想要自定义DNS配置的场景 而且 往往需要和dnsConfig配合一起使用达到自定
  • 解决uniapp执行switchTab跳转成功之后不调用onLoad的方法

    目录 页面结构 遇到的问题 解决方案 页面结构 现有一个tab页面分为两个页签 一个下单页面 一个订单页面 onLoad 页签默认为下单 this current 0 获取商品列表 this getList 点击确认按钮提交订单之后 跳转到
  • node.js和vue.js

    链接 https www zhihu com question 33578075 answer 56951771 如果你去年注意过技术方面的新闻 我敢说你至少看到node js不下一两次 那么问题来了 node js是什么 有些人没准会告诉
  • 【ES6】数组的扩展(二)之Array.from()和Array.of()

    Array from Array from方法用于将两类对象转为真正的数组 类似数组的对象和可遍历 iterator 的对象 包括Map和Set let arrayLike 0 a 1 b 2 c length 3 ES5的写法 var a
  • emacs org-mode插入excel实现的表格内容

    org mode插入excel文本里的表格内容 补充 org mode插入excel文本里的表格内容 excel用于写表格 还是很常用的 excel的表格内容 默认是用Tab键隔开 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4
  • c语言中的where用法,c#查询关键字where 子句的运用

    c 查询关键字where 子句的运用 引导语 where是数据库中的一个指令 一般用于用于规定选择的标准 在c 中同样适用 以下是小编整理的c 查询关键字where 子句的运用 欢迎参考阅读 where 子句用在查询表达式中 用于指定将在查
  • JavaScript黑暗技巧:禁止浏览器点击“后退”按钮

    浏览网页时 当从A页面点击跳转到B页面后 一般情况下 可以点击浏览器上的 后退 按钮返回A页面 如果进入B页面后 B页面想让访问者留下 禁止返回 是否可以实现呢 这简直是要控制浏览器的行为 虽然有些邪恶 但确实可以实现 使用特殊的JavaS
  • ERROR: ExpansionError during parsing

    一开始导入hdf文件时 添加meta adi路径后 报错 解决方法 在虚拟机上挂vpn 这个百度上有很多方法 如果还报错 更新vpn节点
  • Python 基础 之 正则表达式re解析匹配同时获取字符串中的 单引号‘’、双引号“”内的内容

    Python 基础 之 正则表达式re解析匹配同时获取字符串中的 单引号 双引号 内的内容 目录
  • 【Linux之Shell脚本实战】Centos最小化安装环境配置脚本

    Linux之Shell脚本实战 Centos最小化安装环境配置脚本 一 脚本要求 二 检查本地服务器状态 1 检查系统版本 2 查看系统内核版本 三 shell脚本的注释模板配置 1 配置 vimrc 2 查看注释模板效果 四 编写 ini
  • 以太坊智能合约开发:Solidity 语言中的数据类型

    本文我们介绍Solidity语言的数据类型 重点是值类型 包括布尔类型 整型 地址类型 字节类型 字符串类型和枚举类型 并且通过两个智能合约例子 用于演示这些数据类型的声明与使用方法 访问 Github 仓库 获取更多资料 基本概念 Sol