UNPKG

@effectai/sdk

Version:

Effect Network Javscript/Typescript SDK (for [https://effect.network](https://effect.network))

62 lines 2.28 kB
import { Asset, } from "@wharfkit/antelope"; import { DefiBoxPairEnum } from "./getDefiBoxPair"; import { getPrice } from "./getPrice"; import { useEFXContracts } from "../../utils/state"; export const swapDirection = { EfxToUsdt: `${DefiBoxPairEnum.EosEfx}-${DefiBoxPairEnum.EosUsdt}`, UsdtToEfx: `${DefiBoxPairEnum.EosUsdt}-${DefiBoxPairEnum.EosEfx}`, }; export const buildSwapAction = (direction, actor, authorization, amount, tokenContract, efxPrice) => { if (!authorization || !authorization.length || !actor) { throw new Error("No authorization provided"); } if (!amount || !efxPrice) { throw new Error("Amount or EFX price not provided"); } const valueAmount = efxPrice * amount; const swapAction = { [swapDirection.EfxToUsdt]: { account: tokenContract, name: "transfer", authorization, data: { from: actor, to: "swap.defi", quantity: Asset.from(amount, "4,EFX"), memo: `swap,${valueAmount},${swapDirection.EfxToUsdt}`, }, }, [swapDirection.UsdtToEfx]: { account: "tethertether", name: "transfer", authorization, data: { from: actor, to: "swap.defi", quantity: Asset.from(amount, "4,USDT"), memo: `swap,${valueAmount},${swapDirection.UsdtToEfx}`, }, }, }; return swapAction[direction]; }; // TODO: Add throw error if balance too low export const swap = async ({ client, amount, direction }) => { try { if (!client.session) { throw new Error("Session is required for this method."); } const { transact, actor, authorization } = client.session; const { token: tokenContract } = useEFXContracts(client); const efxPrice = await getPrice(); const action = buildSwapAction(direction, actor, authorization, amount, tokenContract, efxPrice); if (!action) { throw new Error("Invalid swap action"); } return await transact({ action }); } catch (e) { throw new Error(`Error swapping: ${e}`); } }; //# sourceMappingURL=swap.js.map