function swap(
address executor,
SwapDescription calldata desc,
bytes calldata permit,
bytes calldata data
)
external
payable
returns (uint256 returnAmount, uint256 spentAmount);
struct SwapDescription {
ERC20 srcToken;
ERC20 dstToken;
address payable srcReceiver;
address payable dstReceiver;
uint256 amount;
uint256 minReturnAmount;
uint256 flags;
}