Operaciones de Vault

Retira comisiones del vault en STON.fi v2: gestiona las comisiones del protocolo y las interacciones con el vault Esta sección contiene un ejemplo del SDK para realizar la retirada de comisiones desde el contrato vault

Sigue siempre el basado en API patrón: obtén los metadatos del router dinámicamente, construye instancias de contratos con dexFactory/routerFactory, y evita codificar las direcciones de forma fija. Esto mantiene el flujo de retiro compatible con futuras actualizaciones del router.

Flujo de trabajo en mainnet

  1. Descubre las bóvedas adeudadas al operador (por ejemplo, mediante stonApiClient.getWalletVaultsFee).

  2. Obtén los metadatos del router para cada bóveda usando getRouter(routerAddress).

  3. Construye los contratos del router dinámicamente con routerFactory y solicita la instancia de la bóveda.

  4. Genera los parámetros de la transacción de retiro.

import { Client, routerFactory } from "@ston-fi/sdk";
import { StonApiClient } from "@ston-fi/api";

const tonClient = new Client({
  endpoint: "https://toncenter.com/api/v2/jsonRPC",
  apiKey: process.env.TON_API_KEY,
});

const apiClient = new StonApiClient();

const userWalletAddress = "<su dirección de billetera>";

// Recupera las tarifas pendientes de las bóvedas para la cartera
const vaults = await apiClient.getWalletVaultsFee({
  walletAddress: userWalletAddress,
});

const messages = await Promise.all(
  vaults.map(async ({ routerAddress, assetAddress }) => {
    const routerMetadata = await apiClient.getRouter(routerAddress);
    const router = tonClient.open(routerFactory(routerMetadata));

    if (!("getVault" in router)) {
      throw new Error(
        `El contrato de bóveda no es compatible con la versión del router ${routerMetadata.majorVersion}.${routerMetadata.minorVersion}`,
      );
    }

    const tokenMinter =
      assetAddress === "EQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM9c"
        ? routerMetadata.ptonMasterAddress
        : assetAddress;

    const vault = tonClient.open(
      await router.getVault({
        tokenMinter,
        user: userWalletAddress,
      }),
    );

    const txParams = await vault.getWithdrawFeeTxParams({
      queryId: 12345,
    });

    return {
      address: txParams.to.toString(),
      amount: txParams.value.toString(),
      payload: txParams.body?.toBoc().toString("base64"),
    };
  }),
);

Envía los mensajes generados usando tu integración de cartera preferida (consulta la guía para enviar transacciones).

tarifas de TON: TON no tiene una dirección minter de jetton. Cuando assetAddress es igual a la dirección canónica de TON (EQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM9c), pasa routerMetadata.ptonMasterAddress como el tokenMinter para que el SDK resuelva el contrato proxy correcto.

Retiro en testnet (configuración manual)

Usa testnet solo cuando sea necesario. Como api.ston.fi apunta a mainnet, tendrás que codificar las direcciones de los contratos de forma fija, acuñar u obtener los jettons de testnet (por ejemplo, TesREED) y desplegar tú mismo cualquier contrato de soporte antes de intentar retirar las tarifas.

Este enfoque manual es estrictamente para pruebas. Vuelve al flujo impulsado por la API para los despliegues en mainnet. Para una visión general completa de las tarifas de referidos, consulta la guía de comisiones de referido de Omniston (aunque está centrada en Omniston, la sección enlazada detalla el proceso de referidos de DEX V2).

Última actualización