@etherisc/gif-next 0.0.2-c8cedfe-604 → 0.0.2-ca84135-795

Sign up to get free protection for your applications and to get access to all the features.
Files changed (258) hide show
  1. package/README.md +63 -1
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/{shared/RegisterableUpgradable.sol/RegisterableUpgradable.json → components/Component.sol/Component.json} +184 -128
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +154 -133
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/components/{BaseComponent.sol/BaseComponent.json → IComponent.sol/IComponent.json} +116 -30
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +0 -52
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +28 -2
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +5 -5
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +190 -122
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +170 -154
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  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/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  36. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  38. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  39. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  40. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  41. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +764 -0
  42. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  43. package/artifacts/contracts/instance/{AccessManagedSimple.sol/AccessManagedSimple.json → Cloneable.sol/Cloneable.json} +86 -2
  44. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  45. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1621 -93
  46. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  47. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +619 -0
  48. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  49. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +104 -14
  50. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  51. package/artifacts/contracts/instance/Instance.sol/Instance.json +136 -643
  52. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  53. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +244 -114
  54. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  55. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +763 -0
  56. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  57. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +164 -66
  58. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  59. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +231 -102
  60. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  61. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +33 -41
  62. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  63. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +261 -0
  64. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  65. package/artifacts/contracts/instance/base/{ComponentServiceBase.sol/ComponentServiceBase.json → ComponentService.sol/ComponentService.json} +125 -11
  66. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  67. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -13
  68. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  69. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  70. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  71. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  72. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  73. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +59 -16
  74. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  75. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  76. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  77. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  78. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  79. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  80. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  81. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1094 -0
  82. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  83. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +436 -0
  84. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +163 -35
  86. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +19 -23
  88. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  89. package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IBundleService.sol/IBundleService.json} +295 -41
  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 +771 -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 -77
  96. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +25 -240
  98. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  99. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1219 -0
  100. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  101. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +492 -0
  102. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  103. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +798 -0
  104. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  105. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +424 -0
  106. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  107. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +848 -0
  108. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  109. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +424 -0
  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 +123 -232
  114. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  115. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +196 -68
  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 +137 -330
  119. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  120. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  121. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  122. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +44 -94
  123. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  124. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +38 -112
  125. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  126. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +530 -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/Service.sol/Service.dbg.json +1 -1
  143. package/artifacts/contracts/shared/Service.sol/Service.json +13 -13
  144. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  145. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  146. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  147. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  148. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  149. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +4 -4
  150. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  151. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  152. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  153. package/artifacts/contracts/test/TestService.sol/TestService.json +31 -31
  154. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  155. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  156. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  157. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  158. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  159. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  160. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  161. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  162. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  163. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  164. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  165. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  166. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  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/Component.sol +177 -0
  180. package/contracts/components/Distribution.sol +15 -27
  181. package/contracts/components/IComponent.sol +37 -0
  182. package/contracts/components/IDistributionComponent.sol +0 -2
  183. package/contracts/components/IPoolComponent.sol +5 -1
  184. package/contracts/components/IProductComponent.sol +2 -2
  185. package/contracts/components/Pool.sol +46 -46
  186. package/contracts/components/Product.sol +57 -59
  187. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
  188. package/contracts/instance/BundleManager.sol +125 -0
  189. package/contracts/instance/Cloneable.sol +46 -0
  190. package/contracts/instance/IInstance.sol +38 -9
  191. package/contracts/instance/IInstanceBase.sol +27 -0
  192. package/contracts/instance/IInstanceService.sol +14 -4
  193. package/contracts/instance/Instance.sol +52 -236
  194. package/contracts/instance/InstanceAccessManager.sol +93 -78
  195. package/contracts/instance/InstanceBase.sol +38 -0
  196. package/contracts/instance/InstanceReader.sol +29 -26
  197. package/contracts/instance/InstanceService.sol +284 -83
  198. package/contracts/instance/InstanceServiceManager.sol +10 -12
  199. package/contracts/instance/ObjectManager.sol +84 -0
  200. package/contracts/instance/base/ComponentService.sol +133 -0
  201. package/contracts/instance/base/IInstanceBase.sol +0 -2
  202. package/contracts/instance/module/IAccess.sol +27 -17
  203. package/contracts/instance/module/IBundle.sol +1 -0
  204. package/contracts/instance/module/ISetup.sol +3 -0
  205. package/contracts/instance/service/BundleService.sol +293 -0
  206. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  207. package/contracts/instance/service/DistributionService.sol +51 -32
  208. package/contracts/instance/service/DistributionServiceManager.sol +10 -12
  209. package/contracts/instance/service/IBundleService.sol +44 -0
  210. package/contracts/instance/service/IPolicyService.sol +94 -0
  211. package/contracts/instance/service/IPoolService.sol +6 -23
  212. package/contracts/instance/service/IProductService.sol +6 -73
  213. package/contracts/instance/service/PolicyService.sol +538 -0
  214. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  215. package/contracts/instance/service/PoolService.sol +142 -0
  216. package/contracts/instance/service/PoolServiceManager.sol +51 -0
  217. package/contracts/instance/service/ProductService.sol +241 -0
  218. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  219. package/contracts/registry/ChainNft.sol +1 -1
  220. package/contracts/registry/IRegistry.sol +27 -30
  221. package/contracts/registry/IRegistryService.sol +37 -13
  222. package/contracts/registry/Registry.sol +150 -243
  223. package/contracts/registry/RegistryAccessManager.sol +210 -0
  224. package/contracts/registry/RegistryService.sol +86 -173
  225. package/contracts/registry/RegistryServiceManager.sol +18 -36
  226. package/contracts/registry/ReleaseManager.sol +342 -0
  227. package/contracts/registry/TokenRegistry.sol +5 -6
  228. package/contracts/shared/IRegisterable.sol +0 -2
  229. package/contracts/shared/IService.sol +2 -1
  230. package/contracts/shared/NftOwnable.sol +4 -4
  231. package/contracts/shared/ProxyManager.sol +1 -1
  232. package/contracts/shared/Service.sol +14 -8
  233. package/contracts/test/TestService.sol +3 -2
  234. package/contracts/types/NftIdSet.sol +26 -24
  235. package/contracts/types/RoleId.sol +10 -8
  236. package/package.json +1 -1
  237. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  238. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  239. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -280
  240. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
  241. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
  242. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1132
  243. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  244. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  245. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  246. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  247. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  248. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  249. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  250. package/contracts/components/BaseComponent.sol +0 -91
  251. package/contracts/components/IBaseComponent.sol +0 -25
  252. package/contracts/instance/AccessManagedSimple.sol +0 -115
  253. package/contracts/instance/AccessManagerSimple.sol +0 -692
  254. package/contracts/instance/IAccessManagerSimple.sol +0 -391
  255. package/contracts/instance/base/ComponentServiceBase.sol +0 -39
  256. package/contracts/instance/service/ComponentOwnerService.sol +0 -317
  257. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  258. package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -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
