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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (240) hide show
  1. package/README.md +63 -1
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  3. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +155 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +143 -86
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +117 -0
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +28 -2
  11. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  12. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  13. package/artifacts/contracts/components/Pool.sol/Pool.json +175 -115
  14. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  15. package/artifacts/contracts/components/Product.sol/Product.json +151 -95
  16. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +1 -1
  17. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +1 -1
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  36. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  37. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  38. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  39. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +788 -0
  40. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  41. package/artifacts/contracts/instance/{AccessManagedSimple.sol/AccessManagedSimple.json → Cloneable.sol/Cloneable.json} +86 -2
  42. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  43. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +500 -0
  44. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  45. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +448 -0
  46. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  47. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +104 -14
  48. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  49. package/artifacts/contracts/instance/Instance.sol/Instance.json +162 -679
  50. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  51. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +244 -114
  52. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  53. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +763 -0
  54. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  55. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +74 -40
  56. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  57. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +183 -151
  58. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  59. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +26 -74
  60. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  61. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +285 -0
  62. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
  63. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +24 -32
  64. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  65. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  66. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  67. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  68. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  69. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  70. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +59 -16
  71. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  72. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  73. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  74. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  75. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  76. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  77. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  78. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +945 -0
  79. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  80. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +432 -0
  81. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  82. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +39 -52
  83. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  84. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +49 -72
  85. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  86. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +13 -37
  87. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  88. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +669 -0
  89. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  90. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +13 -13
  91. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  92. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +13 -13
  93. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  94. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +664 -0
  95. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  96. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +15 -77
  97. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  98. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +17 -220
  99. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  100. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +993 -0
  101. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  102. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +464 -0
  103. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  104. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +48 -160
  105. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  106. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +13 -41
  107. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  108. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +50 -359
  109. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  110. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +13 -61
  111. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  112. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  113. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  114. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +151 -133
  115. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  116. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +94 -65
  117. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  118. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  119. package/artifacts/contracts/registry/Registry.sol/Registry.json +170 -225
  120. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  121. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  122. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  123. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +30 -128
  124. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  125. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +38 -100
  126. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  127. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +546 -0
  128. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  129. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +14 -27
  130. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  131. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  132. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  133. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  134. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  135. package/artifacts/contracts/shared/IService.sol/IService.json +13 -13
  136. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  137. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  138. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  139. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  140. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
  141. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  142. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
  143. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +1 -1
  144. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  145. package/artifacts/contracts/shared/Service.sol/Service.json +13 -13
  146. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  147. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  148. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  149. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  150. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  151. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +2 -2
  152. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  153. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  154. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  155. package/artifacts/contracts/test/TestService.sol/TestService.json +31 -31
  156. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  157. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  158. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  159. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  160. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  161. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  162. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  163. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  164. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  165. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  166. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  167. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  168. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  169. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  170. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  172. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  173. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  174. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  175. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  176. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  177. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  178. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  179. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  180. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  181. package/contracts/components/BaseComponent.sol +79 -11
  182. package/contracts/components/Distribution.sol +6 -2
  183. package/contracts/components/IBaseComponent.sol +9 -0
  184. package/contracts/components/IPoolComponent.sol +5 -1
  185. package/contracts/components/Pool.sol +40 -11
  186. package/contracts/components/Product.sol +16 -8
  187. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
  188. package/contracts/instance/BundleManager.sol +129 -0
  189. package/contracts/instance/Cloneable.sol +46 -0
  190. package/contracts/instance/IInstance.sol +10 -1
  191. package/contracts/instance/IInstanceBase.sol +26 -0
  192. package/contracts/instance/IInstanceService.sol +13 -3
  193. package/contracts/instance/Instance.sol +47 -214
  194. package/contracts/instance/InstanceAccessManager.sol +93 -78
  195. package/contracts/instance/InstanceBase.sol +41 -0
  196. package/contracts/instance/InstanceReader.sol +9 -0
  197. package/contracts/instance/InstanceService.sol +246 -93
  198. package/contracts/instance/InstanceServiceManager.sol +5 -8
  199. package/contracts/instance/ObjectManager.sol +101 -0
  200. package/contracts/instance/base/ComponentServiceBase.sol +36 -81
  201. package/contracts/instance/module/IAccess.sol +27 -17
  202. package/contracts/instance/module/ISetup.sol +3 -1
  203. package/contracts/instance/service/BundleService.sol +260 -0
  204. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  205. package/contracts/instance/service/ComponentOwnerService.sol +4 -6
  206. package/contracts/instance/service/DistributionService.sol +45 -20
  207. package/contracts/instance/service/DistributionServiceManager.sol +6 -9
  208. package/contracts/instance/service/IBundleService.sol +45 -0
  209. package/contracts/instance/service/IPolicyService.sol +87 -0
  210. package/contracts/instance/service/IPoolService.sol +6 -23
  211. package/contracts/instance/service/IProductService.sol +3 -70
  212. package/contracts/instance/service/PolicyService.sol +503 -0
  213. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  214. package/contracts/instance/service/PoolService.sol +47 -117
  215. package/contracts/instance/service/PoolServiceManager.sol +5 -8
  216. package/contracts/instance/service/ProductService.sol +59 -452
  217. package/contracts/registry/ChainNft.sol +1 -1
  218. package/contracts/registry/IRegistry.sol +27 -15
  219. package/contracts/registry/IRegistryService.sol +13 -5
  220. package/contracts/registry/Registry.sol +151 -199
  221. package/contracts/registry/RegistryAccessManager.sol +210 -0
  222. package/contracts/registry/RegistryService.sol +48 -83
  223. package/contracts/registry/RegistryServiceManager.sol +18 -36
  224. package/contracts/registry/ReleaseManager.sol +348 -0
  225. package/contracts/registry/TokenRegistry.sol +5 -6
  226. package/contracts/shared/IService.sol +2 -1
  227. package/contracts/shared/ProxyManager.sol +1 -1
  228. package/contracts/shared/Service.sol +10 -7
  229. package/contracts/test/TestService.sol +3 -2
  230. package/contracts/types/NftIdSet.sol +26 -24
  231. package/contracts/types/RoleId.sol +10 -10
  232. package/package.json +1 -1
  233. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
  234. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
  235. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1132
  236. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  237. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  238. package/contracts/instance/AccessManagedSimple.sol +0 -115
  239. package/contracts/instance/AccessManagerSimple.sol +0 -692
  240. package/contracts/instance/IAccessManagerSimple.sol +0 -391
