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