From 6ccdf7bad7cb6f54df2d1f0caab68b77257b590a Mon Sep 17 00:00:00 2001 From: Sahil Vasava Date: Wed, 1 May 2024 14:56:09 +0530 Subject: [PATCH 1/2] feat: add native token transfer support in session key validator --- .gitmodules | 6 +++--- src/validator/SessionKeyValidator.sol | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.gitmodules b/.gitmodules index b97d7759..6e2bb1dd 100644 --- a/.gitmodules +++ b/.gitmodules @@ -6,10 +6,10 @@ url = https://github.com/leekt/I4337 [submodule "lib/FreshCryptoLib"] path = lib/FreshCryptoLib - url = https://github.com/rdubois-crypto/FreshCryptoLib + url = https://github.com/rdubois-crypto/FreshCryptoLib [submodule "lib/p256-verifier"] - path = lib/p256-verifier - url = https://github.com/daimo-eth/p256-verifier + path = lib/p256-verifier + url = https://github.com/daimo-eth/p256-verifier [submodule "lib/solady"] path = lib/solady url = https://github.com/vectorized/solady diff --git a/src/validator/SessionKeyValidator.sol b/src/validator/SessionKeyValidator.sol index fe876192..7a9ffd42 100644 --- a/src/validator/SessionKeyValidator.sol +++ b/src/validator/SessionKeyValidator.sol @@ -280,6 +280,7 @@ contract SessionKeyValidator is IKernelValidator { } function verifyPermission(bytes calldata data, Permission calldata permission) internal pure returns (bool) { + if(data.length == 0 && permission.sig == bytes4(0x0)) return true; if (bytes4(data[0:4]) != permission.sig) return false; for (uint256 i = 0; i < permission.rules.length; i++) { ParamRule calldata rule = permission.rules[i]; From 68e294b33172704dbf99c87e11d47eb6861de7bd Mon Sep 17 00:00:00 2001 From: leekt Date: Thu, 2 May 2024 02:07:31 +0900 Subject: [PATCH 2/2] added paymasterAndData fix --- src/validator/SessionKeyValidator.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/validator/SessionKeyValidator.sol b/src/validator/SessionKeyValidator.sol index 7a9ffd42..34986afc 100644 --- a/src/validator/SessionKeyValidator.sol +++ b/src/validator/SessionKeyValidator.sol @@ -55,7 +55,7 @@ contract SessionKeyValidator is IKernelValidator { // to make this fully work with paymaster service, prepack the address of paymaster up front if (session.paymaster == address(1)) { // any paymaster - require(userOp.paymasterAndData.length != 0, "SessionKeyValidator: paymaster not set"); + require(userOp.paymasterAndData.length != 0 && bytes20(userOp.paymasterAndData[0:20]) != bytes20(0), "SessionKeyValidator: paymaster not set"); } else if (session.paymaster != address(0)) { // specific paymaster require(