You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
31 lines
1.1 KiB
31 lines
1.1 KiB
definition knownAsNonPrivileged(method f) returns bool = false
|
|
/* ( f.selector == isWhitelistedOtoken(address).selector ||
|
|
f.selector == isWhitelistedProduct(address,address,address,bool).selector ||
|
|
f.selector == owner().selector ||
|
|
f.selector == isWhitelistedCallee(address).selector ||
|
|
f.selector == whitelistOtoken(address).selector ||
|
|
f.selector == addressBook().selector ||
|
|
f.selector == isWhitelistedCollateral(address).selector )*/;
|
|
|
|
|
|
|
|
rule privilegedOperation(method f, address privileged)
|
|
description "$f can be called by more than one user without reverting"
|
|
{
|
|
env e1;
|
|
calldataarg arg;
|
|
require !knownAsNonPrivileged(f);
|
|
require e1.msg.sender == privileged;
|
|
|
|
storage initialStorage = lastStorage;
|
|
invoke f(e1, arg); // privileged succeeds executing candidate privileged operation.
|
|
bool firstSucceeded = !lastReverted;
|
|
|
|
env e2;
|
|
calldataarg arg2;
|
|
require e2.msg.sender != privileged;
|
|
invoke f(e2, arg2) at initialStorage; // unprivileged
|
|
bool secondSucceeded = !lastReverted;
|
|
|
|
assert !(firstSucceeded && secondSucceeded), "${f.selector} can be called by both ${e1.msg.sender} and ${e2.msg.sender}, so it is not privileged";
|
|
}
|
|
|