verifySignature
 Verifies the signature based on the provided options.
Handles smart contract wallet signatures and EOA signatures.
 IMPORTANT: in order to check smart contract signatures, a chain and client must be provided. Or, you can use the verifyContractWalletSignature  function directly if all signatures will be from smart accounts.