@etherisc/gif-next 0.0.2-9d3eab3-323 → 0.0.2-9dd1984-554

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 (222) hide show
  1. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  2. package/artifacts/contracts/components/{BaseComponent.sol/BaseComponent.json → Component.sol/Component.json} +51 -6
  3. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.json +51 -104
  5. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  6. package/artifacts/contracts/components/{IBaseComponent.sol/IBaseComponent.json → IComponent.sol/IComponent.json} +51 -6
  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/IProductComponent.sol/IProductComponent.json +5 -5
  11. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  12. package/artifacts/contracts/components/Pool.sol/Pool.json +51 -132
  13. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  14. package/artifacts/contracts/components/Product.sol/Product.json +56 -120
  15. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +1 -1
  16. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +1 -1
  17. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +1 -1
  18. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  35. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +1 -1
  36. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  37. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +2 -2
  38. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  39. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  40. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +90 -13
  41. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  42. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  43. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +75 -1
  44. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  45. package/artifacts/contracts/instance/Instance.sol/Instance.json +56 -616
  46. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  47. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +221 -114
  48. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +1 -1
  49. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +2 -2
  50. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  51. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +2 -2
  52. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  53. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +126 -229
  54. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  55. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +26 -126
  56. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  57. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +2 -2
  58. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  59. package/artifacts/contracts/instance/base/{ComponentServiceBase.sol/ComponentServiceBase.json → ComponentService.sol/ComponentService.json} +98 -24
  60. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  61. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -13
  62. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  63. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  64. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  65. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  66. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  67. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +59 -16
  68. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  69. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  70. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  71. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  72. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  73. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  74. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
  75. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +219 -48
  76. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  77. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +20 -24
  78. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  79. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +131 -38
  80. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +17 -21
  82. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
  83. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +51 -0
  84. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  86. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +107 -0
  87. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  88. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  90. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +308 -60
  91. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  92. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +48 -20
  93. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  94. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +131 -38
  95. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  96. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +17 -21
  97. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  98. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +131 -38
  99. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  100. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +13 -9
  101. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  102. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  103. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +72 -1
  104. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  105. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +3 -3
  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 +17 -17
  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 +84 -101
  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/Service.sol/Service.dbg.json +1 -1
  132. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  133. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  134. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  135. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  136. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  137. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +2 -2
  138. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  139. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  140. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  141. package/artifacts/contracts/test/TestService.sol/TestService.json +2 -2
  142. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  143. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  144. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  145. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  146. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  147. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  148. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  149. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  150. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  151. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  152. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  153. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  154. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  155. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  156. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  157. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  158. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  159. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  160. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  161. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  162. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  163. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  164. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  165. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  166. package/contracts/components/Component.sol +177 -0
  167. package/contracts/components/Distribution.sol +5 -14
  168. package/contracts/components/{IBaseComponent.sol → IComponent.sol} +12 -6
  169. package/contracts/components/IProductComponent.sol +2 -2
  170. package/contracts/components/Pool.sol +7 -20
  171. package/contracts/components/Product.sol +21 -18
  172. package/contracts/instance/IInstance.sol +3 -3
  173. package/contracts/instance/IInstanceBase.sol +0 -1
  174. package/contracts/instance/IInstanceService.sol +10 -4
  175. package/contracts/instance/Instance.sol +6 -208
  176. package/contracts/instance/InstanceAccessManager.sol +92 -77
  177. package/contracts/instance/InstanceBase.sol +0 -2
  178. package/contracts/instance/InstanceService.sol +117 -71
  179. package/contracts/instance/InstanceServiceManager.sol +5 -9
  180. package/contracts/instance/base/ComponentService.sol +133 -0
  181. package/contracts/instance/base/IInstanceBase.sol +0 -2
  182. package/contracts/instance/module/IAccess.sol +27 -17
  183. package/contracts/instance/service/BundleService.sol +38 -5
  184. package/contracts/instance/service/BundleServiceManager.sol +5 -9
  185. package/contracts/instance/service/DistributionService.sol +33 -32
  186. package/contracts/instance/service/DistributionServiceManager.sol +6 -10
  187. package/contracts/instance/service/IBundleService.sol +5 -6
  188. package/contracts/instance/service/IPolicyService.sol +7 -0
  189. package/contracts/instance/service/PolicyService.sol +62 -27
  190. package/contracts/instance/service/PoolService.sol +46 -26
  191. package/contracts/instance/service/PoolServiceManager.sol +5 -9
  192. package/contracts/instance/service/ProductService.sol +104 -31
  193. package/contracts/registry/IRegistry.sol +17 -3
  194. package/contracts/registry/IRegistryService.sol +5 -5
  195. package/contracts/registry/Registry.sol +30 -19
  196. package/contracts/registry/RegistryAccessManager.sol +27 -27
  197. package/contracts/registry/RegistryService.sol +22 -32
  198. package/contracts/registry/RegistryServiceManager.sol +4 -2
  199. package/contracts/registry/ReleaseManager.sol +87 -123
  200. package/contracts/registry/TokenRegistry.sol +4 -4
  201. package/contracts/shared/IRegisterable.sol +0 -2
  202. package/contracts/shared/NftOwnable.sol +2 -0
  203. package/contracts/shared/Service.sol +4 -2
  204. package/contracts/types/RoleId.sol +6 -7
  205. package/package.json +1 -1
  206. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  207. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  208. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  209. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  210. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  211. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  212. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -814
  213. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  214. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +0 -466
  215. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  216. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +0 -442
  217. package/contracts/components/BaseComponent.sol +0 -132
  218. package/contracts/instance/IAccessManagerSimple.sol +0 -391
  219. package/contracts/instance/base/ComponentServiceBase.sol +0 -72
  220. package/contracts/instance/service/ComponentOwnerService.sol +0 -315
  221. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  222. package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -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
