Node.js
Primeros pasos con el SDK de Omniston en Node.js: integración del lado del servidor para trading automatizado y bots
Primeros pasos
Este paquete actúa como un envoltorio de TypeScript sobre Ston.fi API del protocolo Omniston y proporciona observables al estilo de RxJS sobre la conexión de la API WebSocket
📦 Paquete NPM: @ston-fi/omniston-sdk
Instalación
vía NPM
npm install @ston-fi/omniston-sdkvía YARN
yarn add @ston-fi/omniston-sdkvía PNPM
pnpm install @ston-fi/omniston-sdkCrear una instancia
Crea una instancia de Omniston, especificando la URL de la API.
import { Omniston } from "@ston-fi/omniston-sdk";
const omniston = new Omniston({
apiUrl: "wss://omni-ws.ston.fi",
});El constructor toma los siguientes parámetros:
client
ApiClient | undefined
Opcional. Proporcione esto si desea sobrescribir el cliente de API predeterminado. Por defecto, será un ApiClient usando ReconnectingTransport
apiUrl
URL | string
URL de la API WebSocket de Omniston.
Ejemplo en sandbox (pruebas)
Si está desarrollando o probando su integración, use el entorno público de sandbox en lugar de producción.
Sandbox está destinado solo para desarrollo y pruebas de integración. No use sandbox en aplicaciones de producción.
Enviar una solicitud de cotización
Envía una solicitud de cotización para intercambiar un activo por otro activo.
Un QuoteRequest tiene las siguientes propiedades:
settlementMethods
SettlementMethod[]
Métodos admitidos de liquidación del swap
askAssetAddress
Address
Dirección específica de la blockchain del activo ask
bidAssetAddress
Address
Dirección específica de la blockchain del activo bid
amount
{ bidUnits: string } | { askUnits: string }
Ya sea la cantidad del activo bid o del activo ask
amount.bidUnits
string
La cantidad del activo bid que el trader desea pagar, incluidas todas las comisiones, en unidades del activo base
amount.askUnits
string
La cantidad del activo ask que el trader desea obtener después de todas las comisiones, en unidades del activo base
referrerAddress
Address | undefined
La dirección del referidor que recibirá las comisiones
referrerFeeBps
number | undefined
La cantidad de comisiones requerida por el referidor en puntos básicos (1/10000 o 0,01%)
settlementParams
RequestSettlementParams | undefined
Parámetros adicionales del RFQ relacionados con la liquidación. Consulte la tabla de abajo.
RequestSettlementParams
max_price_slippage_bps
number | undefined
Deslizamiento máximo del precio, en puntos básicos (0,01%). Por ejemplo, 100 = 1% de deslizamiento. Establézcalo en 0 para usar el deslizamiento recomendado.
gasless_settlement
GaslessSettlement | undefined
Preferencia de liquidación sin gas. Opciones: GASLESS_SETTLEMENT_PROHIBITED (sin gasless), GASLESS_SETTLEMENT_POSSIBLE (permitir gasless), GASLESS_SETTLEMENT_REQUIRED (requiere gasless).
max_outgoing_messages
number | undefined
Número máximo de mensajes salientes admitidos por la cartera. Para la blockchain TON, el valor predeterminado es 4 si se omite.
flexible_referrer_fee
boolean | undefined
Establezca en true para permitir que los resolvers reduzcan la comisión efectiva del referidor por debajo de referrerFeeBps al ofrecer una mejor tasa. El valor predeterminado es false. En los SDK, páselo como flexibleReferrerFee. Consulte Comisión flexible del referidor para más detalles.
Nota: Algunos parámetros en RequestSettlementParams solo pueden ser relevantes para ciertas blockchains o ciertos métodos de liquidación. Si su método de liquidación o cartera no los requiere, puede omitarlos o establecerlos en valores predeterminados.
Opciones de liquidación sin gas:
GASLESS_SETTLEMENT_PROHIBITED: Deshabilita completamente la liquidación sin gasGASLESS_SETTLEMENT_POSSIBLE: Permite la liquidación sin gas si está disponible (recomendado)GASLESS_SETTLEMENT_REQUIRED: Fuerza la liquidación sin gas (fallará si no está disponible)
El servidor devuelve Observable<QuoteResponseEvent>, que es un flujo de actualizaciones de cotización.
Un QuoteResponseEvent puede ser uno de los siguientes:
{ type: "ack"; rfqId: string; }- Confirmación de que se recibió la solicitud de cotización{ type: "quoteUpdated"; quote: Quote; rfqId: string; }- Una actualización de la cotización (incluye rfqId después de la confirmación){ type: "noQuote"; }{ type: "unsubscribed"; rfqId: string; }- Dado de baja del flujo de cotizaciones (incluye rfqId después de la confirmación)
Un Quote tiene las siguientes propiedades:
quoteId
string
ID de la cotización generada por la plataforma (32 caracteres)
resolverId
string
ID del resolver
resolverName
string
Nombre del resolver
bidAssetAddress
Address
Dirección específica de la blockchain del activo bid
askAssetAddress
Address
Dirección específica de la blockchain del activo ask
bidUnits
string
La cantidad del activo bid que el trader debe pagar, incluidas todas las comisiones
askUnits
string
La cantidad del activo ask que el trader obtendrá después de todas las comisiones
referrerAddress
Address | undefined
La dirección del referidor que recibirá las comisiones
referrerFeeAsset
Address
El activo de las comisiones que recibirá el referidor
referrerFeeUnits
string
La cantidad de comisiones que recibirá el referidor (en unidades de referrerFeeAsset)
protocolFeeAsset
Address
El activo de las comisiones cobradas por el protocolo
protocolFeeUnits
string
La cantidad de comisiones cobradas por el protocolo (en unidades de protocolFeeAsset).
quoteTimestamp
number
La marca de tiempo (segundos UTC) de la cotización enviada por el resolver
tradeStartDeadline
number
Marca de tiempo máxima (segundos UTC) del inicio de la operación
gasBudget
string
La cantidad de presupuesto de gas para la operación
estimatedGasConsumption
string
Cantidad estimada de unidades de gas que se gastarán para realizar la operación
params
object | undefined
Varios parámetros específicos del método de liquidación. Consulte el código fuente para más detalles.
Construir una transacción
Ahora que tenemos una cotización, debemos solicitar al servidor que construya una transacción para iniciar la operación que el usuario pueda verificar y firmar.
El buildTransfer el método toma un TransactionRequest objeto como parámetro, que tiene las siguientes propiedades:
quote
Quote
La cotización válida recibida de Omniston.requestForQuote
sourceAddress
Address
La dirección en offerBlockchain que enviará la transacción inicial para iniciar la operación
destinationAddress
Address
La dirección en askBlockchain que recibirá el resultado de la operación
gasExcessAddress
Address | undefined
La dirección que recibirá el gas no gastado por la operación
refundAddress
Address | undefined
La dirección a la que se devolverán los fondos en caso de un fallo
useRecommendedSlippage
boolean | undefined
Si se debe usar el deslizamiento recomendado de la cotización. El valor predeterminado es false.
Firmar la transacción
Puede enviar messages a cualquier biblioteca de su elección. Eche un vistazo a nuestra guía para enviar transacciones con ejemplos de diferentes paquetes populares
Escuchar actualizaciones del estado de la operación
Después de que el usuario haya firmado e iniciado la transacción, podemos rastrear el estado de la operación.
El trackTrade el método tiene los siguientes parámetros:
quoteId
string
ID de la cotización recibida de Omniston.requestFromQuote
traderWalletAddress
Address
La dirección de la cartera del trader que inició la transacción
outgoingTxHash
string
Hash de la transacción que inició la operación
Devuelve Observable<TradeStatus>. Para los distintos valores del estado de la operación, consulte el código fuente. Nos interesa el enum del resultado de la operación, que puede leerse del campo status.tradeSettled?.result? . El enum tiene los siguientes valores:
TRADE_RESULT_FULLY_FILLED
La operación se ha completado y ejecutado por completo.
TRADE_RESULT_PARTIALLY_FILLED
La operación se ha ejecutado parcialmente. Algo salió mal.
TRADE_RESULT_ABORTED
La operación ha sido abortada.
TRADE_RESULT_UNKNOWN
UNRECOGNIZED
Última actualización