// SPDX-License-Identifier: GPL-3.0 pragma solidity 0.8.12; import "./UserOperation.sol"; interface IWallet { /** * Validate user's signature and nonce * the entryPoint will make the call to the recipient only if this validation call returns successfully. * * @dev Must validate caller is the entryPoint. * Must validate the signature and nonce * @param userOp the operation that is about to be executed. * @param requestId hash of the user's request data. can be used as the basis for signature. * @param aggregator the aggregator used to validate the signature. NULL for non-aggregated signature wallets. * @param missingWalletFunds missing funds on the wallet's deposit in the entrypoint. * This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call. * The excess is left as a deposit in the entrypoint, for future calls. * can be withdrawn anytime using "entryPoint.withdrawTo()" * In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero. */ function validateUserOp(UserOperation calldata userOp, bytes32 requestId, address aggregator, uint256 missingWalletFunds) external; }