@etherisc/gif-next 0.0.2-b9e9dc3-713 → 0.0.2-bb7b80e-316

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 (271) hide show
  1. package/README.md +67 -1
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  3. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +179 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +166 -90
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +141 -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/IProductComponent.sol/IProductComponent.json +5 -5
  13. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  14. package/artifacts/contracts/components/Pool.sol/Pool.json +198 -119
  15. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  16. package/artifacts/contracts/components/Product.sol/Product.json +178 -146
  17. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +1 -1
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  32. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  36. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  38. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  39. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  40. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  41. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  42. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  43. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +788 -0
  44. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  45. package/artifacts/contracts/instance/{AccessManagedSimple.sol/AccessManagedSimple.json → Cloneable.sol/Cloneable.json} +86 -2
  46. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  47. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1478 -28
  48. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  49. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +448 -0
  50. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  51. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +162 -13
  52. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  53. package/artifacts/contracts/instance/Instance.sol/Instance.json +175 -625
  54. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  55. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +244 -114
  56. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  57. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +763 -0
  58. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  59. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +202 -37
  60. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  61. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +308 -48
  62. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  63. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +57 -21
  64. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  65. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +285 -0
  66. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
  67. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +60 -9
  68. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  69. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -13
  70. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  71. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  72. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  73. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +2 -2
  74. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  75. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
  76. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  77. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +59 -16
  78. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  79. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  80. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  81. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  82. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  83. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  84. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  85. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1031 -0
  86. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  87. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +436 -0
  88. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  89. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +693 -0
  90. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  91. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +420 -0
  92. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  93. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +720 -0
  94. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +13 -13
  96. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  97. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +771 -0
  98. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +15 -77
  100. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  101. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +25 -240
  102. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  103. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1156 -0
  104. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  105. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +492 -0
  106. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  107. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +727 -0
  108. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  109. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +420 -0
  110. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  111. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +777 -0
  112. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  113. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +420 -0
  114. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  115. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  116. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  117. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +263 -63
  118. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  119. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +187 -83
  120. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  121. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  122. package/artifacts/contracts/registry/Registry.sol/Registry.json +233 -192
  123. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  124. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  125. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  126. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +31 -97
  127. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  128. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +38 -91
  129. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  130. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +530 -0
  131. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  132. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +397 -0
  133. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  134. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  135. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  136. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  137. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  138. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  139. package/artifacts/contracts/{instance/base → shared}/IService.sol/IService.json +14 -14
  140. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  141. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  142. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  143. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  144. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
  145. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  146. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +4 -4
  147. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
  148. package/artifacts/contracts/{instance/service/IComponentOwnerService.sol/IComponentOwnerService.json → shared/RegisterableUpgradable.sol/RegisterableUpgradable.json} +57 -81
  149. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  150. package/artifacts/contracts/{instance/base/ServiceBase.sol/ServiceBase.json → shared/Service.sol/Service.json} +15 -15
  151. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  152. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  153. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  154. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  155. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  156. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  157. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +4 -4
  158. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  159. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  160. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  161. package/artifacts/contracts/test/TestService.sol/TestService.json +31 -31
  162. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  163. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  164. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  165. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  166. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +2 -2
  167. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  168. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  169. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  170. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  172. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  173. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  174. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  175. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  176. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  177. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  178. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  179. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  180. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  181. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  182. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  183. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  184. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  185. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  187. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  188. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  189. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  190. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  191. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
  192. package/contracts/components/BaseComponent.sol +99 -17
  193. package/contracts/components/Distribution.sol +15 -27
  194. package/contracts/components/IBaseComponent.sol +12 -1
  195. package/contracts/components/IDistributionComponent.sol +1 -0
  196. package/contracts/components/IPoolComponent.sol +5 -1
  197. package/contracts/components/IProductComponent.sol +2 -2
  198. package/contracts/components/Pool.sol +45 -46
  199. package/contracts/components/Product.sol +56 -58
  200. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
  201. package/contracts/instance/BundleManager.sol +129 -0
  202. package/contracts/instance/Cloneable.sol +46 -0
  203. package/contracts/instance/IInstance.sol +41 -9
  204. package/contracts/instance/IInstanceBase.sol +25 -0
  205. package/contracts/instance/IInstanceService.sol +30 -7
  206. package/contracts/instance/Instance.sol +62 -236
  207. package/contracts/instance/InstanceAccessManager.sol +93 -78
  208. package/contracts/instance/InstanceBase.sol +39 -0
  209. package/contracts/instance/InstanceReader.sol +36 -1
  210. package/contracts/instance/InstanceService.sol +295 -52
  211. package/contracts/instance/InstanceServiceManager.sol +10 -12
  212. package/contracts/instance/ObjectManager.sol +101 -0
  213. package/contracts/instance/base/ComponentServiceBase.sol +49 -22
  214. package/contracts/instance/base/IInstanceBase.sol +0 -2
  215. package/contracts/instance/module/IAccess.sol +27 -17
  216. package/contracts/instance/module/IBundle.sol +1 -0
  217. package/contracts/instance/module/ISetup.sol +3 -0
  218. package/contracts/instance/service/BundleService.sol +294 -0
  219. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  220. package/contracts/instance/service/DistributionService.sol +120 -0
  221. package/contracts/instance/service/DistributionServiceManager.sol +51 -0
  222. package/contracts/instance/service/IBundleService.sol +44 -0
  223. package/contracts/instance/service/IDistributionService.sol +1 -1
  224. package/contracts/instance/service/IPolicyService.sol +94 -0
  225. package/contracts/instance/service/IPoolService.sol +7 -24
  226. package/contracts/instance/service/IProductService.sol +7 -74
  227. package/contracts/instance/service/PolicyService.sol +539 -0
  228. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  229. package/contracts/instance/service/PoolService.sol +145 -0
  230. package/contracts/instance/service/PoolServiceManager.sol +51 -0
  231. package/contracts/instance/service/ProductService.sol +213 -0
  232. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  233. package/contracts/registry/ChainNft.sol +1 -1
  234. package/contracts/registry/IRegistry.sol +40 -6
  235. package/contracts/registry/IRegistryService.sol +53 -30
  236. package/contracts/registry/Registry.sol +172 -199
  237. package/contracts/registry/RegistryAccessManager.sol +210 -0
  238. package/contracts/registry/RegistryService.sol +88 -208
  239. package/contracts/registry/RegistryServiceManager.sol +20 -22
  240. package/contracts/registry/ReleaseManager.sol +342 -0
  241. package/contracts/registry/TokenRegistry.sol +110 -0
  242. package/contracts/shared/ERC165.sol +6 -2
  243. package/contracts/shared/IService.sol +16 -0
  244. package/contracts/shared/NftOwnable.sol +2 -4
  245. package/contracts/shared/ProxyManager.sol +1 -1
  246. package/contracts/shared/Registerable.sol +1 -0
  247. package/contracts/shared/RegisterableUpgradable.sol +16 -0
  248. package/contracts/shared/Service.sol +58 -0
  249. package/contracts/test/TestService.sol +6 -7
  250. package/contracts/types/NftIdSet.sol +26 -24
  251. package/contracts/types/RoleId.sol +14 -6
  252. package/contracts/types/StateId.sol +4 -0
  253. package/contracts/types/Version.sol +4 -1
  254. package/package.json +1 -1
  255. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
  256. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
  257. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1119
  258. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  259. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  260. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
  261. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  262. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  263. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  264. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  265. package/contracts/instance/AccessManagedSimple.sol +0 -114
  266. package/contracts/instance/AccessManagerSimple.sol +0 -682
  267. package/contracts/instance/IAccessManagerSimple.sol +0 -391
  268. package/contracts/instance/base/IService.sol +0 -15
  269. package/contracts/instance/base/ServiceBase.sol +0 -44
  270. package/contracts/instance/service/ComponentOwnerService.sol +0 -317
  271. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
