其他
Move语言入门 | 你的第一个Move语言智能合约或许可以这样写
关于Move的研究系列文章,我们此前已经出过相关内容。
#环境搭建
为了方便接下来学习Move合约,我们首先需要安装Move开发环境以及相应的工具,那么接下来请跟随小编的脚步一步一步安装好Move开发环境以及相应的工具:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
cargo install --git https://github.com/move-language/move move-cli --branch main
move new FirstMoveProject
FirstMoveProject
├─ Move.toml
└─ sources
#添加一个Move模块
创建好空Move项目后,那么接下来小编带大家去看一下Move合约是什么样子的。首先我们需要为这个项目添加一个Move模块。模块(module)作为Move编程中的一个核心概念,相当于智能合约的意思。它是由定义的结构体类型以及对这些类型进行操作的函数组成的库。
touch FirstMoveProject/sources/point.move
module 0xCAFE::point{
//结构体Point的定义,表示二维平面坐标中的一个点,有x和y两个字段。
struct Point has copy, drop, store {
x: u64,
y: u64,
}
//根据传入的x和y生成一个Point结构体实例。
public fun new(x: u64, y: u64): Point {
Point {
x, y
}
}
//获取结构体Point的x字段
public fun x(p: &Point): u64 {
p.x
}
//获取结构体Point的y字段
public fun y(p: &Point): u64 {
p.y
}
//求|a-b|的值
fun abs_sub(a: u64, b: u64): u64 {
if (a < b) {
b - a
}
else {
a - b
}
}
//计算p1和p2两点的距离。
public fun dist_squared(p1: &Point, p2: &Point): u64 {
let dx = abs_sub(p1.x, p2.x);
let dy = abs_sub(p1.y, p2.y);
dx*dx + dy*dy
}
}
#编译模块
通过上一小节的讲解,我想大家对Move模块有了一定的了解。当模块编写完成后,我们紧接着需要对编写后的Move代码进行编译得到相应的字节码。使用move build编译sources路径下的Move代码,编译命令如下:
move build
INCLUDING DEPENDENCY MoveStdlib
BUILDING FirstMoveProject
#发布模块
Found 1 modules
Publishing a new module 0000000000000000000000000000cafe::point (wrote 293 bytes)
Wrote 293 bytes of module ID's and code
#通过脚本调用模块函数
touch FirstMoveProject/sources/test_script.move
script {
use 0xCAFE::point;
use std::debug;
fun test_script() {
let x1=2;
let y1=2;
let x2=4;
let y2=4;
//创建点point1(2,2)
let point1=point::new(x1,y1);
//创建点point2(4,4)
let point2=point::new(x2,y2);
//调用dist_squared() 计算point1和point2之间的距离
let dis=point::dist_squared(&point1,&point2);
//debug 将计算的结果输出到命令行中
debug::print(&dis);
}
}
move sandbox run sources/test_script.move
[debug] 8