InitializableComplexHarness.sol 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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(uint256 _val, uint256 _a, uint256 _b) initializer public {
  39. val = _val;
  40. __InitializableA_init(_a);
  41. __InitializableB_init(_b);
  42. }
  43. function reinitialize(uint256 _val, uint256 _a, uint256 _b, uint8 n) reinitializer(n) public {
  44. val = _val;
  45. __InitializableA_init(_a);
  46. __InitializableB_init(_b);
  47. }
  48. function returnsV1() public view version1 returns(uint256) {
  49. return val;
  50. }
  51. function returnsVN(uint8 n) public view versionN(n) returns(uint256) {
  52. return val;
  53. }
  54. // Harness //
  55. function initialized() public view returns(uint8) {
  56. return _initialized;
  57. }
  58. function initializing() public view returns(bool) {
  59. return _initializing;
  60. }
  61. function thisIsContract() public view returns(bool) {
  62. return !Address.isContract(address(this));
  63. }
  64. }