@etherisc/gif-next 0.0.2-9c44ae6-473 → 0.0.2-9d3eab3-323

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 (230) hide show
  1. package/README.md +20 -1
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  3. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +126 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +136 -10
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +88 -0
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +26 -0
  11. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  12. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  13. package/artifacts/contracts/components/Pool.sol/Pool.json +160 -8
  14. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  15. package/artifacts/contracts/components/Product.sol/Product.json +134 -8
  16. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +1 -1
  17. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +1 -1
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  36. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  37. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  38. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  39. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +45 -56
  40. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  41. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +1 -1
  42. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  43. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +26 -0
  44. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  45. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +448 -0
  46. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  47. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +25 -14
  48. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  49. package/artifacts/contracts/instance/Instance.sol/Instance.json +100 -139
  50. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  51. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +55 -32
  52. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  53. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +763 -0
  54. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  55. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +2 -2
  56. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  57. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +224 -128
  58. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  59. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +84 -36
  60. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  61. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +15 -2
  62. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
  63. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +13 -32
  64. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  65. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  66. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  67. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  68. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  69. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  70. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  71. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  72. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  73. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  74. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  75. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  76. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  77. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +923 -0
  78. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  79. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +440 -0
  80. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +39 -52
  82. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  83. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +27 -72
  84. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +15 -31
  86. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  87. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +669 -0
  88. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +13 -13
  90. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  91. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +13 -13
  92. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  93. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +664 -0
  94. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +15 -218
  96. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +17 -241
  98. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  99. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +971 -0
  100. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  101. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +464 -0
  102. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  103. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +26 -325
  104. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  105. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +15 -47
  106. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  107. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +28 -420
  108. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  109. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +13 -81
  110. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  111. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  112. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  113. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +87 -159
  114. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  115. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +94 -65
  116. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  117. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  118. package/artifacts/contracts/registry/Registry.sol/Registry.json +104 -212
  119. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  120. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +275 -0
  121. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  122. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +30 -128
  123. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  124. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +38 -104
  125. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  126. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
  127. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  128. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +14 -27
  129. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  130. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  131. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  132. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  133. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  134. package/artifacts/contracts/shared/IService.sol/IService.json +13 -13
  135. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  136. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  137. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  138. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  139. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
  140. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  141. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
  142. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +1 -1
  143. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  144. package/artifacts/contracts/shared/Service.sol/Service.json +13 -13
  145. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  146. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  147. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  148. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  149. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  150. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +2 -2
  151. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  152. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  153. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  154. package/artifacts/contracts/test/TestService.sol/TestService.json +31 -31
  155. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  156. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  157. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  158. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  159. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  160. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  161. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  162. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  163. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  164. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  165. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  166. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  167. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  168. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  169. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  170. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  172. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  173. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  174. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  175. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  176. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  177. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  178. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  179. package/contracts/components/BaseComponent.sol +49 -8
  180. package/contracts/components/IBaseComponent.sol +6 -0
  181. package/contracts/components/IPoolComponent.sol +4 -0
  182. package/contracts/components/Pool.sol +27 -3
  183. package/contracts/components/Product.sol +8 -5
  184. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
  185. package/contracts/instance/BundleManager.sol +1 -26
  186. package/contracts/instance/IInstance.sol +4 -0
  187. package/contracts/instance/IInstanceBase.sol +26 -0
  188. package/contracts/instance/IInstanceService.sol +4 -2
  189. package/contracts/instance/Instance.sol +30 -20
  190. package/contracts/instance/InstanceAccessManager.sol +6 -6
  191. package/contracts/instance/InstanceBase.sol +41 -0
  192. package/contracts/instance/InstanceService.sol +159 -92
  193. package/contracts/instance/InstanceServiceManager.sol +2 -1
  194. package/contracts/instance/ObjectManager.sol +7 -1
  195. package/contracts/instance/base/ComponentServiceBase.sol +17 -79
  196. package/contracts/instance/service/BundleService.sol +260 -0
  197. package/contracts/instance/service/BundleServiceManager.sol +55 -0
  198. package/contracts/instance/service/ComponentOwnerService.sol +4 -6
  199. package/contracts/instance/service/DistributionService.sol +40 -14
  200. package/contracts/instance/service/DistributionServiceManager.sol +2 -1
  201. package/contracts/instance/service/IBundleService.sol +45 -0
  202. package/contracts/instance/service/IPolicyService.sol +87 -0
  203. package/contracts/instance/service/IPoolService.sol +2 -33
  204. package/contracts/instance/service/IProductService.sol +2 -72
  205. package/contracts/instance/service/PolicyService.sol +503 -0
  206. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  207. package/contracts/instance/service/PoolService.sol +43 -149
  208. package/contracts/instance/service/PoolServiceManager.sol +2 -1
  209. package/contracts/instance/service/ProductService.sol +54 -456
  210. package/contracts/registry/ChainNft.sol +1 -1
  211. package/contracts/registry/IRegistry.sol +11 -15
  212. package/contracts/registry/IRegistryService.sol +13 -5
  213. package/contracts/registry/Registry.sol +135 -198
  214. package/contracts/registry/RegistryAccessManager.sol +210 -0
  215. package/contracts/registry/RegistryService.sol +55 -83
  216. package/contracts/registry/RegistryServiceManager.sol +15 -35
  217. package/contracts/registry/ReleaseManager.sol +378 -0
  218. package/contracts/registry/TokenRegistry.sol +4 -5
  219. package/contracts/shared/IService.sol +2 -1
  220. package/contracts/shared/ProxyManager.sol +1 -1
  221. package/contracts/shared/Service.sol +10 -7
  222. package/contracts/test/TestService.sol +3 -2
  223. package/contracts/types/RoleId.sol +6 -5
  224. package/package.json +1 -1
  225. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
  226. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.json +0 -101
  227. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
  228. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1132
  229. package/contracts/instance/AccessManagedSimple.sol +0 -115
  230. package/contracts/instance/AccessManagerSimple.sol +0 -692
