Skip to content

Commit c9527f1

Browse files
committed
forge fmt
1 parent 72d6eb1 commit c9527f1

File tree

2 files changed

+115
-86
lines changed

2 files changed

+115
-86
lines changed

src/validator/SessionKeyValidator.sol

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,16 +69,22 @@ contract ExecuteSessionKeyValidator is IKernelValidator {
6969
// sessionKey allowed to execute any tx
7070
return _packValidationData(false, session.validUntil, session.validAfter);
7171
}
72-
if(session.paymaster == address(1)) {
72+
if (session.paymaster == address(1)) {
7373
require(userOp.paymasterAndData.length != 0, "SessionKeyValidator: paymaster not set");
7474
} else if (session.paymaster != address(0)) {
75-
require(address(bytes20(userOp.paymasterAndData[0:20])) == session.paymaster, "SessionKeyValidator: paymaster mismatch");
75+
require(
76+
address(bytes20(userOp.paymasterAndData[0:20])) == session.paymaster,
77+
"SessionKeyValidator: paymaster mismatch"
78+
);
7679
}
7780

7881
(Permission memory permission, bytes32[] memory merkleProof) =
7982
abi.decode(userOp.signature[85:], (Permission, bytes32[]));
8083
require(address(bytes20(userOp.callData[16:36])) == permission.target, "SessionKeyValidator: target mismatch");
81-
require(uint256(bytes32(userOp.callData[36:68])) <= permission.valueLimit, "SessionKeyValidator: value limit exceeded");
84+
require(
85+
uint256(bytes32(userOp.callData[36:68])) <= permission.valueLimit,
86+
"SessionKeyValidator: value limit exceeded"
87+
);
8288
uint256 dataOffset = uint256(bytes32(userOp.callData[68:100])) + 4; // adding 4 for msg.sig
8389
uint256 dataLength = uint256(bytes32(userOp.callData[dataOffset:dataOffset + 32]));
8490
bytes calldata data = userOp.callData[dataOffset + 32:dataOffset + 32 + dataLength];
@@ -100,7 +106,8 @@ contract ExecuteSessionKeyValidator is IKernelValidator {
100106
require(param != rule.param, "SessionKeyValidator: param mismatch");
101107
}
102108
}
103-
bool result = MerkleProofLib.verify(merkleProof, session.merkleRoot, keccak256(abi.encode(permission))) && (sessionKey == ECDSA.recover(ECDSA.toEthSignedMessageHash(userOpHash), signature));
109+
bool result = MerkleProofLib.verify(merkleProof, session.merkleRoot, keccak256(abi.encode(permission)))
110+
&& (sessionKey == ECDSA.recover(ECDSA.toEthSignedMessageHash(userOpHash), signature));
104111
return _packValidationData(!result, session.validUntil, session.validAfter);
105112
}
106113

test/foundry/validator/SessionKeyValidator.t.sol

