func: function approveAndCallViaSignature (
          address     from,
          address     spender,
          uint256     value,
          bytes       extraData,
          uint256     fee,
          uint256     deadline,
          uint256     sigId,
          bytes       sig,
          sigStandard sigStd
      ) external returns (bool) {
          requireSignature(
              keccak256(address(this), from, spender, value, extraData, fee, deadline, sigId),
              from, deadline, sigId, sig, sigStd, sigDestination.approveAndCall
          );
          allowance[from][spender] = value;
          emit Approval(from, spender, value);
          tokenRecipient(spender).receiveApproval(from, value, this, extraData);
          internalTransfer(from, msg.sender, fee);
          return true;
      }