+ }
@@ -8,9 +8,7 @@ import {IRegistry} from "./IRegistry.sol";
8
8
  import {IInstance} from "../instance/IInstance.sol";
9
9
 
10
10
  import {ContractDeployerLib} from "../shared/ContractDeployerLib.sol";
11
- // import {IComponent, IComponentModule} from "../../contracts/instance/module/component/IComponent.sol";
12
- // import {IPool} from "../../contracts/instance/module/pool/IPoolModule.sol";
13
- import {IBaseComponent} from "../../contracts/components/IBaseComponent.sol";
11
+ import {IComponent} from "../../contracts/components/IComponent.sol";
14
12
  import {IPoolComponent} from "../../contracts/components/IPoolComponent.sol";
15
13
  import {IProductComponent} from "../../contracts/components/IProductComponent.sol";
16
14
  import {IDistributionComponent} from "../../contracts/components/IDistributionComponent.sol";
@@ -18,9 +16,10 @@ import {IDistributionComponent} from "../../contracts/components/IDistributionCo
18
16
  import {IVersionable} from "../../contracts/shared/IVersionable.sol";
19
17
  import {Versionable} from "../../contracts/shared/Versionable.sol";
20
18
  import {IRegisterable} from "../../contracts/shared/IRegisterable.sol";
19
+ import {Registerable} from "../../contracts/shared/Registerable.sol";
21
20
 
22
21
  import {RoleId, PRODUCT_OWNER_ROLE, POOL_OWNER_ROLE, ORACLE_OWNER_ROLE} from "../../contracts/types/RoleId.sol";