Lines changed: 104 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,10 @@ contract SessionKeyValidatorTest is KernelTestBase {
2323
TestERC20 testToken;
2424
address sessionKey;
2525
uint256 sessionKeyPriv;
26+
2627
function setUp() public {
2728
(owner, ownerKey) = makeAddrAndKey("owner");
28-
(factoryOwner, ) = makeAddrAndKey("factoryOwner");
29+
(factoryOwner,) = makeAddrAndKey("factoryOwner");
2930
(sessionKey, sessionKeyPriv) = makeAddrAndKey("sessionKey");
3031
entryPoint = new EntryPoint();
3132
kernelImpl = new Kernel(entryPoint);
@@ -36,7 +37,17 @@ contract SessionKeyValidatorTest is KernelTestBase {
3637

3738
validator = new ECDSAValidator();
3839

39-
kernel = Kernel(payable(address(factory.createAccount(address(kernelImpl), abi.encodeWithSelector(KernelStorage.initialize.selector, validator, abi.encodePacked(owner)), 0))));
40+
kernel = Kernel(
41+
payable(
42+
address(
43+
factory.createAccount(
44+
address(kernelImpl),
45+
abi.encodeWithSelector(KernelStorage.initialize.selector, validator, abi.encodePacked(owner)),
46+
0
47+
)
48+
)
49+
)
50+
);
4051
vm.deal(address(kernel), 1e30);
4152
beneficiary = payable(address(makeAddr("beneficiary")));
4253
testToken = new TestERC20();
@@ -46,8 +57,16 @@ contract SessionKeyValidatorTest is KernelTestBase {
4657
function test_mode_2_no_paymaster() external {
4758
testToken.mint(address(kernel), 100e18);
4859
TestERC20 testToken2 = new TestERC20();
49-
UserOperation memory op =
50-
entryPoint.fillUserOp(address(kernel), abi.encodeWithSelector(Kernel.execute.selector, address(testToken), 0, abi.encodeWithSelector(ERC20.transfer.selector, beneficiary, 100), Operation.Call));
60+
UserOperation memory op = entryPoint.fillUserOp(
61+
address(kernel),
62+
abi.encodeWithSelector(
63+
Kernel.execute.selector,
64+
address(testToken),
65+
0,
66+
abi.encodeWithSelector(ERC20.transfer.selector, beneficiary, 100),
67+
Operation.Call
68+
)
69+
);
5170

5271
ExecuteSessionKeyValidator.ParamRule[] memory rules = new ExecuteSessionKeyValidator.ParamRule[](1);
5372
rules[0] = ExecuteSessionKeyValidator.ParamRule({
@@ -56,22 +75,28 @@ contract SessionKeyValidatorTest is KernelTestBase {
5675
param: bytes32(uint256(1e18))
5776
});
5877

59-
6078
bytes32[] memory data = new bytes32[](2);
61-
data[0] = keccak256(abi.encode(ExecuteSessionKeyValidator.Permission({
62-
valueLimit : 0,
63-
target: address(testToken),
64-
sig: ERC20.transfer.selector,
65-
rules: rules
66-
})));
67-
68-
data[1] = keccak256(abi.encode(ExecuteSessionKeyValidator.Permission({
69-
valueLimit : 0,
70-
target: address(testToken2),
71-
sig: ERC20.transfer.selector,
72-
rules: rules
73-
})));
79+
data[0] = keccak256(
80+
abi.encode(
81+
ExecuteSessionKeyValidator.Permission({
82+
valueLimit: 0,
83+
target: address(testToken),
84+
sig: ERC20.transfer.selector,
85+
rules: rules
86+
})
87+
)
88+
);
7489

90+
data[1] = keccak256(
91+
abi.encode(
92+
ExecuteSessionKeyValidator.Permission({
93+
valueLimit: 0,
94+
target: address(testToken2),
95+
sig: ERC20.transfer.selector,
96+
rules: rules
97+
})
98+
)
99+
);
75100

76101
bytes32 merkleRoot = _getRoot(data);
77102
bytes memory enableData = abi.encodePacked(sessionKey, merkleRoot, uint48(0), uint48(0), address(0));
@@ -100,7 +125,7 @@ contract SessionKeyValidatorTest is KernelTestBase {
100125
entryPoint.signUserOpHash(vm, sessionKeyPriv, op),
101126
abi.encode(
102127
ExecuteSessionKeyValidator.Permission({
103-
valueLimit : 0,
128+
valueLimit: 0,
104129
target: address(testToken),
105130
sig: ERC20.transfer.selector,
106131
rules: rules
@@ -116,79 +141,76 @@ contract SessionKeyValidatorTest is KernelTestBase {
116141
entryPoint.handleOps(ops, beneficiary);
117142
}
118143
}
119-
// Following code is adapted from https://github.com/dmfxyz/murky/blob/main/src/common/MurkyBase.sol.
144+
// Following code is adapted from https://github.com/dmfxyz/murky/blob/main/src/common/MurkyBase.sol.
120145

121-
function _getRoot(bytes32[] memory data) pure returns (bytes32) {
122-
require(data.length > 1);
123-
while (data.length > 1) {
124-
data = _hashLevel(data);
125-
}
126-
return data[0];
146+
function _getRoot(bytes32[] memory data) pure returns (bytes32) {
147+
require(data.length > 1);
148+
while (data.length > 1) {
149+
data = _hashLevel(data);
127150
}
151+
return data[0];
152+
}
128153

129-
function _getProof(bytes32[] memory data, uint256 nodeIndex)
130-
pure
131-
returns (bytes32[] memory)
132-
{
133-
require(data.length > 1);
134-
135-
bytes32[] memory result = new bytes32[](64);
136-
uint256 pos;
137-
138-
while (data.length > 1) {
139-
unchecked {
140-
if (nodeIndex & 0x1 == 1) {
141-
result[pos] = data[nodeIndex - 1];
142-
} else if (nodeIndex + 1 == data.length) {
143-
result[pos] = bytes32(0);
144-
} else {
145-
result[pos] = data[nodeIndex + 1];
146-
}
147-
++pos;
148-
nodeIndex /= 2;
149-
}
150-
data = _hashLevel(data);
151-
}
152-
// Resize the length of the array to fit.
153-
/// @solidity memory-safe-assembly
154-
assembly {
155-
mstore(result, pos)
156-
}
154+
function _getProof(bytes32[] memory data, uint256 nodeIndex) pure returns (bytes32[] memory) {
155+
require(data.length > 1);
157156

158-
return result;
159-
}
157+
bytes32[] memory result = new bytes32[](64);
158+
uint256 pos;
160159

161-
function _hashLevel(bytes32[] memory data) pure returns (bytes32[] memory) {
162-
bytes32[] memory result;
160+
while (data.length > 1) {
163161
unchecked {
164-
uint256 length = data.length;
165-
if (length & 0x1 == 1) {
166-
result = new bytes32[](length / 2 + 1);
167-
result[result.length - 1] = _hashPair(data[length - 1], bytes32(0));
162+
if (nodeIndex & 0x1 == 1) {
163+
result[pos] = data[nodeIndex - 1];
164+
} else if (nodeIndex + 1 == data.length) {
165+
result[pos] = bytes32(0);
168166
} else {
169-
result = new bytes32[](length / 2);
170-
}
171-
uint256 pos = 0;
172-
for (uint256 i = 0; i < length - 1; i += 2) {
173-
result[pos] = _hashPair(data[i], data[i + 1]);
174-
++pos;
167+
result[pos] = data[nodeIndex + 1];
175168
}
169+
++pos;
170+
nodeIndex /= 2;
176171
}
177-
return result;
172+
data = _hashLevel(data);
173+
}
174+
// Resize the length of the array to fit.
175+
/// @solidity memory-safe-assembly
176+
assembly {
177+
mstore(result, pos)
178178
}
179179

180-
function _hashPair(bytes32 left, bytes32 right) pure returns (bytes32 result) {
181-
/// @solidity memory-safe-assembly
182-
assembly {
183-
switch lt(left, right)
184-
case 0 {
185-
mstore(0x0, right)
186-
mstore(0x20, left)
187-
}
188-
default {
189-
mstore(0x0, left)
190-
mstore(0x20, right)
191-
}
192-
result := keccak256(0x0, 0x40)
180+
return result;
181+
}
182+
183+
function _hashLevel(bytes32[] memory data) pure returns (bytes32[] memory) {
184+
bytes32[] memory result;
185+
unchecked {
186+
uint256 length = data.length;
187+
if (length & 0x1 == 1) {
188+
result = new bytes32[](length / 2 + 1);
189+
result[result.length - 1] = _hashPair(data[length - 1], bytes32(0));
190+
} else {
191+
result = new bytes32[](length / 2);
192+
}
193+
uint256 pos = 0;
194+
for (uint256 i = 0; i < length - 1; i += 2) {
195+
result[pos] = _hashPair(data[i], data[i + 1]);
196+
++pos;
193197
}
194198
}
199+
return result;
200+
}
201+
202+
function _hashPair(bytes32 left, bytes32 right) pure returns (bytes32 result) {
203+
/// @solidity memory-safe-assembly
204+
assembly {
205+
switch lt(left, right)
206+
case 0 {
207+
mstore(0x0, right)
208+
mstore(0x20, left)
209+
}
210+
default {
211+
mstore(0x0, left)
212+
mstore(0x20, right)
213+
}
214+
result := keccak256(0x0, 0x40)
215+
}
216+
}

0 commit comments

Comments
 (0)