@@ -0,0 +1,210 @@
1
+ // SPDX-License-Identifier: UNLICENSED
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {AccessManager} from "@openzeppelin/contracts/access/manager/AccessManager.sol";
5
+ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
6
+
7
+ import {RoleId, RoleIdLib,
8
+ REGISTRY_SERVICE_MANAGER_ROLE,
9
+ REGISTRY_SERVICE_ADMIN_ROLE,
10
+ RELEASE_MANAGER_ROLE} from "../types/RoleId.sol";
11
+
12
+ import {TokenRegistry} from "./TokenRegistry.sol";
13
+ import {ReleaseManager} from "./ReleaseManager.sol";
14
+
15
+ /*
16
+ 3 types of roles:
17
+ 1) REGISTRAR roles
18
+ - each one is unique
19
+ - always have 1 member
20
+ - one role is set for each function of each version of registry service
21
+ 2) REGISTRY_SERVICE_MANAGER_ROLE aka GIF_MANAGER_ROLE
22
+ - can have arbitrary number of members
23
+ - responsible for services registrations
24
+ - responsible for token registration and activation
25
+ 3) REGISTRY_SERVICE_ADMIN_ROLE aka GIF_ADMIN_ROLE
26
+ - admin of REGISTRY_SERVICE_MANAGER_ROLE
27
+ - MUST have 1 member at any time
28
+ - granted/revoked ONLY in transferAdminRole() -> consider lock out situations!!!
29
+ - responsible for release manager initialization
30
+ - responsible for creation and activation of each release
31
+
32
+ */
33
+
34
+ contract RegistryAccessManager is AccessManaged
35
+ {
36
+ error NotInitialized();
37
+ error AlreadyInitialized();
38
+
39
+ uint64 public constant UNIQUE_ROLE_ID_MIN = 1000000;
40
+
41
+ AccessManager private immutable _accessManager;
42
+ address private _releaseManager;
43
+ address private _tokenRegistry;
44
+
45
+ uint64 private _idNext; // role id
46
+ bool private _isInitialized;
47
+
48
+ modifier onlyOnce() {
49
+ if(_isInitialized) {
50
+ revert AlreadyInitialized();
51
+ }
52
+ _;
53
+ _isInitialized = true;
54
+ }
55
+
56
+ modifier onlyInitialized() {
57
+ if(!_isInitialized) {
58
+ revert NotInitialized();
59
+ }
60
+ _;
61
+ }
62
+
63
+ constructor(address manager)
64
+ AccessManaged(msg.sender)
65
+ {
66
+ _accessManager = new AccessManager(address(this));
67
+ setAuthority(address(_accessManager));
68
+
69
+ _idNext = UNIQUE_ROLE_ID_MIN;
70
+
71
+ _configureAdminRoleInitial();
72
+
73
+ address admin = msg.sender;
74
+ _grantRole(REGISTRY_SERVICE_ADMIN_ROLE(), admin, 0);
75
+ _grantRole(REGISTRY_SERVICE_MANAGER_ROLE(), manager, 0);
76
+ }
77
+
78
+ function initialize(address releaseManager, address tokenRegistry)
79
+ external
80
+ restricted // GIF_ADMIN_ROLE
81
+ onlyOnce
82
+ {
83
+ require(
84
+ ReleaseManager(releaseManager).authority() == address(_accessManager),
85
+ "RegistryAccessManager: release manager authority is invalid");
86
+ require(tokenRegistry > address(0), "RegistryAccessManager: token registry is 0");
87
+ //require(tokenRegistry.authority() == address(_accessManager));
88
+
89
+ _releaseManager = releaseManager;
90
+ _tokenRegistry = tokenRegistry;
91
+
92
+ _configureAdminRole();
93
+ _configureManagerRole();
94
+ _configureReleaseManagerRole();
95
+
96
+ _grantRole(RELEASE_MANAGER_ROLE(), releaseManager, 0);
97
+ }
98
+
99
+ // set unique role for target, role forever have 1 member and never revoked
100
+ function setAndGrantUniqueRole(
101
+ address account,
102
+ address target,
103
+ bytes4[] memory selector
104
+ )
105
+ external
106
+ restricted // RELEASE_MANAGER_ROLE
107
+ onlyInitialized
108
+ returns(RoleId)
109
+ {
110
+ // TODO questionable check...
111
+ // target is not part of `runtime`
112
+ //if(
113
+ // target == address(this) ||
114
+ // target == address(_accessManager) ||
115
+ // target == _releaseManager ||
116
+ // target == _tokenRegistry)
117
+ //{ return TargetInvalid(); }
118
+
119
+ RoleId roleId = _getNextRoleId();
120
+
121
+ _setTargetFunctionRole(target, selector, roleId);
122
+ _grantRole(roleId, account, 0);
123
+ }
124
+
125
+ /*function transferAdmin(address to)
126
+ external
127
+ restricted // only with REGISTRY_SERVICE_ADMIN_ROLE or nft owner
128
+ {
129
+ _accessManager.revoke(REGISTRY_SERVICE_ADMIN_ROLE, );
130
+ _accesssManager.grant(REGISTRY_SERVICE_ADMIN_ROLE, to, 0);
131
+ }*/
132
+
133
+ //--- view functions ----------------------------------------------------//
134
+
135
+ function getAccessManager()
136
+ external
137
+ view
138
+ returns (AccessManager)
139
+ {
140
+ return _accessManager;
141
+ }
142
+
143
+ //--- private functions -------------------------------------------------//
144
+
145
+ function _configureAdminRoleInitial() private
146
+ {
147
+ bytes4[] memory functionSelector = new bytes4[](1);
148
+
149
+ functionSelector[0] = RegistryAccessManager.initialize.selector;
150
+ _setTargetFunctionRole(address(this), functionSelector, REGISTRY_SERVICE_ADMIN_ROLE());
151
+ }
152
+
153
+ function _configureAdminRole() private
154
+ {
155
+ bytes4[] memory functionSelector = new bytes4[](1);
156
+
157
+ // for RegistryServiceProxyManager
158
+ // TODO upgrading with releaseManager.upgrade()->proxy.upgrade()???
159
+ //functionSelector[0] = RegistryServiceManager.upgrade.selector;
160
+ //_setTargetFunctionRole(address(this), functionSelector, REGISTRY_SERVICE_ADMIN_ROLE());
161
+
162
+ // for TokenRegistry
163
+
164
+ // for ReleaseManager
165
+ functionSelector[0] = ReleaseManager.createNextRelease.selector;
166
+ _setTargetFunctionRole(_releaseManager, functionSelector, REGISTRY_SERVICE_ADMIN_ROLE());
167
+ //functionSelector[0] = ReleaseManager.activateNextRelease.selector;
168
+ //_setTargetFunctionRole(_releaseManager, functionSelector, REGISTRY_SERVICE_ADMIN_ROLE());
169
+ }
170
+
171
+ function _configureManagerRole() private
172
+ {
173
+ bytes4[] memory functionSelector = new bytes4[](1);
174
+
175
+ // for TokenRegistry
176
+ functionSelector[0] = TokenRegistry.setActive.selector;
177
+ _setTargetFunctionRole(address(_tokenRegistry), functionSelector, REGISTRY_SERVICE_MANAGER_ROLE());
178
+
179
+ // for ReleaseManager
180
+ functionSelector[0] = ReleaseManager.registerService.selector;
181
+ _setTargetFunctionRole(_releaseManager, functionSelector, REGISTRY_SERVICE_MANAGER_ROLE());
182
+
183
+ // set admin
184
+ _setRoleAdmin(REGISTRY_SERVICE_MANAGER_ROLE(), REGISTRY_SERVICE_ADMIN_ROLE());
185
+ }
186
+
187
+ function _configureReleaseManagerRole() private
188
+ {
189
+ bytes4[] memory functionSelector = new bytes4[](1);
190
+
191
+ functionSelector[0] = RegistryAccessManager.setAndGrantUniqueRole.selector;
192
+ _setTargetFunctionRole(address(this), functionSelector, RELEASE_MANAGER_ROLE());
193
+ }
194
+
195
+ function _setTargetFunctionRole(address target, bytes4[] memory selectors, RoleId roleId) private {
196
+ _accessManager.setTargetFunctionRole(target, selectors, roleId.toInt());
197
+ }
198
+
199
+ function _setRoleAdmin(RoleId roleId, RoleId adminRoleId) private {
200
+ _accessManager.setRoleAdmin(roleId.toInt(), adminRoleId.toInt());
201
+ }
202
+
203
+ function _grantRole(RoleId roleId, address account, uint32 executionDelay) private {
204
+ _accessManager.grantRole(roleId.toInt(), account, executionDelay);
205
+ }
206
+
207
+ function _getNextRoleId() private returns(RoleId roleId) {
208
+ roleId = RoleIdLib.toRoleId(_idNext++);
209
+ }
210
+ }
@@ -1,17 +1,13 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
4
  import {ERC165Checker} from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol";
