@orca-so/whirlpools-sdk
Version:
Typescript SDK to interact with Orca's Whirlpool program.
84 lines • 3.94 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.TokenMintTypes = void 0;
exports.getTokenMintsFromWhirlpools = getTokenMintsFromWhirlpools;
exports.resolveAtaForMints = resolveAtaForMints;
exports.addNativeMintHandlingIx = addNativeMintHandlingIx;
const common_sdk_1 = require("@orca-so/common-sdk");
const spl_token_1 = require("@solana/spl-token");
const web3_js_1 = require("@solana/web3.js");
const __1 = require("..");
const txn_utils_1 = require("./txn-utils");
var TokenMintTypes;
(function (TokenMintTypes) {
TokenMintTypes["ALL"] = "ALL";
TokenMintTypes["POOL_ONLY"] = "POOL_ONLY";
TokenMintTypes["REWARD_ONLY"] = "REWARDS_ONLY";
})(TokenMintTypes || (exports.TokenMintTypes = TokenMintTypes = {}));
function getTokenMintsFromWhirlpools(whirlpoolDatas, mintTypes = TokenMintTypes.ALL) {
let hasNativeMint = false;
const mints = Array.from(whirlpoolDatas.reduce((accu, whirlpoolData) => {
if (whirlpoolData) {
if (mintTypes === TokenMintTypes.ALL ||
mintTypes === TokenMintTypes.POOL_ONLY) {
const { tokenMintA, tokenMintB } = whirlpoolData;
if (!common_sdk_1.TokenUtil.isNativeMint(tokenMintA)) {
accu.add(tokenMintA.toBase58());
}
else {
hasNativeMint = true;
}
if (!common_sdk_1.TokenUtil.isNativeMint(tokenMintB)) {
accu.add(tokenMintB.toBase58());
}
else {
hasNativeMint = true;
}
}
if (mintTypes === TokenMintTypes.ALL ||
mintTypes === TokenMintTypes.REWARD_ONLY) {
const rewardInfos = whirlpoolData.rewardInfos;
rewardInfos.forEach((reward) => {
if (common_sdk_1.TokenUtil.isNativeMint(reward.mint)) {
hasNativeMint = true;
}
if (__1.PoolUtil.isRewardInitialized(reward)) {
accu.add(reward.mint.toBase58());
}
});
}
}
return accu;
}, new Set())).map((mint) => new web3_js_1.PublicKey(mint));
return {
mintMap: mints,
hasNativeMint,
};
}
async function resolveAtaForMints(ctx, params) {
const { mints, receiver, payer, accountExemption } = params;
const receiverKey = receiver ?? ctx.wallet.publicKey;
const payerKey = payer ?? ctx.wallet.publicKey;
const resolvedAtaResults = await (0, common_sdk_1.resolveOrCreateATAs)(ctx.connection, receiverKey, mints.map((tokenMint) => {
return { tokenMint };
}), async () => accountExemption, payerKey, undefined, ctx.accountResolverOpts.allowPDAOwnerAddress, ctx.accountResolverOpts.createWrappedSolAccountMethod);
const { resolveAtaIxs, resolvedAtas } = resolvedAtaResults.reduce((accu, curr) => {
const { address, ...ix } = curr;
accu.resolvedAtas.push(address);
if (ix.instructions.length) {
accu.resolveAtaIxs.push(ix);
}
return accu;
}, { resolvedAtas: [], resolveAtaIxs: [] });
const affliatedTokenAtaMap = (0, txn_utils_1.convertListToMap)(resolvedAtas, mints.map((mint) => mint.toBase58()));
return {
ataTokenAddresses: affliatedTokenAtaMap,
resolveAtaIxs,
};
}
function addNativeMintHandlingIx(txBuilder, affliatedTokenAtaMap, destinationWallet, accountExemption, createAccountMethod) {
let { address: wSOLAta, ...resolveWSolIx } = common_sdk_1.TokenUtil.createWrappedNativeAccountInstruction(destinationWallet, common_sdk_1.ZERO, accountExemption, undefined, undefined, createAccountMethod);
affliatedTokenAtaMap[spl_token_1.NATIVE_MINT.toBase58()] = wSOLAta;
txBuilder.prependInstruction(resolveWSolIx);
}
//# sourceMappingURL=whirlpool-ata-utils.js.map