Proporcionar liquidez (v2)
Proporciona liquidez en STON.fi v2: depósitos de un solo lado con gestión automática de vault
Flujo de trabajo primero para mainnet
import { Client, dexFactory, toUnits } from "@ston-fi/sdk";
import { StonApiClient } from "@ston-fi/api";
const tonClient = new Client({
endpoint: "https://toncenter.com/api/v2/jsonRPC",
});
const apiClient = new StonApiClient();
const userWalletAddress = "<su dirección de billetera>";
const tokenA = { address: "<dirección del activo A o 'ton'>", decimals: 9 };
const tokenB = { address: "<dirección del activo B>", decimals: 9 };
const amountA = "10"; // cantidad legible por humanos (p. ej. "10")
const amountB = "5"; // cantidad legible por humanos para el segundo token
const slippageTolerance = "0.001";
// Descubra los pools existentes para el par. Si no se encuentra ninguno, estamos creando un nuevo pool.
const [poolInfo] = await apiClient.getPoolsByAssetPair({
asset0Address: tokenA.address,
asset1Address: tokenB.address,
});
const provisionType = poolInfo ? "Balanced" : "Initial"; // o "Arbitrary" para proporciones manuales
const simulationInput: Parameters<StonApiClient["simulateLiquidityProvision"]>[0] = {
tokenA: tokenA.address,
tokenB: tokenB.address,
provisionType,
slippageTolerance,
walletAddress: userWalletAddress,
...(poolInfo ? { poolAddress: poolInfo.address } : {}),
};
if (provisionType === "Initial") {
simulationInput.tokenAUnits = toUnits(amountA, tokenA.decimals).toString();
simulationInput.tokenBUnits = toUnits(amountB, tokenB.decimals).toString();
} else if (provisionType === "Balanced") {
// Aporte **solo** un lado; la API calcula la cantidad correspondiente para el otro token.
simulationInput.tokenAUnits = toUnits(amountA, tokenA.decimals).toString();
} else {
// "Arbitrary" – proporcione cualquier proporción. Para hacerlo de un solo lado, establezca una de las cantidades en "0".
simulationInput.tokenAUnits = toUnits(amountA, tokenA.decimals).toString();
simulationInput.tokenBUnits = toUnits(amountB, tokenB.decimals).toString();
}
const simulationResult = await apiClient.simulateLiquidityProvision(simulationInput);
// 2. Los metadatos del router vienen con el resultado de la simulación
const { router: routerInfo } = simulationResult;
const dexContracts = dexFactory(routerInfo);
// 3. Abra el contrato del router
const router = tonClient.open(
dexContracts.Router.create(routerInfo.address)
);
// Ayudante opcional cuando TON forma parte de la provisión
const proxyTon = dexContracts.pTON.create(routerInfo.ptonMasterAddress);Interpretación de los resultados de la simulación
Generación de mensajes de transacción
Provisiones en testnet (configuración manual)
Última actualización