Skip to content

Commit

Permalink
allow bypassing FeeTaker
Browse files Browse the repository at this point in the history
  • Loading branch information
ZumZoom committed Nov 20, 2024
1 parent 4081669 commit 11448df
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 20 deletions.
27 changes: 18 additions & 9 deletions contracts/extensions/FeeTaker.sol
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,11 @@ contract FeeTaker is IPostInteraction, AmountGetterWithFee, Ownable {
*/
error EthTransferFailed();

/**
* @dev Fee taker is set to be receiver but no fees were set.
*/
error InconsistentFee();

address private immutable _LIMIT_ORDER_PROTOCOL;
address private immutable _WETH;
/// @notice Contract address whose tokens allow filling limit orders with a fee for resolvers that are outside the whitelist
Expand Down Expand Up @@ -128,16 +133,20 @@ contract FeeTaker is IPostInteraction, AmountGetterWithFee, Ownable {
// fee is calculated as a sum of separate fees to limit rounding errors
uint256 fee = Math.mulDiv(takingAmount, integratorFee, denominator) + Math.mulDiv(takingAmount, resolverFee, denominator);

if (order.takerAsset.get() == address(_WETH) && order.makerTraits.unwrapWeth()) {
if (fee > 0) {
_sendEth(feeRecipient, fee);
}
_sendEth(receiver, takingAmount - fee);
} else {
if (fee > 0) {
IERC20(order.takerAsset.get()).safeTransfer(feeRecipient, fee);
if (order.receiver.get() == address(this)) {
if (fee == 0) revert InconsistentFee();

if (order.takerAsset.get() == address(_WETH) && order.makerTraits.unwrapWeth()) {
if (fee > 0) {
_sendEth(feeRecipient, fee);
}
_sendEth(receiver, takingAmount - fee);
} else {
if (fee > 0) {
IERC20(order.takerAsset.get()).safeTransfer(feeRecipient, fee);
}
IERC20(order.takerAsset.get()).safeTransfer(receiver, takingAmount - fee);
}
IERC20(order.takerAsset.get()).safeTransfer(receiver, takingAmount - fee);
}

if (tail.length >= 20) {
Expand Down
14 changes: 3 additions & 11 deletions test/FeeTaker.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,16 +45,12 @@ describe('FeeTaker', function () {
const order = buildOrder(
{
maker: addr1.address,
receiver: await feeTaker.getAddress(),
makerAsset: await dai.getAddress(),
takerAsset: await weth.getAddress(),
makingAmount,
takingAmount,
},
buildFeeTakerExtensions({
feeTaker: await feeTaker.getAddress(),
feeRecipient,
}),
buildFeeTakerExtensions({ feeTaker: await feeTaker.getAddress() }),
);

const { r, yParityAndS: vs } = ethers.Signature.from(await signOrder(order, chainId, await swap.getAddress(), addr1));
Expand All @@ -78,17 +74,13 @@ describe('FeeTaker', function () {
const order = buildOrder(
{
maker: addr1.address,
receiver: await feeTaker.getAddress(),
receiver: makerReceiver,
makerAsset: await dai.getAddress(),
takerAsset: await weth.getAddress(),
makingAmount,
takingAmount,
},
buildFeeTakerExtensions({
feeTaker: await feeTaker.getAddress(),
feeRecipient,
makerReceiver,
}),
buildFeeTakerExtensions({ feeTaker: await feeTaker.getAddress() }),
);

const { r, yParityAndS: vs } = ethers.Signature.from(await signOrder(order, chainId, await swap.getAddress(), addr1));
Expand Down

0 comments on commit 11448df

Please sign in to comment.