{"content":{"title":"MOVE入门|第一节：move开发环境搭建","body":"# 什么是MOVE?\r\n![](https://pad.degrowth.net/uploads/upload_e1cb006aaa7005feb92b943ce1135f11.png)\r\nMove是一种用于编写安全智能合约的编程语言，最初是由 Facebook 开发的。目前，区块链领域的主要参与者是Solidity。作为最早的区块链语言之一，Solidity旨在使用众所周知的数据类型（例如字节数组，字符串）和数据结构（例如哈希图）来实现基本的编程语言概念，然而随着区块链技术的发展，Solidity安全性和可验证性上存在一些缺陷。\r\n\r\nMove专门设计用于解决安全性和可验证性，数字资产的表示和对它们的安全操作。为了提供额外的保护，它与Move Prover验证工具一起共同开发。这允许 Move 开发人员为其应用程序的关键正确性属性编写正式规范，然后使用Prover检查这些属性是否适用于所有可能的输入。\r\n\r\n本系列将从Move的安装环境开始讲解 Move语言基础以及一些关于Move审计的知识，有任何问题欢迎留言交流。\r\n    \r\n\r\n# move-cli安装\r\n命令行界面（Move CLI）是用rust开发的工具，集成了MoveVM、move编译器。它提供了一种与 Move 交互、测试编写和运行 Move 代码以及测试开发对 Move 开发有用的新工具的简单方法。 本次安装系统环境为macos。\r\n## 安装cargos\r\n由于move是基于rust写的。所以要安装move首先要安装rust开发环境。\r\n使用以下命令安装：\r\n```htmlmixed=\r\ncurl https://sh.rustup.rs -sSf | sh\r\n```\r\n## 安装move-cli\r\n1.拉取move最新代码\r\n\r\n```htmlmixed=\r\n git clone https://github.com/move-language/move.git\r\n```\r\n2.安装move-cli\r\n```htmlmixed=\r\ncargo install --path move/language/tools/move-cli\r\n```\r\n3.测试安装是否成功\r\n```htmlmixed=\r\nmove -h \r\n```\r\n![](https://pad.degrowth.net/uploads/upload_14883d2ea7d7a9c19d02f7fd65958358.png)\r\n\r\n## Move-analyzer安装\r\n主要提供语法检查、高亮等功能，vscode的插件也需要用到该命令，否则会报错。\r\n\r\n```htmlmixed=\r\ncargo install --path move/language/tools/move-analyzer\r\n```\r\n\r\n## vscode开发环境\r\n可以使用vscode编写代码，只需要安装两个插件即可。\r\n在vscode扩展商店里搜索并安装即可\r\n1.move-analyzer \r\n![](https://pad.degrowth.net/uploads/upload_70420675163f36b4f21433bbf26d0dc3.png)\r\n\r\n\r\n2.move syntax\r\n\r\n![](https://pad.degrowth.net/uploads/upload_4bc933b7d6bfb80a4d1c324c7b32b143.png)\r\n\r\n## idea开发环境\r\n除了vscode外，idea也有插件支持move的开发。\r\n插件链接：https://plugins.jetbrains.com/plugin/14721-move-language\r\n\r\n\r\n## 在线开发环境\r\n如果实在不想装环境，也可以使用在线的IDE。\r\n链接：\r\n```htmlmixed=\r\nhttps://playground.pontem.network/\r\n```\r\n\r\n# 新建项目\r\n安装好了开发环境，现在简单的跑一个小demo体验一下。\r\n## 创建一个新的项目\r\n命令\r\n```\r\nmove new pro_stu\r\n```\r\n\r\n这里我们先了解一下项目的结构\r\n```htmlmixed=\r\n├── Move.toml                 # move 配置文件,存放项目信息、依赖、命名地址等内容\r\n└── sources                   # 源码目录，用于存放模块、脚本等内容\r\n    ├── modules               # 模块目录,用来封装方法。\r\n    │   └── math.move        # 具体模块\r\n    └── scripts               # 脚本目录，用来写脚本\r\n        └── test-math.move    # 具体脚本\r\n```\r\n![](https://pad.degrowth.net/uploads/upload_9fa6de67ee30b4d9105c1c21956eff0a.png)\r\n\r\nMove.toml是move 配置文件,存放项目信息、依赖、命名地址等内容。\r\n-  **[package]** 主要存放的是项目的信息，项目的名称，版本\r\n- **[dependencies]** 中存放的是move标准库地址，由于生成项目默认给的Move标准库是Git地址，速度很慢，这里我们可以将标准库下载到本地，换成文件的路径。\r\n- **[addresses]** 中是模块命名(方便项目直接引用)\r\n```move\r\n项目信息\r\n[package]\r\nname = \"pro_stu\"\r\nversion = \"0.0.0\"\r\n\r\n\r\nMove标准库地址\r\n[dependencies]\r\nMoveStdlib = { git = \"https://github.com/move-language/move.git\", subdir = \"language/move-stdlib\", rev = \"main\" }\r\n\r\n\r\n模块命名(方便项目直接引用)\r\n[addresses]\r\nstd =  \"0x1\"\r\n\r\n```\r\n\r\n\r\n接下来我们开始写代码啦\r\n## 测试项目\r\n1.在module中新建一个Math.move文件,写一个函数来完成一个加法运算，内容很简单，主要是完成两个数的加法。\r\n```move\r\n    module 0x1::Math {\r\n        public fun add(a:u64,b:u64):u64{\r\n            return a+b\r\n        }\r\n    }\r\n```\r\n 2.script中新建一个test_math.move文件，用来测试module的函数。\r\n ```move\r\n script {\r\n    use 0x1::Math;\r\n    use std::debug;\r\n\r\n    fun test_math(){\r\n        let a:u64=3;\r\n        let b:u64 =6;\r\n\r\n        let c = Math::add(a,b);\r\n        debug::print(&c);\r\n    }\r\n}\r\n```\r\n\r\n### 编译运行\r\n代码编写完成后接下来编译运行，根据自己的情况在vscode或IDEA中打开终端，在项目目录下执行以下命令。\r\n```htmlmixed=\r\n1.编译sources下的move代码\r\nmove build\r\n\r\n2.在沙盒环境发布字节码到0x1（0x1是本例中Math模块前的地址）名下\r\nmove sandbox publish -v\r\n\r\n3.运行脚本文件\r\nmove sandbox run sources/scripts/test_math.move\r\n```\r\n运行后可以看到打印的结果\r\n\r\n![](https://pad.degrowth.net/uploads/upload_b0cea3bc46fb82b5913bf43d1383bda3.png)\r\n\r\n\r\n# 总结\r\n这一讲主要介绍了move的开发环境的搭建，并且编译运行了第一个move程序。\r\n\r\n# move学习资料\r\nhttps://move-language.github.io/move/modules-and-scripts.html"},"author":{"user":"https://learnblockchain.cn/people/12519","address":null},"history":"QmWVNFQ2SU8wgcGbNAGkazLQ1tiUJ3vwCi8uVYbX6bcp2e","timestamp":1673449307,"version":1}