帖子
分享您的知识。
在 Move VM 上发布移动模块时出现 “MODULE_ADDRESS_DOES_NOT_MATCH_SENDER” 错误时遇到问题
大家好,我正在尝试将 Move VM 集成到我的自定义网络中,但在尝试将 Move 模块发布到 Move VM 时遇到了问题. 我读过 Move VM “与平台无关”,如果能就所涉及的初始步骤以及此过程是否涉及大量工作提供指导,我将不胜感激. 此外,我遇到了一个特定的问题. stdlib
尝试发布 Move 模块时,我不断收到以下与 Move 依赖项相关的错误:
VMError {
major_status: MODULE_ADDRESS_DOES_NOT_MATCH_SENDER,
sub_status: None,
message: None,
exec_state: None,
location: Undefined,
indices: [(AddressIdentifier, 0)],
offsets: []
}
Below is a snippet of my code:
fn build_and_publish_package(package_path: &str) {
// Code for compiling the package and obtaining compiled units
let instance = MoveVM::new(vec![]).unwrap();
let myresolver = MyResolver::new();
let mut new_session = instance.new_session(&myresolver);
let sender_address = AccountAddress::ONE;
let _ = new_session
.publish_module_bundle(modules.clone(), sender_address, &mut UnmeteredGasMeter {})
.unwrap();
}
stdlib
在我的 Move.toml 文件中,0x1
为其分配了地址. 重要的是,我没有在stdlib
代码中的任何地方使用. 尽管如此,我还是经常遇到上面提到的错误. 有人能帮我了解可能出了什么问题或提供有效解决这个问题的见解吗?
- Move
- Move Script
答案
2你面临的问题是由于在移动测试模式下编译 Move 包,其中包括一个分配了不同地址的 stdlib Move 模块. 编译软件包时,请确保不包括 stdlib Move 模块或任何其他地址冲突的模块. 在不使用测试模式的情况下编译 Move 包以解决地址不匹配问题. 这应该可以解决你在模块发布期间遇到的错误.
如果你有任何问题,可以问他们 这里;
你遇到的错误消息,
vmError {major_status: MODULE_ADDRESS_DOES_NOT_MATCH_SENDER,子状态:无,消息:无,执行状态:无,位置:未定义,索引:[(地址标识符,0)],偏移量:[]}
表示你尝试发布的模块的地址与发件人的地址不匹配. 在 Move VM 中,发件人的地址由发起交易的账户决定. 如果您尝试发布的模块的地址与该发件人的地址不匹配,则会遇到此错误. 在您的代码中,您将发件人的地址设置为AccountAddress::ONE
,该地址对应于该地址0x1
. 0x1
但是,您的 move.toml 文件会将 stdlib 地址分配给. 即使你没有在stdlib
代码中使用,发布模块时 Move VM 仍会检查这个地址. 要解决此问题,你可以尝试将发件人的地址更改为与 stdlib 地址不冲突的其他值. 例如:
let sender_address = AccountAddress::new([2u8; AccountAddress::LENGTH]);
这会将发件人的地址分配给0x2
,该地址不应与 stdlib 地址冲突. 至于将Move VM集成到您的自定义网络的过程,可能相对简单,也可能需要大量的精力,通常称为 “提升”. 这在很大程度上取决于您的网络的复杂性和应用程序的具体情况.
你知道答案吗?
请登录并分享。
Move is an executable bytecode language used to implement custom transactions and smart contracts.