@@ -33,8 +30,6 @@ contract ReleaseManager is AccessManaged
33
30
 
34
31
  // registerService
35
32
  error NotService();
36
- error ServiceNotInRelease(IService service, ObjectType serviceDomain);
37
- error ServiceAlreadyRegistered(address service);
38
33
 
39
34
  // activateNextRelease
40
35
  //error ReleaseNotCreated();
@@ -42,7 +37,7 @@ contract ReleaseManager is AccessManaged
42
37
 
43
38
  // _getAndVerifyContractInfo
44
39
  error UnexpectedRegisterableType(ObjectType expected, ObjectType found);
45
- error NotRegisterableOwner(address expectedOwner);
40
+ error NotRegisterableOwner(address notOwner);
46
41
  error SelfRegistration();
47
42
  error RegisterableOwnerIsRegistered();
48
43
 
@@ -52,20 +47,10 @@ contract ReleaseManager is AccessManaged
52
47
 
53
48
  // _verifyAndStoreConfig
54
49
  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
- }
50
+ error ConfigServiceDomainInvalid(uint configArrayIndex, ObjectType domain);
51
+ error ConfigSelectorZero(uint configArrayIndex);
52
+ error SelectorAlreadyExists(VersionPart releaseVersion, ObjectType serviceDomain);
63
53
 
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
54
 
70
55
  RegistryAccessManager private immutable _accessManager;
71
56
  IRegistry private immutable _registry;
@@ -73,66 +58,69 @@ contract ReleaseManager is AccessManaged
73
58
  VersionPart _latest;// latest active version
74
59
  VersionPart immutable _initial;// first active version
75
60
 
76
- mapping(VersionPart version => ReleaseInfo info) _release;
61
+ mapping(VersionPart version => IRegistry.ReleaseInfo info) _release;
77
62
 
78
- mapping(VersionPart version => mapping(ObjectType serviceDomain => ConfigInfo)) _config;
79
-
80
- mapping(VersionPart version => mapping(ObjectType serviceDomain => address)) _service;
63
+ mapping(VersionPart version => mapping(ObjectType serviceDomain => bytes4)) _selector; // registry service function selector assigned to domain
81
64
 
82
65
  uint _awaitingRegistration; // "services left to register" counter
83
66
 