@@ -3,149 +3,291 @@ pragma solidity ^0.8.20;
3
3
 
4
4
  import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol";
5
5
 
6
- import {AccessManagerSimple} from "./AccessManagerSimple.sol";
7
- import {InstanceAccessManager} from "./InstanceAccessManager.sol";
8
6
  import {Instance} from "./Instance.sol";
7
+ import {IInstance} from "./IInstance.sol";
8
+ import {InstanceAccessManager} from "./InstanceAccessManager.sol";
9
9
  import {IInstanceService} from "./IInstanceService.sol";
10
10
  import {InstanceReader} from "./InstanceReader.sol";
11
+ import {BundleManager} from "./BundleManager.sol";
11
12
  import {IRegistry} from "../registry/IRegistry.sol";
12
- import {Registry} from "../registry/Registry.sol";
13
13
  import {RegistryService} from "../registry/RegistryService.sol";
14
+ import {ChainNft} from "../registry/ChainNft.sol";
14
15
  import {Service} from "../../contracts/shared/Service.sol";
15
16
  import {IService} from "../shared/IService.sol";
16
- import {ContractDeployerLib} from "../shared/ContractDeployerLib.sol";
17
- import {NftId, NftIdLib, zeroNftId} from "../../contracts/types/NftId.sol";
17
+ import {NftId} from "../../contracts/types/NftId.sol";
18
18
  import {RoleId} from "../types/RoleId.sol";
19
- import {VersionLib} from "../types/Version.sol";
20
- import {ADMIN_ROLE, INSTANCE_SERVICE_ROLE, DISTRIBUTION_SERVICE_ROLE, POOL_SERVICE_ROLE, PRODUCT_SERVICE_ROLE} from "../types/RoleId.sol";
19
+ import {ADMIN_ROLE, DISTRIBUTION_OWNER_ROLE, POOL_OWNER_ROLE, PRODUCT_OWNER_ROLE, INSTANCE_SERVICE_ROLE, DISTRIBUTION_SERVICE_ROLE, POOL_SERVICE_ROLE, PRODUCT_SERVICE_ROLE, POLICY_SERVICE_ROLE, BUNDLE_SERVICE_ROLE} from "../types/RoleId.sol";
20
+ import {ObjectType, INSTANCE, BUNDLE, POLICY, PRODUCT, DISTRIBUTION, REGISTRY, POOL} from "../types/ObjectType.sol";
21
21
 