6
- import {IERC721Receiver} from "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol";
7
5
  import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
8
6
 
9
7
  import {IRegistry} from "./IRegistry.sol";
10
8
  import {IInstance} from "../instance/IInstance.sol";
11
9
 
12
10
  import {ContractDeployerLib} from "../shared/ContractDeployerLib.sol";
13
- // import {IComponent, IComponentModule} from "../../contracts/instance/module/component/IComponent.sol";
14
- // import {IPool} from "../../contracts/instance/module/pool/IPoolModule.sol";
15
11
  import {IBaseComponent} from "../../contracts/components/IBaseComponent.sol";
16
12
  import {IPoolComponent} from "../../contracts/components/IPoolComponent.sol";
17
13
  import {IProductComponent} from "../../contracts/components/IProductComponent.sol";
@@ -20,137 +16,33 @@ import {IDistributionComponent} from "../../contracts/components/IDistributionCo
20
16
  import {IVersionable} from "../../contracts/shared/IVersionable.sol";
21
17
  import {Versionable} from "../../contracts/shared/Versionable.sol";
22
18
  import {IRegisterable} from "../../contracts/shared/IRegisterable.sol";
19
+ import {Registerable} from "../../contracts/shared/Registerable.sol";
23
20
 
24
21
  import {RoleId, PRODUCT_OWNER_ROLE, POOL_OWNER_ROLE, ORACLE_OWNER_ROLE} from "../../contracts/types/RoleId.sol";
