soroswap-utils
Version:
Utilities for interacting with Soroswap, the decentralized exchange (DEX) on Soroban, which is the smart contracts platform of the Stellar network.
109 lines (95 loc) • 3.26 kB
text/typescript
// We disable this rule because we don't control the names of the events coming
// from the network.
/* eslint-disable @typescript-eslint/naming-convention */
import type { Asset } from "./assets";
import type { BaseEvent, BaseRawEvent, RouterEventType } from "./events-common";
interface BaseRawRouterEvent extends BaseRawEvent {
readonly topic1: "SoroswapRouter";
readonly topic2: RouterEventType;
readonly topic3: never;
readonly topic4: never;
}
interface RawRouterInitEvent extends BaseRawRouterEvent {
readonly factory: string;
readonly topic2: "init";
}
interface RawRouterLiquidityEvent extends BaseRawRouterEvent {
readonly amount_a: string;
readonly amount_b: string;
readonly liquidity: string;
readonly pair: string;
readonly to: string;
readonly token_a: string;
readonly token_b: string;
readonly topic2: "add" | "remove";
}
interface RawRouterSwapEvent extends BaseRawRouterEvent {
readonly amounts: readonly string[];
readonly path: readonly string[];
readonly to: string;
readonly topic2: "swap";
}
type RawRouterEvent = RawRouterInitEvent | RawRouterLiquidityEvent | RawRouterSwapEvent;
interface BaseRouterEvent extends BaseEvent {
readonly contractType: "SoroswapRouter";
readonly eventType: RouterEventType;
}
/**
* Event emitted when the Router contract is initialized; it contains a
* reference the Factory contract address creating it.
*/
interface RouterInitializedEvent extends BaseRouterEvent {
readonly eventType: "init";
readonly factoryAddress: string;
}
interface BaseLiquidityEvent extends BaseRouterEvent {
readonly firstToken: Asset;
readonly liquidityPoolAddress: string;
readonly recipientAddress: string;
readonly secondToken: Asset;
}
/**
* Event emitted when liquidity is added to a pair through the Router.
*/
interface RouterAddLiquidityEvent extends BaseLiquidityEvent {
readonly amountOfFirstTokenDeposited: bigint;
readonly amountOfSecondTokenDeposited: bigint;
readonly eventType: "add";
readonly liquidityPoolTokensMinted: bigint;
}
/**
* Event emitted when liquidity is removed from a pair through the Router.
*/
interface RouterRemoveLiquidityEvent extends BaseLiquidityEvent {
readonly amountOfFirstTokenWithdrawn: bigint;
readonly amountOfSecondTokenWithdrawn: bigint;
readonly eventType: "remove";
readonly liquidityPoolTokensBurned: bigint;
}
/**
* Event emitted when a token swap is executed through the Router.
* The path represents the sequence of tokens to swap through, where
* consecutive tokens form the pairs to trade through.
*/
interface RouterSwapEvent extends BaseRouterEvent {
readonly eventType: "swap";
readonly recipientAddress: string;
readonly tokenAmountsInSequence: readonly bigint[];
readonly tradedTokenSequence: readonly Asset[];
}
type RouterEvent =
| RouterAddLiquidityEvent
| RouterInitializedEvent
| RouterRemoveLiquidityEvent
| RouterSwapEvent;
export type {
RawRouterEvent,
RawRouterInitEvent,
RawRouterLiquidityEvent,
RawRouterSwapEvent,
RouterAddLiquidityEvent,
RouterEvent,
RouterInitializedEvent,
RouterRemoveLiquidityEvent,
RouterSwapEvent,
};