Saltar al contenido principal

Cita

información

Esta guía está disponible en tres lenguajes de programación diferentes: Typescript, Kotlin y Flutter (Dart). Puedes cambiar la versión mostrada en cada página mediante los botones de arriba.

El estándar SEP-38 define una forma para que los anchors proporcionen citas para el exchange de un activo off-chain y un activo on-chain diferente, y viceversa. Las citas pueden ser indicativas o firmes. Cuándo se utiliza cada una se explica en las secciones a continuación.

Creando Objeto Sep-38

Comencemos creando un objeto sep38, que utilizaremos para todas las interacciones de SEP-38. La autenticación es opcional para estas solicitudes y depende de la implementación del anchor. Para nuestro ejemplo, la incluiremos.

La autenticación se realiza utilizando Sep-10, y añadimos el token de autenticación al objeto sep38.

const accountKp = ... // our account keypair

const auth = await anchor.sep10();
const authToken = await auth.authenticate({ accountKp });
const sep38 = anchor.sep38(authToken);

Obtener Información del Anchor

Primero, obtengamos información sobre el soporte del anchor para SEP-38. La respuesta indica qué activos on-chain de Stellar y activos off-chain están disponibles para el comercio.

const resp = await sep38.info();

Por ejemplo, una respuesta se verá así. Los identificadores de activos se describen a continuación en Formato de Identificación de Activos.

{
assets: [
{
asset: 'stellar:SRT:GCDNJUBQSX7AJWLJACMJ7I4BC3Z47BQUTMHEICZLE6MU4KQBRYG5JY6B'
},
{
asset: 'iso4217:USD',
country_codes: [Array],
sell_delivery_methods: [Array],
buy_delivery_methods: [Array]
}
]
}

Formato de Identificación de Activos

Antes de llamar a otros endpoints, debemos entender el esquema utilizado para identificar activos en este protocolo. El siguiente formato se utiliza:

<scheme>:<identifer>

Los valores de esquema actualmente aceptados son stellar para activos Stellar y iso4217 para monedas fiduciarias.

Por ejemplo, para identificar USDC en Stellar usaríamos:

stellar:USDC:GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN

Y para identificar USD fiduciario usaríamos:

iso4217:USD

Una explicación más detallada se puede encontrar en la especificación SEP-38.

Obtener Precios

Ahora obtenemos precios indicativos del anchor a cambio de un activo dado. Este es un precio indicativo. El precio real se calculará en el momento de la conversión una vez que el Anchor reciba los fondos de un usuario.

En nuestro ejemplo, obtenemos precios para vender 5 USD fiduciarios.

const resp = await sep38.prices({
sell_asset: "iso4217:USD",
sell_amount: "5",
});

La respuesta indica los precios de los activos para intercambiar el activo a la venta solicitado. Por ejemplo, una respuesta se verá como esto:

{
"buy_assets": [
{
"asset": "stellar:USDC:GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN",
"price": "5.42",
"decimals": 7
}
]
}

Obtener Precio

A continuación, obtenemos un precio indicativo para un cierto par.

Una vez más, este es un valor indicativo. El precio real se calculará en el momento de la conversión una vez que el Anchor reciba los fondos de un usuario.

Se debe proporcionar un valor de sellAmount o buyAmount, pero no ambos. Y context se refiere a para qué contexto SEP de Stellar se utilizará (es decir, sep6, sep24 o sep31).

const resp = await sep38.price({
sellAsset: "iso4217:USD",
buyAsset:
"stellar:SRT:GCDNJUBQSX7AJWLJACMJ7I4BC3Z47BQUTMHEICZLE6MU4KQBRYG5JY6B",
sellAmount: "5",
context: "sep6",
});

La respuesta indica información para intercambiar estos activos. Por ejemplo, una respuesta se verá así:

{ price: '1.18', sell_amount: '5.00', buy_amount: '4.24' }

Publicar Cita

Ahora obtenemos una cita firme del anchor. A diferencia de los endpoints anteriores, esta cita se almacena por el anchor durante un cierto período de tiempo. Mostraremos cómo podemos recuperar la cita nuevamente más tarde.

El cuerpo de la solicitud es similar a la llamada .price() que hicimos anteriormente.

const requestResp = await sep38.requestQuote({
sell_asset: "iso4217:USD",
buy_asset:
"stellar:SRT:GCDNJUBQSX7AJWLJACMJ7I4BC3Z47BQUTMHEICZLE6MU4KQBRYG5JY6B",
sell_amount: "5",
context: "sep6",
});

Sin embargo, ahora la respuesta da un id que podemos usar para identificar la cita. El campo expires_at nos dice cuánto tiempo esperará el anchor para recibir fondos por esta cita.

Una respuesta de ejemplo se verá así:

{
id: '019417b3-91ce-473a-929f-15e19470733a',
price: '0.81',
expires_at: '2024-01-03T20:34:48.190481Z',
sell_asset: 'iso4217:USD',
buy_asset: 'stellar:SRT:GCDNJUBQSX7AJWLJACMJ7I4BC3Z47BQUTMHEICZLE6MU4KQBRYG5JY6B',
sell_amount: '5.00',
buy_amount: '6.17'
}

Obtener Cita

Ahora obtengamos la cita solicitada anteriormente. Para ello, usamos el id de la respuesta .requestQuote().

const quoteId = requestResp.id;
const getResp = await sep38.getQuote(quoteId);

La respuesta debería coincidir con la proporcionada por .requestQuote() que hicimos anteriormente.