25
- import {ObjectType, REGISTRY, TOKEN, SERVICE, PRODUCT, ORACLE, POOL, TOKEN, INSTANCE, DISTRIBUTION, POLICY, BUNDLE} from "../../contracts/types/ObjectType.sol";
22
+ import {ObjectType, REGISTRY, SERVICE, PRODUCT, ORACLE, POOL, INSTANCE, DISTRIBUTION, POLICY, BUNDLE, STAKE} from "../../contracts/types/ObjectType.sol";
26
23
  import {StateId, ACTIVE, PAUSED} from "../../contracts/types/StateId.sol";
27
24
  import {NftId, NftIdLib, zeroNftId} from "../../contracts/types/NftId.sol";
28
25
  import {Fee, FeeLib} from "../../contracts/types/Fee.sol";
29
26
  import {Version, VersionPart, VersionLib} from "../../contracts/types/Version.sol";
30
27
 
31
- import {ServiceBase} from "../../contracts/instance/base/ServiceBase.sol";
32
- import {IService} from "../../contracts/instance/base/IService.sol";
28
+ import {Service} from "../shared/Service.sol";
29
+ import {IService} from "../shared/IService.sol";
33
30
  import {IRegistryService} from "./IRegistryService.sol";
34
31
  import {Registry} from "./Registry.sol";
