介绍
address是 Move 中的内置类型,用于表示全局存储的位置(也就是账户地址),一个address值是一个128位(16字节)的标识符。在一个给定的address可以存储 Modules 和 Resources。
address在 Move 中是非公开的,不支持创建、数值运算和修改。可以使用已发布的address访问改地址的 Resources,但是不能访问该地址上定义的 Modules。
address定义有两种形式,命名型(例如Std)和数字型(例如0x1)。任何u128的数值类型都可以用来表示一个address(例如42、0xCAFE、2022)。
当
address在上下文中作为表达式时,地址必须有@作为前缀,即@0x1; 当address在上下文之外,地址可以不加@前缀,即0x1;
举例
let a1: address = @0x1; // 实际为 0x00000000000000000000000000000001let a2: address = @0x42; // 实际为 0x00000000000000000000000000000042let a3: address = @0xDEADBEEF; // 实际为 0x000000000000000000000000DEADBEEFlet a4: address = @0x0000000000000000000000000000000Alet a5: address = @Std; // 这里需要取别名Std为0x5let a6: address = @66;let a7: address = @0x42;module 66::SomeModule { // 不在表达式上下文,所以不需要@use 0x1::OtherModule; // 不在表达式上下文,所以不需要@use Std::Vector; // 调用其他address上已发布的函数,可以使用别名代替数值类型的address...}module Std::OtherModule { // 可以使用别名代替数值类型的address去发布...}
全局存储
address主要作用是用于全局存储中,不同address的交互使用。address通常作为exists、borrow_global、borrow_global_mut和move_from函数的参数使用。address不作为move_to函数的参数使用,move_to函数的参数是signer。