84
- mapping(address => bool) _isActiveRegistryService;
67
+ mapping(address registryService => bool isActive) _active;
85
68
 
86
69
  constructor(
87
70
  RegistryAccessManager accessManager,
88
71
  VersionPart initialVersion)
89
72
  AccessManaged(accessManager.authority())
90
73
  {
74
+ require(initialVersion.toInt() > 0, "ReleaseManager: initial version is 0");
75
+
91
76
  _accessManager = accessManager;
92
77
 
93
78
  _initial = initialVersion;
94
79
 
95
- _registry = new Registry(address(this), initialVersion);
80
+ _registry = new Registry();
96
81
  }
97
82
 
98
83
  // TODO deploy proxy and initialize with given implementation instead of using given proxy?
99
- function createNextRelease(IRegistryService registryService)
84
+ // IMPORTANT: MUST never be possible to create with access/release manager, token registry
85
+ function createNextRelease(IRegistryService service)
100
86
  external
101
87
  restricted // GIF_ADMIN_ROLE
102
88
  returns(NftId nftId)
103
89
  {
104
- if(!registryService.supportsInterface(type(IRegistryService).interfaceId)) {
90
+ if(!service.supportsInterface(type(IRegistryService).interfaceId)) {
105
91
  revert NotRegistryService();
106
92
  }
107
-
108
- if(registryService.authority() != _accessManager.authority()) {
93
+ // TODO unreliable! MUST guarantee the same authority -> how?
94
+ address serviceAuthority = service.authority();
95
+ if(serviceAuthority != authority()) {
109
96
  revert UnexpectedServiceAuthority(
110
- _accessManager.authority(),
111
- registryService.authority());
97
+ authority(),
98
+ serviceAuthority);
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,32 @@ 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());
152
-
153
- bytes4[] memory selector = _config[nextVersion][serviceDomain].selector;
154
-
155
- // service type is in release
156
- if(selector.length == 0) {
157
- revert ServiceNotInRelease(service, serviceDomain);
138
+ VersionPart version = getNextVersion();
139
+ ObjectType domain = _release[version].domains[_awaitingRegistration];// reversed registration order of services specified in RegistryService config
140
+ _verifyServiceInfo(info, version, domain);
141
+
142
+ // setup and grant unique role if service does registrations
143
+ address registryService = _registry.getServiceAddress(REGISTRY(), version);
144
+ bytes4[] memory selector = new bytes4[](1);
145
+ selector[0] = _selector[version][domain];
146
+ if(selector[0] != 0) {
147
+ _accessManager.setAndGrantUniqueRole(
148
+ address(service),
149
+ registryService,
150
+ selector);
158
151
  }
159
152
 
160
- // setup and grant unique role
161
- address registryService = _registry.getServiceAddress(SERVICE(), nextVersion);
162
- RoleId roleId = _accessManager.setAndGrantUniqueRole(
163
- address(service),
164
- registryService,
165
- selector);
166
-
167
- _config[nextVersion][serviceDomain].roleId = roleId;
168
153
  _awaitingRegistration--;
169
154
 
170
155
  // activate release
171
156
  if(_awaitingRegistration == 0) {
172
- _latest = nextVersion;
173
- _isActiveRegistryService[registryService] = true;
157
+ _latest = version;
158
+ _active[registryService] = true;
174
159
 
175
- emit LogReleaseActivation(nextVersion);
160
+ emit LogReleaseActivation(version);
176
161
  }
177
162
 
178
- _registerService(address(service), nextVersion, serviceDomain);
179
-
180
- nftId = _registry.registerService(info);
163
+ nftId = _registry.registerService(info, version, domain);
181
164
 
182
165
  // external call
183
166
  service.linkToRegisteredNftId();
@@ -187,8 +170,8 @@ contract ReleaseManager is AccessManaged
187
170
  external
188
171
  restricted // GIF_ADMIN_ROLE
189
172
  {
190
- VersionPart nextVersion = getNextVersion();
191
- address service = _service[nextVersion][SERVICE()];
173
+ VersionPart version = getNextVersion();
174
+ address service = _registry.getServiceAddress(REGISTRY(), version);
192
175
 
193
176
  // release was created
194
177
  if(service == address(0)) {
@@ -200,19 +183,19 @@ contract ReleaseManager is AccessManaged
200
183
  revert ReleaseRegistrationNotFinished();
201
184
  }
202
185
 
203
- //setTargetClosed(newRegistryService, false);
186
+ //setTargetClosed(service, false);
204
187
 
205
- _latest = nextVersion;
206
- _isActiveRegistryService[service] = true;
188
+ _latest = version;
189
+ _active[service] = true;
207
190
 
208
- LogReleaseActivation(nextVersion);
191
+ LogReleaseActivation(version);
209
192
  }*/
210
193
 
211
194
  //--- view functions ----------------------------------------------------//
212
195
 
213
196
  function isActiveRegistryService(address service) external view returns(bool)
214
197
  {
215
- return _isActiveRegistryService[service];
198
+ return _active[service];
216
199
  }
217
200
 
218
201
  function getRegistry() external view returns(address)
@@ -220,14 +203,9 @@ contract ReleaseManager is AccessManaged
220
203
  return (address(_registry));
221
204
  }
222
205
 
223
- function getService(VersionPart serviceVersion, ObjectType serviceDomain) external view returns(address)
206
+ function getReleaseInfo(VersionPart version) external view returns(IRegistry.ReleaseInfo memory)
224
207
  {
225
- return _service[serviceVersion][serviceDomain];
226
- }
227
-
228
- function getReleaseInfo(VersionPart releaseVersion) external view returns(ReleaseInfo memory)
229
- {
230
- return _release[releaseVersion];
208
+ return _release[version];
231
209
  }
232
210
 
233
211
  function getNextVersion() public view returns(VersionPart)
@@ -249,22 +227,10 @@ contract ReleaseManager is AccessManaged
249
227
 
250
228
  //--- private functions ----------------------------------------------------//
251
229
 
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
230
  function _getAndVerifyContractInfo(
265
231
  IService service,
266
232
  ObjectType expectedType,
267
- address expectedOwner // assume alway valid, can not be 0
233
+ address expectedOwner // assume always valid, can not be 0
268
234
  )
269
235
  internal
270
236
  view
@@ -312,66 +278,64 @@ contract ReleaseManager is AccessManaged
312
278
  function _verifyServiceInfo(
313
279
  IRegistry.ObjectInfo memory info,
314
280
  VersionPart expectedVersion,
315
- ObjectType expectedType
281
+ ObjectType expectedDomain
316
282
  )
317
283
  internal
318
284
  view
319
285
  returns(ObjectType)
320
286
  {
321
287
  (
322
- ObjectType serviceDomain,
323
- VersionPart serviceVersion
288
+ ObjectType domain,
289
+ VersionPart version
324
290
  ) = abi.decode(info.data, (ObjectType, VersionPart));
325
291
 
326
- if(serviceVersion != expectedVersion) {
327
- revert UnexpectedServiceVersion(expectedVersion, serviceVersion);
292
+ if(version != expectedVersion) {
293
+ revert UnexpectedServiceVersion(expectedVersion, version);
328
294
  }
329
295
 
330
- if(expectedType != zeroObjectType()) {
331
- if(serviceDomain != expectedType) {
332
- revert UnexpectedServiceDomain(expectedType, serviceDomain);
296
+ if(expectedDomain.gtz()) {
297
+ if(domain != expectedDomain) {
298
+ revert UnexpectedServiceDomain(expectedDomain, domain);
333
299
  }
334
300
  }
335
301
 
336
- return serviceDomain;
302
+ return domain;
337
303
  }
338
304
 
339
- function _verifyAndStoreConfig(bytes memory configBytes)
305
+ // TODO check if registry supports types specified in the config array
306
+ function _createRelease(bytes memory configBytes)
340
307
  internal
341
308
  {
342
- VersionPart nextVersion = getNextVersion();
309
+ VersionPart version = getNextVersion();
343
310
  IRegistryService.FunctionConfig[] memory config = abi.decode(configBytes, (IRegistryService.FunctionConfig[]));
344
311
 
345
312
  if(config.length == 0) {
346
313
  revert ConfigMissing();
347
314
  }
348
315
  // always in release
349
- _release[nextVersion].types.push(SERVICE());
350
-
316
+ _release[version].domains.push(REGISTRY());
351
317
  for(uint idx = 0; idx < config.length; idx++)
352
318
  {
353
- ObjectType serviceDomain = config[idx].serviceDomain;
354
- bytes4[] memory selector = config[idx].selector;
319
+ ObjectType domain = config[idx].serviceDomain;
320
+ bytes4 selector = config[idx].selector;
355
321
 
356
- // not "registry service" type
357
- if(serviceDomain == SERVICE()) { revert ConfigServiceTypeInvalid(); }
358
-
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
- }
322
+ // not "registry service" / zero domain
323
+ if(
324
+ domain == REGISTRY() ||
325
+ domain.eqz()
326
+ ) { revert ConfigServiceDomainInvalid(idx, domain); }
366
327
 
367
328
  // no overwrite
368
- if(_config[nextVersion][serviceDomain].selector.length > 0) {
369
- revert ConfigSelectorAlreadyExists(nextVersion, serviceDomain);
329
+ if(_selector[version][domain] > 0) {
330
+ revert SelectorAlreadyExists(version, domain);
370
331
  }
371
332
 
372
- _config[nextVersion][serviceDomain].selector = selector;
373
- _release[nextVersion].types.push(serviceDomain);
333
+ _selector[version][domain] = selector;
334
+ _release[version].domains.push(domain);
374
335
  }
336
+ // TODO set when activated?
337
+ _release[version].createdAt = TimestampLib.blockTimestamp();
338
+ //_release[version].updatedAt = TimestampLib.blockTimestamp();
375
339
 
376
340
  _awaitingRegistration = config.length;
377
341
  }
@@ -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
  }
@@ -5,8 +5,6 @@ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
5
 
6
6
  import {INftOwnable} from "./INftOwnable.sol";
7
7
  import {IRegistry} from "../registry/IRegistry.sol";
8
- import {NftId} from "../types/NftId.sol";
9
- import {ObjectType} from "../types/ObjectType.sol";
10
8
 
11
9
  interface IRegisterable is IERC165, INftOwnable {
12
10
 
@@ -5,8 +5,10 @@ import {INftOwnable} from "./INftOwnable.sol";
5
5
  import {IRegistry} from "../registry/IRegistry.sol";
6
6
  import {NftId, zeroNftId} from "../types/NftId.sol";
7
7
 
8
+ // TODO make contract upgradeable
8
9
  contract NftOwnable is INftOwnable {
9
10
 
11
+ // TODO move vars to struct and add _getNftOwnableStorage
10
12
  IRegistry internal _registry;
11
13
  NftId private _nftId;
12
14
  address private _initialOwner;
@@ -8,14 +8,16 @@ import {Version, VersionPart, VersionLib} from "../types/Version.sol";
8
8
  import {Versionable} from "./Versionable.sol";
9
9
  import {IService} from "./IService.sol";
10
10
  import {IVersionable} from "./IVersionable.sol";
11
- import {RegisterableUpgradable} from "./RegisterableUpgradable.sol";
11
+ import {Versionable} from "./Versionable.sol";
12
+ import {Registerable} from "./Registerable.sol";
12
13
 
13
14
  import {IRegistry} from "../registry/IRegistry.sol";
14
15
 
15
16
 
16
17
  /// @dev service base contract
17
18
  abstract contract Service is
18
- RegisterableUpgradable,
19
+ Registerable,
20
+ Versionable,
19
21
  IService
20
22
  {
21
23
  function getDomain() public pure virtual override returns(ObjectType);
@@ -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-9dd1984-554",
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
- }
@@ -1,4 +0,0 @@
1
- {
2
- "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/9e136355c5434b5ac775c99554f09c5c.json"
4
- }
@@ -1,4 +0,0 @@
1
- {
2
- "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/9e136355c5434b5ac775c99554f09c5c.json"
4
- }