@etherisc/gif-next 0.0.2-81ba549-396 → 0.0.2-81d7358-706

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 (240) hide show
  1. package/README.md +63 -1
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  3. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +155 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +143 -86
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +117 -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 +28 -2
  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 +175 -115
  14. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  15. package/artifacts/contracts/components/Product.sol/Product.json +151 -95
  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 +4 -0
  39. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +788 -0
  40. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  41. package/artifacts/contracts/instance/{AccessManagedSimple.sol/AccessManagedSimple.json → Cloneable.sol/Cloneable.json} +86 -2
  42. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  43. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +500 -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 +104 -14
  48. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  49. package/artifacts/contracts/instance/Instance.sol/Instance.json +162 -679
  50. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  51. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +244 -114
  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 +74 -40
  56. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  57. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +183 -151
  58. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  59. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +26 -74
  60. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  61. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +285 -0
  62. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
  63. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +24 -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/IAccess.sol/IAccess.json +59 -16
  71. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  72. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  73. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  74. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  75. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  76. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  77. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  78. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +945 -0
  79. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  80. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +432 -0
  81. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  82. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +39 -52
  83. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  84. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +49 -72
  85. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  86. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +13 -37
  87. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  88. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +669 -0
  89. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  90. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +13 -13
  91. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  92. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +13 -13
  93. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  94. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +664 -0
  95. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  96. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +15 -77
  97. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  98. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +17 -220
  99. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  100. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +993 -0
  101. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  102. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +464 -0
  103. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  104. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +48 -160
  105. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  106. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +13 -41
  107. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  108. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +50 -359
  109. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  110. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +13 -61
  111. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  112. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  113. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  114. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +151 -133
  115. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  116. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +94 -65
  117. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  118. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  119. package/artifacts/contracts/registry/Registry.sol/Registry.json +170 -225
  120. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  121. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  122. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  123. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +30 -128
  124. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  125. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +38 -100
  126. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  127. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +546 -0
  128. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  129. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +14 -27
  130. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  131. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  132. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  133. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  134. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  135. package/artifacts/contracts/shared/IService.sol/IService.json +13 -13
  136. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  137. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  138. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  139. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  140. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
  141. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  142. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
  143. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +1 -1
  144. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  145. package/artifacts/contracts/shared/Service.sol/Service.json +13 -13
  146. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  147. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  148. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  149. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  150. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  151. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +2 -2
  152. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  153. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  154. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  155. package/artifacts/contracts/test/TestService.sol/TestService.json +31 -31
  156. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  157. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  158. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  159. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  160. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  161. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  162. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  163. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  164. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  165. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  166. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  167. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  168. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  169. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  170. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  172. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  173. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  174. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  175. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  176. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  177. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  178. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  179. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  180. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  181. package/contracts/components/BaseComponent.sol +79 -11
  182. package/contracts/components/Distribution.sol +6 -2
  183. package/contracts/components/IBaseComponent.sol +9 -0
  184. package/contracts/components/IPoolComponent.sol +5 -1
  185. package/contracts/components/Pool.sol +40 -11
  186. package/contracts/components/Product.sol +16 -8
  187. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
  188. package/contracts/instance/BundleManager.sol +129 -0
  189. package/contracts/instance/Cloneable.sol +46 -0
  190. package/contracts/instance/IInstance.sol +10 -1
  191. package/contracts/instance/IInstanceBase.sol +26 -0
  192. package/contracts/instance/IInstanceService.sol +13 -3
  193. package/contracts/instance/Instance.sol +47 -214
  194. package/contracts/instance/InstanceAccessManager.sol +93 -78
  195. package/contracts/instance/InstanceBase.sol +41 -0
  196. package/contracts/instance/InstanceReader.sol +9 -0
  197. package/contracts/instance/InstanceService.sol +246 -93
  198. package/contracts/instance/InstanceServiceManager.sol +5 -8
  199. package/contracts/instance/ObjectManager.sol +101 -0
  200. package/contracts/instance/base/ComponentServiceBase.sol +36 -81
  201. package/contracts/instance/module/IAccess.sol +27 -17
  202. package/contracts/instance/module/ISetup.sol +3 -1
  203. package/contracts/instance/service/BundleService.sol +260 -0
  204. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  205. package/contracts/instance/service/ComponentOwnerService.sol +4 -6
  206. package/contracts/instance/service/DistributionService.sol +45 -20
  207. package/contracts/instance/service/DistributionServiceManager.sol +6 -9
  208. package/contracts/instance/service/IBundleService.sol +45 -0
  209. package/contracts/instance/service/IPolicyService.sol +87 -0
  210. package/contracts/instance/service/IPoolService.sol +6 -23
  211. package/contracts/instance/service/IProductService.sol +3 -70
  212. package/contracts/instance/service/PolicyService.sol +503 -0
  213. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  214. package/contracts/instance/service/PoolService.sol +47 -117
  215. package/contracts/instance/service/PoolServiceManager.sol +5 -8
  216. package/contracts/instance/service/ProductService.sol +59 -452
  217. package/contracts/registry/ChainNft.sol +1 -1
  218. package/contracts/registry/IRegistry.sol +27 -15
  219. package/contracts/registry/IRegistryService.sol +13 -5
  220. package/contracts/registry/Registry.sol +151 -199
  221. package/contracts/registry/RegistryAccessManager.sol +210 -0
  222. package/contracts/registry/RegistryService.sol +48 -83
  223. package/contracts/registry/RegistryServiceManager.sol +18 -36
  224. package/contracts/registry/ReleaseManager.sol +348 -0
  225. package/contracts/registry/TokenRegistry.sol +5 -6
  226. package/contracts/shared/IService.sol +2 -1
  227. package/contracts/shared/ProxyManager.sol +1 -1
  228. package/contracts/shared/Service.sol +10 -7
  229. package/contracts/test/TestService.sol +3 -2
  230. package/contracts/types/NftIdSet.sol +26 -24
  231. package/contracts/types/RoleId.sol +10 -10
  232. package/package.json +1 -1
  233. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
  234. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
  235. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1132
  236. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  237. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  238. package/contracts/instance/AccessManagedSimple.sol +0 -115
  239. package/contracts/instance/AccessManagerSimple.sol +0 -692
  240. package/contracts/instance/IAccessManagerSimple.sol +0 -391