22
22
  contract InstanceService is Service, IInstanceService {
23
23
 
24
- address internal _registryAddress;
25
- address internal _accessManagerMaster;
26
- address internal _instanceMaster;
27
- address internal _instanceReaderMaster;
24
+ address internal _masterInstanceAccessManager;
25
+ address internal _masterInstance;
26
+ address internal _masterInstanceReader;
27
+ address internal _masterInstanceBundleManager;
28
28
 
29
29
  // TODO update to real hash when instance is stable
30
30
  bytes32 public constant INSTANCE_CREATION_CODE_HASH = bytes32(0);
31
31
  string public constant NAME = "InstanceService";
32
32
 
33
+ modifier onlyInstanceOwner(NftId instanceNftId) {
34
+ IRegistry registry = getRegistry();
35
+ ChainNft chainNft = registry.getChainNft();
36
+
37
+ if( msg.sender != chainNft.ownerOf(instanceNftId.toInt())) {
38
+ revert ErrorInstanceServiceNotInstanceOwner(msg.sender, instanceNftId);
39
+ }
40
+ _;
41
+ }
42
+
43
+ modifier onlyRegisteredService() {
44
+ address caller = msg.sender;
45
+ if (! getRegistry().isRegisteredService(caller)) {
46
+ revert ErrorInstanceServiceRequestUnauhorized(caller);
47
+ }
48
+ _;
49
+ }
50
+
33
51
  function createInstanceClone()
34
52
  external
35
53
  returns (
36
- AccessManagerSimple clonedAccessManager,
54
+ InstanceAccessManager clonedAccessManager,
37
55
  Instance clonedInstance,
38
- NftId instanceNftId,
39
- InstanceReader clonedInstanceReader
56
+ NftId clonedInstanceNftId,
57
+ InstanceReader clonedInstanceReader,
58
+ BundleManager clonedBundleManager
40
59
  )
41
60
  {
42
61
  address instanceOwner = msg.sender;
43
- Registry registry = Registry(_registryAddress);
44
- NftId registryNftId = registry.getNftId(_registryAddress);
45
- address registryServiceAddress = registry.getServiceAddress("RegistryService", VersionLib.toVersion(3, 0, 0).toMajorPart());
62
+ IRegistry registry = getRegistry();
63
+ address registryAddress = address(registry);
64
+ NftId registryNftId = registry.getNftId(registryAddress);
65
+ address registryServiceAddress = registry.getServiceAddress(REGISTRY(), getMajorVersion());
46
66
  RegistryService registryService = RegistryService(registryServiceAddress);
47
67
 
48
68
  // initially set the authority of the access managar to this (being the instance service).
49
69
  // This will allow the instance service to bootstrap the authorizations of the instance
50
70
  // and then transfer the ownership of the access manager to the instance owner once everything is setup
51
- clonedAccessManager = AccessManagerSimple(Clones.clone(_accessManagerMaster));
52
- clonedAccessManager.initialize(address(this));
71
+ clonedAccessManager = InstanceAccessManager(Clones.clone(_masterInstanceAccessManager));
72
+ clonedAccessManager.__InstanceAccessManager_initialize(address(this));
53
73
 
54
- clonedInstance = Instance(Clones.clone(_instanceMaster));
55
- clonedInstance.initialize(address(clonedAccessManager), _registryAddress, registryNftId, msg.sender);
74
+ clonedInstance = Instance(Clones.clone(_masterInstance));
75
+ clonedInstance.initialize(address(clonedAccessManager), registryAddress, registryNftId, msg.sender);
56
76
  ( IRegistry.ObjectInfo memory info, ) = registryService.registerInstance(clonedInstance);
57
- instanceNftId = info.nftId;
77
+ clonedInstanceNftId = info.nftId;
58
78
 
59
- clonedInstanceReader = InstanceReader(Clones.clone(address(_instanceReaderMaster)));
60
- clonedInstanceReader.initialize(_registryAddress, instanceNftId);
79
+ clonedInstanceReader = InstanceReader(Clones.clone(address(_masterInstanceReader)));
80
+ clonedInstanceReader.initialize(registryAddress, clonedInstanceNftId);
81
+ clonedInstance.setInstanceReader(clonedInstanceReader);
61
82
 
62
- _grantInitialAuthorizations(clonedAccessManager, clonedInstance);
83
+ clonedBundleManager = BundleManager(Clones.clone(_masterInstanceBundleManager));
84
+ clonedBundleManager.initialize(address(clonedAccessManager), registryAddress, clonedInstanceNftId);
85
+ clonedInstance.setBundleManager(clonedBundleManager);
86
+
87
+ // TODO amend setters with instance specific , policy manager ...
88
+
89
+ _grantInitialAuthorizations(clonedAccessManager, clonedInstance, clonedBundleManager);
63
90
 
64
- clonedInstance.setInstanceReader(clonedInstanceReader);
65
-
66
91
  // to complete setup switch instance ownership to the instance owner
67
92
  // TODO: use a role less powerful than admin, maybe INSTANCE_ADMIN (does not exist yet)
68
- clonedAccessManager.grantRole(ADMIN_ROLE().toInt(), instanceOwner, 0);
69
- clonedAccessManager.revokeRole(ADMIN_ROLE().toInt(), address(this));
93
+ clonedAccessManager.grantRole(ADMIN_ROLE(), instanceOwner);
94
+ clonedAccessManager.revokeRole(ADMIN_ROLE(), address(this));
95
+
96
+ emit LogInstanceCloned(address(clonedAccessManager), address(clonedInstance), address(clonedInstanceReader), clonedInstanceNftId);
97
+ }
70
98
 
71
- emit LogInstanceCloned(address(clonedAccessManager), address(clonedInstance), address(clonedInstanceReader), instanceNftId);
99
+ function _grantInitialAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
100
+ _createGifRoles(clonedAccessManager);
101
+ _createGifTargets(clonedAccessManager, clonedInstance, clonedBundleManager);
102
+ _grantDistributionServiceAuthorizations(clonedAccessManager, clonedInstance);
103
+ _grantPoolServiceAuthorizations(clonedAccessManager, clonedInstance);
104
+ _grantProductServiceAuthorizations(clonedAccessManager, clonedInstance);
105
+ _grantPolicyServiceAuthorizations(clonedAccessManager, clonedInstance);
106
+ _grantBundleServiceAuthorizations(clonedAccessManager, clonedInstance, clonedBundleManager);
107
+ _grantInstanceServiceAuthorizations(clonedAccessManager, clonedInstance);
72
108
  }
