介绍

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

举例

  1. let a1: address = @0x1; // 实际为 0x00000000000000000000000000000001
  2. let a2: address = @0x42; // 实际为 0x00000000000000000000000000000042
  3. let a3: address = @0xDEADBEEF; // 实际为 0x000000000000000000000000DEADBEEF
  4. let a4: address = @0x0000000000000000000000000000000A
  5. let a5: address = @Std; // 这里需要取别名Std为0x5
  6. let a6: address = @66;
  7. let a7: address = @0x42;
  8. module 66::SomeModule { // 不在表达式上下文,所以不需要@
  9. use 0x1::OtherModule; // 不在表达式上下文,所以不需要@
  10. use Std::Vector; // 调用其他address上已发布的函数,可以使用别名代替数值类型的address
  11. ...
  12. }
  13. module Std::OtherModule { // 可以使用别名代替数值类型的address去发布
  14. ...
  15. }

全局存储

address主要作用是用于全局存储中,不同address的交互使用。
address通常作为existsborrow_globalborrow_global_mutmove_from函数的参数使用。
address不作为move_to函数的参数使用,move_to函数的参数是signer