@@ -0,0 +1,378 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
5
+ import {AccessManager} from "@openzeppelin/contracts/access/manager/AccessManager.sol";
6
+
7
+ import {NftId} from "../types/NftId.sol";
8
+ import {RoleId} from "../types/RoleId.sol";
9
+ import {ObjectType, zeroObjectType, SERVICE} from "../types/ObjectType.sol";
10
+ import {VersionPart, VersionPartLib} from "../types/Version.sol";
11
+
12
+ import {IVersionable} from "../shared/IVersionable.sol";
13
+ import {IService} from "../shared/IService.sol";
14
+ import {ProxyManager} from "../shared/ProxyManager.sol";
15
+
16
+ import {IRegistry} from "./IRegistry.sol";
17
+ import {Registry} from "./Registry.sol";
18
+ import {IRegistryService} from "./IRegistryService.sol";
19
+ import {RegistryService} from "./RegistryService.sol";
20
+ import {RegistryServiceManager} from "./RegistryServiceManager.sol";
21
+ import {RegistryAccessManager} from "./RegistryAccessManager.sol";
22
+
23
+
24
+ contract ReleaseManager is AccessManaged
25
+ {
26
+ event LogReleaseCreation(VersionPart version, IService registryService);
27
+ event LogServiceRegistration(VersionPart majorVersion, ObjectType serviceDomain);
28
+ event LogReleaseActivation(VersionPart version);
29
+
30
+ // createNextRelease
31
+ error NotRegistryService();
32
+ error UnexpectedServiceAuthority(address expected, address found);
33
+
34
+ // registerService
35
+ error NotService();
36
+ error ServiceNotInRelease(IService service, ObjectType serviceDomain);
37
+ error ServiceAlreadyRegistered(address service);
38
+
39
+ // activateNextRelease
40
+ //error ReleaseNotCreated();
41
+ //error ReleaseRegistrationNotFinished();
42
+
43
+ // _getAndVerifyContractInfo
44
+ error UnexpectedRegisterableType(ObjectType expected, ObjectType found);
45
+ error NotRegisterableOwner(address expectedOwner);
46
+ error SelfRegistration();
47
+ error RegisterableOwnerIsRegistered();
48
+
49
+ // _verifyServiceInfo
50
+ error UnexpectedServiceVersion(VersionPart expected, VersionPart found);
51
+ error UnexpectedServiceDomain(ObjectType expected, ObjectType found);
52
+
53
+ // _verifyAndStoreConfig
54
+ 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
+ }
63
+
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
+
70
+ RegistryAccessManager private immutable _accessManager;
71
+ IRegistry private immutable _registry;
72
+
73
+ VersionPart _latest;// latest active version
74
+ VersionPart immutable _initial;// first active version
75
+
76
+ mapping(VersionPart version => ReleaseInfo info) _release;
77
+
78
+ mapping(VersionPart version => mapping(ObjectType serviceDomain => ConfigInfo)) _config;
79
+
80
+ mapping(VersionPart version => mapping(ObjectType serviceDomain => address)) _service;
81
+
82
+ uint _awaitingRegistration; // "services left to register" counter
83
+
84
+ mapping(address => bool) _isActiveRegistryService;
85
+
86
+ constructor(
87
+ RegistryAccessManager accessManager,
88
+ VersionPart initialVersion)
89
+ AccessManaged(accessManager.authority())
90
+ {
91
+ _accessManager = accessManager;
92
+
93
+ _initial = initialVersion;
94
+
95
+ _registry = new Registry(address(this), initialVersion);
96
+ }
97
+
98
+ // TODO deploy proxy and initialize with given implementation instead of using given proxy?
99
+ function createNextRelease(IRegistryService registryService)
100
+ external
101
+ restricted // GIF_ADMIN_ROLE
102
+ returns(NftId nftId)
103
+ {
104
+ if(!registryService.supportsInterface(type(IRegistryService).interfaceId)) {
105
+ revert NotRegistryService();
106
+ }
107
+
108
+ if(registryService.authority() != _accessManager.authority()) {
109
+ revert UnexpectedServiceAuthority(
110
+ _accessManager.authority(),
111
+ registryService.authority());
112
+ }
113
+
114
+ (
115
+ IRegistry.ObjectInfo memory info,
116
+ bytes memory data
117
+ ) = _getAndVerifyContractInfo(registryService, SERVICE(), msg.sender);
118
+
119
+ VersionPart nextVersion = getNextVersion();
120
+ _verifyServiceInfo(info, nextVersion, SERVICE());
121
+
122
+ _verifyAndStoreConfig(data);
123
+
124
+ //setTargetClosed(newRegistryService, true);
125
+
126
+ _registerService(address(registryService), nextVersion, SERVICE());
127
+
128
+ nftId = _registry.registerService(info);
129
+
130
+ // external call
131
+ registryService.linkToRegisteredNftId();
132
+
133
+ emit LogReleaseCreation(nextVersion, registryService);
134
+ }
135
+
136
+ function registerService(IService service)
137
+ external
138
+ restricted // GIF_MANAGER_ROLE
139
+ returns(NftId nftId)
140
+ {
141
+ if(!service.supportsInterface(type(IService).interfaceId)) {
142
+ revert NotService();
143
+ }
144
+
145
+ (
146
+ IRegistry.ObjectInfo memory info,
147
+ //bytes memory data
148
+ ) = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
149
+
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);
158
+ }
159
+
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
+ _awaitingRegistration--;
169
+
170
+ // activate release
171
+ if(_awaitingRegistration == 0) {
172
+ _latest = nextVersion;
173
+ _isActiveRegistryService[registryService] = true;
174
+
175
+ emit LogReleaseActivation(nextVersion);
176
+ }
177
+
178
+ _registerService(address(service), nextVersion, serviceDomain);
179
+
180
+ nftId = _registry.registerService(info);
181
+
182
+ // external call
183
+ service.linkToRegisteredNftId();
184
+ }
185
+
186
+ /*function activateNextRelease()
187
+ external
188
+ restricted // GIF_ADMIN_ROLE
189
+ {
190
+ VersionPart nextVersion = getNextVersion();
191
+ address service = _service[nextVersion][SERVICE()];
192
+
193
+ // release was created
194
+ if(service == address(0)) {
195
+ revert ReleaseNotCreated();
196
+ }
197
+
198
+ // release fully deployed
199
+ if(_awaitingRegistration > 0) {
200
+ revert ReleaseRegistrationNotFinished();
201
+ }
202
+
203
+ //setTargetClosed(newRegistryService, false);
204
+
205
+ _latest = nextVersion;
206
+ _isActiveRegistryService[service] = true;
207
+
208
+ LogReleaseActivation(nextVersion);
209
+ }*/
210
+
211
+ //--- view functions ----------------------------------------------------//
212
+
213
+ function isActiveRegistryService(address service) external view returns(bool)
214
+ {
215
+ return _isActiveRegistryService[service];
216
+ }
217
+
218
+ function getRegistry() external view returns(address)
219
+ {
220
+ return (address(_registry));
221
+ }
222
+
223
+ function getService(VersionPart serviceVersion, ObjectType serviceDomain) external view returns(address)
224
+ {
225
+ return _service[serviceVersion][serviceDomain];
226
+ }
227
+
228
+ function getReleaseInfo(VersionPart releaseVersion) external view returns(ReleaseInfo memory)
229
+ {
230
+ return _release[releaseVersion];
231
+ }
232
+
233
+ function getNextVersion() public view returns(VersionPart)
234
+ {
235
+ uint256 latest = _latest.toInt();
236
+
237
+ return latest == 0 ?
238
+ _initial : // no active releases yet
239
+ VersionPartLib.toVersionPart(latest + 1);
240
+ }
241
+
242
+ function getLatestVersion() external view returns(VersionPart) {
243
+ return _latest;
244
+ }
245
+
246
+ function getInitialVersion() external view returns(VersionPart) {
247
+ return _initial;
248
+ }
249
+
250
+ //--- private functions ----------------------------------------------------//
251
+
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
+ function _getAndVerifyContractInfo(
265
+ IService service,
266
+ ObjectType expectedType,
267
+ address expectedOwner // assume alway valid, can not be 0
268
+ )
269
+ internal
270
+ view
271
+ returns(
272
+ IRegistry.ObjectInfo memory info,
273
+ bytes memory data
274
+ )
275
+ {
276
+ (info, data) = service.getInitialInfo();
277
+ info.objectAddress = address(service);
278
+ info.isInterceptor = false; // service is never interceptor, at least now
279
+
280
+ if(info.objectType != expectedType) {// type is checked in registry anyway...but service logic may depend on expected value
281
+ revert UnexpectedRegisterableType(expectedType, info.objectType);
282
+ }
283
+
284
+ address owner = info.initialOwner;
285
+
286
+ if(owner != expectedOwner) { // registerable owner protection
287
+ revert NotRegisterableOwner(expectedOwner);
288
+ }
289
+
290
+ if(owner == address(service)) {
291
+ revert SelfRegistration();
292
+ }
293
+
294
+ /*if(owner == address(0)) { // never 0
295
+ revert();// RegisterableOwnerIsZero();
296
+ }*/
297
+
298
+ if(_registry.isRegistered(owner)) {
299
+ revert RegisterableOwnerIsRegistered();
300
+ }
301
+
302
+ /*NftId parentNftId = info.parentNftId;
303
+ IRegistry.ObjectInfo memory parentInfo = getRegistry().getObjectInfo(parentNftId);
304
+
305
+ if(parentInfo.objectType != parentType) { // parent registration + type
306
+ revert InvalidParent(parentNftId);
307
+ }*/
308
+
309
+ return(info, data);
310
+ }
311
+
312
+ function _verifyServiceInfo(
313
+ IRegistry.ObjectInfo memory info,
314
+ VersionPart expectedVersion,
315
+ ObjectType expectedType
316
+ )
317
+ internal
318
+ view
319
+ returns(ObjectType)
320
+ {
321
+ (
322
+ ObjectType serviceDomain,
323
+ VersionPart serviceVersion
324
+ ) = abi.decode(info.data, (ObjectType, VersionPart));
325
+
326
+ if(serviceVersion != expectedVersion) {
327
+ revert UnexpectedServiceVersion(expectedVersion, serviceVersion);
328
+ }
329
+
330
+ if(expectedType != zeroObjectType()) {
331
+ if(serviceDomain != expectedType) {
332
+ revert UnexpectedServiceDomain(expectedType, serviceDomain);
333
+ }
334
+ }
335
+
336
+ return serviceDomain;
337
+ }
338
+
339
+ function _verifyAndStoreConfig(bytes memory configBytes)
340
+ internal
341
+ {
342
+ VersionPart nextVersion = getNextVersion();
343
+ IRegistryService.FunctionConfig[] memory config = abi.decode(configBytes, (IRegistryService.FunctionConfig[]));
344
+
345
+ if(config.length == 0) {
346
+ revert ConfigMissing();
347
+ }
348
+ // always in release
349
+ _release[nextVersion].types.push(SERVICE());
350
+
351
+ for(uint idx = 0; idx < config.length; idx++)
352
+ {
353
+ ObjectType serviceDomain = config[idx].serviceDomain;
354
+ bytes4[] memory selector = config[idx].selector;
355
+
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
+ }
366
+
367
+ // no overwrite
368
+ if(_config[nextVersion][serviceDomain].selector.length > 0) {
369
+ revert ConfigSelectorAlreadyExists(nextVersion, serviceDomain);
370
+ }
371
+
372
+ _config[nextVersion][serviceDomain].selector = selector;
373
+ _release[nextVersion].types.push(serviceDomain);
374
+ }
375
+
376
+ _awaitingRegistration = config.length;
377
+ }
378
+ }
@@ -7,15 +7,13 @@ import {ERC165Checker} from "@openzeppelin/contracts/utils/introspection/ERC165C
7
7
  import {IRegisterable} from "../shared/IRegisterable.sol";
