Surf: Seguridad de Tipos TypeScript para Contratos Move
¿Qué es Surf?
Sección titulada «¿Qué es Surf?»Surf es una librería de TypeScript construida sobre el SDK de TypeScript de Aptos y el adaptador de wallet que proporciona seguridad de tipos estática para tus contratos Move infiriendo los tipos desde el ABI (Interfaz Binaria de Aplicación) del contrato. Te permite detectar errores de tipo en tiempo de compilación en lugar de en tiempo de ejecución. La mayoría de los IDEs de TypeScript proporcionarán advertencias automáticamente si intentas acceder a campos que no existen o proporcionas tipos de entrada incorrectos.
-
Paso 1
Primero, descarga el ABI del contrato Move y guárdalo en un archivo TypeScript. En este caso, llamamos al archivo
abi.ts
en la carpetasrc/utils
.#! /bin/bash# reemplaza con la red donde vive tu contratoNETWORK=testnet# reemplaza con la dirección de tu contratoCONTRACT_ADDRESS=0x12345# reemplaza con el nombre de tu módulo, cada archivo .move excepto los scripts move tiene module_address::module_name {}MODULE_NAME=fungible_asset_launchpad# guarda el ABI en un archivo TypeScriptecho "export const ABI = $(curl https://fullnode.$NETWORK.aptoslabs.com/v1/accounts/$CONTRACT_ADDRESS/module/$MODULE_NAME | sed -n 's/.*\"abi\":\({.*}\).*}$/\1/p') as const" > abi.tsVentana de terminal # reemplaza con la red donde vive tu contrato$NETWORK = "testnet"# reemplaza con la dirección de tu contrato$CONTRACT_ADDRESS = "0x1"# reemplaza con el nombre de tu módulo, cada archivo .move excepto los scripts move tiene module_address::module_name {}$MODULE_NAME = "fungible_asset_launchpad"# guarda el ABI en un archivo TypeScriptInvoke-RestMethod -Uri "https://fullnode.$NETWORK.aptoslabs.com/v1/accounts/$CONTRACT_ADDRESS/module/$MODULE_NAME" |Select-Object -ExpandProperty abi | ConvertTo-Json -Compress |Foreach-Object { "export const ABI = $_ as const" } |Out-File -FilePath "abi.ts" -
Paso 2
Con el ABI, puedes usar Surf como una capa sobre el cliente
Aptos
del SDK de TypeScript de Aptos al interactuar con contratos Move. Para operaciones no relacionadas con contratos, aún deberás usarAptos
.import { createSurfClient } from '@thalalabs/surf';import { Aptos, AptosConfig, NETWORK } from "@aptos-labs/ts-sdk";import { ABI } from "./abi";// Primero, crea un cliente de Aptos, asegúrate de que la red sea la misma donde vive el contratoexport const aptos = new Aptos(new AptosConfig({ network: Network.DEVNET }));// Segundo, crea un SurfClient con el cliente de Aptos y el ABIexport const surfClient = createSurfClient(aptos).useABI(ABI);// Usa Surf para ejecutar una función de entradaconst result = await surfClient.entry.transfer({functionArguments: ['0x1', 1],typeArguments: ['0x1::aptos_coin::AptosCoin'],account: Account.fromPrivateKey(...),});// Usa Surf para consultar una función de vistaconst [balance] = await surfClient.view.balance({functionArguments: ['0x1'],typeArguments: ['0x1::aptos_coin::AptosCoin'],});
Recursos
Sección titulada «Recursos»- Surf GitHub
- Un ejemplo simple de Next.js demostrando Surf
- Un ejemplo de un launchpad de activo fungible usando Surf: Este ejemplo es parte de la guía Solana a Aptos en Aptos Learn, puedes probarlo aquí y leer el tutorial completo aquí.
Créditos
Sección titulada «Créditos»Surf es construido por Thala Labs, un proyecto del ecosistema Aptos, y mantenido junto con la comunidad de Aptos.
Feedback
Sección titulada «Feedback»Si tienes comentarios o preguntas, por favor abre un issue en el GitHub de Surf.