@swaptoshi/dex-module
Version:
Klayr decentralized exchange (dex) on-chain module
40 lines • 2.24 kB
JavaScript
;
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