soroswap-utils
Version:
Utilities for interacting with Soroswap, the decentralized exchange (DEX) on Soroban, which is the smart contracts platform of the Stellar network.
73 lines (60 loc) • 2.78 kB
text/typescript
/* eslint-disable @typescript-eslint/no-non-null-assertion */
import {
getEventsFromSoroswapContracts,
getLiquidityPoolAddresses,
getLiquidityPoolData,
getSoroswapRouterEvents,
initializeSoroswapUtils,
listCertifiedAssets,
type RouterEvent,
subscribeToSoroswapPair,
} from "./index";
import { getColoredMessage } from "./utils";
// eslint-disable-next-line max-statements, unicorn/prefer-top-level-await
void (async () => {
initializeSoroswapUtils({
assets: {
url: process.env.SOROSWAP_ASSETS_URL!,
},
contracts: {
factory: process.env.SOROSWAP_FACTORY_CONTRACT!,
router: process.env.SOROSWAP_ROUTER_CONTRACT!,
},
mercury: {
apiKey: process.env.MERCURY_API_KEY!,
backendEndpoint: process.env.MERCURY_BACKEND_ENDPOINT!,
graphqlEndpoint: process.env.MERCURY_GRAPHQL_ENDPOINT!,
},
rpc: {
url: process.env.SOROBAN_RPC_SERVER!,
wallet: process.env.STELLAR_WALLET!,
},
});
try {
const { assets } = await listCertifiedAssets();
const pools = await getLiquidityPoolAddresses();
const allRouterEvents = (await getSoroswapRouterEvents()) as RouterEvent[];
console.log(getColoredMessage("cyan", `Found ${assets.length} Soroswap assets`));
console.log(getColoredMessage("cyan", `Found ${pools.length} liquidity pools`));
console.log(getColoredMessage("cyan", `Found ${allRouterEvents.length} router events`));
const { 0: firstPool } = pools;
const poolData = await getLiquidityPoolData(firstPool as string);
console.log(getColoredMessage("green", "\nFirst pool details:"));
console.log(`Address: ${poolData.poolContract}`);
console.log(`First token: ${poolData.firstToken.contract}`);
console.log(`Second token: ${poolData.secondToken.contract}`);
console.log(`Current reserves: ${poolData.reserves[0]}/${poolData.reserves[1]}`);
console.log(`Current constant product: ${poolData.constantProductOfReserves}`);
console.log(getColoredMessage("yellow", "\nSubscribing to pool events..."));
await subscribeToSoroswapPair(firstPool as string);
console.log(getColoredMessage("magenta", "\nFetching recent events:"));
const events = await getEventsFromSoroswapContracts([{ pair: [firstPool as string] }]);
// eslint-disable-next-line @typescript-eslint/no-magic-numbers
events.slice(0, 3).forEach((event) => {
console.log(`\n${event.eventType.toUpperCase()}:`);
console.log(event);
});
} catch (error) {
console.error(getColoredMessage("red", "\nError:"), error);
}
})();