UNPKG

@hubbleprotocol/farms-sdk

Version:
129 lines 6.28 kB
"use strict"; 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.initAllKlendUserObligationFarmsFromFileCommand = initAllKlendUserObligationFarmsFromFileCommand; const klend_sdk_1 = require("@kamino-finance/klend-sdk"); const web3_js_1 = require("@solana/web3.js"); const Farms_1 = require("../Farms"); const utils_1 = require("./utils"); const utils_2 = require("../utils"); const spl_token_1 = require("@solana/spl-token"); function initAllKlendUserObligationFarmsFromFileCommand(market, file) { return __awaiter(this, void 0, void 0, function* () { const admin = process.env.ADMIN; const rpc = process.env.RPC; const klendProgramId = new web3_js_1.PublicKey(process.env.KLEND_PROGRAM_ID || ""); const env = (0, utils_1.initializeClient)(rpc, admin, (0, utils_2.getFarmsProgramId)(rpc), false); const c = env.provider.connection; const farmsClient = new Farms_1.Farms(env.provider.connection); const shouldExecute = true; const lendingMarket = new web3_js_1.PublicKey(market); const kaminoMarket = yield klend_sdk_1.KaminoMarket.load(c, lendingMarket, 450, klendProgramId); if (!kaminoMarket) { throw new Error("Kamino market not found"); } let ixns = []; const fs = require("fs"); const rawData = fs.readFileSync(file, "utf8"); const obligationAddresses = JSON.parse(rawData); let startAt = 0; let stopAt = obligationAddresses.length; let i = startAt; for (let i = startAt; i < stopAt; i++) { const obligationAddress = obligationAddresses[i]; console.log(`Running through obligation ${i}/${obligationAddresses.length} ixns ${ixns.length}`); let obligation = (yield kaminoMarket.getObligationByAddress(new web3_js_1.PublicKey(obligationAddress))); if (!obligation) { continue; } for (const deposit of obligation.deposits) { const reserve = kaminoMarket.getReserveByMint(deposit[1].mintAddress); const reserveFarms = [ [reserve.state.farmCollateral, 0], // [reserve.state.farmDebt, 1], ]; for (const [reserveFarm, mode] of reserveFarms) { if (reserveFarm.equals(web3_js_1.PublicKey.default)) { continue; } // For this reserve, do both collateral and debt const userStatePda = getUserFarmPda(reserveFarm, obligation.obligationAddress, farmsClient.getProgramID()); // Only init if does not exist if (!(yield (0, utils_2.accountExist)(c, userStatePda))) { ixns.push(getInitIxn(env, obligation, kaminoMarket, reserve, reserveFarm, userStatePda, farmsClient.getProgramID(), mode)); } } } } // Execute these first console.log("Executing ixns", ixns.length); let promises = []; if (shouldExecute) { let batchSize = 5; let thisBatch = []; let maxConcurrent = 20; for (let i = 0; i < ixns.length; i++) { thisBatch.push(ixns[i]); console.log("Executing ixn", i); if (thisBatch.length >= batchSize || i === ixns.length - 1) { promises.push(executeWithoutAwait(env, farmsClient, thisBatch, i, ixns.length).then((sig) => { console.log(`Init Signature ${sig} for ${i}/${ixns.length}`); })); thisBatch = []; } if (promises.length >= maxConcurrent || i === ixns.length - 1) { yield Promise.all(promises); promises = []; } } } yield Promise.all(promises); }); } const executeWithoutAwait = (env, farmsClient, thisBatch, i, len) => __awaiter(void 0, void 0, void 0, function* () { let numRetries = 5; let retry = 0; while (retry < numRetries) { try { const sig = yield farmsClient.executeTransaction(thisBatch, env.initialOwner, []); return sig; } catch (e) { retry += 1; yield (0, utils_2.sleep)(1000); } } return null; }); const BASE_SEED_USER_STATE = Buffer.from("user"); const getUserFarmPda = (farm, obligation, farmsProgramId) => web3_js_1.PublicKey.findProgramAddressSync([BASE_SEED_USER_STATE, farm.toBytes(), obligation.toBytes()], farmsProgramId)[0]; const getInitIxn = (env, obligation, market, reserve, reserveFarm, userStatePda, farmsProgramId, mode) => { const args = { mode, }; const accts = { payer: env.initialOwner.publicKey, owner: obligation.state.owner, obligation: obligation.obligationAddress, lendingMarketAuthority: market.getLendingMarketAuthority(), reserve: reserve.address, reserveFarmState: reserveFarm, obligationFarm: userStatePda, lendingMarket: reserve.state.lendingMarket, farmsProgram: farmsProgramId, rent: web3_js_1.SYSVAR_RENT_PUBKEY, tokenProgram: spl_token_1.TOKEN_PROGRAM_ID, systemProgram: web3_js_1.SystemProgram.programId, }; const ixn = (0, klend_sdk_1.initObligationFarmsForReserve)(args, accts, market.programId); return ixn; }; //# sourceMappingURL=init_all_klend_user_obligation_farms_from_file.js.map