mirror of openzeppelin-contracts
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.
 
 
 
 
 
openzeppelin-contracts/certora/specs/Privileged.spec

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";
}