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

这篇具有很好参考价值的文章主要介绍了以太坊智能合约开发:Solidity 语言中的数据类型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文我们介绍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中编译、部署和运行上面的合约例子,执行结果如下图:

solidity语言中数据类型包括值类型和引用类型,分别包括哪些类型,区块链,智能合约,区块链

例子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中编译、部署和运行上面的合约例子,执行结果如下图:

solidity语言中数据类型包括值类型和引用类型,分别包括哪些类型,区块链,智能合约,区块链文章来源地址https://www.toymoban.com/news/detail-784615.html

到了这里,关于以太坊智能合约开发:Solidity 语言中的数据类型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 以太坊智能合约开发(五):Solidity成绩录入智能合约实验

    每个学生分别部署合约Student.sol ,保证只有自己可以修改姓名。老师部署合约StudentScore.sol,用于录入学生成绩,查询学生信息。查询学生信息时,需要调用学生部署的合约Student.sol。 student.sol合约,用于学生对自己信息进行管理。 学生的基本信息作为状态变量: 声明构造函

    2024年02月07日
    浏览(33)
  • 基于以太坊的智能合约开发Solidity(基础篇)

    参考教程:基于以太坊的智能合约开发教程【Solidity】_哔哩哔哩_bilibili (1)程序编译完成后,需要在虚拟机上运行,将合约部署好后便可执行刚刚编写的函数。(注意, 合约一旦部署,就会永久存在于区块链上,且不可篡改 ,不过可以销毁) (2)执行完成后,可以得到以

    2024年02月04日
    浏览(45)
  • 基于以太坊的智能合约开发Solidity(事件&日志篇)

    (1)事件用于记录在区块链上的特定活动,“emit ValueChanged(newValue);”语句的作用是触发ValueChanged事件(首先需要声明事件)。 ①触发事件后会生成相应日志,上图黄框就是“emit ValueChanged(newValue);”语句产生的日志,其中“form”指的是触发事件的合约账户。 ②事件主要是供

    2024年02月04日
    浏览(28)
  • 基于以太坊的智能合约开发Solidity(内存&结构体篇)

    参考教程:【内存、引用与持久化存储】1、内存与区块链——storage与memory原理_哔哩哔哩_bilibili (1)所有的复杂类型,即数组、结构和映射类型,都有一个额外属性——“数据位置”,用来说明数据是保存在内存memory中还是存储storage中,保存在memory中的数据,在函数执行完

    2024年02月04日
    浏览(40)
  • 玩以太坊链上项目的必备技能(初识智能合约语言-Solidity之旅一)

    前面一篇关于 智能合约 翻译文讲到了,是一种计算机程序,既然是程序,那就可以使用 程序语言 去编写 智能合约 了。 而若想玩区块链上的项目,大部分区块链项目都是开源的,能看得懂 智能合约 代码,或找出其中的漏洞,那么,学习 Solidity 这门高级的智能合约语言是有

    2023年04月16日
    浏览(81)
  • 第四章 以太坊智能合约solidity介绍

    Solidity 是一门面向合约的、为实现智能合约而创建的高级编程语言,设计的目的是能在以太坊虚拟机上运行。 本章大概介绍合约的基本信息,合约的组成,语法方面不做过多的介绍,个人建议多阅读官方文档效果更佳,后续的章节会开发ERC20代币合约案例以便于更好的学习智

    2024年02月06日
    浏览(45)
  • 一起学solidity写智能合约——地址类型(address)

    在区块链中说地址重不重要,其实会被笑,然后会让你去恶补一下知识点,哈哈哈哈哈哈,地址可以没有区块链,但是区块链不能没有地址,这句话不是开玩笑。 地址类型是在以太坊的诞生之后出现的一个特有类型,他是一个大小160位的二进制数字 在地址中我们可以说有很

    2023年04月16日
    浏览(29)
  • 以太坊开发学习-solidity(三)函数类型

    目录 函数类型 函数类型 solidity官方文档里把函数归到数值类型 函数类型是一种表示函数的类型。可以将一个函数赋值给另一个函数类型的变量, 也可以将一个函数作为参数进行传递,还能在函数调用中返回函数类型变量。 函数类型有两类:-  内部(internal)  函数和  外

    2024年04月09日
    浏览(42)
  • Solidity智能合约开发 — 3.4-抽象智能合约和接口

    假如一个智能合约中至少一个函数缺省实现时,即某个函数缺少{}中的内容,这个智能合约就当做抽象智能合约。 当我们有一个函数没想好怎么写时,必须将该合约标为 abstract ,不然编译会报错;另外,未实现的函数需要加 virtual ,以便子合约重写。抽象智能合约是将智能合

    2024年02月12日
    浏览(33)
  • 区块链智能合约编程语言 Solidity

    上文介绍了区块链生态发展,我们知道以太坊的到来可以使开发人员基于区块链开发DApp,本文介绍 Solidity 编程语言的使用,然后基于 Solidity 编写一个简单的智能合约。 Solidity 是以太坊开发人员使用的编程语言,用来编写智能合约,运行在以太坊虚拟机(EVM)上。 有开发经

    2024年02月12日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包