TimelockController.spec 1.4 KB

123456789101112131415161718192021222324252627282930313233343536
  1. methods {
  2. // hashOperation(address target, uint256 value, bytes data, bytes32 predecessor, bytes32 salt) returns(bytes32) => uniqueHashGhost(target, value, data, predecessor, salt)
  3. }
  4. // ghost uniqueHashGhost(address, uint256, bytes, bytes32, bytes32) returns bytes32;
  5. //
  6. // Assuming the hash is deterministic, and correlates the trio properly
  7. // function hashUniquness(address target1, uint256 value1, bytes data1, bytes32 predecessor1, bytes32 salt1,
  8. // address target2, uint256 value2, bytes data2, bytes32 predecessor2, bytes32 salt2){
  9. // require ((target1 != target2) || (value1 != value2) || (data1 != data2) || (predecessor1 != predecessor2) || (salt1 != salt2)) <=>
  10. // (uniqueHashGhost(target1, value1, data1, predecessor1, salt1) != uniqueHashGhost(target2, value2, data2, predecessor2, salt2));
  11. // }
  12. //
  13. //
  14. // rule keccakCheck(method f, env e){
  15. // address target;
  16. // uint256 value;
  17. // bytes data;
  18. // bytes32 predecessor;
  19. // bytes32 salt;
  20. //
  21. // hashUniquness(target, value, data, predecessor, salt,
  22. // target, value, data, predecessor, salt);
  23. //
  24. // bytes32 a = hashOperation(e, target, value, data, predecessor, salt);
  25. // bytes32 b = hashOperation(e, target, value, data, predecessor, salt);
  26. //
  27. // assert a == b, "hashes are different";
  28. // }
  29. rule sanity(method f) {
  30. env e;
  31. calldataarg arg;
  32. f(e, arg);
  33. assert false;
  34. }