8
8
  import {IRegistry} from "./IRegistry.sol";
9
9
  import {Version, VersionPart, VersionLib, VersionPartLib} from "../types/Version.sol";
10
+ import {ObjectType, SERVICE} from "../types/ObjectType.sol";
10
11
  import {NftOwnable} from "../shared/NftOwnable.sol";
11
12
 
12
13
  /// @title contract to register token per GIF major release.
13
14
  contract TokenRegistry is
14
15
  NftOwnable
15
16
  {
16
-
17
- string public constant REGISTRY_SERVICE_NAME = "RegistryService";
18
-
19
17
  event LogRegistered(address token, string symbol, uint256 decimals);
20
18
  event LogTokenStateSet(address token, VersionPart majorVersion, bool active);
21
19
 
@@ -39,7 +37,8 @@ contract TokenRegistry is
39
37
  onlyOwner
40
38
  {
41
39
  IRegistry registry = IRegistry(registryAddress);
42
- address registryServiceAddress = registry.getServiceAddress(REGISTRY_SERVICE_NAME, registry.getMajorVersion());
40
+ // TODO use _latest instead of next version -> _latest is 0 before first release activation
41
+ address registryServiceAddress = registry.getServiceAddress(SERVICE(), registry.getMajorVersionMax());
43
42
 
44
43
  _linkToNftOwnable(registryAddress, registryServiceAddress);
45
44
  }
@@ -80,7 +79,7 @@ contract TokenRegistry is
80
79
  return _registered[token];
81
80
  }
