fbonds-core
Version:
Banx protocol sdk
29 lines (28 loc) • 1.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.filterSimpleOffersByVaultBalance = filterSimpleOffersByVaultBalance;
const anchor_1 = require("@coral-xyz/anchor");
const lodash_1 = require("lodash");
function createEscrowBalanceByLender(userVaults) {
return (0, lodash_1.chain)(userVaults)
.map((userVault) => [userVault.user.toBase58(), userVault.offerLiquidityAmount])
.fromPairs()
.value();
}
function filterSimpleOffersByVaultBalance(offers, userVaults) {
const escrowBalanceByLender = createEscrowBalanceByLender(userVaults);
const { filteredOffers } = (0, lodash_1.reduce)(offers, (acc, offer) => {
var _a;
const { fundsSolOrTokenBalance, bidSettlement, assetReceiver } = offer;
const offerSize = fundsSolOrTokenBalance.add(bidSettlement);
const escrowBalance = (_a = acc.escrowBalanceByLender[assetReceiver.toBase58()]) !== null && _a !== void 0 ? _a : new anchor_1.BN(0);
if (escrowBalance.gte(offerSize)) {
return {
filteredOffers: [...acc.filteredOffers, offer],
escrowBalanceByLender: Object.assign(Object.assign({}, escrowBalanceByLender), { [assetReceiver.toBase58()]: escrowBalance.sub(offerSize) }),
};
}
return acc;
}, { filteredOffers: [], escrowBalanceByLender });
return filteredOffers;
}