@@ -41,6 +41,10 @@ contract EVCClient is EVCUtil {
41
41
// do nothing
42
42
}
43
43
44
+ function calledByEVCAccount () external onlyEVCAccount {
45
+ // do nothing
46
+ }
47
+
44
48
function calledByEVCAccountOwner () external onlyEVCAccountOwner {
45
49
// do nothing
46
50
}
@@ -53,6 +57,14 @@ contract EVCClient is EVCUtil {
53
57
return _msgSenderForBorrow ();
54
58
}
55
59
60
+ function msgSenderOnlyEVCAccount () external view returns (address ) {
61
+ return _msgSenderOnlyEVCAccount ();
62
+ }
63
+
64
+ function msgSenderOnlyEVCAccountOwner () external view returns (address ) {
65
+ return _msgSenderOnlyEVCAccountOwner ();
66
+ }
67
+
56
68
fallback (bytes calldata ) external returns (bytes memory ) {
57
69
return abi.encode (IVault.checkAccountStatus.selector );
58
70
}
@@ -187,56 +199,138 @@ contract EVCUtilTest is Test {
187
199
evcClient.calledByEVCWithChecksInProgress ();
188
200
}
189
201
190
- function test_calledByEVCAccountOwner (address caller , uint8 id ) external {
202
+ function test_calledByEVCAccount_calledByEVCAccountOwner_msgSenderOnlyEVCAccount_msgSenderOnlyEVCAccountOwner (
203
+ address caller ,
204
+ uint8 id
205
+ ) external {
191
206
vm.assume (! evc.haveCommonOwner (caller, address (0 )) && ! evc.haveCommonOwner (caller, address (evc)));
192
207
vm.assume (id != 0 );
193
208
194
209
// msg.sender is not EVC
195
210
evc.setOnBehalfOfAccount (address (0 ));
211
+ vm.prank (caller);
212
+ evcClient.calledByEVCAccount ();
213
+
196
214
vm.prank (caller);
197
215
evcClient.calledByEVCAccountOwner ();
198
216
217
+ vm.prank (caller);
218
+ assertEq (evcClient.msgSenderOnlyEVCAccount (), caller);
219
+
220
+ vm.prank (caller);
221
+ assertEq (evcClient.msgSenderOnlyEVCAccountOwner (), caller);
222
+
199
223
// msg.sender is EVC and operator is authenticated
200
224
evc.setOperatorAuthenticated (true );
225
+ vm.prank (address (evc));
226
+ vm.expectRevert (abi.encodeWithSelector (EVCUtil.NotAuthorized.selector ));
227
+ evcClient.calledByEVCAccount ();
228
+
201
229
vm.prank (address (evc));
202
230
vm.expectRevert (abi.encodeWithSelector (EVCUtil.NotAuthorized.selector ));
203
231
evcClient.calledByEVCAccountOwner ();
204
232
233
+ vm.prank (address (evc));
234
+ vm.expectRevert (abi.encodeWithSelector (EVCUtil.NotAuthorized.selector ));
235
+ evcClient.msgSenderOnlyEVCAccount ();
236
+
237
+ vm.prank (address (evc));
238
+ vm.expectRevert (abi.encodeWithSelector (EVCUtil.NotAuthorized.selector ));
239
+ evcClient.msgSenderOnlyEVCAccountOwner ();
240
+
205
241
// msg.sender is EVC and control collateral is in progress
206
242
evc.setOperatorAuthenticated (false );
207
243
evc.setControlCollateralInProgress (true );
244
+ vm.prank (address (evc));
245
+ vm.expectRevert (abi.encodeWithSelector (EVCUtil.NotAuthorized.selector ));
246
+ evcClient.calledByEVCAccount ();
247
+
208
248
vm.prank (address (evc));
209
249
vm.expectRevert (abi.encodeWithSelector (EVCUtil.NotAuthorized.selector ));
210
250
evcClient.calledByEVCAccountOwner ();
211
251
252
+ vm.prank (address (evc));
253
+ vm.expectRevert (abi.encodeWithSelector (EVCUtil.NotAuthorized.selector ));
254
+ evcClient.msgSenderOnlyEVCAccount ();
255
+
256
+ vm.prank (address (evc));
257
+ vm.expectRevert (abi.encodeWithSelector (EVCUtil.NotAuthorized.selector ));
258
+ evcClient.msgSenderOnlyEVCAccountOwner ();
259
+
212
260
// msg.sender is EVC and checks are in progress
213
261
evc.setControlCollateralInProgress (false );
214
262
evc.setChecksInProgress (true );
263
+ vm.prank (address (evc));
264
+ vm.expectRevert (abi.encodeWithSelector (EVCUtil.NotAuthorized.selector ));
265
+ evcClient.calledByEVCAccount ();
266
+
215
267
vm.prank (address (evc));
216
268
vm.expectRevert (abi.encodeWithSelector (EVCUtil.NotAuthorized.selector ));
217
269
evcClient.calledByEVCAccountOwner ();
218
270
271
+ vm.prank (address (evc));
272
+ vm.expectRevert (abi.encodeWithSelector (EVCUtil.NotAuthorized.selector ));
273
+ evcClient.msgSenderOnlyEVCAccount ();
274
+
275
+ vm.prank (address (evc));
276
+ vm.expectRevert (abi.encodeWithSelector (EVCUtil.NotAuthorized.selector ));
277
+ evcClient.msgSenderOnlyEVCAccountOwner ();
278
+
219
279
// msg.sender is EVC, the owner is not registered yet
220
280
evc.setChecksInProgress (false );
221
281
evc.setOnBehalfOfAccount (caller);
282
+ assertEq (evc.getAccountOwner (caller), address (0 ));
283
+ vm.prank (address (evc));
284
+ evcClient.calledByEVCAccount ();
285
+
222
286
assertEq (evc.getAccountOwner (caller), address (0 ));
223
287
vm.prank (address (evc));
224
288
evcClient.calledByEVCAccountOwner ();
225
289
290
+ assertEq (evc.getAccountOwner (caller), address (0 ));
291
+ vm.prank (address (evc));
292
+ assertEq (evcClient.msgSenderOnlyEVCAccount (), caller);
293
+
294
+ assertEq (evc.getAccountOwner (caller), address (0 ));
295
+ vm.prank (address (evc));
296
+ assertEq (evcClient.msgSenderOnlyEVCAccountOwner (), caller);
297
+
226
298
// msg.sender is EVC, the owner is registered and the authenticated account is the owner
227
299
evc.setOnBehalfOfAccount (address (0 ));
228
300
vm.prank (caller);
229
301
evc.call (address (0 ), caller, 0 , "" );
230
302
assertEq (evc.getAccountOwner (caller), caller);
231
303
evc.setOnBehalfOfAccount (caller);
232
304
vm.prank (address (evc));
305
+ evcClient.calledByEVCAccount ();
306
+
307
+ assertEq (evc.getAccountOwner (caller), caller);
308
+ vm.prank (address (evc));
233
309
evcClient.calledByEVCAccountOwner ();
234
310
311
+ assertEq (evc.getAccountOwner (caller), caller);
312
+ vm.prank (address (evc));
313
+ assertEq (evcClient.msgSenderOnlyEVCAccount (), caller);
314
+
315
+ assertEq (evc.getAccountOwner (caller), caller);
316
+ vm.prank (address (evc));
317
+ assertEq (evcClient.msgSenderOnlyEVCAccountOwner (), caller);
318
+
235
319
// msg.sender is EVC, the owner is registered but the authenticated account is not the owner
236
320
evc.setOnBehalfOfAccount (address (uint160 (uint160 (caller) ^ id)));
321
+ vm.prank (address (evc));
322
+ evcClient.calledByEVCAccount ();
323
+
237
324
vm.prank (address (evc));
238
325
vm.expectRevert (abi.encodeWithSelector (EVCUtil.NotAuthorized.selector ));
239
326
evcClient.calledByEVCAccountOwner ();
327
+
328
+ vm.prank (address (evc));
329
+ assertEq (evcClient.msgSenderOnlyEVCAccount (), address (uint160 (uint160 (caller) ^ id)));
330
+
331
+ vm.prank (address (evc));
332
+ vm.expectRevert (abi.encodeWithSelector (EVCUtil.NotAuthorized.selector ));
333
+ evcClient.msgSenderOnlyEVCAccountOwner ();
240
334
}
241
335
242
336
function test_msgSender (address caller ) external {
0 commit comments