@frakt-protocol/frakt-sdk
Version:
Frakt SDK for interacting with frakt.xyz protocols
141 lines (140 loc) • 6.82 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.onAccountsChange = 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 onAccountsChange = ({ programId, timeoutOfCalls, fromThisSignature, connection, onAccountsChange, }) => __awaiter(void 0, void 0, void 0, function* () {
console.log('onAccountsChange');
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(yield transactionParsers_1.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.onAccountsChange = onAccountsChange;