move语言编写初体验

1 介绍

move语言被称为是最适合编写智能合约的编程语言之一,它具有面向资源编程、纯静态语言、形式化验证、分散存储、面向泛型编程等特点。

从本节开始,我们将开始进入move语言的学习。

2 开发环境搭建

进行move开发主要需要安装Move CLI,安装命令如下:

cargo install --git https://github.com/move-language/move move-cli --branch main

安装好后可以用如下命令查看版本信息:

move --version

3 第一个工程

在终端下通过如下命令创建一个move工程:

move new example1

创建工程后,目录中会有一个Move.toml和sources文件夹,我们要写代码主要在sources中。

在move中,有两种类型的文件,分别modules和transaction scripts(关于这两部分具体的内容我们后面再学习),此处我们就分别创建两种类型的文件。

3.1 修改依赖

由于生成项目默认给的Move标准库是Git地址很慢,所以可以使用aptos项目中的整理好的库来代替,我将aptos的代码放在当前工程的外层的外层,修改我的toml文件如下:

[package]
name = "example1"
version = "0.0.0"

[dependencies]
MoveStdlib = { local = "../../aptos-core/aptos-move/framework/move-stdlib" }
AptosStdlib = { local = "../../aptos-core/aptos-move/framework/aptos-stdlib" }
# MoveStdlib = { git = "https://github.com/move-language/move.git", subdir = "language/move-stdlib", rev = "main" }

[addresses]
std =  "0x1"

3.2 创建模块

  • 新建模块 在sources文件夹下添加Coin.move文件,内容如下:

address 0x2 {
    module Coin {
        struct Coin has drop {
            value: u64,
        }

        public fun mint(value: u64): Coin {
            Coin { value }
        }

        public fun value(coin: &Coin): u64 {
            coin.value
        }

        public fun burn(coin: Coin): u64 {
            let Coin { value } = coin;
            value
        }
    }
}
  • 编译模块

编译命令如下:

move build
  • 编译及发布模块

编译及发布模块的命令如下:

move sandbox publish -v

3.3 在脚本中调用模块

  • 编写脚本

在sources下添加test-coin.move文件,内容如下:

script {
    use std::debug;
    use 0x2::Coin;

    fun main() {
        let coin = Coin::mint(100u64);
        debug::print(&Coin::value(&coin));
        Coin::burn(coin);
    }
}
  • 调用脚本

命令如下:

move sandbox run sources/test-coin.move

可以看到,终端上将打印:

[debug] 100

至此,整个环境就弄好了,后面我们正式进入move语言的学习。

4 参考文档

https://learnblockchain.cn/article/4512