Sui Move模块部署报错:需全为0x0地址,如何单独部署新模块?
Move模块部署报错解决指南
报错详情
部署新模块时遇到以下错误:
Failed to publish the Move module(s),
reason: Modules must all have 0x0 as their addresses.
Violated by module ModuleId { address: f2960e4b..., name: Identifier("Widget") }
当前Move.toml配置:
[addresses] package_addr = "0x0"
核心问题解答
是否必须一次性部署所有模块?
不需要。完全可以分批部署不同模块,只要每一批部署的模块满足地址匹配规则即可——即待部署模块的编译后地址,要和部署时指定的目标地址一致。
如何配置将新模块部署到新地址?
按以下步骤操作:
- 修改Move.toml地址配置
将package_addr的值改为你想要的新地址(也就是报错里提到的f2960e4b...):[addresses] package_addr = "0xf2960e4b..." - 检查并修正模块地址声明
打开Widget模块的代码,确保模块开头用的是package_addr别名,而非硬编码的旧地址:
如果之前模块里写了硬编码地址,全部替换成module package_addr::Widget { // 模块业务代码 }package_addr,这样编译时会自动映射为Move.toml里配置的新地址。 - 重新编译并部署
重新编译模块,然后执行部署命令。大部分Move链的部署工具会自动读取Move.toml的地址配置,无需手动指定;如果需要手动输入目标地址,确保和package_addr的值一致即可。
报错原因说明
这次报错是因为你要部署的Widget模块,编译后的地址是f2960e4b...,但部署工具当前要求模块地址必须是0x0(和你之前部署第一个模块时的配置一致),两者不匹配导致失败。调整配置让模块地址和部署目标地址统一,就能解决问题。
内容的提问来源于stack exchange,提问作者Russo
相关产品推荐
相关产品推荐

