specs.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. const product = (...arrays) => arrays.reduce((a, b) => a.flatMap(ai => b.map(bi => [ai, bi].flat())));
  2. module.exports = [
  3. {
  4. spec: 'AccessControl',
  5. contract: 'AccessControlHarness',
  6. files: ['certora/harnesses/AccessControlHarness.sol'],
  7. },
  8. {
  9. spec: 'Ownable',
  10. contract: 'OwnableHarness',
  11. files: ['certora/harnesses/OwnableHarness.sol'],
  12. },
  13. {
  14. spec: 'Ownable2Step',
  15. contract: 'Ownable2StepHarness',
  16. files: ['certora/harnesses/Ownable2StepHarness.sol'],
  17. },
  18. {
  19. spec: 'ERC20',
  20. contract: 'ERC20PermitHarness',
  21. files: ['certora/harnesses/ERC20PermitHarness.sol'],
  22. options: ['--optimistic_loop'],
  23. },
  24. {
  25. spec: 'ERC20FlashMint',
  26. contract: 'ERC20FlashMintHarness',
  27. files: ['certora/harnesses/ERC20FlashMintHarness.sol', 'certora/harnesses/ERC3156FlashBorrowerHarness.sol'],
  28. options: ['--optimistic_loop'],
  29. },
  30. {
  31. spec: 'ERC20Wrapper',
  32. contract: 'ERC20WrapperHarness',
  33. files: ['certora/harnesses/ERC20PermitHarness.sol', 'certora/harnesses/ERC20WrapperHarness.sol'],
  34. options: ['--link ERC20WrapperHarness:_underlying=ERC20PermitHarness', '--optimistic_loop'],
  35. },
  36. {
  37. spec: 'Initializable',
  38. contract: 'InitializableHarness',
  39. files: ['certora/harnesses/InitializableHarness.sol'],
  40. },
  41. ...product(
  42. ['GovernorBase', 'GovernorInvariants', 'GovernorStates', /*'GovernorFunctions'*/],
  43. ['ERC20VotesBlocknumberHarness', 'ERC20VotesTimestampHarness'],
  44. ).map(([spec, token]) => ({
  45. spec,
  46. contract: 'GovernorHarness',
  47. files: ['certora/harnesses/GovernorHarness.sol', `certora/harnesses/${token}.sol`],
  48. options: [`--link GovernorHarness:token=${token}`, '--optimistic_loop', '--optimistic_hashing'],
  49. })),
  50. ];