首先感谢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-->
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!