@@ -1,6 +1,8 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
+ import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
5
+
4
6
  import {NftId} from "../types/NftId.sol";
5
7
  import {ObjectType} from "../types/ObjectType.sol";
6
8
  import {RoleId} from "../types/RoleId.sol";
@@ -10,8 +12,10 @@ import {IRegistry} from "./IRegistry.sol";
10
12
  import {IRegisterable} from "../shared/IRegisterable.sol";
11
13
  import {IBaseComponent} from "../components/IBaseComponent.sol";
12
14
 
13
- interface IRegistryService is IService {
14
-
15
+ interface IRegistryService is
16
+ IService,
17
+ IAccessManaged
18
+ {
15
19
  error SelfRegistration();
16
20
  error NotRegistryOwner();
17
21
 
@@ -28,9 +32,13 @@ interface IRegistryService is IService {
28
32
  error InvalidInitialOwner(address initialOwner);
29
33
  error InvalidAddress(address registerableAddress);
30
34
 
35
+ struct FunctionConfig
36
+ {
37
+ ObjectType serviceDomain;
38
+ bytes4 selector;
39
+ }
31
40
 
32
- function registerService(IService service) external returns(IRegistry.ObjectInfo memory info, bytes memory data);
33
-
41
+ // TODO used by service -> add owner arg
34
42
  function registerInstance(IRegisterable instance)
35
43
  external returns(IRegistry.ObjectInfo memory info, bytes memory data);
36
44
 
@@ -43,7 +51,7 @@ interface IRegistryService is IService {
43
51
  function registerDistribution(IBaseComponent distribution, address owner)
44
52
  external returns(IRegistry.ObjectInfo memory info, bytes memory data);
45
53
 
46
- function registerPolicy(IRegistry.ObjectInfo memory info) external returns(NftId nftId); // -> easy to upgrade
54
+ function registerPolicy(IRegistry.ObjectInfo memory info) external returns(NftId nftId);
47
55
 
48
56
  function registerBundle(IRegistry.ObjectInfo memory info) external returns(NftId nftId);
49
57
  }
@@ -1,88 +1,75 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IRegisterable} from "../shared/IRegisterable.sol";
5
- import {IService} from "../shared/IService.sol";
6
4
 
7
- import {ChainNft} from "./ChainNft.sol";
8
- import {IRegistry} from "./IRegistry.sol";
9
- import {NftId, toNftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
10
- import {Version, VersionPart, VersionLib, VersionPartLib} from "../types/Version.sol";
5
+ import {NftId, toNftId, zeroNftId} from "../types/NftId.sol";
6
+ import {VersionPart} from "../types/Version.sol";
11
7
  import {ObjectType, PROTOCOL, REGISTRY, TOKEN, SERVICE, INSTANCE, STAKE, PRODUCT, DISTRIBUTION, ORACLE, POOL, POLICY, BUNDLE} from "../types/ObjectType.sol";
12
- import {ITransferInterceptor} from "./ITransferInterceptor.sol";
13
8
 
14
9
  import {ERC165} from "../shared/ERC165.sol";
15
10
 
11
+ import {ChainNft} from "./ChainNft.sol";
12
+ import {IRegistry} from "./IRegistry.sol";
13
+ import {ReleaseManager} from "./ReleaseManager.sol";
16
14
 
17
15
  // IMPORTANT
18
16
  // Each NFT minted by registry is accosiated with:
19
17
  // 1) NFT owner
20
18
  // 2) registred contract OR object stored in registered (parent) contract
21
19
  // Four registration flows:
22
- // 1) non IRegisterable address by registryOwner (TOKEN)
23
- // 2) IRegisterable address by registryOwner (SERVICE)
24
- // 3) IRegisterable address by approved service (INSTANCE, COMPONENT)
25
- // 4) state object by approved service (POLICY, BUNDLE, STAKE)
20
+ // 1) IService address by release manager (SERVICE of domain SERVICE aka registry service aka release creation)
21
+ // 2) IService address by release manager (SERVICE of domain !SERVICE aka regular service)
22
+ // 3) IRegisterable address by regular service (INSTANCE, PRODUCT, POOL, DISTRIBUTION, ORACLE)
23
+ // 4) state object by regular service (POLICY, BUNDLE, STAKE)
26
24
 
27
25
  contract Registry is
28
26
  ERC165,
29
27
  IRegistry
30
28
  {
31
- uint256 public constant GIF_MAJOR_VERSION_AT_DEPLOYMENT = 3;
32
29
  address public constant NFT_LOCK_ADDRESS = address(0x1);
33
30
  uint256 public constant REGISTRY_TOKEN_SEQUENCE_ID = 2;
34
- uint256 public constant REGISTRY_SERVICE_TOKEN_SEQUENCE_ID = 3;
35
31
  string public constant EMPTY_URI = "";
36
32
 
37
- VersionPart internal _majorVersion;
38
-
39
33
  mapping(NftId nftId => ObjectInfo info) internal _info;
40
34
  mapping(address object => NftId nftId) internal _nftIdByAddress;
41
35
 
36
+ mapping(VersionPart version => mapping(ObjectType serviceDomain => address)) _service;
37
+
42
38
  mapping(ObjectType objectType => mapping(
43
39
  ObjectType parentType => bool)) internal _isValidContractCombination;
44
40
 
45
41
  mapping(ObjectType objectType => mapping(
46
42
  ObjectType parentType => bool)) internal _isValidObjectCombination;
47
43
 
48
- mapping(NftId nftId => string name) internal _string;
49
- mapping(bytes32 serviceNameHash => mapping(
50
- VersionPart majorVersion => address service)) internal _service;
51
-
52
44
  NftId internal _registryNftId;
53
- NftId internal _serviceNftId; // set in stone upon registry creation
54
45
  ChainNft internal _chainNft;
55
46
 
47
+ ReleaseManager internal _releaseManager;
56
48
 
57
- modifier onlyOwner() {
58
- if(msg.sender != getOwner()) {
59
- revert NotOwner(msg.sender);
49
+ modifier onlyRegistryService() {
50
+ if(!_releaseManager.isActiveRegistryService(msg.sender)) {
51
+ revert CallerNotRegistryService();
60
52
  }
61
53
  _;
62
54
  }
63
55
 
64
- modifier onlyRegistryService() {
65
- if(msg.sender != _info[_serviceNftId].objectAddress) {
66
- revert NotRegistryService();
56
+ modifier onlyReleaseManager() {
57
+ if(msg.sender != address(_releaseManager)) {
58
+ revert CallerNotReleaseManager();
67
59
  }
68
60
  _;
69
61
  }
70
62
 
71
- constructor(address registryOwner, VersionPart majorVersion)
63
+ constructor()
72
64
  {
73
- require(registryOwner > address(0), "Registry: registry owner is 0");
74
-
75
- // major version at constructor time
76
- _majorVersion = VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT);
77
- emit LogInitialMajorVersionSet(_majorVersion);
65
+ _releaseManager = ReleaseManager(msg.sender);
78
66
 
79
67
  // deploy NFT
80
68
  _chainNft = new ChainNft(address(this));// adds 10kb to deployment size
81
69
 
82
70
  // initial registry setup
83
71
  _registerProtocol();
84
- _registerRegistry(registryOwner);
85
- _registerRegistryService(registryOwner);
72
+ _registerRegistry();
86
73
 
87
74
  // set object parent relations
88
75
  _setupValidObjectParentCombinations();
@@ -90,94 +77,49 @@ contract Registry is
90
77
  _registerInterface(type(IRegistry).interfaceId);
91
78
  }
92
79
 
93
- // from IRegistry
94
-
95
- /// @dev latest GIF release version
96
- function setMajorVersion(VersionPart newMajorVersion)
80
+ function registerService(
81
+ ObjectInfo memory info,
82
+ VersionPart version,
83
+ ObjectType domain
84
+ )
97
85
  external
98
- onlyOwner
86
+ onlyReleaseManager
87
+ returns(NftId nftId)
99
88
  {
100
- // ensure major version increments is one
101
- uint256 oldMax = _majorVersion.toInt();
102
- uint256 newMax = newMajorVersion.toInt();
103
- if (newMax <= oldMax || newMax - oldMax != 1) {
104
- revert MajorVersionMaxIncreaseInvalid(newMajorVersion, _majorVersion);
89
+ /* must be guaranteed by release manager
90
+ if(info.objectType != SERVICE()) {
91
+ revert();
105
92
  }
93
+ info.initialOwner = NFT_LOCK_ADDRESS <- if services are access managed
94
+ */
106
95
 
107
- _majorVersion = newMajorVersion;
108
- emit LogMajorVersionSet(_majorVersion);
96
+ if(_service[version][domain] > address(0)) {
97
+ revert ServiceAlreadyRegistered(info.objectAddress);
98
+ }
99
+
100
+ _service[version][domain] = info.objectAddress; // nftId;
101
+
102
+ nftId = _register(info);
103
+
104
+ emit LogServiceRegistration(version, domain);
109
105
  }
110
106
 
111
- /// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
112
- // TODO service registration means its approval for some type?
113
- // TODO registration of precompile addresses
114
107
  function register(ObjectInfo memory info)
115
108
  external
116
109
  onlyRegistryService
117
110
  returns(NftId nftId)
118
111
  {
119
- ObjectType objectType = info.objectType;
120
- NftId parentNftId = info.parentNftId;
121
- ObjectInfo memory parentInfo = _info[parentNftId];
122
- ObjectType parentType = parentInfo.objectType; // see function header
123
- address parentAddress = parentInfo.objectAddress;
124
-
125
- // parent is contract -> need to check? -> check before minting
126
- // special case: global registry nft as parent when not on mainnet -> global registry address is 0
127
- // special case: when parentNftId == _chainNft.mint(), check for zero parent address before mint
128
- // special case: when parentNftId == _chainNft.mint() && objectAddress == initialOwner
129
- if(parentAddress == address(0)) {
130
- revert ZeroParentAddress();
112
+ // no service registrations
113
+ if(info.objectType == SERVICE()) {
114
+ revert ServiceRegistration();
131
115
  }
132
116
 
133
- address interceptor = _getInterceptor(info.isInterceptor, info.objectAddress, parentInfo.isInterceptor, parentAddress);
134
-
135
- // TODO does external call
136
- uint256 mintedTokenId = _chainNft.mint(
137
- info.initialOwner,
138
- interceptor,
139
- EMPTY_URI);
140
- nftId = toNftId(mintedTokenId);
141
-
142
- // TODO move nftId out of info struct
143
- // getters by nftId -> return struct without nftId
144
- // getters by address -> return nftId AND struct
145
- info.nftId = nftId;
146
- _info[nftId] = info;
147
-
148
- if(info.objectAddress > address(0))
149
- {
150
- // TODO if need to add types latter -> at least call this check from registry service
151
- // parent is registered + object-parent types are valid
152
- if(_isValidContractCombination[objectType][parentType] == false) {
153
- revert InvalidTypesCombination(objectType, parentType);
154
- }
155
-
156
- address contractAddress = info.objectAddress;
157
-
158
- if(_nftIdByAddress[contractAddress].gtz()) {
159
- revert ContractAlreadyRegistered(contractAddress);
160
- }
161
-
162
- _nftIdByAddress[contractAddress] = nftId;
163
-
164
- // special case
165
- if(objectType == SERVICE()) {
166
- _registerService(info);
167
- }
168
- }
169
- else
170
- {
171
- if(_isValidObjectCombination[objectType][parentType] == false) {
172
- revert InvalidTypesCombination(objectType, parentType);
173
- }
174
- }
175
-
176
- emit LogRegistration(info);
117
+ nftId = _register(info);
177
118
  }
119
+
178
120
  /// @dev earliest GIF major version
179
121
  function getMajorVersionMin() external view returns (VersionPart) {
180
- return VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT);
122
+ return _releaseManager.getInitialVersion();
181
123
  }
182
124
 
183
125
  // TODO make distinction between active an not yet active version
@@ -188,12 +130,17 @@ contract Registry is
188
130
  // in the process of being set up while the latest active version is 1 major release smaller
189
131
  /// @dev latest GIF major version (might not yet be active)
190
132
  function getMajorVersionMax() external view returns (VersionPart) {
191
- return _majorVersion;
133
+ return _releaseManager.getNextVersion();
192
134
  }
193
135
 
194
136
  /// @dev latest active GIF release version
195
137
  function getMajorVersion() external view returns (VersionPart) {
196
- return _majorVersion;
138
+ return _releaseManager.getLatestVersion();
139
+ }
140
+
141
+ function getReleaseInfo(VersionPart version) external view returns (ReleaseInfo memory)
142
+ {
143
+ return _releaseManager.getReleaseInfo(version);
197
144
  }
198
145
 
199
146
  function getObjectCount() external view override returns (uint256) {
@@ -232,18 +179,16 @@ contract Registry is
232
179
  return _nftIdByAddress[object].gtz();
233
180
  }
234
181
 
235
- function getServiceName(NftId nftId) external view returns (string memory) {
236
- return _string[nftId];
182
+ function isRegisteredService(address object) external view override returns (bool) {
183
+ return _nftIdByAddress[object].gtz() && _info[_nftIdByAddress[object]].objectType == SERVICE();
237
184
  }
238
185
 
239
- // special case to retrive a gif service
240
186
  function getServiceAddress(
241
- string memory serviceName,
242
- VersionPart majorVersion
187
+ ObjectType serviceDomain,
188
+ VersionPart releaseVersion
243
189
  ) external view returns (address)
244
190
  {
245
- bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
246
- return _service[serviceNameHash][majorVersion];
191
+ return _service[releaseVersion][serviceDomain];
247
192
  }
248
193
 
249
194
  function getChainNft() external view override returns (ChainNft) {
@@ -256,28 +201,65 @@ contract Registry is
256
201
 
257
202
  // Internals
258
203
 
259
- function _registerService(ObjectInfo memory info)
204
+ /// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
205
+ // TODO registration of precompile addresses
206
+ function _register(ObjectInfo memory info)
260
207
  internal
208
+ returns(NftId nftId)
261
209
  {
262
- (
263
- string memory serviceName,
264
- VersionPart majorVersion
265
- ) = abi.decode(info.data, (string, VersionPart));
266
- bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
267
-
268
- // ensures consistency of service.getVersion() and majorVersion here
269
- if(majorVersion != _majorVersion) {
270
- revert InvalidServiceVersion(majorVersion);
271
- }
272
-
273
- if(_service[serviceNameHash][majorVersion] != address(0)) {
274
- revert ServiceNameAlreadyRegistered(serviceName, majorVersion);
210
+ ObjectType objectType = info.objectType;
211
+ NftId parentNftId = info.parentNftId;
212
+ ObjectInfo memory parentInfo = _info[parentNftId];
213
+ ObjectType parentType = parentInfo.objectType; // see function header
214
+ address parentAddress = parentInfo.objectAddress;
215
+
216
+ // parent is contract -> need to check? -> check before minting
217
+ // special case: global registry nft as parent when not on mainnet -> global registry address is 0
218
+ // special case: when parentNftId == _chainNft.mint(), check for zero parent address before mint
219
+ // special case: when parentNftId == _chainNft.mint() && objectAddress == initialOwner
220
+ if(parentAddress == address(0)) {
221
+ revert ZeroParentAddress();
275
222
  }
276
223
 
277
- _string[info.nftId] = serviceName;
278
- _service[serviceNameHash][majorVersion] = info.objectAddress;
224
+ address interceptor = _getInterceptor(info.isInterceptor, info.objectAddress, parentInfo.isInterceptor, parentAddress);
225
+
226
+ // TODO does external call
227
+ // compute next nftId, do all checks and stores, mint() at most end...
228
+ uint256 mintedTokenId = _chainNft.mint(
229
+ info.initialOwner,
230
+ interceptor,
231
+ EMPTY_URI);
232
+ nftId = toNftId(mintedTokenId);
233
+
234
+ // TODO move nftId out of info struct
235
+ // getters by nftId -> return struct without nftId
236
+ // getters by address -> return nftId AND struct
237
+ info.nftId = nftId;
238
+ _info[nftId] = info;
279
239
 
280
- emit LogServiceNameRegistration(serviceName, majorVersion);
240
+ if(info.objectAddress > address(0))
241
+ {
242
+ // parent is registered + object-parent types are valid
243
+ if(_isValidContractCombination[objectType][parentType] == false) {
244
+ revert InvalidTypesCombination(objectType, parentType);
245
+ }
246
+
247
+ address contractAddress = info.objectAddress;
248
+
249
+ if(_nftIdByAddress[contractAddress].gtz()) {
250
+ revert ContractAlreadyRegistered(contractAddress);
251
+ }
252
+
253
+ _nftIdByAddress[contractAddress] = nftId;
254
+ }
255
+ else
256
+ {
257
+ if(_isValidObjectCombination[objectType][parentType] == false) {
258
+ revert InvalidTypesCombination(objectType, parentType);
259
+ }
260
+ }
261
+
262
+ emit LogRegistration(nftId, parentNftId, objectType, info.isInterceptor, info.objectAddress, info.initialOwner);
281
263
  }
282
264
 
283
265
  /// @dev obtain interceptor address for this nft if applicable, address(0) otherwise
@@ -310,32 +292,31 @@ contract Registry is
310
292
 
311
293
  /// @dev protocol registration used to anchor the dip ecosystem relations
312
294
  function _registerProtocol()
313
- internal
295
+ private
314
296
  {
315
297
  uint256 protocolId = _chainNft.PROTOCOL_NFT_ID();
316
298
  NftId protocolNftId = toNftId(protocolId);
317
299
 
318
- _chainNft.mint(NFT_LOCK_ADDRESS, protocolId);
300
+ _info[protocolNftId] = ObjectInfo({
301
+ nftId: protocolNftId,
302
+ parentNftId: zeroNftId(),
303
+ objectType: PROTOCOL(),
304
+ isInterceptor: false,
305
+ objectAddress: address(0),
306
+ initialOwner: NFT_LOCK_ADDRESS,
307
+ data: ""
308
+ });
319
309
 
320
- _info[protocolNftId] = ObjectInfo(
321
- protocolNftId,
322
- zeroNftId(), // parent
323
- PROTOCOL(),
324
- false, // isInterceptor
325
- address(0), // objectAddress
326
- NFT_LOCK_ADDRESS,// initialOwner
327
- ""
328
- );
310
+ _chainNft.mint(NFT_LOCK_ADDRESS, protocolId);
329
311
  }
330
312
 
331
313
  /// @dev registry registration
332
314
  /// might also register the global registry when not on mainnet
333
- function _registerRegistry(address registryOwner)
334
- internal
315
+ function _registerRegistry()
316
+ private
335
317
  {
336
318
  uint256 registryId = _chainNft.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID);
337
319
  NftId registryNftId = toNftId(registryId);
338
-
339
320
  NftId parentNftId;
340
321
 
341
322
  if(registryId != _chainNft.GLOBAL_REGISTRY_ID())
@@ -348,68 +329,39 @@ contract Registry is
348
329
  parentNftId = toNftId(_chainNft.PROTOCOL_NFT_ID());
349
330
  }
350
331
 
351
- _chainNft.mint(registryOwner, registryId);
352
-
353
- _info[registryNftId] = ObjectInfo(
354
- registryNftId,
355
- parentNftId,
356
- REGISTRY(),
357
- false, // isInterceptor
358
- address(this),
359
- registryOwner,
360
- ""
361
- );
332
+ _info[registryNftId] = ObjectInfo({
333
+ nftId: registryNftId,
334
+ parentNftId: parentNftId,
335
+ objectType: REGISTRY(),
336
+ isInterceptor: false,
337
+ objectAddress: address(this),
338
+ initialOwner: NFT_LOCK_ADDRESS,
339
+ data: ""
340
+ });
362
341
  _nftIdByAddress[address(this)] = registryNftId;
363
342
  _registryNftId = registryNftId;
364
- }
365
343
 
344
+ _chainNft.mint(NFT_LOCK_ADDRESS, registryId);
345
+ }
366
346
 
367
347
  /// @dev global registry registration for non mainnet registries
368
348
  function _registerGlobalRegistry()
369
- internal
349
+ private
370
350
  {
371
351
  uint256 globalRegistryId = _chainNft.GLOBAL_REGISTRY_ID();
372
-
373
- _chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
374
-
375
352
  NftId globalRegistryNftId = toNftId(globalRegistryId);
376
353
 
377
- _info[globalRegistryNftId] = ObjectInfo(
378
- globalRegistryNftId,
379
- toNftId(_chainNft.PROTOCOL_NFT_ID()), // parent
380
- REGISTRY(),
381
- false, // isInterceptor
382
- address(0), // objectAddress
383
- NFT_LOCK_ADDRESS, // initialOwner
384
- "" // data
385
- );
386
- }
354
+ _info[globalRegistryNftId] = ObjectInfo({
355
+ nftId: globalRegistryNftId,
356
+ parentNftId: toNftId(_chainNft.PROTOCOL_NFT_ID()),
357
+ objectType: REGISTRY(),
358
+ isInterceptor: false,
359
+ objectAddress: address(0),
360
+ initialOwner: NFT_LOCK_ADDRESS,
361
+ data: ""
362
+ });
387
363
 
388
- function _registerRegistryService(address registryOwner)
389
- internal
390
- {
391
- uint256 serviceId = _chainNft.calculateTokenId(REGISTRY_SERVICE_TOKEN_SEQUENCE_ID);
392
- NftId serviceNftId = toNftId(serviceId);
393
-
394
- _chainNft.mint(registryOwner, serviceId);
395
-
396
- _info[serviceNftId] = ObjectInfo(
397
- serviceNftId,
398
- _registryNftId,
399
- SERVICE(),
400
- false, // isInterceptor
401
- msg.sender, // service deploys registry
402
- registryOwner, // initialOwner,
403
- ""
404
- );
405
-
406
- _nftIdByAddress[msg.sender] = serviceNftId;
407
-
408
- string memory serviceName = "RegistryService";
409
- bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
410
- _service[serviceNameHash][VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT)] = msg.sender;
411
- _string[serviceNftId] = serviceName;
412
- _serviceNftId = serviceNftId;
364
+ _chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
413
365
  }
414
366
 
415
367
  /// @dev defines which object - parent types relations are allowed to register
@@ -419,7 +371,7 @@ contract Registry is
419
371
  // 3) DO NOT use REGISTRY as object type
420
372
  // 2) DO NOT use PROTOCOL and "zeroObjectType"
421
373
  function _setupValidObjectParentCombinations()
422
- internal
374
+ private
423
375
  {
424
376
  // registry as parent, ONLY registry owner
425
377
  _isValidContractCombination[TOKEN()][REGISTRY()] = true;
@@ -441,4 +393,4 @@ contract Registry is
441
393
  _isValidObjectCombination[BUNDLE()][POOL()] = true;
442
394
  _isValidObjectCombination[STAKE()][POOL()] = true;
443
395
  }
444
- }
396
+ }