Publicación
Comparte tu conocimiento.
Llamar a funciones desde el módulo Move: métodos y mejores prácticas
Hola, estoy intentando llamar a una función (make_sword) desde el módulo Move con la dirección 0x4c6cccd6bc62eac9a9d023b6fa671d8f8c7eaf8ae7e67fae89d26883360dd89d
en MOVE. ¿Es posible llamar a funciones desde diferentes módulos de Move? De ser así, ¿qué métodos o enfoques puedo usar? ¿Existen conceptos similares a los de las interfaces en Solidity para lograrlo?
- Move
- Move Module
Respuestas
2Sí, es posible llamar a funciones desde los módulos Move. Hay algunos métodos que puedes usar para lograrlo:
-
moveCall
Función: Puede usar la función unsafe_movecall para llamar a funciones de otros módulos de Move. Este método te permite realizar llamadas directas a funciones específicas mediante curl. Puedes encontrar más detalles en la documentación aquí. Sin embargo, tenga cuidado al utilizar este enfoque, ya que está etiquetado como «inseguro». -
Para CLI: Otra opción es usar la CLI de Sui, donde puede llamar a funciones desde otros módulos mediante el comando sui client call [args + params]. Esto proporciona una forma más estructurada y fácil de usar de interactuar con los módulos Move.
Cuando experimentes con estos métodos, asegúrate de trabajar en la red de prueba o en la red de desarrollo, ya que hacer llamadas requerirá mucho esfuerzo, incluso durante las pruebas. Es fundamental tener en cuenta el consumo de gas y seguir las mejores prácticas al realizar estas llamadas. Si tiene más preguntas o necesita ayuda con un enfoque diferente, no dude en hacerlas aquí;
Sí, es posible llamar a funciones desde diferentes módulos en Move. Para ello, necesitas tener acceso al código fuente del módulo desde el que quieres llamar a la función. Esto se debe a que Move requiere el código fuente de un módulo de Move para compilarlo y vincularlo a tu programa.
Si el código fuente del módulo está en un repositorio de git, puedes especificar el repositorio de git y la ruta al código fuente en tu archivo Move.toml de la siguiente manera:
[dependencies.other]
git = 'https://github.com/banool/move-examples.git'
rev = 'main'
subdir = 'call_other_module/other'
If the source code is local, you can specify the path to the source code in your Move.toml file:
[dependencies.other]
local = "../other"
Si no tienes el código fuente, puedes intentar descargarlo usando el comando de descarga de aptos move. El argumento --account debe ser la dirección del módulo que deseas descargar:
aptos move download -- account 6286dfd5e2778ec069d5906cd774efdba93ab2bec71550fa69363482fbd814e7
--package other
0x4c6cccd6bc62eac9a9d023b6fa671d8f8c7eaf8ae7e67fae89d26883360dd89d::make_sword()
Una vez que tenga acceso al código fuente del módulo, puede llamar a la función de la siguiente manera:;
En este ejemplo, 0x4c6cccd6bc62eac9a9d023b6fa671d8f8c7eaf8ae7e67fae89d26883360dd89d
es la dirección del módulo y make_sword
es la función a la que desea llamar.
En cuanto a su pregunta sobre las interfaces en Move, no hay ningún equivalente directo a las interfaces de Solidity. Sin embargo, Move tiene un concepto similar con sus modificadores de visibilidad públicos y públicos (amigos). Cualquier función definida en cualquier módulo o script puede invocar una función pública. Una función pública (amiga) solo puede ser invocada por funciones definidas en módulos que se especifiquen explícitamente en la lista de amigos del módulo que define la función move-language.github.io.
Este es un ejemplo de cómo usar estos modificadores de visibilidad:
address 0x42 {
module m {
friend 0x42::n; // friend declaration
public(friend) fun foo(): u64 { 0 }
fun calls_foo(): u64 { foo() } // valid
}
module n {
fun calls_m_foo(): u64 {
0x42::m::foo() // valid
}
}
module other {
fun calls_m_foo(): u64 {
0x42::m::foo() // ERROR!
// ^^^^^^^^^^^^ 'foo' can only be called from a 'friend' of module '0x42::m'
}
}
}
script {
fun calls_m_foo(): u64 {
0x42::m::foo() // ERROR!
// ^^^^^^^^^^^^ 'foo' can only be called from a 'friend' of module '0x42::m'
}
}
En este ejemplo, la función foo solo se puede llamar desde el módulo n porque se declara como función pública (amiga) en el módulo m y n aparece como amiga de m.
Sabes la respuesta?
Inicie sesión y compártalo.