Cita
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.
- TypeScript
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.
- TypeScript
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.
- TypeScript
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
).
- TypeScript
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.
- TypeScript
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()
.
- TypeScript
const quoteId = requestResp.id;
const getResp = await sep38.getQuote(quoteId);
La respuesta debería coincidir con la proporcionada por .requestQuote()
que hicimos anteriormente.