Skip to content

Commit 44a5ebd

Browse files
committed
Add TRANSFER_FROM_WITH_PERMIT action on Katana
1 parent 0bf47fc commit 44a5ebd

File tree

1 file changed

+13
-0
lines changed

1 file changed

+13
-0
lines changed

src/chains/Katana/TakerSubmitted.sol

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {Settler} from "../../Settler.sol";
77
import {IERC20} from "@forge-std/interfaces/IERC20.sol";
88
import {ISignatureTransfer} from "@permit2/interfaces/ISignatureTransfer.sol";
99
import {ISettlerActions} from "../../ISettlerActions.sol";
10+
import {FastLogic} from "../../utils/FastLogic.sol";
1011

1112
// Solidity inheritance is stupid
1213
import {SettlerAbstract} from "../../SettlerAbstract.sol";
@@ -16,6 +17,8 @@ import {AbstractContext} from "../../Context.sol";
1617

1718
/// @custom:security-contact security@0x.org
1819
contract KatanaSettler is Settler, KatanaMixin {
20+
using FastLogic for bool;
21+
1922
constructor(bytes20 gitCommit) SettlerBase(gitCommit) {}
2023

2124
function _dispatchVIP(uint256 action, bytes calldata data) internal override DANGEROUS_freeMemory returns (bool) {
@@ -27,6 +30,16 @@ contract KatanaSettler is Settler, KatanaMixin {
2730
(ISignatureTransfer.SignatureTransferDetails memory transferDetails,) =
2831
_permitToTransferDetails(permit, recipient);
2932
_transferFrom(permit, transferDetails, sig);
33+
} else if (action == uint32(ISettlerActions.TRANSFER_FROM_WITH_PERMIT.selector)) {
34+
(address recipient, ISignatureTransfer.PermitTransferFrom memory permit, bytes memory permitData) =
35+
abi.decode(data, (address, ISignatureTransfer.PermitTransferFrom, bytes));
36+
if (_isRestrictedTarget(permit.permitted.token).or(!_isForwarded())) {
37+
revertConfusedDeputy();
38+
}
39+
_dispatchPermit(permit.permitted.token, permitData);
40+
(ISignatureTransfer.SignatureTransferDetails memory transferDetails,) =
41+
_permitToTransferDetails(permit, recipient);
42+
_transferFrom(permit, transferDetails, new bytes(0), true);
3043
} else {
3144
return false;
3245
}

0 commit comments

Comments
 (0)