Pagos con rutas
En un pago con ruta, el activo recibido es diferente del activo enviado. En lugar de que la operación transfiera activos directamente de una cuenta a otra, los pagos con rutas cruzan a través del SDEX y/o Fondos de Liquidez antes de llegar a la cuenta de destino. Para que el pago con ruta tenga éxito, debe existir una oferta DEX o un camino de exchange mediante Fondos de Liquidez. A veces puede ser necesario realizar varios saltos de conversión para que tenga éxito.
Por ejemplo:
La Cuenta A vende XLM → [compra XLM / vende ETH → compra ETH / vende BTC → compra BTC / vende USDC] → La Cuenta B recibe USDC
Es posible que los pagos con rutas fallen si no existen rutas de exchange viables.
Para más información sobre el Stellar Decentralized Exchange y los Fondos de Liquidez, consulta nuestra Liquidez en Stellar: Entrada de Enciclopedia sobre SDEX y Fondos de Liquidez.
Operaciones
Los pagos con rutas utilizan las operaciones Path Payment Strict Send o Path Payment Strict Receive.
Path Payment Strict Send
Permite a un usuario especificar la cantidad del activo a enviar. La cantidad recibida variará según las ofertas en los libros de órdenes y/o Fondos de Liquidez.
Path Payment Strict Receive
Permite a un usuario especificar la cantidad del activo recibido. La cantidad enviada variará según las ofertas en los libros de órdenes y Fondos de Liquidez.
Pagos con rutas - más información
- Los pagos con rutas no permiten que las ofertas intermedias provengan de la cuenta de origen, ya que esto resultaría en una tasa de exchange peor. Debes dividir el pago con ruta en dos pagos con rutas más pequeños o asegurarte de que las ofertas de la cuenta de origen no estén en la parte superior del libro de órdenes.
- Los saldos se liquidan al final de la operación.
- Esto es especialmente importante cuando (
Destination, Destination Asset) == (Source, Send Asset
) ya que proporciona una funcionalidad equivalente a obtener un préstamo sin intereses durante la duración de la operación.
- Esto es especialmente importante cuando (
Destination min
es una medida de protección, que te permite especificar un límite inferior para una conversión aceptable. Si las ofertas en los libros de órdenes no son lo suficientemente favorables para que la operación entregue esa cantidad, la operación fallará.
Ejemplo
Primero, asegúrate de que el receptor tenga establecida una trustline para el activo que recibirá. En este ejemplo, usaremos USDC como el activo recibido. El remitente enviará XLM, que será convertido a USDC mediante la operación de pago con ruta.
import {
Horizon,
Asset,
Keypair,
TransactionBuilder,
Networks,
BASE_FEE,
Operation,
Memo,
} from "@stellar/stellar-sdk";
const USDC_ISSUER = "GBBD47IF6LWK7P7MDEVSCWR7DPUWV3NY3DTQEVFL4NAT4AQH3ZLLFLA5"; // USDC issuer on Stellar Testnet
const USDC_ASSET = new Asset("USDC", USDC_ISSUER); // USDC asset on Stellar Testnet
const RECEIVER_SECRET = "S..."; // Receiver's secret key
const SENDER_SECRET = "S..."; // Sender's secret key
const horizonServer = new Horizon.Server("https://horizon-testnet.stellar.org");
// Create a USDC trustline for the receiver
const receiverKP = Keypair.fromSecret(RECEIVER_SECRET);
let account = await horizonServer.loadAccount(receiverKP.publicKey());
let transaction = new TransactionBuilder(account, {
fee: BASE_FEE * 100,
networkPassphrase: Networks.TESTNET,
})
.addOperation(
Operation.changeTrust({
asset: USDC_ASSET,
limit: "10",
}),
)
.addMemo(Memo.text("Trusting USDC"))
.setTimeout(30)
.build();
transaction.sign(receiverKP);
const resp = await SERVER.submitTransaction(transaction);
console.log("resp", resp);
Ahora enviemos un pago con ruta del remitente al receptor, convirtiendo XLM a USDC.
// Use path payment to send XLM from the receiver to the sender, who receives USDC
let senderKP = Keypair.fromSecret(SENDER_SECRET);
let account = await horizonServer.loadAccount(senderKP.publicKey());
let transaction = new TransactionBuilder(account, {
fee: BASE_FEE * 100,
networkPassphrase: Networks.TESTNET,
})
.addOperation(
Operation.pathPaymentStrictReceive({
sendAsset: Asset.native(), // Sending XLM
sendMax: "10", // Maximum amount of XLM to send
destAsset: USDC_ASSET, // Receiving USDC
destAmount: "1", // Amount of USDC to receive
destination: receiverKP.publicKey(), // Receiver's public key
}),
)
.addMemo(Memo.text("XLM to USDC"))
.setTimeout(30)
.build();
transaction.sign(senderKP);
const resp = await horizonServer.submitTransaction(transaction);
console.log("resp", resp);
Guías en esta categoría:
📄️ Crear una cuenta
Aprende sobre cómo crear cuentas Stellar, pares de llaves, financiamiento y conceptos básicos de las cuentas.
📄️ Enviar y recibir pagos
Aprende a enviar pagos y estar atento a los pagos recibidos en la red Stellar.
📄️ Cuentas canalizadas
Crea cuentas canalizadas para enviar transacciones a la red a una alta velocidad.
📄️ Saldos reclamables
Divide un pago en dos partes creando un saldo reclamable.
📄️ Recuperaciones
Usa las recuperaciones para quemar una cantidad específica de un activo habilitado para recuperación desde una trustline o un saldo reclamable.
📄️ Transacciones de suplemento de tarifa
Usa transacciones fee-bump para pagar las comisiones de transacción en nombre de otra cuenta sin volver a firmar la transacción.
📄️ Reservas patrocinadas
Utiliza las reservas patrocinadas para pagar las reservas base en nombre de otra cuenta.
📄️ Pagos con rutas
Enviar un pago donde el activo recibido sea diferente del activo enviado.
📄️ Cuentas agrupadas: cuentas muxed y memos
Usa cuentas muxed para diferenciar entre cuentas individuales dentro de una cuenta agrupada.
📄️ Instalar y desplegar un contrato inteligente con código
Instalar y desplegar un contrato inteligente con código.
📄️ Instalar WebAssembly (Wasm) bytecode usando código
Instala el Wasm del contrato usando js-stellar-sdk.
📄️ Invocar una función de contrato en una transacción Stellar utilizando SDKs
Usa el Stellar SDK para crear, simular y ensamblar una transacción.
📄️ guía del método RPC simulateTransaction
Guía de ejemplos y tutoriales de simulateTransaction.
📄️ Enviar una transacción a Stellar RPC utilizando el SDK de JavaScript
Utiliza un mecanismo de repetición para enviar una transacción al RPC.