Skip to content

Commit efd5d1a

Browse files
authored
resolve stack-too-depp in releaseFunds (#1080)
1 parent d935398 commit efd5d1a

File tree

2 files changed

+13
-14
lines changed

2 files changed

+13
-14
lines changed

contracts/domain/BosonTypes.sol

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -383,6 +383,7 @@ contract BosonTypes {
383383
uint256 protocol;
384384
uint256 agent;
385385
uint256 disputeResolver;
386+
uint256 mutualizer;
386387
}
387388

388389
struct SellerOfferParams {

contracts/protocol/bases/FundsBase.sol

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -254,51 +254,49 @@ abstract contract FundsBase is Context {
254254

255255
// Return unused DR fee to mutualizer or seller's pool
256256
if (drTerms.feeAmount != 0) {
257-
uint256 returnAmount = drTerms.feeAmount - payoff.disputeResolver;
257+
payoff.mutualizer = drTerms.feeAmount - payoff.disputeResolver;
258258

259259
// Use exchange-level mutualizer address (locked at commitment time)
260260
address mutualizerAddress = exchange.mutualizerAddress;
261261
if (mutualizerAddress == address(0)) {
262-
if (returnAmount > 0) {
262+
if (payoff.mutualizer > 0) {
263263
increaseAvailableFundsAndEmitEvent(
264264
_exchangeId,
265265
offer.sellerId,
266266
exchangeToken,
267-
returnAmount,
267+
payoff.mutualizer,
268268
sender
269269
);
270270
}
271271
} else {
272-
uint256 exchangeId = _exchangeId; // stack too deep ToDO: any other way to avoid this?
273-
274-
if (returnAmount > 0) {
272+
if (payoff.mutualizer > 0) {
275273
if (exchangeToken == address(0)) {
276274
exchangeToken = address(wNative);
277-
wNative.deposit{ value: returnAmount }();
275+
wNative.deposit{ value: payoff.mutualizer }();
278276
}
279277
uint256 oldAllowance = IERC20(exchangeToken).allowance(address(this), mutualizerAddress);
280-
IERC20(exchangeToken).forceApprove(mutualizerAddress, returnAmount + oldAllowance);
278+
IERC20(exchangeToken).forceApprove(mutualizerAddress, payoff.mutualizer + oldAllowance);
281279
}
282280

283281
try
284282
IDRFeeMutualizer(mutualizerAddress).finalizeExchange{ gas: FINALIZE_EXCHANGE_FEE_GAS }(
285-
exchangeId,
286-
returnAmount
283+
_exchangeId,
284+
payoff.mutualizer
287285
)
288286
{
289287
emit IBosonFundsBaseEvents.DRFeeReturned(
290-
exchangeId,
288+
_exchangeId,
291289
exchangeToken,
292-
returnAmount,
290+
payoff.mutualizer,
293291
mutualizerAddress,
294292
sender
295293
);
296294
} catch {
297295
// Ignore failure to not block the main flow
298296
emit IBosonFundsBaseEvents.DRFeeReturnFailed(
299-
exchangeId,
297+
_exchangeId,
300298
exchangeToken,
301-
returnAmount,
299+
payoff.mutualizer,
302300
mutualizerAddress,
303301
sender
304302
);

0 commit comments

Comments
 (0)