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