23
- import {ObjectType, REGISTRY, SERVICE, PRODUCT, ORACLE, POOL, 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";
24
23
  import {StateId, ACTIVE, PAUSED} from "../../contracts/types/StateId.sol";
25
24
  import {NftId, NftIdLib, zeroNftId} from "../../contracts/types/NftId.sol";
26
25
  import {Fee, FeeLib} from "../../contracts/types/Fee.sol";
@@ -30,7 +29,6 @@ import {Service} from "../shared/Service.sol";
30
29
  import {IService} from "../shared/IService.sol";
31
30
  import {IRegistryService} from "./IRegistryService.sol";
32
31
  import {Registry} from "./Registry.sol";
33
- import {ChainNft} from "./ChainNft.sol";
34
32
 
35
33
  contract RegistryService is
36
34
  AccessManagedUpgradeable,
@@ -39,75 +37,12 @@ contract RegistryService is
39
37
  {
40
38
  using NftIdLib for NftId;
41
39
 
42
- // TODO move errors to interface contract
43
- error SelfRegistration();
44
- error NotRegistryOwner();
45
-
46
- error NotService();
47
- error NotInstance();
48
- error NotProduct();
49
- error NotPool();
50
- error NotDistribution();
51
-
52
- error UnexpectedRegisterableType(ObjectType expected, ObjectType found);
53
- error NotRegisterableOwner(address expectedOwner);
54
- error RegisterableOwnerIsZero();
55
- error RegisterableOwnerIsRegistered();
56
- error InvalidInitialOwner(address initialOwner);
57
- error InvalidAddress(address registerableAddress);
58
-
59
- // Initial value for constant variable has to be compile-time constant
60
- // TODO define types as constants?
61
- //ObjectType public constant SERVICE_TYPE = REGISTRY();
62
- string public constant NAME = "RegistryService";
63
-
64
40
  // TODO update to real hash when registry is stable
65
41
  bytes32 public constant REGISTRY_CREATION_CODE_HASH = bytes32(0);
66
42
 
67
- address public constant NFT_LOCK_ADDRESS = address(0x1);
68
-
69
- /// @dev
70
- // msg.sender - ONLY registry owner
71
- // CAN NOT register itself
72
- // CAN register ONLY valid object-parent types combinations for SERVICE
73
- // CAN register ONLY IRegisterable address he owns
74
- // IMPORTANT: MUST NOT check owner before calling external contract
75
- function registerService(IService service)
76
- external
77
- // TODO restrict access - registryService.registerService must use accessmanager for checking permissions as
78
- // services are not always owned by registry owner - actually only registry service is owned by registry owner
79
-
80
- returns(
81
- IRegistry.ObjectInfo memory info,
82
- bytes memory data
83
- )
84
- {
85
-
86
- // CAN revert if no ERC165 support -> will revert with empty message
87
- if(!service.supportsInterface(type(IService).interfaceId)) {
88
- revert NotService();
89
- }
90
-
91
- (
92
- info,
93
- data
94
- ) = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
95
-
96
- info.nftId = _registry.register(info);
97
- service.linkToRegisteredNftId();
98
- return (
99
- info,
100
- data
101
- );
102
- }
103
-
104
- // If msg.sender is approved service:
105
- // 1) add owner arg (service MUST pass it's msg.sender as owner)
106
- // 2) check service allowance
107
- // 3) comment self registrstion check
108
- //function registerInstance(IRegisterable instance, address owner)
109
- function registerInstance(IRegisterable instance)
43
+ function registerInstance(IRegisterable instance, address owner)
110
44
  external
45
+ restricted
111
46
  returns(
112
47
  IRegistry.ObjectInfo memory info,
113
48
  bytes memory data
@@ -117,21 +52,14 @@ contract RegistryService is
117
52
  revert NotInstance();
118
53
  }
119
54
 
120
- (
121
- info,
122
- data
123
- ) = _getAndVerifyContractInfo(instance, INSTANCE(), msg.sender);
55
+ (info, data) = _getAndVerifyContractInfo(instance, INSTANCE(), owner);
124
56
 
125
57
  info.nftId = _registry.register(info);
126
- instance.linkToRegisteredNftId(); // asume safe
127
58
 
128
- return (
129
- info,
130
- data
131
- );
59
+ return (info, data);
132
60
  }
133
61
 
134
- function registerProduct(IBaseComponent product, address owner)
62
+ function registerProduct(IComponent product, address owner)
135
63
  external
136
64
  restricted
137
65
  returns(
@@ -144,24 +72,14 @@ contract RegistryService is
144
72
  revert NotProduct();
145
73
  }
146
74
 
147
- (
148
- info,
149
- data
150
- ) = _getAndVerifyContractInfo(product, PRODUCT(), owner);
151
-
152
- NftId serviceNftId = _registry.getNftId(msg.sender);
75
+ (info, data) = _getAndVerifyContractInfo(product, PRODUCT(), owner);
153
76
 
154
77
  info.nftId = _registry.register(info);
155
- // TODO unsafe, let component or its owner derive nftId latter, when state assumptions and modifications of GIF contracts are finished
156
- product.linkToRegisteredNftId();
157
78
 
158
- return (
159
- info,
160
- data
161
- );
79
+ return (info, data);
162
80
  }
