探索 Move 编程语言:智能合约开发的新纪元

news/2024/11/5 22:49:51 标签: 区块链, move编程, Sui, 智能合约, 学习方法

目录

引言

一、变量的定义

二、整型

如何在Move中表示小数和负数?

三、运算符

as运算符

布尔型

地址类型

四、什么是包?

五、什么是模块?

六、如何定义方法?

方法访问权限控制

init方法

总结


引言

        Move 是一种专为区块链智能合约开发设计的强类型编程语言,旨在提高安全性和灵活性。它的类型系统和模块化设计使得开发者能够以清晰、简洁的方式定义合约逻辑。在 Move 中,变量的定义严格遵循类型声明的要求,确保了代码在编译阶段就能捕获类型错误,减少了运行时错误的可能性。此外,Move 提供了多种数据类型,包括整型、布尔型和地址类型,使得开发者能够处理复杂的合约需求。理解这些基本概念是学习 Move 的基础,对于后续编写和优化智能合约至关重要。

可在b站搜索这位up主~

一、变量的定义

let a : u32 = 10u32;

let 变量名称: 类型 = 变量值

变量名称只能是:(a-z和A-Z)以及英文下划线(_)

Move是一门强类型的编程语言,没有隐式的类型转换,定义变量也需要申明类型或标注类型。

二、整型

  • Move只有6个无符号整数
  • Move没有负数和小数

如何在Move中表示小数和负数?

小数的定义是 a / b,所以只要我选择放大整数的倍数可以用来表示小数。

标准库中:https://github.com/MystenLabs/sui/blob/main/crates/sui-framework/packages/move-stdlib/sources/fixed_point32.move

负数 我们可以用前端展现和约定的方式来表示
比如 U8 类型

 1-127  表示负数
128-255 表示正数

三、运算符

as运算符

  • 只有类型相同的才能做基本运算
  • as 是 Move的 整数 类型转换运算符
  • Move 不支持类型的隐式转换
  • 语法(1u8 as u64)

fun init(ctx:&mut TxContext}{
let a : u16= 1000;
let b : u64 = 999;
let c : u32=1000;

let d = b + (c as u64);

let f = a + (c as u16);

}

布尔型

地址类型

address 在Move中是一个特殊的类型,用来在合约里面表示一个钱包地址。

字节的长度是32字节

let address1: address = @0x1;

let address2: address = @0x42;

let address3: address = @0xDEADBEEF;

let address4: address = @0x000000000000000000000000000000000000000000000000000000000000000A

 let address_2 = @primitive;

四、什么是包?

包是同一个合约地址包含的全部代码的集合,由很多模块组成。

五、什么是模块?

代码模块是代码划分权限和代码的组织方式。

moudle mod :: a {

        use sui :: tx_context :: TexContext;

        fun init (ctx:  $mut TxContext) {

        }

 moudle关键字,mod是地址名称,a是模块的名字,然后用双冒号分隔开来。然后一个花括号,吧里面会包含方法、一些引用、常量和结构体等等之类的。

六、如何定义方法?

fun <identifier> <[type_parameters: constraint],*>([identifier:type])*):

<return_type><acquires [identifier],*><function_body>

fun a () {

}

pubulic fun b () { 

}

pubilc (package) fun c () {                 //以前叫friend  现在叫package    

}

public entry fun d () {

}

public fun f(a: u32,b: u32) : bool {

        a > b

}

方法访问权限控制

init方法

1、只能是私有的

2、会在发布合约的时候自动调用一次

3、只有两种形式:

  • fun init ( ctx : $mut TxContext) { }
  • fun init ( witness : Struct, ctx : $mut TxContext) { } 

总结

        通过本次学习,我们深入探讨了 Move 编程语言的基本特性和语法结构,包括变量的定义、数据类型的使用、模块和方法的定义等。Move 的设计理念强调类型安全和代码组织的清晰性,使得区块链开发变得更加高效和安全。掌握这些知识不仅有助于我们更好地理解智能合约的实现机制,也为我们在实际开发中运用 Move 提供了坚实的基础。在未来的学习和实践中,我们可以继续探索 Move 的更多功能及其在区块链生态系统中的应用。


http://www.niftyadmin.cn/n/5739921.html

相关文章

【OJ题解】在字符串中查找第一个不重复字符的索引

&#x1f4b5;个人主页: 起名字真南 &#x1f4b5;个人专栏:【数据结构初阶】 【C语言】 【C】 【OJ题解】 目录 1. 引言2. 题目分析示例&#xff1a; 3. 解题思路思路一&#xff1a;双重循环思路二&#xff1a;哈希表 4. C代码实现5. 代码详解6. 时间和空间复杂度分析7. 优化方…

在 Windows 中简化 Nginx 命令行操作

本文的主要目的是为了实现打开命令行后可以直接运行 Nginx 的常用命令&#xff0c;不需要手动切换到工作目录&#xff0c;从而简化操作流程。 1. 背景 在 Windows 中运行 Nginx 每次都需要进入安装目录&#xff0c;运行 Nginx 工具&#xff1a; 直接将 Nginx 的安装目录添加到…

spring ai 入门 之 结构化输出 - 把大模型llm返回的内容转换成java bean

目录 ​编辑 将AI非结构化文本转换为特定格式数据的应用场景说明 Spring AI 介绍 &#xff1a;为Java开发者打造的AI应用开发框架 Qwen 介绍 &#xff1a; 一个国内领先的开源大模型 Spring AI Alibaba框架介绍 &#xff1a; 一个国内最好的spring ai实现 使用spring ai …

deepfm模型实现招聘职位推荐算法

项目源码获取方式见文章末尾&#xff01; 600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于CNN-RNN的影像报告生成】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…

git查看历史提交中文件的变化

在版本控制系统中&#xff0c;Git以其强大的日志和差异分析功能而闻名。这些功能帮助开发者追踪文件的变更历史和理解代码的演进。本文将深入探讨四个Git命令&#xff1a;git log --name-only、git log --name-status和git diff-tree --no-commit-id --name-status -r、git sho…

深度学习之数据增强

1 深度学习中常用的数据增强方法&#xff1f; Color Jittering&#xff1a;对颜色的数据增强&#xff1a;图像亮度、饱和度、对比度变化&#xff08;此处对色彩抖动的理解不知是否得当&#xff09;&#xff1b; PCA Jittering&#xff1a;首先按照RGB三个颜色通道计算均值和标…

【万字详文介绍】:迭代扩张卷积神经网络(IDCNN)

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

如何取消Outlook中的循环会议

如何取消Outlook中的循环会议 参考链接&#xff1a;https://iknow.lenovo.com.cn/detail/195430 1、打开Outlook&#xff0c;进入 日历 视图界面&#xff1b; 2、 选择并双击要取消的循环会议&#xff1b; 3、 在 打开定期项目 对话框中选择整个序列&#xff0c;然后单击 确…