MVR 是一个为 Sui 生态系统中 Move 语言包(packages)提供统一命名服务的工具。通过 MVR,开发者可以使用人类可读的名称来引用和构建智能合约,无需关心不同网络上的包地址。
当前区块链生态系统中,智能合约的地址往往是一串难以记忆的随机字符,这给开发者和用户带来了不少困扰。
MVR(Move Registry,发音为"mover")旨在解决这个问题,为 Sui 区块链上的智能合约包提供统一的命名服务。
MVR 是一个为 Sui 生态系统中 Move 语言包(packages)提供统一命名服务的工具。通过 MVR,开发者可以使用人类可读的名称来引用和构建智能合约,无需关心不同网络上的包地址。
MVR 由两个独立的核心部分组成:
PackageInfo
对象。PackageInfo
对象。下面将更详细地阐述这两个组件。
PackageInfo
对象是 MVR 的基础数据单元,部署在每个需要发布包的网络(主网、测试网、开发网等)上。开发者需要为自己的 Move 包,在其部署的每一个网络上,都创建一个对应的 PackageInfo
对象。
这个元数据对象主要包含以下信息和功能:
可以认为,PackageInfo
对象是在每个网络上为同一个逻辑包(比如 "my-awesome-package")维护的一个"本地记录簿",详细记录了该包在该网络上不同版本的具体实现地址 (Package ID) 及相关元信息。
为了将人类可读的 MVR 名称(如 @myname/mypackage
)与不同网络上具体的 PackageInfo
对象关联起来,MVR 设计了一个部署在主网 (Mainnet) 上的名称解析服务。这个服务是统一且权威的。
其工作原理如下:
@myname
或 myname.sui
)首先需要通过 SuiNS 解析,找到其在主网上关联的所有者地址或对象。mypackage
) 映射到该逻辑包在各个网络 (主网、测试网等) 上对应的 PackageInfo
对象 的 Object ID。@myname/mypackage
在 testnet
上的地址时,它会先查询主网的解析服务。服务会返回 mypackage
在 testnet
上的 PackageInfo
对象的 ID。然后,工具再使用这个 ID 去查询 testnet
上的 PackageInfo
对象,最终获取到具体的包地址 (Package ID)。因此,MVR 名称解析服务扮演着一个中央目录或索引的角色,它不直接存储包地址,而是将统一的 MVR 名称路由到各个网络上正确的 PackageInfo
数据记录。
MVR 名称由 SuiNS 名称和包名组成,格式为 <suins_name>/<pkg_name>
。
例如,如果你的 SuiNS 名称是 myname.sui
,你的包名是 mypackage
,MVR 名称可以是 @myname/mypackage
或 myname.sui/mypackage
。
MVR 标准还支持可选的 /<version>
格式,指定使用链上的哪个版本。例如:@myname/mypackage/2
表示使用第 2 版。
MVR 命令行工具允许开发者:
安装 MVR CLI 可以通过 Cargo、预编译二进制文件或源代码构建。
cargo install --locked --git https://github.com/mystenlabs/mvr --branch release mvr
添加依赖简单示例:
mvr add <package_name> --network <mainnet|testnet>
MVR 为 Sui TypeScript SDK 提供了插件,使构建 PTB 时可以使用 MVR 名称,提供了无缝的开发体验。
使用前后对比:
使用 MVR 前:
// 需要使用复杂的地址引用
transaction.moveCall({
target: `0xe177697e191327901637f8d2c5ffbbde8b1aaac27ec1024c4b62d1ebd1cd7430::accessories::equip`,
arguments: [...],
typeArguments: [
`0x80d7de9c4a56194087e0ba0bf59492aa8e6a5ee881606226930827085ddf2332::suifren::SuiFren`
]
});
使用 MVR 后:
// 使用人类可读的名称引用
transaction.moveCall({
target: `@suifrens/accessories::accessories::equip`,
arguments: [...],
typeArguments: [
`@suifrens/core::suifren::SuiFren`
]
})
可以在线访问 Move Registry 的前端页面,在页面上直接使用和管理 MVR 服务,无需命令行操作。
MVR 通过提供统一的命名服务,简化了 Sui 区块链上 Move 智能合约的开发和使用流程。它让开发者能够使用人类可读的名称引用合约,管理依赖和版本,从而提高了开发效率和代码可读性。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!