82
81
 
83
- function isActive(address token, VersionPart majorVersion) external view returns (bool) {
82
+ function isActive(address token, VersionPart majorVersion) external view returns (bool) {
84
83
  return _active[token][majorVersion];
85
84
  }
86
85
 
@@ -2,6 +2,7 @@
2
2
  pragma solidity ^0.8.19;
3
3
 
4
4
  import {VersionPart} from "../types/Version.sol";
5
+ import {ObjectType} from "../types/ObjectType.sol";
5
6
 
6
7
  import {IRegisterable} from "./IRegisterable.sol";
7
8
  import {IVersionable} from "./IVersionable.sol";
@@ -10,6 +11,6 @@ interface IService is
10
11
  IRegisterable,
11
12
  IVersionable
12
13
  {
13
- function getName() external pure returns(string memory name);
14
+ function getDomain() external pure returns(ObjectType serviceDomain);
14
15
  function getMajorVersion() external view returns(VersionPart majorVersion);
15
16
  }
@@ -38,6 +38,7 @@ contract ProxyManager is
38
38
  returns (IVersionable versionable)
39
39
  {
40
40
  if (_isDeployed) { revert ErrorAlreadyDeployed(); }
41
+ _isDeployed = true;
41
42
 
42
43
  address currentProxyOwner = getOwner(); // used by implementation
43
44
  address initialProxyAdminOwner = address(this); // used by proxy
@@ -49,7 +50,6 @@ contract ProxyManager is
49
50
  data
50
51
  );
51
52
 
52
- _isDeployed = true;
53
53
  versionable = IVersionable(address(_proxy));
54
54
 
55
55
  emit LogProxyDeployed(address(_proxy), initialImplementation);
@@ -1,21 +1,24 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
- import {IRegistry} from "../registry/IRegistry.sol";
5
- import {IService} from "./IService.sol";
6
- import {IVersionable} from "./IVersionable.sol";
4
+ import {ObjectType, SERVICE} from "../types/ObjectType.sol";
7
5
  import {NftId, zeroNftId} from "../types/NftId.sol";
8
- import {RegisterableUpgradable} from "./RegisterableUpgradable.sol";
9
- import {SERVICE} from "../types/ObjectType.sol";
10
6
  import {Version, VersionPart, VersionLib} from "../types/Version.sol";
7
+
11
8
  import {Versionable} from "./Versionable.sol";
9
+ import {IService} from "./IService.sol";
10
+ import {IVersionable} from "./IVersionable.sol";
11
+ import {RegisterableUpgradable} from "./RegisterableUpgradable.sol";
12
+
13
+ import {IRegistry} from "../registry/IRegistry.sol";
14
+
12
15
 
13
16
  /// @dev service base contract
14
17
  abstract contract Service is
15
18
  RegisterableUpgradable,
16
19
  IService
17
20
  {
18
- function getName() public pure virtual override returns(string memory name);
21
+ function getDomain() public pure virtual override returns(ObjectType);
19
22
 
20
23
  function getMajorVersion() public view virtual override returns(VersionPart majorVersion) {
21
24
  return getVersion().toMajorPart();
@@ -40,7 +43,7 @@ abstract contract Service is
40
43
  //onlyInitializing //TODO uncomment when "fully" upgradeable
41
44
  {
42
45
  // service must provide its name and version upon registration
43
- bytes memory data = abi.encode(getName(), getMajorVersion());
46
+ bytes memory data = abi.encode(getDomain(), getMajorVersion());
44
47
  NftId registryNftId = _getRegistryNftId(registry);
45
48
  bool isInterceptor = false;
46
49
 
@@ -1,6 +1,7 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
+ import {ObjectType, PRODUCT} from "../../contracts/types/ObjectType.sol";
4
5
  import {NftId} from "../../contracts/types/NftId.sol";
5
6
  import {Version, VersionLib} from "../../contracts/types/Version.sol";
6
7
  import {Service} from "../../contracts/shared/Service.sol";
@@ -18,7 +19,7 @@ contract TestService is Service {
18
19
  _initializeService(registry, initialOwner);
19
20
  }
20
21
 
21
- function getName() public pure override returns(string memory name) {
22
- return NAME;
22
+ function getDomain() public pure override returns(ObjectType) {
23
+ return PRODUCT();
23
24
  }
24
25
  }
@@ -30,18 +30,19 @@ function ORACLE_OWNER_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(2
30
30
  function POOL_OWNER_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(300); }
31
31
  function PRODUCT_OWNER_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(400); }
32
32
 
33
- function DISTRIBUTION_REGISTRAR_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(1000); }
34
- function POLICY_REGISTRAR_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(1100); }
35
- function BUNDLE_REGISTRAR_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(1200); }
36
- function POOL_REGISTRAR_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(1300); }
37
- function PRODUCT_REGISTRAR_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(1400); }
38
33
 
