Saltar al contenido principal

Cita

información

Esta guía está disponible en cuatro lenguajes de programación diferentes: Typescript, Kotlin, Flutter (Dart) y Swift. 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 ancla

Primero, obtengamos información sobre el soporte del ancla para SEP-38. La respuesta proporciona qué activos en cadena de Stellar y activos fuera de cadena 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. Se utiliza el siguiente formato:

<scheme>:<identifer>

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

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

stellar:USDC:GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN

Y para identificar el USD fiduciario utilizaríamos:

iso4217:USD

Se puede encontrar una explicación adicional en especificación SEP-38.

Obtener precios

Ahora obtengamos precios indicativos del ancla 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 ancla reciba los fondos de un usuario.

En nuestro ejemplo estamos obteniendo precios para vender 5 USD fiduciarios.

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

La respuesta proporciona los precios de los activos para intercambiar el activo de venta solicitado. Por ejemplo, una respuesta se verá así:

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

Obtener Precio

A continuación, obtengamos un precio indicativo para un par determinado.

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 ancla reciba los fondos de un usuario.

Debe proporcionarse un valor de sellAmount o buyAmount, pero no ambos. Y context se refiere a qué contexto de 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 proporciona 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 cotización

Ahora obtengamos una cotización firme del ancla. A diferencia de los endpoints anteriores, esta cotización es almacenada por el ancla durante un cierto período de tiempo. Mostraremos cómo podemos recuperar la cotización 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 proporciona un id que podemos utilizar para identificar la cotización. El campo expires_at nos indica cuánto tiempo el ancla esperará para recibir fondos por esta cotización.

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 cotización

Ahora obtengamos la cotización solicitada anteriormente. Para hacerlo, utilizamos el id de la respuesta de .requestQuote().

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

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