1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- import "helpers.spec"
- import "methods/IGovernor.spec"
- import "Governor.helpers.spec"
- /*
- โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
- โ Rule: state returns one of the value in the enumeration โ
- โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
- */
- rule stateConsistency(env e, uint256 pId) {
- uint8 result = state(e, pId);
- assert (
- result == PENDING() ||
- result == ACTIVE() ||
- result == CANCELED() ||
- result == DEFEATED() ||
- result == SUCCEEDED() ||
- result == QUEUED() ||
- result == EXECUTED()
- );
- }
- /*
- โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
- โ Rule: State transitions caused by function calls โ
- โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
- */
- rule stateTransitionFn(uint256 pId, env e, method f, calldataarg args)
- filtered { f -> !skip(f) }
- {
- require clock(e) > 0; // Sanity
- uint8 stateBefore = state(e, pId);
- f(e, args);
- uint8 stateAfter = state(e, pId);
- assert (stateBefore != stateAfter) => (
- stateBefore == UNSET() => (
- stateAfter == PENDING() && f.selector == propose(address[],uint256[],bytes[],string).selector
- ) &&
- stateBefore == PENDING() => (
- (stateAfter == CANCELED() && f.selector == cancel(address[],uint256[],bytes[],bytes32).selector)
- ) &&
- stateBefore == SUCCEEDED() => (
- (stateAfter == QUEUED() && f.selector == queue(address[],uint256[],bytes[],bytes32).selector) ||
- (stateAfter == EXECUTED() && f.selector == execute(address[],uint256[],bytes[],bytes32).selector)
- ) &&
- stateBefore == QUEUED() => (
- (stateAfter == EXECUTED() && f.selector == execute(address[],uint256[],bytes[],bytes32).selector)
- ) &&
- stateBefore == ACTIVE() => false &&
- stateBefore == CANCELED() => false &&
- stateBefore == DEFEATED() => false &&
- stateBefore == EXECUTED() => false
- );
- }
- /*
- โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
- โ Rule: State transitions caused by time passing โ
- โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
- */
- rule stateTransitionWait(uint256 pId, env e1, env e2) {
- require clock(e1) > 0; // Sanity
- require clock(e2) > clock(e1);
- uint8 stateBefore = state(e1, pId);
- uint8 stateAfter = state(e2, pId);
- assert (stateBefore != stateAfter) => (
- stateBefore == PENDING() => stateAfter == ACTIVE() &&
- stateBefore == ACTIVE() => (stateAfter == SUCCEEDED() || stateAfter == DEFEATED()) &&
- stateBefore == UNSET() => false &&
- stateBefore == SUCCEEDED() => false &&
- stateBefore == QUEUED() => false &&
- stateBefore == CANCELED() => false &&
- stateBefore == DEFEATED() => false &&
- stateBefore == EXECUTED() => false
- );
- }
|