73
109
 
74
- function _grantInitialAuthorizations(AccessManagerSimple clonedAccessManager, Instance clonedInstance) internal {
75
- address distributionServiceAddress = _registry.getServiceAddress("DistributionService", VersionLib.toVersion(3, 0, 0).toMajorPart());
76
- clonedAccessManager.grantRole(DISTRIBUTION_SERVICE_ROLE().toInt(), distributionServiceAddress, 0);
110
+ function _createGifRoles(InstanceAccessManager clonedAccessManager) internal {
111
+ clonedAccessManager.createGifRole(DISTRIBUTION_OWNER_ROLE(), "DistributionOwnerRole");
112
+ clonedAccessManager.createGifRole(POOL_OWNER_ROLE(), "PoolOwnerRole");
113
+ clonedAccessManager.createGifRole(PRODUCT_OWNER_ROLE(), "ProductOwnerRole");
114
+
115
+ clonedAccessManager.createGifRole(DISTRIBUTION_SERVICE_ROLE(), "DistributionServiceRole");
116
+ clonedAccessManager.createGifRole(POOL_SERVICE_ROLE(), "PoolServiceRole");
117
+ clonedAccessManager.createGifRole(PRODUCT_SERVICE_ROLE(), "ProductServiceRole");
118
+ clonedAccessManager.createGifRole(POLICY_SERVICE_ROLE(), "PolicyServiceRole");
119
+ clonedAccessManager.createGifRole(BUNDLE_SERVICE_ROLE(), "BundleServiceRole");
120
+ clonedAccessManager.createGifRole(INSTANCE_SERVICE_ROLE(), "InstanceServiceRole");
121
+ }
122
+
123
+ function _createGifTargets(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
124
+ clonedAccessManager.createGifTarget(address(clonedInstance), "Instance");
125
+ clonedAccessManager.createGifTarget(address(clonedBundleManager), "BundleManager");
126
+ }
127
+
128
+ function _grantDistributionServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
129
+ // configure authorization for distribution service on instance
130
+ IRegistry registry = getRegistry();
131
+ address distributionServiceAddress = registry.getServiceAddress(DISTRIBUTION(), getMajorVersion());
132
+ clonedAccessManager.grantRole(DISTRIBUTION_SERVICE_ROLE(), distributionServiceAddress);
77
133
  bytes4[] memory instanceDistributionServiceSelectors = new bytes4[](2);
78
134
  instanceDistributionServiceSelectors[0] = clonedInstance.createDistributionSetup.selector;
79
135
  instanceDistributionServiceSelectors[1] = clonedInstance.updateDistributionSetup.selector;
80
136
  clonedAccessManager.setTargetFunctionRole(
81
- address(clonedInstance),
137
+ "Instance",
82
138
  instanceDistributionServiceSelectors,
83
- DISTRIBUTION_SERVICE_ROLE().toInt());
139
+ DISTRIBUTION_SERVICE_ROLE());
140
+ }
84
141
 
85
- address poolServiceAddress = _registry.getServiceAddress("PoolService", VersionLib.toVersion(3, 0, 0).toMajorPart());
86
- clonedAccessManager.grantRole(POOL_SERVICE_ROLE().toInt(), address(poolServiceAddress), 0);
142
+ function _grantPoolServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
143
+ // configure authorization for pool service on instance
144
+ address poolServiceAddress = _registry.getServiceAddress(POOL(), getMajorVersion());
145
+ clonedAccessManager.grantRole(POOL_SERVICE_ROLE(), address(poolServiceAddress));
87
146
  bytes4[] memory instancePoolServiceSelectors = new bytes4[](4);
88
147
  instancePoolServiceSelectors[0] = clonedInstance.createPoolSetup.selector;
89
148
  instancePoolServiceSelectors[1] = clonedInstance.updatePoolSetup.selector;
90
- instancePoolServiceSelectors[2] = clonedInstance.createBundle.selector;
91
- instancePoolServiceSelectors[3] = clonedInstance.updateBundle.selector;
92
149
  clonedAccessManager.setTargetFunctionRole(
93
- address(clonedInstance),
150
+ "Instance",
94
151
  instancePoolServiceSelectors,
95
- POOL_SERVICE_ROLE().toInt());
152
+ POOL_SERVICE_ROLE());
153
+ }
96
154
 
97
- address productServiceAddress = _registry.getServiceAddress("ProductService", VersionLib.toVersion(3, 0, 0).toMajorPart());
98
- clonedAccessManager.grantRole(PRODUCT_SERVICE_ROLE().toInt(), address(productServiceAddress), 0);
99
- bytes4[] memory instanceProductServiceSelectors = new bytes4[](7);
155
+ function _grantProductServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
156
+ // configure authorization for product service on instance
157
+ address productServiceAddress = _registry.getServiceAddress(PRODUCT(), getMajorVersion());
158
+ clonedAccessManager.grantRole(PRODUCT_SERVICE_ROLE(), address(productServiceAddress));
159
+ bytes4[] memory instanceProductServiceSelectors = new bytes4[](5);
100
160
  instanceProductServiceSelectors[0] = clonedInstance.createProductSetup.selector;
