@etherisc/gif-next 0.0.2-9d3eab3-323 → 0.0.2-9f827bd-593

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +29 -0
  3. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.json +33 -102
  5. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +29 -0
  7. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  8. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  10. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  11. package/artifacts/contracts/components/Pool.sol/Pool.json +33 -130
  12. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  13. package/artifacts/contracts/components/Product.sol/Product.json +33 -113
  14. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +1 -1
  15. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +1 -1
  16. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +1 -1
  17. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  18. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  34. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +1 -1
  35. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  36. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +2 -2
  37. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  38. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  39. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +13 -0
  40. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  41. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  42. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +75 -1
  43. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  44. package/artifacts/contracts/instance/Instance.sol/Instance.json +69 -603
  45. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  46. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +221 -114
  47. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +1 -1
  48. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +2 -2
  49. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  50. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +2 -2
  51. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  52. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +126 -229
  53. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  54. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +26 -126
  55. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  56. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +2 -2
  57. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
  58. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +11 -0
  59. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  60. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  61. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  62. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  63. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  64. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  65. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +59 -16
  66. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  67. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  68. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  69. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  70. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  71. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  72. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
  73. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +69 -24
  74. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  75. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +16 -24
  76. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  77. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +2 -2
  78. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  79. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +36 -14
  80. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +13 -21
  82. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
  83. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +23 -0
  84. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  86. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +107 -0
  88. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  90. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  91. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +223 -38
  92. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +48 -20
  94. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +36 -14
  96. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +13 -21
  98. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +36 -14
  100. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  101. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +8 -8
  102. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  103. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  104. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +72 -1
  105. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  106. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  107. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  108. package/artifacts/contracts/registry/Registry.sol/Registry.json +85 -59
  109. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
  110. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +33 -23
  111. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  112. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +14 -14
  113. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  114. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +13 -13
  115. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  116. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +89 -90
  117. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  118. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  119. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  120. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  121. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  122. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  123. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  124. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  125. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  126. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  127. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  128. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
  129. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  130. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
  131. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +1 -1
  132. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  133. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  134. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  135. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  136. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  137. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  138. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +2 -2
  139. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  140. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  141. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  142. package/artifacts/contracts/test/TestService.sol/TestService.json +2 -2
  143. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  144. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  145. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  146. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  147. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  148. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  149. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  150. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  151. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  152. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  153. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  154. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  155. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  156. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  157. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  158. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  159. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  160. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  161. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  162. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  163. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  164. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  165. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  166. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  167. package/contracts/components/BaseComponent.sol +35 -8
  168. package/contracts/components/Distribution.sol +1 -1
  169. package/contracts/components/IBaseComponent.sol +3 -0
  170. package/contracts/components/Pool.sol +1 -1
  171. package/contracts/components/Product.sol +1 -1
  172. package/contracts/instance/IInstance.sol +2 -0
  173. package/contracts/instance/IInstanceService.sol +9 -3
  174. package/contracts/instance/Instance.sol +9 -197
  175. package/contracts/instance/InstanceAccessManager.sol +92 -77
  176. package/contracts/instance/InstanceService.sol +115 -64
  177. package/contracts/instance/InstanceServiceManager.sol +5 -9
  178. package/contracts/instance/base/ComponentServiceBase.sol +21 -11
  179. package/contracts/instance/module/IAccess.sol +27 -17
  180. package/contracts/instance/service/BundleService.sol +15 -0
  181. package/contracts/instance/service/BundleServiceManager.sol +5 -9
  182. package/contracts/instance/service/ComponentOwnerService.sol +2 -2
  183. package/contracts/instance/service/DistributionService.sol +7 -8
  184. package/contracts/instance/service/DistributionServiceManager.sol +6 -10
  185. package/contracts/instance/service/IBundleService.sol +3 -6
  186. package/contracts/instance/service/IPolicyService.sol +7 -0
  187. package/contracts/instance/service/PolicyService.sol +58 -24
  188. package/contracts/instance/service/PoolService.sol +3 -1
  189. package/contracts/instance/service/PoolServiceManager.sol +5 -9
  190. package/contracts/instance/service/ProductService.sol +3 -1
  191. package/contracts/registry/IRegistry.sol +17 -3
  192. package/contracts/registry/IRegistryService.sol +1 -1
  193. package/contracts/registry/Registry.sol +30 -19
  194. package/contracts/registry/RegistryAccessManager.sol +27 -27
  195. package/contracts/registry/RegistryService.sol +8 -15
  196. package/contracts/registry/RegistryServiceManager.sol +4 -2
  197. package/contracts/registry/ReleaseManager.sol +83 -113
  198. package/contracts/registry/TokenRegistry.sol +4 -4
  199. package/contracts/types/RoleId.sol +6 -7
  200. package/package.json +1 -1
  201. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  202. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  203. package/contracts/instance/IAccessManagerSimple.sol +0 -391
