UNPKG

@swaptoshi/dex-module

Version:

Klayr decentralized exchange (dex) on-chain module

37 lines 1.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.executeSwapByTransfer = executeSwapByTransfer; const pool_1 = require("../../stores/pool"); const periphery_1 = require("../../stores/library/periphery"); const context_1 = require("../../stores/context"); const isSwapByTransfer_1 = require("./isSwapByTransfer"); async function executeSwapByTransfer(ctx) { const check = await isSwapByTransfer_1.isSwapByTransfer.bind(this)(ctx, ctx.transaction); if (check.status && check.payload) { const poolStore = this.stores.get(pool_1.PoolStore); if (await poolStore.has(ctx, check.payload.recipientAddress)) { const _ctx = { ...(0, context_1.mutableHookSwapContext)(ctx), senderAddress: 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: _ctx.context.transaction.senderAddress, amountIn: check.payload.amount.toString(), amountOutMinimum: '0', sqrtPriceLimitX96: '0', deadline: _ctx.context.header.timestamp.toString(), }); } } } //# sourceMappingURL=executeSwapByTransfer.js.map