101
161
  instanceProductServiceSelectors[1] = clonedInstance.updateProductSetup.selector;
102
162
  instanceProductServiceSelectors[2] = clonedInstance.createRisk.selector;
103
163
  instanceProductServiceSelectors[3] = clonedInstance.updateRisk.selector;
104
164
  instanceProductServiceSelectors[4] = clonedInstance.updateRiskState.selector;
105
- instanceProductServiceSelectors[5] = clonedInstance.createPolicy.selector;
106
- instanceProductServiceSelectors[6] = clonedInstance.updatePolicy.selector;
107
165
  clonedAccessManager.setTargetFunctionRole(
108
- address(clonedInstance),
166
+ "Instance",
109
167
  instanceProductServiceSelectors,
110
- PRODUCT_SERVICE_ROLE().toInt());
168
+ PRODUCT_SERVICE_ROLE());
169
+ }
170
+
171
+ function _grantPolicyServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
172
+ // configure authorization for policy service on instance
173
+ address policyServiceAddress = _registry.getServiceAddress(POLICY(), getMajorVersion());
174
+ clonedAccessManager.grantRole(POLICY_SERVICE_ROLE(), address(policyServiceAddress));
175
+ bytes4[] memory instancePolicyServiceSelectors = new bytes4[](3);
176
+ instancePolicyServiceSelectors[0] = clonedInstance.createPolicy.selector;
177
+ instancePolicyServiceSelectors[1] = clonedInstance.updatePolicy.selector;
178
+ instancePolicyServiceSelectors[2] = clonedInstance.updatePolicyState.selector;
179
+ clonedAccessManager.setTargetFunctionRole(
180
+ "Instance",
181
+ instancePolicyServiceSelectors,
182
+ POLICY_SERVICE_ROLE());
183
+ }
184
+
185
+ function _grantBundleServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
186
+ // configure authorization for bundle service on instance
187
+ address bundleServiceAddress = _registry.getServiceAddress(BUNDLE(), getMajorVersion());
188
+ clonedAccessManager.grantRole(BUNDLE_SERVICE_ROLE(), address(bundleServiceAddress));
189
+ bytes4[] memory instanceBundleServiceSelectors = new bytes4[](2);
190
+ instanceBundleServiceSelectors[0] = clonedInstance.createBundle.selector;
191
+ instanceBundleServiceSelectors[1] = clonedInstance.updateBundle.selector;
192
+ clonedAccessManager.setTargetFunctionRole(
193
+ "Instance",
194
+ instanceBundleServiceSelectors,
195
+ BUNDLE_SERVICE_ROLE());
196
+
197
+ // configure authorization for bundle service on bundle manager
198
+ bytes4[] memory bundleManagerBundleServiceSelectors = new bytes4[](5);
199
+ bundleManagerBundleServiceSelectors[0] = clonedBundleManager.linkPolicy.selector;
200
+ bundleManagerBundleServiceSelectors[1] = clonedBundleManager.unlinkPolicy.selector;
201
+ bundleManagerBundleServiceSelectors[2] = clonedBundleManager.add.selector;
202
+ bundleManagerBundleServiceSelectors[3] = clonedBundleManager.lock.selector;
203
+ bundleManagerBundleServiceSelectors[4] = clonedBundleManager.unlock.selector;
204
+ clonedAccessManager.setTargetFunctionRole(
205
+ "BundleManager",
206
+ bundleManagerBundleServiceSelectors,
207
+ BUNDLE_SERVICE_ROLE());
208
+ }
209
+
210
+ function _grantInstanceServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
211
+ // configure authorization for instance service on instance
212
+ address instanceServiceAddress = _registry.getServiceAddress(INSTANCE(), getMajorVersion());
213
+ clonedAccessManager.grantRole(INSTANCE_SERVICE_ROLE(), instanceServiceAddress);
214
+ bytes4[] memory instanceInstanceServiceSelectors = new bytes4[](1);
215
+ instanceInstanceServiceSelectors[0] = clonedInstance.setInstanceReader.selector;
216
+ clonedAccessManager.setTargetFunctionRole(
217
+ "Instance",
218
+ instanceInstanceServiceSelectors,
219
+ INSTANCE_SERVICE_ROLE());
111
220
  }
112
221
 
