UNPKG

fbonds-core

Version:

Banx protocol sdk

29 lines (28 loc) 1.4 kB
"use strict"; 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; }