@@ -2,29 +2,26 @@
2
2
  pragma solidity ^0.8.20;
3
3
 
4
4
  import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
5
- import {AccessManager} from "@openzeppelin/contracts/access/manager/AccessManager.sol";
6
5
 
7
6
  import {NftId} from "../types/NftId.sol";
8
7
  import {RoleId} from "../types/RoleId.sol";
9
- import {ObjectType, zeroObjectType, SERVICE} from "../types/ObjectType.sol";
8
+ import {ObjectType, ObjectTypeLib, zeroObjectType, REGISTRY, SERVICE} from "../types/ObjectType.sol";
10
9
  import {VersionPart, VersionPartLib} from "../types/Version.sol";
10
+ import {Timestamp, TimestampLib} from "../types/Timestamp.sol";
11
11
 
12
- import {IVersionable} from "../shared/IVersionable.sol";
13
12
  import {IService} from "../shared/IService.sol";
14
- import {ProxyManager} from "../shared/ProxyManager.sol";
15
13
 
16
14
  import {IRegistry} from "./IRegistry.sol";
17
15
  import {Registry} from "./Registry.sol";
18
16
  import {IRegistryService} from "./IRegistryService.sol";
19
- import {RegistryService} from "./RegistryService.sol";
20
- import {RegistryServiceManager} from "./RegistryServiceManager.sol";
21
17
  import {RegistryAccessManager} from "./RegistryAccessManager.sol";
22
18
 
23
19
 
24
20
  contract ReleaseManager is AccessManaged
