@quantara/sdk
Version:
JavaScript/TypeScript SDK for interacting with Quantara Protocol on Neura Testnet
43 lines (42 loc) • 1.92 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createShiftTxn = void 0;
const viem_1 = require("viem");
const abis_1 = require("../../../abis");
const contracts_1 = require("../../../configs/contracts");
const trade_1 = require("../../../utils/trade");
async function createShiftTxn(sdk, params) {
const chainId = sdk.chainId;
const exchangeRouter = (0, contracts_1.getContract)(chainId, "ExchangeRouter");
const shiftVaultAddress = (0, contracts_1.getContract)(chainId, "ShiftVault");
const minToMarketTokenAmount = (0, trade_1.applySlippageToMinOut)(params.allowedSlippage, params.minToMarketTokenAmount);
const multicall = [
{ method: "sendWnt", params: [shiftVaultAddress, params.executionFee] },
{ method: "sendTokens", params: [params.fromMarketTokenAddress, shiftVaultAddress, params.fromMarketTokenAmount] },
{
method: "createShift",
params: [
{
receiver: params.account,
callbackContract: viem_1.zeroAddress,
uiFeeReceiver: sdk.config.settings?.uiFeeReceiverAccount ?? viem_1.zeroAddress,
fromMarket: params.fromMarketTokenAddress,
toMarket: params.toMarketTokenAddress,
minMarketTokens: minToMarketTokenAmount,
executionFee: params.executionFee,
callbackGasLimit: 0n,
},
],
},
];
const encodedPayload = multicall.map((call) => (0, viem_1.encodeFunctionData)({
abi: abis_1.abis.ExchangeRouter,
functionName: call.method,
args: call.params,
}));
// Call the contract
await sdk.callContract(exchangeRouter, abis_1.abis.ExchangeRouter, "multicall", [encodedPayload], {
value: params.executionFee,
});
}
exports.createShiftTxn = createShiftTxn;