UNPKG

@swaptoshi/dex-module

Version:

Klayr decentralized exchange (dex) on-chain module

40 lines 2.24 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.executeSwapByCrossTransfer = executeSwapByCrossTransfer; const pool_1 = require("../../stores/pool"); const periphery_1 = require("../../stores/library/periphery"); const context_1 = require("../../stores/context"); const isSwapByCrossTransfer_1 = require("./isSwapByCrossTransfer"); async function executeSwapByCrossTransfer(ctx) { var _a; const check = await isSwapByCrossTransfer_1.isSwapByCrossTransfer.bind(this)(ctx); if (check.status && check.payload) { const poolStore = this.stores.get(pool_1.PoolStore); if (await poolStore.has(ctx.getMethodContext(), check.payload.recipientAddress)) { try { const _ctx = (0, context_1.crossChainMethodSwapContext)(ctx, check.payload.recipientAddress); const key = periphery_1.PoolAddress.decodePoolAddress(check.payload.recipientAddress); if (key.token0.compare(check.payload.tokenID) !== 0 && key.token1.compare(check.payload.tokenID) !== 0) { throw new Error('transfering incompatible token to pool address'); } const tokenIn = key.token0.compare(check.payload.tokenID) === 0 ? key.token0 : key.token1; const tokenOut = key.token0.compare(check.payload.tokenID) === 0 ? key.token1 : key.token0; const router = await poolStore.getMutableRouter(_ctx); await router.exactInputSingle({ tokenIn, tokenOut, fee: key.fee, recipient: check.payload.senderAddress, amountIn: check.payload.amount.toString(), amountOutMinimum: '0', sqrtPriceLimitX96: '0', deadline: ctx.header.timestamp.toString(), }); } catch { await ((_a = this._tokenMethod) === null || _a === void 0 ? void 0 : _a.transfer(ctx.getMethodContext(), check.payload.recipientAddress, check.payload.senderAddress, check.payload.tokenID, check.payload.amount)); } } } } //# sourceMappingURL=executeSwapByCrossTransfer.js.map