35
- import {ChainNft} from "./ChainNft.sol";
36
32
 
37
33
  contract RegistryService is
38
34
  AccessManagedUpgradeable,
39
- ServiceBase,
35
+ Service,
40
36
  IRegistryService
41
37
  {
42
38
  using NftIdLib for NftId;
43
39
 
44
- error SelfRegistration();
45
- error NotRegistryOwner();
46
-
47
- error NotToken();
48
- error NotService();
49
- error NotInstance();
50
- error NotProduct();
51
- error NotPool();
52
- error NotDistribution();
53
-
54
- error UnexpectedRegisterableType(ObjectType expected, ObjectType found);
55
- error NotRegisterableOwner(address expectedOwner);
56
- error RegisterableOwnerIsZero();
57
- error RegisterableOwnerIsRegistered();
58
- error InvalidInitialOwner(address initialOwner);
59
- error InvalidAddress(address registerableAddress);
60
-
61
-
62
- // Initial value for constant variable has to be compile-time constant
63
- // TODO define types as constants?
64
- //ObjectType public constant SERVICE_TYPE = REGISTRY();
65
- string public constant NAME = "RegistryService";
66
-
67
40
  // TODO update to real hash when registry is stable
68
41
  bytes32 public constant REGISTRY_CREATION_CODE_HASH = bytes32(0);
69
42
 
70
43
  address public constant NFT_LOCK_ADDRESS = address(0x1);
71
44
 
72
- /// @dev
73
- // msg.sender - ONLY registry owner
74
- // CAN NOT register itself
75
- // CAN NOT register IRegisterable address
76
- // CAN register ONLY valid object-parent types combinations for TOKEN
77
- // IMPORTANT: MUST NOT call untrusted contract inbetween calls to registry/instance (trusted contracts)
78
- // motivation: registry/instance state may change during external call
79
- // TODO it may be usefull to have transferable token nft in order to delist token, make it invalid for new beginings
80
- // TODO: MUST prohibit registration of precompiles addresses
81
- function registerToken(address tokenAddress)
82
- external
83
- returns(NftId nftId)
84
- {
85
- if(msg.sender == tokenAddress) {
86
- revert SelfRegistration();
87
- }
88
-
89
- // MUST not revert if no ERC165 support
90
- if(tokenAddress.code.length == 0 ||
91
- ERC165Checker.supportsInterface(tokenAddress, type(IRegisterable).interfaceId)) {
92
- revert NotToken();
93
- }
94
-
95
- NftId registryNftId = _registry.getNftId(address(_registry));
96
-
97
- if(msg.sender != _registry.ownerOf(registryNftId)) {
98
- revert NotRegistryOwner();
99
- }
100
-
101
- IRegistry.ObjectInfo memory info = IRegistry.ObjectInfo(
102
- zeroNftId(), // any value
103
- registryNftId, // parent nft id
104
- TOKEN(),
105
- false, // isInterceptor
106
- tokenAddress,
107
- NFT_LOCK_ADDRESS,
108
- "" // any value
109
- );
110
-
111
- nftId = _registry.register(info);
112
- }
113
-
114
- /// @dev
115
- // msg.sender - ONLY registry owner
116
- // CAN NOT register itself
117
- // CAN register ONLY valid object-parent types combinations for SERVICE
118
- // CAN register ONLY IRegisterable address he owns
119
- // IMPORTANT: MUST NOT check owner before calling external contract
120
- function registerService(IService service)
121
- external
122
- // TODO restrict access - registryService.registerService must use accessmanager for checking permissions as
123
- // services are not always owned by registry owner - actually only registry service is owned by registry owner
124
-
125
- returns(
126
- IRegistry.ObjectInfo memory info,
127
- bytes memory data
128
- )
129
- {
130
-
131
- // CAN revert if no ERC165 support -> will revert with empty message
132
- if(!service.supportsInterface(type(IService).interfaceId)) {
133
- revert NotService();
134
- }
135
-
136
- (
137
- info,
138
- data
139
- ) = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
140
45
 
141
- info.nftId = _registry.register(info);
142
- service.linkToRegisteredNftId();
143
- return (
144
- info,
145
- data
146
- );
147
- }
148
-
149
- // If msg.sender is approved service:
150
- // 1) add owner arg (service MUST pass it's msg.sender as owner)
151
- // 2) check service allowance
152
- // 3) comment self registrstion check
153
- //function registerInstance(IRegisterable instance, address owner)
154
46
  function registerInstance(IRegisterable instance)
155
47
  external
156
48
  returns(
@@ -158,23 +50,16 @@ contract RegistryService is
158
50
  bytes memory data
159
51
  )
160
52
  {
161
-
162
53
  if(!instance.supportsInterface(type(IInstance).interfaceId)) {
163
54
  revert NotInstance();
164
55
  }
165
56
 
166
- (
167
- info,
168
- data
169
- ) = _getAndVerifyContractInfo(instance, INSTANCE(), msg.sender);
57
+ (info, data) = _getAndVerifyContractInfo(instance, INSTANCE(), msg.sender);
170
58
 
171
59
  info.nftId = _registry.register(info);
172
60
  instance.linkToRegisteredNftId(); // asume safe
173
61
 
174
- return (
175
- info,
176
- data
177
- );
62
+ return (info, data);
178
63
  }
179
64
 
180
65
  function registerProduct(IBaseComponent product, address owner)
@@ -190,21 +75,11 @@ contract RegistryService is
190
75
  revert NotProduct();
191
76
  }