163
81
 
164
- function registerPool(IBaseComponent pool, address owner)
82
+ function registerPool(IComponent pool, address owner)
165
83
  external
166
84
  restricted
167
85
  returns(
@@ -173,23 +91,14 @@ contract RegistryService is
173
91
  revert NotPool();
174
92
  }
175
93
 
176
- (
177
- info,
178
- data
179
- ) = _getAndVerifyContractInfo(pool, POOL(), owner);
180
-
181
- NftId serviceNftId = _registry.getNftId(msg.sender);
94
+ (info, data) = _getAndVerifyContractInfo(pool, POOL(), owner);
182
95
 
183
96
  info.nftId = _registry.register(info);
184
- pool.linkToRegisteredNftId();
185
97
 
186
- return (
187
- info,
188
- data
189
- );
98
+ return (info, data);
190
99
  }
191
100
 
192
- function registerDistribution(IBaseComponent distribution, address owner)
101
+ function registerDistribution(IComponent distribution, address owner)
193
102
  external
194
103
  restricted
195
104
  returns(
@@ -201,20 +110,11 @@ contract RegistryService is
201
110
  revert NotDistribution();
202
111
  }
203
112
 
204
- (
205
- info,
206
- data
207
- ) = _getAndVerifyContractInfo(distribution, DISTRIBUTION(), owner);
208
-
209
- NftId serviceNftId = _registry.getNftId(msg.sender);
113
+ (info, data) = _getAndVerifyContractInfo(distribution, DISTRIBUTION(), owner);
210
114
 
211
- info.nftId = _registry.register(info);
212
- distribution.linkToRegisteredNftId();
115
+ info.nftId = _registry.register(info);
213
116
 
214
- return (
215
- info,
216
- data
217
- );
117
+ return (info, data);
218
118
  }
219
119
 
220
120
  function registerPolicy(IRegistry.ObjectInfo memory info)
@@ -222,8 +122,6 @@ contract RegistryService is
222
122
  restricted
223
123
  returns(NftId nftId)
