Publicación
Comparte tu conocimiento.
Problemas para publicar, mover el módulo a mover la máquina virtual con el error «MODULE_ADDRESS_DOES_NOT_MATCH_SENDER»
Hola a todos, estoy intentando integrar Move VM en mi red personalizada y tengo problemas al intentar publicar un módulo Move en la Move VM. He leído que Move VM «no depende de ninguna plataforma» y agradecería recibir orientación sobre los pasos iniciales necesarios y sobre si este proceso implica un esfuerzo significativo. Además, me encuentro con un problema específico. Sigo recibiendo el siguiente error relacionado con la stdlib
dependencia de Move cuando intento publicar un módulo de 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
En mi archivo Move.toml, 0x1
se le asigna la dirección. Es importante destacar que no estoy usando stdlib
ninguna parte de mi código. A pesar de esto, me encuentro constantemente con el error mencionado anteriormente. ¿Podría alguien ayudarme a entender qué es lo que podría estar mal u ofrecerme información sobre cómo solucionar este problema de manera eficaz?
- Move
- Move Script
Respuestas
2El problema al que se enfrenta se debe a la compilación del paquete Move en modo de prueba en movimiento, que incluye un módulo Move stdlib con una dirección diferente asignada. Al compilar el paquete, asegúrese de no incluir el módulo Move de stdlib ni ningún otro módulo con direcciones conflictivas. Compila el paquete Move sin el modo de prueba para resolver el problema de falta de coincidencia de direcciones. Esto debería resolver el error que se produce durante la publicación del módulo.
Si tiene alguna pregunta, puede hacerla aquí;
El mensaje de error que aparece,
VMError {major_status: MODULE_ADDRESS_DOES_NOT_MATCH_SENDER, sub_status: Ninguno, mensaje: Ninguno, exec_state: Ninguno, ubicación: Indefinida, índices: [(AddressIdentifier, 0)], compensaciones: []}
indica que la dirección del módulo que estás intentando publicar no coincide con la dirección del remitente. En la máquina virtual Move, la dirección del remitente viene determinada por la cuenta que inicia la transacción. Si la dirección del módulo que intentas publicar no coincide con la dirección del remitente, aparecerá este error. En tu código, estás configurando la dirección del remitente enAccountAddress::ONE
, que corresponde a la dirección0x1
. 0x1
Sin embargo, tu archivo Move.toml asigna la dirección stdlib a. Aunque no la utilices stdlib
en tu código, la máquina virtual de Move sigue comprobando esta dirección al publicar un módulo. Para resolver este problema, puedes intentar cambiar la dirección del remitente por un valor diferente que no entre en conflicto con la dirección stdlib. Por ejemplo:
let sender_address = AccountAddress::new([2u8; AccountAddress::LENGTH]);
Esto asignará la dirección del remitente a0x2
, que no debe entrar en conflicto con la dirección stdlib. En cuanto al proceso de integración de Move VM en su red personalizada, puede ser relativamente sencillo o puede requerir una cantidad considerable de esfuerzo, lo que a menudo se denomina «elevación». Esto depende en gran medida de la complejidad de la red y de las características específicas de las aplicaciones.
Sabes la respuesta?
Inicie sesión y compártalo.