192
77
 
193
- (
194
- info,
195
- data
196
- ) = _getAndVerifyContractInfo(product, PRODUCT(), owner);
197
-
198
- NftId serviceNftId = _registry.getNftId(msg.sender);
78
+ (info, data) = _getAndVerifyContractInfo(product, PRODUCT(), owner);
199
79
 
200
80
  info.nftId = _registry.register(info);
201
- // TODO unsafe, let component or its owner derive nftId latter, when state assumptions and modifications of GIF contracts are finished
202
- product.linkToRegisteredNftId();
203
81
 
204
- return (
205
- info,
206
- data
207
- );
82
+ return (info, data);
208
83
  }
209
84
 
210
85
  function registerPool(IBaseComponent pool, address owner)
@@ -219,20 +94,11 @@ contract RegistryService is
219
94
  revert NotPool();
220
95
  }
221
96
 
222
- (
223
- info,
224
- data
225
- ) = _getAndVerifyContractInfo(pool, POOL(), owner);
226
-
227
- NftId serviceNftId = _registry.getNftId(msg.sender);
97
+ (info, data) = _getAndVerifyContractInfo(pool, POOL(), owner);
228
98
 
229
99
  info.nftId = _registry.register(info);
230
- pool.linkToRegisteredNftId();
231
100
 
