// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IPermit2WitnessTransferFrom { struct TokenPermissions { // ERC20 token address address token; // the maximum amount that can be spent uint256 amount; } struct PermitTransferFrom { TokenPermissions permitted; // a unique value for every token owner's signature to prevent signature replays uint256 nonce; // deadline on the permit signature uint256 deadline; } struct SignatureTransferDetails { // recipient address address to; // spender requested amount uint256 requestedAmount; } function permitWitnessTransferFrom( PermitTransferFrom calldata permit, SignatureTransferDetails calldata transferDetails, address owner, bytes32 witness, string calldata witnessTypeString, bytes calldata signature ) external; }