@effectai/sdk
Version:
Effect Network Javscript/Typescript SDK (for [https://effect.network](https://effect.network))
62 lines • 2.28 kB
JavaScript
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