232
- return (
233
- info,
234
- data
235
- );
101
+ return (info, data);
236
102
  }
237
103
 
238
104
  function registerDistribution(IBaseComponent distribution, address owner)
@@ -247,20 +113,11 @@ contract RegistryService is
247
113
  revert NotDistribution();
248
114
  }
249
115
 
250
- (
251
- info,
252
- data
253
- ) = _getAndVerifyContractInfo(distribution, DISTRIBUTION(), owner);
254
-
255
- NftId serviceNftId = _registry.getNftId(msg.sender);
116
+ (info, data) = _getAndVerifyContractInfo(distribution, DISTRIBUTION(), owner);
256
117
 
257
- info.nftId = _registry.register(info);
258
- distribution.linkToRegisteredNftId();
118
+ info.nftId = _registry.register(info);
259
119
 
260
- return (
261
- info,
262
- data
263
- );
120
+ return (info, data);
264
121
  }
265
122
 
266
123
  function registerPolicy(IRegistry.ObjectInfo memory info)
@@ -268,8 +125,6 @@ contract RegistryService is
268
125
  restricted
269
126
  returns(NftId nftId)
270
127
  {
271
- NftId senderNftId = _registry.getNftId(msg.sender);
272
-
273
128
  _verifyObjectInfo(info, POLICY());
274
129
 
275
130
  nftId = _registry.register(info);
@@ -280,31 +135,29 @@ contract RegistryService is
280
135
  restricted
281
136
  returns(NftId nftId)
282
137
  {
283
-
284
- NftId senderNftId = _registry.getNftId(msg.sender);
285
-
286
138
  _verifyObjectInfo(info, BUNDLE());
287
139
 
288
140
  nftId = _registry.register(info);
289
141
  }
290
142
 
143
+ function registerStake(IRegistry.ObjectInfo memory info)
144
+ external
145
+ restricted
146
+ returns(NftId nftId)
147
+ {
148
+ _verifyObjectInfo(info, STAKE());
291
149
 
292
- // From IService
293
- function getName() public pure override(IService, ServiceBase) returns(string memory) {
294
- return NAME;
150
+ nftId = _registry.register(info);
295
151
  }
296
- //function getType() public pure override(IService, ServiceBase) returns(ObjectType serviceType) {
297
- // return SERVICE_TYPE;
298
- //}
299
152
 
153
+ // From IService
154
+ function getDomain() public pure override(IService, Service) returns(ObjectType serviceDomain) {
155
+ return REGISTRY();
156
+ }
300
157
 
301
158
  // from Versionable
302
159
 
303
160
  /// @dev top level initializer
304
- // 1) registry is non upgradeable -> don't need a proxy and uses constructor !
305
- // 2) deploy registry service first -> from its initialization func it is easier to deploy registry then vice versa
306
- // 3) deploy registry -> pass registry service address as constructor argument
307
- // registry is getting instantiated and locked to registry service address forever
308
161
  function _initialize(
309
162
  address owner,
310
163
  bytes memory data
@@ -315,38 +168,60 @@ contract RegistryService is
315
168
  {
316
169
  (
317
170
  address initialAuthority,
318
- bytes memory registryByteCodeWithInitCode
319
- ) = abi.decode(data, (address, bytes));
171
+ address registry
172
+ ) = abi.decode(data, (address, address));
320
173
 
321
174
  __AccessManaged_init(initialAuthority);
322
175
 
323
- bytes memory encodedConstructorArguments = abi.encode(
324
- owner,
325
- getMajorVersion());
176
+ _initializeService(address(registry), owner);
177
+
178
+ _registerInterface(type(IRegistryService).interfaceId);
179
+ }
180
+
181
+ // from IRegisterable
182
+
183
+ function getInitialInfo()
184
+ public
185
+ view
186
+ override(IRegisterable, Registerable)
187
+ returns (IRegistry.ObjectInfo memory info, bytes memory data)
188
+ {
189
+ (info , data) = super.getInitialInfo();
326
190
 
327
- bytes memory registryCreationCode = ContractDeployerLib.getCreationCode(
328
- registryByteCodeWithInitCode,
329
- encodedConstructorArguments);
191
+ FunctionConfig[] memory config = new FunctionConfig[](6);
330
192
 
331
- IRegistry registry = IRegistry(ContractDeployerLib.deploy(
332
- registryCreationCode,
333
- REGISTRY_CREATION_CODE_HASH));
193
+ // order of service registrations MUST be reverse to this array
194
+ /*config[-1].serviceDomain = STAKE();
195
+ config[-1].selector = RegistryService.registerStake.selector;*/
334
196
 
335
- NftId registryNftId = registry.getNftId(address(registry));
197
+ config[0].serviceDomain = POLICY();
198
+ config[0].selector = RegistryService.registerPolicy.selector;
336
199
 
337
- _initializeServiceBase(address(registry), registryNftId, owner);
200
+ config[1].serviceDomain = BUNDLE();
201
+ config[1].selector = RegistryService.registerBundle.selector;
338
202
 
339
- // TODO why do registry service proxy need to keep its nftId??? -> no registryServiceNftId checks in implementation
340
- // if they are -> use registry address to obtain owner of registry service nft (works the same with any registerable and(or) implementation)
341
- linkToRegisteredNftId();
342
- _registerInterface(type(IRegistryService).interfaceId);
203
+ config[2].serviceDomain = PRODUCT();
204
+ config[2].selector = RegistryService.registerProduct.selector;
205
+
206
+ config[3].serviceDomain = POOL();
207
+ config[3].selector = RegistryService.registerPool.selector;
208
+
209
+ config[4].serviceDomain = DISTRIBUTION();
210
+ config[4].selector = RegistryService.registerDistribution.selector;
211
+
212
+ // registerInstance() have no restriction
213
+ config[5].serviceDomain = INSTANCE();
214
+ config[5].selector = RegistryService.registerInstance.selector;
215
+
216
+ data = abi.encode(config);
343
217
  }
344
218
 
345
- // parent check done in registry because of approve()
219
+ // Internal
220
+
346
221
  function _getAndVerifyContractInfo(
347
222
  IRegisterable registerable,
348
223
  ObjectType expectedType, // assume can be valid only
349
- address expectedOwner // assume can be 0
224
+ address expectedOwner // assume can be 0 when given by other service
350
225
  )
351
226
  internal
352
227
  view
@@ -367,8 +242,13 @@ contract RegistryService is
367
242
 
368
243
  address owner = info.initialOwner;
369
244
 
370
- if(owner != expectedOwner) { // registerable owner protection
371
- revert NotRegisterableOwner(expectedOwner);
245
+ // solhint-disable-next-line
246
+ if(expectedType == INSTANCE()) {
247
+ // any address may create a new instance via instance service
248
+ } else {
249
+ if(owner != expectedOwner) { // registerable owner protection
250
+ revert NotRegisterableOwner(expectedOwner);
251
+ }
372
252
  }
373
253
 
374
254
  if(owner == address(registerable)) {
@@ -390,31 +270,31 @@ contract RegistryService is
390
270
  revert InvalidParent(parentNftId);
391
271
  }*/
392
272
 
393
- return(
394
- info,
395
- data
396
- );
273
+ return(info, data);
397
274
  }
398
275
 
399
- // parent checks done in registry because of approve()
400
276
  function _verifyObjectInfo(
401
277
  IRegistry.ObjectInfo memory info,
402
- ObjectType objectType
278
+ ObjectType expectedType
403
279
  )
404
280
  internal
405
281
  view
406
282
  {
407
- if(info.objectAddress > address(0)) {
408
- revert InvalidAddress(info.objectAddress);
283
+ // enforce instead of check
284
+ info.objectAddress = address(0);
285
+
286
+ if(info.objectType != expectedType) {// type is checked in registry anyway...but service logic may depend on expected value
287
+ revert UnexpectedRegisterableType(expectedType, info.objectType);
409
288
  }
410
289
 
411
- if(
412
- getRegistry().isRegistered(info.initialOwner) ||
413
- info.initialOwner == address(0)) {
414
- // TODO non registered address can register object(e.g. POLICY()) and then transfer associated nft to registered contract
415
- // what are motivations to do so?
416
- // at least registered contract can not register objects by itself, SERVICE,
417
- revert InvalidInitialOwner(info.initialOwner);
290
+ address owner = info.initialOwner;
291
+
292
+ if(owner == address(0)) {
293
+ revert RegisterableOwnerIsZero();
294
+ }
295
+
296
+ if(getRegistry().isRegistered(owner)) {
297
+ revert RegisterableOwnerIsRegistered();
418
298
  }
419
299
 
420
300
  // can catch all 3 if check that initialOwner is not registered