InitializableComplexHarness.sol 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. // SPDX-License-Identifier: MIT
  2. pragma solidity ^0.8.2;
  3. import "../munged/proxy/utils/Initializable.sol";
  4. contract InitializableA is Initializable {
  5. uint256 public a;
  6. modifier version1() {
  7. require(_initialized == 1);
  8. _;
  9. }
  10. modifier versionN(uint8 n) {
  11. require(_initialized == n);
  12. _;
  13. }
  14. function __InitializableA_init(uint256 _a) internal onlyInitializing {
  15. a = _a;
  16. }
  17. function returnsAV1() public view version1 returns (uint256) {
  18. return a;
  19. }
  20. function returnsAVN(uint8 n) public view versionN(n) returns (uint256) {
  21. return a;
  22. }
  23. }
  24. contract InitializableB is Initializable, InitializableA {
  25. uint256 public b;
  26. function __InitializableB_init(uint256 _b) internal onlyInitializing {
  27. b = _b;
  28. }
  29. function returnsBV1() public view version1 returns (uint256) {
  30. return b;
  31. }
  32. function returnsBVN(uint8 n) public view versionN(n) returns (uint256) {
  33. return b;
  34. }
  35. }
  36. contract InitializableComplexHarness is Initializable, InitializableB {
  37. uint256 public val;
  38. function initialize(
  39. uint256 _val,
  40. uint256 _a,
  41. uint256 _b
  42. ) public initializer {
  43. val = _val;
  44. __InitializableA_init(_a);
  45. __InitializableB_init(_b);
  46. }
  47. function reinitialize(
  48. uint256 _val,
  49. uint256 _a,
  50. uint256 _b,
  51. uint8 n
  52. ) public reinitializer(n) {
  53. val = _val;
  54. __InitializableA_init(_a);
  55. __InitializableB_init(_b);
  56. }
  57. function returnsV1() public view version1 returns (uint256) {
  58. return val;
  59. }
  60. function returnsVN(uint8 n) public view versionN(n) returns (uint256) {
  61. return val;
  62. }
  63. // Harness //
  64. function initialized() public view returns (uint8) {
  65. return _initialized;
  66. }
  67. function initializing() public view returns (bool) {
  68. return _initializing;
  69. }
  70. function thisIsContract() public view returns (bool) {
  71. return !Address.isContract(address(this));
  72. }
  73. }