首先感谢Let'sMove共学,感谢HOH社区让我们对上一篇文章里面提到的代码语法进行详解modulehello_move::hello;usestd::ascii::{String,string};
首先感谢Let's Move共学,感谢HOH社区
让我们对上一篇文章里面提到的代码语法进行详解
module hello_move::hello ;
use std::ascii::{String, string};
use sui::object::{Self, UID};
use sui::transfer::transfer;
use sui::tx_context::{TxContext};
public struct Hello has key {
id: UID,
say: String
}
fun init(ctx: &mut TxContext) {
let hello_move = Hello {
id: object::new(ctx),
say: string(b"move"),
};
transfer(hello_move, ctx.sender());
}
这段代码是用 Move 编程语言编写的,Move 是一种用于区块链的智能合约编程语言,最初由 Libra(后更名为 Diem)项目引入,现在也被其他项目如 Sui 使用。这段代码定义了一个简单的智能合约模块 hello_move
,其中包含一个结构体 Hello
和一个初始化函数 init
。
module hello_move::hello ;
这行代码声明了一个新的模块,名为 hello_move::hello
。在 Move 中,模块是组织代码的基本单元,类似于其他编程语言中的包或库。<!--StartFragment-->
hello_move
:
hello
:
<!--EndFragment-->
use std::ascii::{String, string};
use sui::object::{Self, UID};
use sui::transfer::transfer;
use sui::tx_context::{TxContext};
这里导入了一些标准库中的类型和函数:
std::ascii::{String, string}
:导入了 ASCII 字符串类型 String
和用于创建字符串的函数 string
。sui::object::{Self, UID}
:导入了 Sui 对象相关的类型 UID
,这是一个唯一标识符类型,用于标识链上的对象。sui::transfer::transfer
:导入了用于转移对象所有权的函数 transfer
。sui::tx_context::{TxContext}
:导入了事务上下文类型 TxContext
,它提供了关于当前执行环境的信息,如发送者地址等。public struct Hello has key {
id: UID,
say: String
}
定义了一个公共结构体 Hello
,它有两个字段:
id
: 类型为 UID
,表示这个对象的唯一标识符。say
: 类型为 String
,存储了一条消息。has key
表示这个结构体可以作为资源存放在账户中,并且可以被其他脚本引用。这意味着 Hello
结构体实例可以在链上存在并被追踪。
fun init(ctx: &mut TxContext) {
let hello_move = Hello {
id: object::new(ctx),
say: string(b"move"),
};
transfer(hello_move, ctx.sender());
}
这是一个公共函数 init
,用于初始化一个新的 Hello
实例:
ctx: &mut TxContext
是一个可变引用,指向当前事务的上下文。let hello_move = Hello { ... }
创建了一个新的 Hello
实例,其中 id
字段通过调用 object::new(ctx)
生成一个新的 UID
,而 say
字段则是一个包含字节 "move" 的字符串。transfer(hello_move, ctx.sender())
将新创建的 Hello
实例转移到发送该事务的账户中。ctx.sender()
返回发起该事务的账户地址。简单补充一下ctx的用法 <!--StartFragment-->
TxContext
的主要用途获取发送者的地址:
ctx.sender()
: 返回当前事务的发送者地址。这是最常用的方法之一,特别是在需要验证权限或进行资源转移时。
获取事务的序列号:
ctx.tx_sequence_number()
: 返回当前事务的序列号。序列号是一个递增的数字,用于确保事务的顺序执行。
生成新的对象 ID:
object::new(ctx)
: 用于生成一个新的 UID
,通常用于创建新的资源对象。
获取事务的时间戳:
ctx.now()
: 返回当前事务的时间戳,以毫秒为单位。
获取事务的 gas 价格:
ctx.gas_price()
: 返回当前事务的 gas 价格,即每单位 gas 的费用。
获取事务的 gas 预算:
ctx.gas_budget()
: 返回当前事务的 gas 预算,即事务可以消耗的最大 gas 数量。
<!--EndFragment-->
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!