closeInventoryImpact function
strike_exposure::live_close_inventory_impact — the rebate a live close
of payout receives: the exact fall in the same potential. Zero at the
shipped rate of zero.
Implementation
BigInt closeInventoryImpact(
FeePolicy policy, CloseBookTerms book, BigInt payout) {
_assertFeePolicy(policy);
_assertBook(book);
_assertUint(book.complementMaxPayout, 'complementMaxPayout',
maximum: book.maxPayout);
if (_max(book.rangeMaxPayout, book.complementMaxPayout) != book.maxPayout) {
throw PredictInputError(
'maxPayout must equal the larger range or complement payout');
}
_assertUint(payout, 'close payout', maximum: book.rangeMaxPayout);
if (policy.inventoryImpactMaxRate == BigInt.zero || payout == BigInt.zero) {
return BigInt.zero;
}
final before = _payoutLiability(policy, book.maxPayout, book.totalPayout);
final after = _payoutLiability(
policy,
_max(book.rangeMaxPayout - payout, book.complementMaxPayout),
book.totalPayout - payout,
);
return inventoryImpactPotential(policy, before) -
inventoryImpactPotential(policy, after);
}