to, uint256 value, uint256 validAfter, uint256 validBefore, bytes32 nonce, uint8 v, bytes32 r, bytes32 s ) internal { _requireValidAuthorization(from, nonce, validAfter, validBefore); bytes memory data = abi.encode( TRANSFER_WITH_AUTHORIZATION_TYPEHASH, from, to, value, validAfter, validBefore, nonce ); require( EIP712.recover(_domainSeparatorV4(), v, r, s, data) == from, "EIP3009: invalid signature" ); _markAuthorizationAsUsed(from, nonce); _transfer( from , to, value); } function transfer(address to, uint256 value) external override whenNotPaused notBlocklisted(msg.sender) notBlocklisted(to) returns (bool) { _transfer( msg.sender , to, value); return true; } by @ _ywzx 17