25
21
  {
22
+ using ObjectTypeLib for ObjectType;
23
+
26
24
  event LogReleaseCreation(VersionPart version, IService registryService);
27
- event LogServiceRegistration(VersionPart majorVersion, ObjectType serviceDomain);
28
25
  event LogReleaseActivation(VersionPart version);
29
26
 
30
27
  // createNextRelease
@@ -34,7 +31,6 @@ contract ReleaseManager is AccessManaged
34
31
  // registerService
35
32
  error NotService();
36
33
  error ServiceNotInRelease(IService service, ObjectType serviceDomain);
37
- error ServiceAlreadyRegistered(address service);
38
34
 
39
35
  // activateNextRelease
40
36
  //error ReleaseNotCreated();
@@ -42,7 +38,7 @@ contract ReleaseManager is AccessManaged
42
38
 
43
39
  // _getAndVerifyContractInfo
44
40
  error UnexpectedRegisterableType(ObjectType expected, ObjectType found);
45
- error NotRegisterableOwner(address expectedOwner);
41
+ error NotRegisterableOwner(address notOwner);
46
42
  error SelfRegistration();
47
43
  error RegisterableOwnerIsRegistered();
48
44
 
@@ -52,20 +48,10 @@ contract ReleaseManager is AccessManaged
52
48
 
53
49
  // _verifyAndStoreConfig
54
50
  error ConfigMissing();
55
- error ConfigServiceTypeInvalid();
56
- error ConfigSelectorMissing();
57
- error ConfigSelectorZero();
58
- error ConfigSelectorAlreadyExists(VersionPart serviceVersion, ObjectType serviceDomain);
59
-
60
- struct ReleaseInfo {
61
- ObjectType[] types; // service types in release
62
- }
51
+ error ConfigServiceDomainInvalid(uint configArrayIndex, ObjectType domain);
52
+ error ConfigSelectorZero(uint configArrayIndex);
53
+ error SelectorAlreadyExists(VersionPart releaseVersion, ObjectType serviceDomain);
63
54
 
64
- // unique role for some service function
65
- struct ConfigInfo {
66
- bytes4[] selector; // selector used by service
67
- RoleId roleId; // roleId granted to service
68
- }
69
55
 
70
56
  RegistryAccessManager private immutable _accessManager;
71
57
  IRegistry private immutable _registry;
@@ -73,66 +59,68 @@ contract ReleaseManager is AccessManaged
73
59
  VersionPart _latest;// latest active version
74
60
  VersionPart immutable _initial;// first active version
75
61
 
76
- mapping(VersionPart version => ReleaseInfo info) _release;
77
-
78
- mapping(VersionPart version => mapping(ObjectType serviceDomain => ConfigInfo)) _config;
62
+ mapping(VersionPart version => IRegistry.ReleaseInfo info) _release;
79
63
 
80
- mapping(VersionPart version => mapping(ObjectType serviceDomain => address)) _service;
64
+ mapping(VersionPart version => mapping(ObjectType serviceDomain => bytes4)) _selector; // registry service function selector assigned to domain
81
65
 
82
66
  uint _awaitingRegistration; // "services left to register" counter
83
67
 
84
- mapping(address => bool) _isActiveRegistryService;
68
+ mapping(address registryService => bool isActive) _active;
85
69
 
86
70
  constructor(
87
71
  RegistryAccessManager accessManager,
88
72
  VersionPart initialVersion)
89
73
  AccessManaged(accessManager.authority())
90
74
  {
75
+ require(initialVersion.toInt() > 0, "ReleaseManager: initial version is 0");
76
+
91
77
  _accessManager = accessManager;
92
78
 
93
79
  _initial = initialVersion;
94
80
 
95
- _registry = new Registry(address(this), initialVersion);
81
+ _registry = new Registry();
96
82
  }
97
83
 
98
84
  // TODO deploy proxy and initialize with given implementation instead of using given proxy?
99
- function createNextRelease(IRegistryService registryService)
85
+ // IMPORTANT: MUST never be possible to create with access/release manager, token registry
86
+ function createNextRelease(IRegistryService service)
100
87
  external
101
88
  restricted // GIF_ADMIN_ROLE
102
89
  returns(NftId nftId)
103
90
  {
104
- if(!registryService.supportsInterface(type(IRegistryService).interfaceId)) {
91
+ if(!service.supportsInterface(type(IRegistryService).interfaceId)) {
105
92
  revert NotRegistryService();
106
93
  }
107
-
108
- if(registryService.authority() != _accessManager.authority()) {
94
+ // TODO unreliable! MUST guarantee the same authority -> how?
95
+ if(service.authority() != authority()) {
109
96
  revert UnexpectedServiceAuthority(
110
- _accessManager.authority(),
111
- registryService.authority());
97
+ authority(),
98
+ service.authority());
112
99
  }
113
100
 
114
101
  (
115
102
  IRegistry.ObjectInfo memory info,
116
103
  bytes memory data
117
- ) = _getAndVerifyContractInfo(registryService, SERVICE(), msg.sender);
118
-
119
- VersionPart nextVersion = getNextVersion();
120
- _verifyServiceInfo(info, nextVersion, SERVICE());
104
+ ) = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
121
105
 
122
- _verifyAndStoreConfig(data);
106
+ VersionPart version = getNextVersion();
107
+ ObjectType domain = REGISTRY();
108
+ _verifyServiceInfo(info, version, domain);
123
109
 
124
- //setTargetClosed(newRegistryService, true);
110
+ _createRelease(data);
125
111
 
126
- _registerService(address(registryService), nextVersion, SERVICE());
112
+ //setTargetClosed(service, true);
127
113
 
128
- nftId = _registry.registerService(info);
114
+ nftId = _registry.registerService(info, version, domain);
129
115
 
130
116
  // external call
131
- registryService.linkToRegisteredNftId();
117
+ service.linkToRegisteredNftId();
132
118
 
133
- emit LogReleaseCreation(nextVersion, registryService);
119
+ emit LogReleaseCreation(version, service);
134
120
  }
135
121
 
122
+ // TODO adding service to release -> synchronized with proxy upgrades or simple addServiceToRelease(service, version, selector)?
123
+ // TODO removing service from release? -> set _active to false forever, but keep all other records?
136
124
  function registerService(IService service)
137
125
  external
138
126
  restricted // GIF_MANAGER_ROLE
@@ -147,37 +135,35 @@ contract ReleaseManager is AccessManaged
147
135
  //bytes memory data
148
136
  ) = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
