@rainfi/sdk
Version:
This package is used to interact with Rain.fi protocol on Solana
73 lines • 4.6 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.buyHadeswap = void 0;
const tools_utils_1 = require("../../tools.utils");
const buyNftFromPair_1 = require("./generatedHades/instructions/buyNftFromPair");
const constant_1 = require("../../constant");
const web3_js_1 = require("@solana/web3.js");
const liquidityProvisionOrder_1 = require("./generatedHades/accounts/liquidityProvisionOrder");
function buyHadeswap(args) {
return __awaiter(this, void 0, void 0, function* () {
const [fundsSolVault] = yield web3_js_1.PublicKey.findProgramAddress([constant_1.ENCODER.encode(constant_1.SOL_FUNDS_PREFIX), args.pair.toBuffer()], constant_1.HADESWAP_PROGRAM_ID);
const [nftsOwner] = yield web3_js_1.PublicKey.findProgramAddress([constant_1.ENCODER.encode(constant_1.NFTS_OWNER_PREFIX), args.pair.toBuffer()], constant_1.HADESWAP_PROGRAM_ID);
const [feeSolVault] = yield web3_js_1.PublicKey.findProgramAddress([constant_1.ENCODER.encode(constant_1.FEE_PREFIX), args.pair.toBuffer()], constant_1.HADESWAP_PROGRAM_ID);
const liquidityProvisionOrder = yield findLiquidityProvisionOrder(args.connection, args.pair, args.hadesPoolData);
const vaultTokenAccount = yield (0, tools_utils_1.getAtaForMint)(args.nftMint, args.signer);
const accounts = {
nftPairBox: args.nftPairBox,
pair: args.pair,
user: args.signer,
fundsSolVault,
nftsOwner,
feeSolVault,
nftMint: args.nftMint,
vaultNftTokenAccount: args.vaultNftTokenAccount,
nftUserTokenAccount: vaultTokenAccount,
assetReceiver: args.assetReceiver,
protocolFeeReceiver: args.protocolFeeReceiver,
associatedTokenProgram: constant_1.ASSOCIATED_TOKEN_PROGRAM_ID,
// liquidityProvisionOrder: liquidityProvisionOrder || nftsOwner,
// pNFT
editionInfo: args.editionInfo,
metadataInfo: args.metadataInfo,
ownerTokenRecord: args.ownerTokenRecord,
destTokenRecord: args.destTokenRecord,
instructions: args.instructions,
authorizationRulesProgram: args.authorizationRulesProgram,
metadataProgram: args.metadataProgram
};
return (0, buyNftFromPair_1.createBuyNftFromPairInstruction)(accounts, {
maxAmountToPay: args.maxAmountToPay,
skipFailed: args.skipFailed,
authorizationData: null,
payRoyalty: args.payRoyalty,
});
});
}
exports.buyHadeswap = buyHadeswap;
function findLiquidityProvisionOrder(connection, pair, hadesPoolData) {
return __awaiter(this, void 0, void 0, function* () {
const liquidityProvisionOrders = (yield (connection.getProgramAccounts(new web3_js_1.PublicKey('hadeK9DLv9eA7ya5KCTqSvSvRZeJC3JgD5a9Y3CNbvu'), { filters: [{ dataSize: 112 }, { memcmp: { offset: 8, bytes: pair.toBase58() } }] }))); //{memcmp: {offset: 41, bytes: base58.encode(new BN(0).toArrayLike(Buffer, 'le', 1))}}
let provisionOrder;
const isLiquidityProvision = hadesPoolData.pretty().pairType === 'PairType.LiquidityProvision';
const liquidityProvisionOrdersParsed = liquidityProvisionOrders.map(x => (Object.assign(Object.assign({}, liquidityProvisionOrder_1.LiquidityProvisionOrder.fromAccountInfo(x.account)[0].pretty()), { address: x.pubkey })));
if (isLiquidityProvision) {
provisionOrder = liquidityProvisionOrdersParsed.find((provisionOrder) => {
const sellMathCounter = parseInt(hadesPoolData.mathCounter.toString()) + 1;
return (provisionOrder.orderACounter === sellMathCounter ||
provisionOrder.orderBCounter === sellMathCounter);
});
}
return provisionOrder ? provisionOrder.address : null;
});
}
//# sourceMappingURL=hadeswap.js.map