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.