149
137
 
150
- VersionPart nextVersion = getNextVersion();
151
- ObjectType serviceDomain = _verifyServiceInfo(info, nextVersion, zeroObjectType());
138
+ VersionPart version = getNextVersion();
139
+ ObjectType domain = _verifyServiceInfo(info, version, zeroObjectType());
152
140
 
153
- bytes4[] memory selector = _config[nextVersion][serviceDomain].selector;
141
+ bytes4[] memory selector = new bytes4[](1);
142
+ selector[0] = _selector[version][domain];
154
143
 
155
144
  // service type is in release
156
- if(selector.length == 0) {
157
- revert ServiceNotInRelease(service, serviceDomain);
145
+ if(selector[0] == 0) {
146
+ revert ServiceNotInRelease(service, domain);
158
147
  }
159
148
 
160
149
  // setup and grant unique role
161
- address registryService = _registry.getServiceAddress(SERVICE(), nextVersion);
162
- RoleId roleId = _accessManager.setAndGrantUniqueRole(
150
+ address registryService = _registry.getServiceAddress(REGISTRY(), version);
151
+ _accessManager.setAndGrantUniqueRole(
163
152
  address(service),
164
153
  registryService,
165
154
  selector);
166
155
 
167
- _config[nextVersion][serviceDomain].roleId = roleId;
168
156
  _awaitingRegistration--;
169
157
 
170
158
  // activate release
171
159
  if(_awaitingRegistration == 0) {
172
- _latest = nextVersion;
173
- _isActiveRegistryService[registryService] = true;
160
+ _latest = version;
161
+ _active[registryService] = true;
174
162
 
175
- emit LogReleaseActivation(nextVersion);
163
+ emit LogReleaseActivation(version);
176
164
  }
177
165
 
178
- _registerService(address(service), nextVersion, serviceDomain);
179
-
180
- nftId = _registry.registerService(info);
166
+ nftId = _registry.registerService(info, version, domain);
181
167
 
182
168
  // external call
183
169
  service.linkToRegisteredNftId();
@@ -187,8 +173,8 @@ contract ReleaseManager is AccessManaged
187
173
  external
188
174
  restricted // GIF_ADMIN_ROLE
189
175
  {
190
- VersionPart nextVersion = getNextVersion();
191
- address service = _service[nextVersion][SERVICE()];
176
+ VersionPart version = getNextVersion();
177
+ address service = _registry.getServiceAddress(REGISTRY(), version);
192
178
 
193
179
  // release was created
194
180
  if(service == address(0)) {
@@ -200,19 +186,19 @@ contract ReleaseManager is AccessManaged
200
186
  revert ReleaseRegistrationNotFinished();
201
187
  }
202
188
 
203
- //setTargetClosed(newRegistryService, false);
189
+ //setTargetClosed(service, false);
204
190
 
205
- _latest = nextVersion;
206
- _isActiveRegistryService[service] = true;
191
+ _latest = version;
192
+ _active[service] = true;
207
193
 
208
- LogReleaseActivation(nextVersion);
194
+ LogReleaseActivation(version);
209
195
  }*/
210
196
 
211
197
  //--- view functions ----------------------------------------------------//
212
198
 
213
199
  function isActiveRegistryService(address service) external view returns(bool)
214
200
  {
215
- return _isActiveRegistryService[service];
201
+ return _active[service];
216
202
  }
217
203
 
218
204
  function getRegistry() external view returns(address)
@@ -220,14 +206,9 @@ contract ReleaseManager is AccessManaged
220
206
  return (address(_registry));
221
207
  }
222
208
 
223
- function getService(VersionPart serviceVersion, ObjectType serviceDomain) external view returns(address)
209
+ function getReleaseInfo(VersionPart version) external view returns(IRegistry.ReleaseInfo memory)
224
210
  {
225
- return _service[serviceVersion][serviceDomain];
226
- }
227
-
228
- function getReleaseInfo(VersionPart releaseVersion) external view returns(ReleaseInfo memory)
229
- {
230
- return _release[releaseVersion];
211
+ return _release[version];
231
212
  }
232
213
 
233
214
  function getNextVersion() public view returns(VersionPart)
@@ -249,22 +230,10 @@ contract ReleaseManager is AccessManaged
249
230
 
250
231
  //--- private functions ----------------------------------------------------//
251
232
 
252
- function _registerService(address service, VersionPart version, ObjectType serviceDomain)
253
- internal
254
- {
255
- if(_service[version][serviceDomain] > address(0)) {
256
- revert ServiceAlreadyRegistered(service);
257
- }
258
-
259
- _service[version][serviceDomain] = service;
260
-
261
- emit LogServiceRegistration(version, serviceDomain);
262
- }
263
-
264
233
  function _getAndVerifyContractInfo(
265
234
  IService service,
266
235
  ObjectType expectedType,
267
- address expectedOwner // assume alway valid, can not be 0
236
+ address expectedOwner // assume always valid, can not be 0
268
237
  )
269
238
  internal
270
239
  view
@@ -312,66 +281,67 @@ contract ReleaseManager is AccessManaged
312
281
  function _verifyServiceInfo(
313
282
  IRegistry.ObjectInfo memory info,
314
283
  VersionPart expectedVersion,
315
- ObjectType expectedType
284
+ ObjectType expectedDomain
316
285
  )
317
286
  internal
318
287
  view
319
288
  returns(ObjectType)
320
289
  {
321
290
  (
322
- ObjectType serviceDomain,
323
- VersionPart serviceVersion
291
+ ObjectType domain,
292
+ VersionPart version
324
293
  ) = abi.decode(info.data, (ObjectType, VersionPart));
325
294
 
326
- if(serviceVersion != expectedVersion) {
327
- revert UnexpectedServiceVersion(expectedVersion, serviceVersion);
295
+ if(version != expectedVersion) {
296
+ revert UnexpectedServiceVersion(expectedVersion, version);
328
297
  }
329
298
 
330
- if(expectedType != zeroObjectType()) {
331
- if(serviceDomain != expectedType) {
332
- revert UnexpectedServiceDomain(expectedType, serviceDomain);
299
+ if(expectedDomain.gtz()) {
300
+ if(domain != expectedDomain) {
301
+ revert UnexpectedServiceDomain(expectedDomain, domain);
333
302
  }
334
303
  }
335
304
 
336
- return serviceDomain;
305
+ return domain;
337
306
  }
338
307
 
339
- function _verifyAndStoreConfig(bytes memory configBytes)
308
+ // TODO check if registry supports types specified in the config array
309
+ function _createRelease(bytes memory configBytes)
340
310
  internal
341
311
  {
342
- VersionPart nextVersion = getNextVersion();
312
+ VersionPart version = getNextVersion();
343
313
  IRegistryService.FunctionConfig[] memory config = abi.decode(configBytes, (IRegistryService.FunctionConfig[]));
344
314
 
345
315
  if(config.length == 0) {
346
316
  revert ConfigMissing();
347
317
  }
348
318
  // always in release
349
- _release[nextVersion].types.push(SERVICE());
350
-
319
+ _release[version].domains.push(REGISTRY());
351
320
  for(uint idx = 0; idx < config.length; idx++)
352
321
  {
353
- ObjectType serviceDomain = config[idx].serviceDomain;
354
- bytes4[] memory selector = config[idx].selector;
322
+ ObjectType domain = config[idx].serviceDomain;
323
+ bytes4 selector = config[idx].selector;
355
324
 
356
- // not "registry service" type
357
- if(serviceDomain == SERVICE()) { revert ConfigServiceTypeInvalid(); }
325
+ // not "registry service" / zero domain
326
+ if(
327
+ domain == REGISTRY() ||
328
+ domain.eqz()
329
+ ) { revert ConfigServiceDomainInvalid(idx, domain); }
358
330
 
359
- // at least one selector exists
360
- if(selector.length == 0) { revert ConfigSelectorMissing(); }
361
-
362
- // no zero selectors
363
- for(uint jdx = 0; jdx < selector.length; jdx++) {
364
- if(selector[jdx] == 0) { revert ConfigSelectorZero(); }
365
- }
331
+ // selector not zero
332
+ if(selector == 0) { revert ConfigSelectorZero(idx); }
366
333
 
367
334
  // no overwrite
368
- if(_config[nextVersion][serviceDomain].selector.length > 0) {
369
- revert ConfigSelectorAlreadyExists(nextVersion, serviceDomain);
335
+ if(_selector[version][domain] > 0) {
336
+ revert SelectorAlreadyExists(version, domain);
370
337
  }
371
338
 
372
- _config[nextVersion][serviceDomain].selector = selector;
373
- _release[nextVersion].types.push(serviceDomain);
339
+ _selector[version][domain] = selector;
340
+ _release[version].domains.push(domain);
374
341
  }
342
+ // TODO set when activated?
343
+ _release[version].createdAt = TimestampLib.blockTimestamp();
344
+ //_release[version].updatedAt = TimestampLib.blockTimestamp();
375
345
 
376
346
  _awaitingRegistration = config.length;
377
347
  }
@@ -6,8 +6,8 @@ import {ERC165Checker} from "@openzeppelin/contracts/utils/introspection/ERC165C
6
6
 
7
7
  import {IRegisterable} from "../shared/IRegisterable.sol";
8
8
  import {IRegistry} from "./IRegistry.sol";
9
- import {Version, VersionPart, VersionLib, VersionPartLib} from "../types/Version.sol";
10
- import {ObjectType, SERVICE} from "../types/ObjectType.sol";
9
+ import {VersionPart} from "../types/Version.sol";
10
+ import {REGISTRY} from "../types/ObjectType.sol";
11
11
  import {NftOwnable} from "../shared/NftOwnable.sol";
12
12
 
13
13
  /// @title contract to register token per GIF major release.
@@ -37,8 +37,8 @@ contract TokenRegistry is
37
37
  onlyOwner
38
38
  {
39
39
  IRegistry registry = IRegistry(registryAddress);
40
- // TODO use _latest instead of next version -> _latest is 0 before first release activation
41
- address registryServiceAddress = registry.getServiceAddress(SERVICE(), registry.getMajorVersionMax());
40
+ // TODO use _latest instead of `next version` -> but _latest is 0 before first release activation
41
+ address registryServiceAddress = registry.getServiceAddress(REGISTRY(), registry.getMajorVersionMax());
42
42
 
43
43
  _linkToNftOwnable(registryAddress, registryServiceAddress);
44
44
  }
@@ -24,20 +24,19 @@ function PRODUCT_OWNER_ROLE_NAME() pure returns (string memory) { return "Produc
24
24
 
25
25
  function ADMIN_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(0); }
26
26
 
27
- // TODO correct numbers (maybe they are already defined in RegistryService)
28
27
  function DISTRIBUTION_OWNER_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(100); }
29
28
  function ORACLE_OWNER_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(200); }
30
29
  function POOL_OWNER_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(300); }
31
30
  function PRODUCT_OWNER_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(400); }
32
31
 
33
32
 
34
- function DISTRIBUTION_SERVICE_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(10000); }
35
- function POOL_SERVICE_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(10100); }
36
- function PRODUCT_SERVICE_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(10200); }
37
- function POLICY_SERVICE_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(10300); }
38
- function BUNDLE_SERVICE_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(10400); }
33
+ function INSTANCE_SERVICE_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(2000); }
34
+ function DISTRIBUTION_SERVICE_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(2100); }
35
+ function POOL_SERVICE_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(2200); }
36
+ function PRODUCT_SERVICE_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(2300); }
37
+ function POLICY_SERVICE_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(2400); }
38
+ function BUNDLE_SERVICE_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(2500); }
39
39
 
40
- function INSTANCE_SERVICE_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(11000); }
41
40
 
42
41
  function REGISTRY_SERVICE_ADMIN_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(1500); }
43
42
  function REGISTRY_SERVICE_MANAGER_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(1600); }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@etherisc/gif-next",
3
- "version": "0.0.2-9d3eab3-323",
3
+ "version": "0.0.2-9f827bd-593",
4
4
  "description": "This is the repository for the next version of the Generic Insurance Framework (GIF) smart contracts. ",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -1,4 +0,0 @@
1
- {
2
- "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/9e136355c5434b5ac775c99554f09c5c.json"
4
- }