113
- function setAccessManagerMaster(address accessManagerMaster) external {
114
- require(
115
- _accessManagerMaster == address(0),
116
- "ERROR:CRD-001:ACCESS_MANAGER_MASTER_ALREADY_SET");
117
- _accessManagerMaster = accessManagerMaster;
222
+ function setMasterInstance(address accessManagerAddress, address instanceAddress, address instanceReaderAddress, address bundleManagerAddress) external onlyOwner {
223
+ require(_masterInstanceAccessManager == address(0), "ERROR:CRD-001:ACCESS_MANAGER_MASTER_ALREADY_SET");
224
+ require(_masterInstance == address(0), "ERROR:CRD-002:INSTANCE_MASTER_ALREADY_SET");
225
+ require(_masterInstanceBundleManager == address(0), "ERROR:CRD-004:BUNDLE_MANAGER_MASTER_ALREADY_SET");
226
+
227
+ require (accessManagerAddress != address(0), "ERROR:CRD-005:ACCESS_MANAGER_ZERO");
228
+ require (instanceAddress != address(0), "ERROR:CRD-006:INSTANCE_ZERO");
229
+ require (instanceReaderAddress != address(0), "ERROR:CRD-007:INSTANCE_READER_ZERO");
230
+ require (bundleManagerAddress != address(0), "ERROR:CRD-008:BUNDLE_MANAGER_ZERO");
231
+
232
+ Instance instance = Instance(instanceAddress);
233
+ InstanceReader instanceReader = InstanceReader(instanceReaderAddress);
234
+ BundleManager bundleManager = BundleManager(bundleManagerAddress);
235
+
236
+ require(instance.authority() == accessManagerAddress, "ERROR:CRD-009:INSTANCE_AUTHORITY_MISMATCH");
237
+ require(instanceReader.getInstanceNftId() == instance.getNftId(), "ERROR:CRD-010:INSTANCE_READER_INSTANCE_MISMATCH");
238
+ require(bundleManager.getInstanceNftId() == instance.getNftId(), "ERROR:CRD-011:BUNDLE_MANAGER_INSTANCE_MISMATCH");
239
+
240
+ _masterInstanceAccessManager = accessManagerAddress;
241
+ _masterInstance = instanceAddress;
242
+ _masterInstanceReader = instanceReaderAddress;
243
+ _masterInstanceBundleManager = bundleManagerAddress;
118
244
  }
119
245
 
120
- function setInstanceMaster(address instanceMaster) external {
121
- require(
122
- _instanceMaster == address(0),
123
- "ERROR:CRD-002:INSTANCE_MASTER_ALREADY_SET");
124
- _instanceMaster = instanceMaster;
246
+ function setMasterInstanceReader(address instanceReaderAddress) external onlyOwner {
247
+ require(_masterInstanceReader != address(0), "ERROR:CRD-003:INSTANCE_READER_MASTER_NOT_SET");
248
+ require (instanceReaderAddress != address(0), "ERROR:CRD-012:INSTANCE_READER_ZERO");
249
+ require(instanceReaderAddress != _masterInstanceReader, "ERROR:CRD-014:INSTANCE_READER_MASTER_SAME_AS_NEW");
250
+
251
+ InstanceReader instanceReader = InstanceReader(instanceReaderAddress);
252
+ require(instanceReader.getInstanceNftId() == Instance(_masterInstance).getNftId(), "ERROR:CRD-015:INSTANCE_READER_INSTANCE_MISMATCH");
253
+
254
+ _masterInstanceReader = instanceReaderAddress;
125
255
  }
126
256
 
127
- function setInstanceReaderMaster(address instanceReaderMaster) external {
128
- require(
129
- _instanceReaderMaster == address(0),
130
- "ERROR:CRD-003:INSTANCE_READER_MASTER_ALREADY_SET");
131
- _instanceReaderMaster = instanceReaderMaster;
257
+ function upgradeInstanceReader(NftId instanceNftId) external {
258
+ IRegistry registry = getRegistry();
259
+ IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
260
+ Instance instance = Instance(instanceInfo.objectAddress);
261
+ address owner = instance.getOwner();
262
+
263
+ if (msg.sender != owner) {
264
+ revert ErrorInstanceServiceRequestUnauhorized(msg.sender);
265
+ }
266
+
267
+ InstanceReader upgradedInstanceReaderClone = InstanceReader(Clones.clone(address(_masterInstanceReader)));
268
+ upgradedInstanceReaderClone.initialize(address(registry), instanceNftId);
269
+ instance.setInstanceReader(upgradedInstanceReaderClone);
132
270
  }
133
271
 
134
- function getInstanceReaderMaster() external view returns (address) {
135
- return _instanceReaderMaster;
272
+ function getMasterInstanceReader() external view returns (address) {
273
+ return _masterInstanceReader;
136
274
  }
137
275
 
138
- function getInstanceMaster() external view returns (address) {
139
- return _instanceMaster;
276
+ function getMasterInstance() external view returns (address) {
277
+ return _masterInstance;
140
278
  }
141
279
 
142
- function getAccessManagerMaster() external view returns (address) {
143
- return _accessManagerMaster;
280
+ function getMasterInstanceAccessManager() external view returns (address) {
281
+ return _masterInstanceAccessManager;
282
+ }
283
+
284
+ function getMasterInstanceBundleManager() external view returns (address) {
285
+ return _masterInstanceBundleManager;
144
286
  }
145
287
 
146
288
  // From IService
147
- function getName() public pure override(IService, Service) returns(string memory) {
148
- return NAME;
289
+ function getDomain() public pure override(Service, IService) returns(ObjectType) {
290
+ return INSTANCE();
149
291
  }
150
292
 
151
293
  /// @dev top level initializer
@@ -161,37 +303,48 @@ contract InstanceService is Service, IInstanceService {
161
303
  initializer
162
304
  virtual override
163
305
  {
164
- // bytes memory encodedConstructorArguments = abi.encode(
165
- // _registryAddress);
166
-
167
- // bytes memory instanceCreationCode = ContractDeployerLib.getCreationCode(
168
- // instanceByteCodeWithInitCode,
169
- // encodedConstructorArguments);
170
-
171
- // address instanceAddress = ContractDeployerLib.deploy(
172
- // instanceCreationCode,
173
- // INSTANCE_CREATION_CODE_HASH);
174
-
175
306
  address initialOwner = address(0);
176
- (_registryAddress, initialOwner) = abi.decode(data, (address, address));
307
+ address registryAddress = address(0);
308
+ (registryAddress, initialOwner) = abi.decode(data, (address, address));
177
309
  // TODO while InstanceService is not deployed in InstanceServiceManager constructor
178
310
  // owner is InstanceServiceManager deployer
179
- _initializeService(_registryAddress, owner);
311
+ _initializeService(registryAddress, owner);
180
312
 
181
313
  _registerInterface(type(IService).interfaceId);
182
314
  _registerInterface(type(IInstanceService).interfaceId);
183
315
  }
184
316
 
185
- function hasRole(address account, RoleId role, NftId instanceNftId) external view returns (bool) {
186
- IRegistry.ObjectInfo memory instanceObjectInfo = getRegistry().getObjectInfo(instanceNftId);
187
- address instanceAddress = instanceObjectInfo.objectAddress;
317
+ function hasRole(address account, RoleId role, address instanceAddress) public view returns (bool) {
188
318
  Instance instance = Instance(instanceAddress);
189
- AccessManagerSimple accessManager = AccessManagerSimple(instance.authority());
190
- (bool isMember, uint32 executionDelay) = accessManager.hasRole(role.toInt(), account);
191
- if (executionDelay > 0) {
192
- return false;
193
- }
194
- return isMember;
319
+ InstanceAccessManager accessManager = instance.getInstanceAccessManager();
320
+ return accessManager.hasRole(role, account);
195
321
  }
322
+
323
+ function createTarget(NftId instanceNftId, address targetAddress, string memory targetName) external onlyRegisteredService {
324
+ IRegistry registry = getRegistry();
325
+ IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
326
+ Instance instance = Instance(instanceInfo.objectAddress);
327
+ InstanceAccessManager accessManager = instance.getInstanceAccessManager();
328
+ accessManager.createTarget(targetAddress, targetName);
329
+ }
330
+
331
+ function setTargetLocked(string memory targetName, bool locked) external {
332
+ address componentAddress = msg.sender;
333
+ IRegistry registry = getRegistry();
334
+ IRegistry.ObjectInfo memory componentInfo = registry.getObjectInfo(componentAddress);
335
+ if (componentInfo.nftId.eqz()) {
336
+ revert ErrorInstanceServiceComponentNotRegistered(componentAddress);
337
+ }
338
+
339
+ // TODO validate component type
340
+
341
+
342
+ address instanceAddress = registry.getObjectInfo(componentInfo.parentNftId).objectAddress;
343
+ IInstance instance = IInstance(instanceAddress);
344
+
345
+ InstanceAccessManager accessManager = instance.getInstanceAccessManager();
346
+ accessManager.setTargetClosed(targetName, locked);
347
+ }
348
+
196
349
  }
197
350
 
@@ -7,7 +7,7 @@ import {ProxyManager} from "../shared/ProxyManager.sol";
7
7
  import {InstanceService} from "./InstanceService.sol";
8
8
  import {Registry} from "../registry/Registry.sol";
9
9
  import {RegistryService} from "../registry/RegistryService.sol";
10
- import {VersionLib} from "../types/Version.sol";
10
+ import {REGISTRY} from "../types/ObjectType.sol";
11
11
 
12
12
  contract InstanceServiceManager is ProxyManager {
13
13
 
@@ -28,10 +28,10 @@ contract InstanceServiceManager is ProxyManager {
28
28
 
29
29
  _instanceService = InstanceService(address(versionable));
30
30
 
31
- Registry registry = Registry(registryAddress);
32
- address registryServiceAddress = registry.getServiceAddress("RegistryService", VersionLib.toVersion(3, 0, 0).toMajorPart());
33
- RegistryService registryService = RegistryService(registryServiceAddress);
34
- // TODO this must have a role or own nft to register service
31
+ // TODO `this` must have a role or own nft to register service
32
+ //Registry registry = Registry(registryAddress);
33
+ //address registryServiceAddress = registry.getServiceAddress(REGISTRY(), _instanceService.getMajorVersion());
34
+ //RegistryService registryService = RegistryService(registryServiceAddress);
35
35
  //registryService.registerService(_instanceService);
36
36
  // RegistryService registryService = _instanceService.getRegistryService();
37
37
 
@@ -40,9 +40,6 @@ contract InstanceServiceManager is ProxyManager {
40
40
  //_linkToNftOwnable(
41
41
  // address(registryAddress),
42
42
  // address(_instanceService));
43
-
44
- // implies that after this constructor call only upgrade functionality is available
45
- _isDeployed = true;
46
43
  }
47
44
 
48
45
  //--- view functions ----------------------------------------------------//
@@ -0,0 +1,101 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {Cloneable} from "./Cloneable.sol";
5
+
6
+ import {IInstance} from "./IInstance.sol";
7
+ import {INSTANCE} from "../types/ObjectType.sol";
8
+ import {InstanceReader} from "./InstanceReader.sol";
9
+ import {IRegistry} from "../registry/IRegistry.sol";
10
+ import {LibNftIdSet} from "../types/NftIdSet.sol";
11
+ import {NftId} from "../types/NftId.sol";
12
+
13
+ contract ObjectManager is
14
+ Cloneable
15
+ {
16
+
17
+ event LogObjectManagerInitialized(NftId instanceNftId, address instanceReader);
18
+
19
+ error ErrorObjectManagerNftIdInvalid(NftId instanceNftId);
20
+ error ErrorObjectManagerAlreadyAdded(NftId componentNftId, NftId objectNftId);
21
+
22
+ mapping(NftId compnentNftId => LibNftIdSet.Set objects) internal _activeObjects;
23
+ mapping(NftId compnentNftId => LibNftIdSet.Set objects) internal _allObjects;
24
+ NftId internal _instanceNftId;
25
+ InstanceReader internal _instanceReader;
26
+
27
+ constructor() Cloneable() {
28
+ _instanceReader = InstanceReader(address(0));
29
+ }
30
+
31
+ /// @dev call to initialize MUST be made in the same transaction as cloning of the contract
32
+ function initialize(
33
+ address authority,
34
+ address registry,
35
+ NftId instanceNftId
36
+ )
37
+ external
38
+ {
39
+ initialize(authority, registry);
40
+
41
+ // check/handle instance nft id/instance reader
42
+ IRegistry.ObjectInfo memory instanceInfo = _registry.getObjectInfo(instanceNftId);
43
+ if (instanceInfo.objectType != INSTANCE()) {
44
+ revert ErrorObjectManagerNftIdInvalid(instanceNftId);
45
+ }
46
+
47
+ IInstance instance = IInstance(instanceInfo.objectAddress);
48
+ _instanceReader = instance.getInstanceReader();
49
+ _instanceNftId = instanceNftId;
50
+
51
+ emit LogObjectManagerInitialized(instanceNftId, address(_instanceReader));
52
+ }
53
+
54
+ function getInstanceReader() external view returns (InstanceReader) {
55
+ return _instanceReader;
56
+ }
57
+
58
+ function getInstanceNftId() external view returns (NftId) {
59
+ return _instanceNftId;
60
+ }
61
+
62
+ function _add(NftId componentNftId, NftId objectNftId) internal {
63
+ LibNftIdSet.Set storage allSet = _allObjects[componentNftId];
64
+ LibNftIdSet.Set storage activeSet = _activeObjects[componentNftId];
65
+
66
+ LibNftIdSet.add(allSet, objectNftId);
67
+ LibNftIdSet.add(activeSet, objectNftId);
68
+ }
69
+
70
+ function _activate(NftId componentNftId, NftId objectNftId) internal {
71
+ LibNftIdSet.add(_activeObjects[componentNftId], objectNftId);
72
+ }
73
+
74
+ function _deactivate(NftId componentNftId, NftId objectNftId) internal {
75
+ LibNftIdSet.remove(_activeObjects[componentNftId], objectNftId);
76
+ }
77
+
78
+ function _objects(NftId componentNftId) internal view returns (uint256) {
79
+ return LibNftIdSet.size(_allObjects[componentNftId]);
80
+ }
81
+
82
+ function _contains(NftId componentNftId, NftId objectNftId) internal view returns (bool) {
83
+ return LibNftIdSet.contains(_allObjects[componentNftId], objectNftId);
84
+ }
85
+
86
+ function _getObject(NftId componentNftId, uint256 idx) internal view returns (NftId) {
87
+ return LibNftIdSet.getElementAt(_allObjects[componentNftId], idx);
88
+ }
89
+
90
+ function _activeObjs(NftId componentNftId) internal view returns (uint256) {
91
+ return LibNftIdSet.size(_activeObjects[componentNftId]);
92
+ }
93
+
94
+ function _isActive(NftId componentNftId, NftId objectNftId) internal view returns (bool) {
95
+ return LibNftIdSet.contains(_activeObjects[componentNftId], objectNftId);
96
+ }
97
+
98
+ function _getActiveObject(NftId componentNftId, uint256 idx) internal view returns (NftId) {
99
+ return LibNftIdSet.getElementAt(_activeObjects[componentNftId], idx);
100
+ }
101
+ }