39
34
  function DISTRIBUTION_SERVICE_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(10000); }
40
35
  function POOL_SERVICE_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(10100); }
41
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); }
42
39
 
43
40
  function INSTANCE_SERVICE_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(11000); }
44
41
 
42
+ function REGISTRY_SERVICE_ADMIN_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(1500); }
43
+ function REGISTRY_SERVICE_MANAGER_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(1600); }
44
+ function RELEASE_MANAGER_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(1700); }
45
+
45
46
  // @dev Returns true iff role ids a and b are identical
46
47
  function eqRoleId(RoleId a, RoleId b) pure returns (bool isSame) {
47
48
  return RoleId.unwrap(a) == RoleId.unwrap(b);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@etherisc/gif-next",
3
- "version": "0.0.2-9c44ae6-473",
3
+ "version": "0.0.2-9d3eab3-323",
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/fb8811618a050f641df84be86dc28d41.json"
4
- }
@@ -1,101 +0,0 @@
1
- {
2
- "_format": "hh-sol-artifact-1",
3
- "contractName": "AccessManagedSimple",
4
- "sourceName": "contracts/instance/AccessManagedSimple.sol",
5
- "abi": [
6
- {
7
- "inputs": [
8
- {
9
- "internalType": "address",
10
- "name": "authority",
11
- "type": "address"
12
- }
13
- ],
14
- "name": "AccessManagedInvalidAuthority",
15
- "type": "error"
16
- },
17
- {
18
- "inputs": [
19
- {
20
- "internalType": "address",
21
- "name": "caller",
22
- "type": "address"
23
- },
24
- {
25
- "internalType": "uint32",
26
- "name": "delay",
27
- "type": "uint32"
28
- }
29
- ],
30
- "name": "AccessManagedRequiredDelay",
31
- "type": "error"
32
- },
33
- {
34
- "inputs": [
35
- {
36
- "internalType": "address",
37
- "name": "caller",
38
- "type": "address"
39
- }
40
- ],
41
- "name": "AccessManagedUnauthorized",
42
- "type": "error"
43
- },
44
- {
45
- "anonymous": false,
46
- "inputs": [
47
- {
48
- "indexed": false,
49
- "internalType": "address",
50
- "name": "authority",
51
- "type": "address"
52
- }
53
- ],
54
- "name": "AuthorityUpdated",
55
- "type": "event"
56
- },
57
- {
58
- "inputs": [],
59
- "name": "authority",
60
- "outputs": [
61
- {
62
- "internalType": "address",
63
- "name": "",
64
- "type": "address"
65
- }
66
- ],
67
- "stateMutability": "view",
68
- "type": "function"
69
- },
70
- {
71
- "inputs": [],
72
- "name": "isConsumingScheduledOp",
73
- "outputs": [
74
- {
75
- "internalType": "bytes4",
76
- "name": "",
77
- "type": "bytes4"
78
- }
79
- ],
80
- "stateMutability": "view",
81
- "type": "function"
82
- },
83
- {
84
- "inputs": [
85
- {
86
- "internalType": "address",
87
- "name": "newAuthority",
88
- "type": "address"
89
- }
90
- ],
91
- "name": "setAuthority",
92
- "outputs": [],
93
- "stateMutability": "nonpayable",
94
- "type": "function"
95
- }
96
- ],
97
- "bytecode": "0x",
98
- "deployedBytecode": "0x",
99
- "linkReferences": {},
100
- "deployedLinkReferences": {}
101
- }
@@ -1,4 +0,0 @@
1
- {
2
- "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/fb8811618a050f641df84be86dc28d41.json"
4
- }