UNPKG

@frakt-protocol/frakt-sdk

Version:

Frakt SDK for interacting with frakt.xyz protocols

144 lines (143 loc) 6.87 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.harvestCount = exports.LOAN_STATE_PRIORITY = void 0; const transactionParsers_1 = require("./transactionParsers"); // Proposed, // Rejected, // Activated, // PaidBack, // Liquidated, // PaidBackWithGrace, exports.LOAN_STATE_PRIORITY = { proposed: 0, rejected: 1, activated: 2, paidBack: 3, liquidated: 4, paidBackWithGrace: 5, }; const harvestCount = ({ programId, timeoutOfCalls, fromThisSignature, connection, }) => __awaiter(void 0, void 0, void 0, function* () { console.log('harvestCount'); let lastSignature = fromThisSignature || (yield connection.getSignaturesForAddress(programId, { limit: 1, }, 'confirmed'))[0].signature; while (true) { try { // console.log('args: ', { // limit: 50, // until: lastSignature, // }); // const latestConfirmedSignatures = await connection.getConfirmedSignaturesForAddress2(programId, { // limit: 1, // }); // if (!latestConfirmedSignatures[0]) continue; // lastSignature = latestConfirmedSignatures[0].signature; if (!lastSignature) { const latestConfirmedSignatures = yield connection.getSignaturesForAddress(programId, { limit: 1, }, 'confirmed'); if (!latestConfirmedSignatures[0]) { yield new Promise((f) => setTimeout(f, 200)); continue; } lastSignature = latestConfirmedSignatures[0].signature; } // console.log('args: ', { // limit: 50, // until: lastSignature, // }); const newSignatureInfos = yield connection.getSignaturesForAddress(programId, { limit: 50, until: lastSignature, }, 'confirmed'); // console.log('result: ', newSignatureInfos.length); if (!newSignatureInfos) { yield new Promise((f) => setTimeout(f, 200)); continue; } if (newSignatureInfos.length > 10) { console.log('more than 10 signatures error: ', newSignatureInfos.length); const latestConfirmedSignatures = yield connection.getSignaturesForAddress(programId, { limit: 1, }, 'confirmed'); if (!latestConfirmedSignatures[0]) continue; lastSignature = latestConfirmedSignatures[0].signature; yield new Promise((f) => setTimeout(f, 200)); continue; } // console.log('result: ', newSignatureInfos); for (let signatureInfo of [...newSignatureInfos].reverse()) { yield new Promise((f) => setTimeout(f, 100)); const currentTransactionInfo = yield connection.getParsedTransaction(signatureInfo.signature, 'confirmed'); if (!currentTransactionInfo) { // const latestConfirmedSignatures = await connection.getConfirmedSignaturesForAddress2(programId, { // limit: 1, // }); // if (!latestConfirmedSignatures[0]) continue; // await new Promise((f) => setTimeout(f, 100)); lastSignature = signatureInfo.signature; yield new Promise((f) => setTimeout(f, 100)); continue; } if (!currentTransactionInfo.meta) { // lastSignature = signatureInfo.signature; // const latestConfirmedSignatures = await connection.getConfirmedSignaturesForAddress2(programId, { // limit: 1, // }); // if (!latestConfirmedSignatures[0]) continue; lastSignature = signatureInfo.signature; yield new Promise((f) => setTimeout(f, 100)); continue; } const instructionLog = currentTransactionInfo.meta.logMessages[1] != 'Program ComputeBudget111111111111111111111111111111 success' ? currentTransactionInfo.meta.logMessages[1] : currentTransactionInfo.meta.logMessages[3]; if (transactionParsers_1.TRANSACTION_ACCOUNT_PARSERS[instructionLog]) { try { // onAccountsChange( // await TRANSACTION_ACCOUNT_PARSERS[instructionLog]({ // transaction: currentTransactionInfo, // programId: programId, // connection: connection, // }), // instructionLog, // ); lastSignature = signatureInfo.signature; } catch (err) { // const latestConfirmedSignatures = await connection.getConfirmedSignaturesForAddress2(programId, { // limit: 1, // }); // if (!latestConfirmedSignatures[0]) continue; lastSignature = signatureInfo.signature; console.log('onAccountsChange Error in ', instructionLog, ': ', err); yield new Promise((f) => setTimeout(f, 100)); continue; } } } } catch (err) { const latestConfirmedSignatures = yield connection.getSignaturesForAddress(programId, { limit: 1, }, 'confirmed'); if (!latestConfirmedSignatures[0]) continue; lastSignature = latestConfirmedSignatures[0].signature; console.log('onAccountsChange Error: ', err); } yield new Promise((f) => setTimeout(f, timeoutOfCalls || 5000)); } }); exports.harvestCount = harvestCount;