fbonds-core
Version:
Banx protocol sdk
102 lines (101 loc) • 5.05 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.harvestRentByAdmin = void 0;
const anchor_1 = require("@coral-xyz/anchor");
const helpers_1 = require("../../helpers");
const types_1 = require("../../types");
const constants_1 = require("../../constants");
const perpetual_1 = require("../perpetual");
const harvestRentByAdmin = (_a) => __awaiter(void 0, [_a], void 0, function* ({ connection, args, accounts, sendTxn, }) {
const program = (0, helpers_1.returnAnchorProgram)(connection);
const instructions = [];
const account = args.account;
let rentOwner;
if (account.bondTradeTransactionState !== undefined) {
let btt = account;
if (btt.bondTradeTransactionState !== types_1.BondTradeTransactionV2State.PerpetualLiquidatedByClaim && btt.bondTradeTransactionState !== types_1.BondTradeTransactionV2State.PerpetualPartialRepaid && btt.bondTradeTransactionState !== types_1.BondTradeTransactionV2State.PerpetualRefinanceRepaid && btt.bondTradeTransactionState !== types_1.BondTradeTransactionV2State.PerpetualRepaid) {
if (btt.bondTradeTransactionState !== types_1.BondTradeTransactionV2State.PerpetualActive && !args.isFacelses) {
throw new Error("can't closw active bondTradeTrans");
}
}
if (Number(btt.soldAt) <= constants_1.RENT_RETURN_START_TIMESTAMP) {
if (btt.bondTradeTransactionState === types_1.BondTradeTransactionV2State.PerpetualActive && args.isFacelses) {
rentOwner = accounts.adminPukey;
}
else {
if (btt.redeemResult === types_1.RedeemResult.InstantRefinanced || btt.redeemResult === types_1.RedeemResult.RefinancedByAuction) {
rentOwner = btt.user;
}
else {
rentOwner = btt.seller;
}
}
}
else {
rentOwner = accounts.adminPukey;
}
}
if (account.pairState !== undefined) {
// console.log("offer")
let offer = account;
if (offer.pairState !== types_1.PairState.PerpetualBondingCurveClosed && offer.edgeSettlement.isZero()) {
throw new Error("can't closw active offer");
}
if ((0, perpetual_1.nowInSeconds)() <= constants_1.RENT_RETURN_START_TIMESTAMP) {
rentOwner = offer.assetReceiver;
}
else {
rentOwner = accounts.adminPukey;
}
}
if (account.fraktBondState !== undefined) {
let fbond = account;
if (fbond.fraktBondState !== types_1.FraktBondState.PerpetualRepaid && fbond.fraktBondState !== types_1.FraktBondState.PerpetualLiquidatedByClaim) {
if (fbond.fraktBondState !== types_1.FraktBondState.PerpetualActive && !args.isFacelses)
throw new Error("can't closw active fbond");
}
if (Number(fbond.activatedAt) <= constants_1.RENT_RETURN_START_TIMESTAMP) {
if (fbond.fraktBondState === types_1.FraktBondState.PerpetualActive && args.isFacelses) {
rentOwner = accounts.adminPukey;
}
else {
rentOwner = fbond.fbondIssuer;
}
}
else {
rentOwner = accounts.adminPukey;
}
}
const [lenderVault, lenderVaultBump] = yield anchor_1.web3.PublicKey.findProgramAddress([
constants_1.ENCODER.encode(constants_1.USER_VAULT_PREFIX),
new anchor_1.web3.PublicKey(rentOwner).toBuffer(),
constants_1.BANX_SOL_MINT.toBuffer()
], program.programId);
instructions.push(yield program.methods
.returnAccountRentByAdmin()
.accountsStrict({
user: accounts.adminPukey,
systemProgram: anchor_1.web3.SystemProgram.programId,
rentOwner: new anchor_1.web3.PublicKey(rentOwner),
rent: anchor_1.web3.SYSVAR_RENT_PUBKEY,
userVault: lenderVault,
accountToDelete: new anchor_1.web3.PublicKey(args.account.publicKey),
})
.instruction());
const transaction = new anchor_1.web3.Transaction();
for (const instruction of instructions)
transaction.add(instruction);
const signers = [];
yield sendTxn(transaction, signers);
return { instructions, rentOwner: rentOwner };
});
exports.harvestRentByAdmin = harvestRentByAdmin;