Sesiones de Simulación de Transacciones
En los tutoriales anteriores, demostramos cómo puedes simular una transacción localmente, o reproducir una transacción pasada. Sin embargo, estos métodos solo funcionan para una única transacción.
Para simular múltiples transacciones en secuencia, necesitarás usar Sesiones de Simulación de Transacciones — una función avanzada del CLI que te permite crear un entorno local persistente que guarda y restaura estados entre ejecuciones, con el beneficio adicional de poder inspeccionar las salidas de las transacciones con facilidad.
Esto hace posible probar flujos de trabajo complejos — como despliegue de contratos, actualizaciones de recursos o interacciones de múltiples pasos.
Inicializando una Sesión
Sección titulada «Inicializando una Sesión»Puedes inicializar una sesión desde:
- Un génesis local limpio, para un entorno completamente local y aislado, o
- Un estado de red bifurcado (Devnet, Testnet o Mainnet), permitiéndote probar tus cambios contra datos del mundo real.
Independientemente del modo que elijas, la interfaz, los comandos y cómo se guardan los datos de sesión son exactamente iguales. Solo especifica tu modo preferido cuando inicialices la sesión.
Desde un Estado de Red Bifurcado
Sección titulada «Desde un Estado de Red Bifurcado»Con la bifurcación de red, puedes probar tu código Move usando datos de red en vivo — saldos, recursos y módulos publicados.
Para comenzar con un estado de red bifurcado, ejecuta:
aptos move sim init --path <RUTA_SESION> --network <RED> --api-key <TU_API_KEY>Aquí <RED> puede ser uno de los siguientes: devnet, testnet, mainnet, o una URL de fullnode personalizada.
La sesión almacenará todos sus datos en el directorio <RUTA_SESION> especificado.
Desde un Génesis Local Limpio
Sección titulada «Desde un Génesis Local Limpio»Para el desarrollo del día a día, a veces solo necesitas empezar desde cero — sin datos de red real necesarios. Esto es perfecto para simulación ad-hoc, pruebas sintéticas o integración continua.
Para comenzar con un génesis local limpio, ejecuta:
aptos move sim init --path <RUTA_SESION>Todo lo demás funciona igual — excepto que la simulación no tocará la red en absoluto, ya que todos los datos son locales.
Ejecutando simulaciones
Sección titulada «Ejecutando simulaciones»Una vez inicializada, puedes ejecutar transacciones contra tu sesión usando los comandos estándar de aptos move,
añadiendo el argumento --session para indicar qué sesión local usar.
Los comandos soportados incluyen:
runrun-scriptpublishviewcreate-object-and-publish-packageupgrade-object-packagedeploy-objectupgrade-objectcreate-resource-account-and-publish-package
También hay utilidades adicionales bajo aptos move sim para gestionar e inspeccionar sesiones.
fund: financiar una cuenta con una cantidad dada de APTview-resource: ver un recurso Moveview-resource-group: ver un grupo de recursos
Para ayuda más detallada, ejecuta aptos move sim --help.
Ejemplo de Flujo de Trabajo
Sección titulada «Ejemplo de Flujo de Trabajo»# 1. Financiar tu cuenta por defecto con 1 APT (para demostración)aptos move sim fund --session sess --account default --amount 100000000
# 2. Ejecutar una transacción de transferenciaaptos move run --session sess \ --function-id 0x1::aptos_account::transfer \ --args address:default u64:100
# 3. Consultar el número de secuencia de tu cuentaaptos move view --session sess \ --function-id 0x1::account::get_sequence_number \ --args address:default
# 4. Ver tu recurso Account en cadenaaptos move sim view-resource --session sess \ --account default \ --resource 0x1::account::Account
# 5. Ver un grupo de recursos (ej. tu almacén fungible)aptos move sim view-resource-group --session sess \ --account default \ --resource-group 0x1::object::ObjectGroup \ --derived-object-address 0xADe nuevo, todos los cambios de estado son locales y se almacenan bajo tu directorio de sesión.
Inspeccionando Datos de Sesión
Sección titulada «Inspeccionando Datos de Sesión»Cada Sesión de Simulación de Transacciones organiza sus datos en un árbol de directorios estructurado, facilitando la inspección de cada paso de tu simulación.
Así es como se ve la estructura para la sesión de ejemplo:
Directoriosess/
Directorio[0] fund (fungible)/
- summary.json
Directorio[1] execute 0x1::aptos_account::transfer/
- events.json
- summary.json
- write_set.json
Directorio[2] view 0x1::account::get_sequence_number/
- summary.json
Directorio[3] view resource 0xdbcb…::0x1::account::Account/
- summary.json
Directorio[4] view resource group 0x20ce…::0x1::object::ObjectGroup/
- summary.json
- config.json
- delta.json
Salidas de Ejemplo
Sección titulada «Salidas de Ejemplo»[1] execute 0x1::aptos_account::transfer/summary.json
{ "execute_transaction": { "status": { "Keep": "Success" }, "gas_used": 498, "fee_statement": { "total_charge_gas_units": 498, "execution_gas_units": 4, "io_gas_units": 3, "storage_fee_octas": 49160, "storage_fee_refund_octas": 0 } }}[1] execute 0x1::aptos_account::transfer/events.json
[ { "V2": { "type_tag": "0x1::fungible_asset::Withdraw", "event_data": { "store": "20ce9f242351eae77cae7eb27e7e55f798e6c3b3528fcbb325bccea103e53ff9", "amount": 100 } } }, { "V2": { "type_tag": "0x1::fungible_asset::Deposit", "event_data": { "store": "20ce9f242351eae77cae7eb27e7e55f798e6c3b3528fcbb325bccea103e53ff9", "amount": 100 } } }, { "V2": { "type_tag": "0x1::transaction_fee::FeeStatement", "event_data": { "total_charge_gas_units": 498, "execution_gas_units": 4, "io_gas_units": 3, "storage_fee_octas": 49160, "storage_fee_refund_octas": 0 } } }]Planes Futuros
Sección titulada «Planes Futuros»Estamos trabajando en añadir más funciones a las Sesiones de Simulación de Transacciones, como:
- Integración del Perfilador de Gas
- Mejor rendimiento
- Soporte para instantáneas y reversión