224
124
  {
225
- NftId senderNftId = _registry.getNftId(msg.sender);
226
-
227
125
  _verifyObjectInfo(info, POLICY());
228
126
 
229
127
  nftId = _registry.register(info);
@@ -234,31 +132,29 @@ contract RegistryService is
234
132
  restricted
235
133
  returns(NftId nftId)
236
134
  {
237
-
238
- NftId senderNftId = _registry.getNftId(msg.sender);
239
-
240
135
  _verifyObjectInfo(info, BUNDLE());
241
136
 
242
137
  nftId = _registry.register(info);
243
138
  }
244
139
 
140
+ function registerStake(IRegistry.ObjectInfo memory info)
141
+ external
142
+ restricted
143
+ returns(NftId nftId)
144
+ {
145
+ _verifyObjectInfo(info, STAKE());
245
146
 
246
- // From IService
247
- function getName() public pure override(IService, Service) returns(string memory) {
248
- return NAME;
147
+ nftId = _registry.register(info);
249
148
  }
250
- //function getType() public pure override(IService, ServiceBase) returns(ObjectType serviceType) {
251
- // return SERVICE_TYPE;
252
- //}
253
149
 
150
+ // From IService
151
+ function getDomain() public pure override(IService, Service) returns(ObjectType serviceDomain) {
152
+ return REGISTRY();
153
+ }
254
154
 
255
155
  // from Versionable
256
156
 
257
157
  /// @dev top level initializer
258
- // 1) registry is non upgradeable -> don't need a proxy and uses constructor !
259
- // 2) deploy registry service first -> from its initialization func it is easier to deploy registry then vice versa
260
- // 3) deploy registry -> pass registry service address as constructor argument
261
- // registry is getting instantiated and locked to registry service address forever
262
158
  function _initialize(
263
159
  address owner,
264
160
  bytes memory data
@@ -269,38 +165,60 @@ contract RegistryService is
269
165
  {
270
166
  (
271
167
  address initialAuthority,
272
- bytes memory registryByteCodeWithInitCode
273
- ) = abi.decode(data, (address, bytes));
168
+ address registry
169
+ ) = abi.decode(data, (address, address));
274
170
 
275
171
  __AccessManaged_init(initialAuthority);
276
172
 
277
- bytes memory encodedConstructorArguments = abi.encode(
278
- owner,
279
- getMajorVersion());
173
+ _initializeService(address(registry), owner);
280
174
 
281
- bytes memory registryCreationCode = ContractDeployerLib.getCreationCode(
282
- registryByteCodeWithInitCode,
283
- encodedConstructorArguments);
175
+ _registerInterface(type(IRegistryService).interfaceId);
176
+ }
284
177
 
285
- IRegistry registry = IRegistry(ContractDeployerLib.deploy(
286
- registryCreationCode,
287
- REGISTRY_CREATION_CODE_HASH));
178
+ // from IRegisterable
288
179
 
289
- NftId registryNftId = registry.getNftId(address(registry));
180
+ function getInitialInfo()
181
+ public
182
+ view
183
+ override(IRegisterable, Registerable)
184
+ returns (IRegistry.ObjectInfo memory info, bytes memory data)
185
+ {
186
+ (info , data) = super.getInitialInfo();
290
187
 
291
- _initializeService(address(registry), owner);
188
+ FunctionConfig[] memory config = new FunctionConfig[](6);
292
189
 
293
- // TODO why do registry service proxy need to keep its nftId??? -> no registryServiceNftId checks in implementation
294
- // if they are -> use registry address to obtain owner of registry service nft (works the same with any registerable and(or) implementation)
295
- linkToRegisteredNftId();
296
- _registerInterface(type(IRegistryService).interfaceId);
190
+ // order of service registrations MUST be reverse to this array
191
+ /*config[-1].serviceDomain = STAKE();
192
+ config[-1].selector = RegistryService.registerStake.selector;*/
193
+
194
+ config[0].serviceDomain = POLICY();
195
+ config[0].selector = RegistryService.registerPolicy.selector;
196
+
197
+ config[1].serviceDomain = BUNDLE();
198
+ config[1].selector = RegistryService.registerBundle.selector;
199
+
200
+ config[2].serviceDomain = PRODUCT();
201
+ config[2].selector = RegistryService.registerProduct.selector;
202
+
203
+ config[3].serviceDomain = POOL();
204
+ config[3].selector = RegistryService.registerPool.selector;
205
+
206
+ config[4].serviceDomain = DISTRIBUTION();
207
+ config[4].selector = RegistryService.registerDistribution.selector;
208
+
209
+ // registerInstance() have no restriction
210
+ config[5].serviceDomain = INSTANCE();
211
+ config[5].selector = RegistryService.registerInstance.selector;
212
+
213
+ data = abi.encode(config);
297
214
  }
298
215
 
299
- // parent check done in registry because of approve()
216
+ // Internal
217
+
300
218
  function _getAndVerifyContractInfo(
301
219
  IRegisterable registerable,
302
220
  ObjectType expectedType, // assume can be valid only
303
- address expectedOwner // assume can be 0
221
+ address expectedOwner // assume can be 0 when given by other service
304
222
  )
305
223
  internal
306
224
  view
@@ -321,13 +239,8 @@ contract RegistryService is
321
239
 
322
240
  address owner = info.initialOwner;
323
241
 
324
- // solhint-disable-next-line
325
- if(expectedType == INSTANCE()) {
326
- // any address may create a new instance via instance service
327
- } else {
328
- if(owner != expectedOwner) { // registerable owner protection
329
- revert NotRegisterableOwner(expectedOwner);
330
- }
242
+ if(owner != expectedOwner) { // registerable owner protection
243
+ revert NotRegisterableOwner(expectedOwner);
331
244
  }
332
245
 
333
246
  if(owner == address(registerable)) {
@@ -349,31 +262,31 @@ contract RegistryService is
349
262
  revert InvalidParent(parentNftId);
350
263
  }*/
351
264
 
352
- return(
353
- info,
354
- data
355
- );
265
+ return(info, data);
356
266
  }
357
267
 
358
- // parent checks done in registry because of approve()
359
268
  function _verifyObjectInfo(
360
269
  IRegistry.ObjectInfo memory info,
361
- ObjectType objectType
270
+ ObjectType expectedType
362
271
  )
363
272
  internal
364
273
  view
365
274
  {
366
- if(info.objectAddress > address(0)) {
367
- revert InvalidAddress(info.objectAddress);
275
+ // enforce instead of check
276
+ info.objectAddress = address(0);
277
+
278
+ if(info.objectType != expectedType) {// type is checked in registry anyway...but service logic may depend on expected value
279
+ revert UnexpectedRegisterableType(expectedType, info.objectType);
280
+ }
281
+
282
+ address owner = info.initialOwner;
283
+
284
+ if(owner == address(0)) {
285
+ revert RegisterableOwnerIsZero();
368
286
  }
369
287
 
370
- if(
371
- getRegistry().isRegistered(info.initialOwner) ||
372
- info.initialOwner == address(0)) {
373
- // TODO non registered address can register object(e.g. POLICY()) and then transfer associated nft to registered contract
374
- // what are motivations to do so?
375
- // at least registered contract can not register objects by itself, SERVICE,
376
- revert InvalidInitialOwner(info.initialOwner);
288
+ if(getRegistry().isRegistered(owner)) {
289
+ revert RegisterableOwnerIsRegistered();
377
290
  }
378
291
 
379
292
  // can catch all 3 if check that initialOwner is not registered
@@ -17,51 +17,41 @@ contract RegistryServiceManager is
17
17
  {
18
18
  bytes32 constant public ACCESS_MANAGER_CREATION_CODE_HASH = 0x0;
19
19
 
20
- AccessManager private _accessManager;
21
- RegistryService private _registryService;
22
- TokenRegistry private _tokenRegistry;
20
+ RegistryService private immutable _registryService;
23
21
 
24
22
  /// @dev initializes proxy manager with registry service implementation and deploys registry
25
23
  constructor(
26
- address accessManager
27
- )
24
+ address initialAuthority, // used by implementation
25
+ address registry) // used by implementation
28
26
  ProxyManager()
29
27
  {
30
- _accessManager = AccessManager(accessManager);
31
-
32
- bytes memory initializationData = abi.encode(accessManager, type(Registry).creationCode);
28
+ require(initialAuthority > address(0), "RegistryServiceManager: initial authority is 0");
29
+ require(registry > address(0), "RegistryServiceManager: registry is 0");
30
+
31
+ // implementation's initializer func `data` argument
32
+ bytes memory initializationData = abi.encode(
33
+ initialAuthority,
34
+ registry);
33
35
 
34
36
  IVersionable versionable = deploy(
35
37
  address(new RegistryService()),
36
38
  initializationData);
37
39
 
38
40
  _registryService = RegistryService(address(versionable));
39
-
40
- // link ownership of registry service manager ot nft owner of registry service
41
- _linkToNftOwnable(
42
- address(_registryService.getRegistry()),
43
- address(_registryService));
44
-
45
- // deploy token registry
46
-
47
- // _tokenRegistry = new TokenRegistry(
48
- // address(_registryService.getRegistry()),
49
- // address(_registryService));
50
-
51
- // implies that after this constructor call only upgrade functionality is available
52
- _isDeployed = true;
53
41
  }
54
42
 
55
- //--- view functions ----------------------------------------------------//
43
+ // from IRegisterable
56
44
 
57
- function getAccessManager()
58
- external
59
- view
60
- returns (AccessManager)
45
+ // IMPORTANT: registry here and in constructor MUST be the same
46
+ function linkToNftOwnable(address registry)
47
+ public
48
+ onlyOwner
61
49
  {
62
- return _accessManager;
50
+ _linkToNftOwnable(registry, address(_registryService));
63
51
  }
64
52
 
53
+ //--- view functions ----------------------------------------------------//
54
+
65
55
  function getRegistryService()
66
56
  external
67
57
  view
@@ -69,12 +59,4 @@ contract RegistryServiceManager is
69
59
  {
70
60
  return _registryService;
71
61
  }
72
-
73
- function getTokenRegistry()
74
- external
75
- view
76
- returns (TokenRegistry)
77
- {
78
- return _tokenRegistry;
79
- }
80
62
  }