Saltearse al contenido

¿Cómo puedo escribir Scripts de Move?

Los scripts de Move pueden ser escritos en conjunto con contratos de Move, pero es altamente sugerido usar un paquete de Move separado para esto. Esto hará más fácil para ti determinar qué archivo de bytecode viene del script.

El paquete necesita un Move.toml y un directorio sources, similar a los módulos de código.

Por ejemplo, podemos tener una estructura de directorio como:

  • Directorymy_project/
    • Move.toml
    • Directorysources/
      • my_script.move

Los scripts pueden ser escritos exactamente igual que los módulos en Aptos. Los imports pueden ser usados para cualquier dependencia en el archivo Move.toml, y todas las funciones públicas, incluyendo funciones de entrada, pueden ser llamadas desde el contrato. Hay algunas limitaciones:

  • Debe haber solo una función en el contrato, se compilará a ese nombre.
  • Los argumentos de entrada solo pueden ser uno de [u8, u16, u32, u64, u256, address, bool, signer, &signer, vector<u8>]. No hay soporte para vectores de otros tipos, o estructuras.

Un ejemplo a continuación:

script {
use std::signer;
use aptos_framework::coin;
use aptos_framework::aptos_account;
fun transfer_half<Coin>(caller: &signer, receiver_address: address) {
// Recuperar el balance del llamador
let caller_address: address = signer::address_of(caller);
let balance: u64 = coin::balance<Coin>(caller_address);
// Enviar la mitad al receptor
let half = balance / 2;
aptos_account::transfer_coins<Coin>(caller, receiver_address, half);
}
}

Para detalles más específicos ver: Move Book sobre Scripts