Invocar cadenas de llamadas Move con el Compositor de Scripts Dinámico
En la API básica solo puedes especificar una llamada a función de entrada por transacción. Los constructores avanzados pueden querer invocar múltiples funciones públicas de Move en una sola transacción. Esto ahora es posible con la nueva API scriptComposer
del generador de transacciones.
Aquí tienes un ejemplo de uso actualizado con el paquete independiente:
const tx = await BuildScriptComposerTransaction({ // Dirección del remitente sender: singleSignerED25519SenderAccount.accountAddress, builder: async (composer) => { // 1) Retira algunas monedas const coin = await composer.addBatchedCalls({ function: "0x1::coin::withdraw", functionArguments: [CallArgument.newSigner(0), 1], typeArguments: ["0x1::aptos_coin::AptosCoin"], });
// 2) Convierte Coin -> Fungible Asset const fungibleAsset = await composer.addBatchedCalls({ function: "0x1::coin::coin_to_fungible_asset", functionArguments: [coin[0]], // primer valor de retorno typeArguments: ["0x1::aptos_coin::AptosCoin"], });
// 3) Deposita el FA en el Primary Fungible Store await composer.addBatchedCalls({ function: "0x1::primary_fungible_store::deposit", functionArguments: [singleSignerED25519SenderAccount.accountAddress, fungibleAsset[0]], typeArguments: [], }); return composer; }, // Se requiere AptosConfig porque la transacción compuesta lee estado on-chain aptosConfig: new AptosConfig({ network: Network.TESTNET }),});
Detrás de escena, el SDK invoca un binario WASM para compilar la serie de llamadas Move en un CompiledScript
. Esto garantiza que la seguridad de tipos y habilidades de Move se respete durante la construcción. Para los usuarios del SDK, esto significa:
- seguridad de habilidades: a. Si el valor devuelto no tiene la habilidad Drop, el valor devuelto necesita ser consumido por llamadas posteriores. b. Si el valor devuelto no tiene la habilidad Copy, el valor devuelto solo puede ser pasado a llamadas posteriores una vez.
- El llamador necesitará asegurarse de que pase los valores correctos como argumentos a llamadas posteriores. En el ejemplo anterior,
0x1::coin::coin_to_fungible_asset
esperará un argumento deCoin<AptosCoin>
.
Esto implementa AIP-102