@etherisc/gif-next 0.0.2-f29e479-370 → 0.0.2-f30e0eb-805

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 (250) hide show
  1. package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
  2. package/artifacts/contracts/components/Component.sol/Component.json +68 -89
  3. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.json +113 -140
  5. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.json +65 -73
  7. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +91 -122
  9. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +256 -189
  11. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +69 -145
  13. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  14. package/artifacts/contracts/components/Pool.sol/Pool.json +279 -245
  15. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  16. package/artifacts/contracts/components/Product.sol/Product.json +73 -162
  17. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  18. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  19. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  20. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +64 -50
  21. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  22. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +5 -0
  23. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  24. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +171 -308
  25. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  26. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +98 -40
  27. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  28. package/artifacts/contracts/instance/Instance.sol/Instance.json +260 -379
  29. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  30. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +448 -121
  31. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  32. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +120 -227
  33. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  34. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +148 -161
  35. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  36. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +31 -23
  37. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  38. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +8 -13
  39. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +1 -1
  40. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +1 -1
  41. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  42. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  43. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  44. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +40 -10
  45. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  46. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
  47. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  48. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +54 -71
  49. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  50. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  51. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
  52. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  53. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  54. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  55. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  56. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  57. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  58. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +161 -62
  59. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  60. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +33 -25
  61. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
  62. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +137 -140
  63. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  64. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +12 -12
  65. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +1 -1
  66. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +3 -3
  67. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  68. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +2 -2
  69. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  70. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +505 -91
  71. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  72. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +78 -42
  73. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  74. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +110 -27
  75. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
  76. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +93 -96
  77. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +1 -1
  78. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  79. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +350 -8
  80. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +21 -64
  82. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  83. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +81 -0
  84. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  86. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +58 -157
  87. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  88. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +19 -47
  89. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  90. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +114 -17
  91. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  92. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +17 -9
  93. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  94. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +7 -7
  95. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  96. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +4 -4
  97. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  98. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
  99. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  100. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +19 -0
  101. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  102. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  103. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
  104. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  105. package/artifacts/contracts/registry/Registry.sol/Registry.json +31 -12
  106. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
  107. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +2 -2
  108. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  109. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +5 -5
  110. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  111. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +3 -3
  112. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  113. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +7 -7
  114. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  115. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  116. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  117. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  118. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  119. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  120. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  121. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  122. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  123. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  124. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  125. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  126. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  127. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
  128. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  129. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
  130. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  131. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +3 -3
  132. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  133. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  134. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  135. package/artifacts/contracts/shared/Service.sol/Service.json +1 -1
  136. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  137. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
  138. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  139. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  140. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  141. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  142. package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
  143. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  144. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +3 -3
  145. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  146. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +6 -6
  147. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  148. package/artifacts/contracts/test/TestService.sol/TestService.json +3 -3
  149. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  150. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  151. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  152. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  153. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +2 -2
  154. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  155. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  156. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  157. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  158. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  159. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  160. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  161. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  162. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  163. package/artifacts/contracts/types/Fee.sol/FeeLib.json +2 -2
  164. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  165. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  166. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  167. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
  168. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  169. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  170. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  172. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  173. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  174. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  175. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +23 -4
  176. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  177. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  178. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  179. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  180. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  181. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  182. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  183. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  184. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  185. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +25 -7
  186. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  187. package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
  188. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  189. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
  190. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  191. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  192. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  193. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  194. package/contracts/components/Component.sol +95 -85
  195. package/contracts/components/Distribution.sol +12 -19
  196. package/contracts/components/IComponent.sol +37 -17
  197. package/contracts/components/IDistributionComponent.sol +1 -22
  198. package/contracts/components/IPoolComponent.sol +73 -47
  199. package/contracts/components/IProductComponent.sol +3 -2
  200. package/contracts/components/Pool.sol +171 -126
  201. package/contracts/components/Product.sol +26 -18
  202. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
  203. package/contracts/instance/BundleManager.sol +7 -5
  204. package/contracts/instance/Cloneable.sol +7 -2
  205. package/contracts/instance/IInstance.sol +16 -10
  206. package/contracts/instance/IInstanceService.sol +18 -5
  207. package/contracts/instance/Instance.sol +45 -9
  208. package/contracts/instance/InstanceAccessManager.sol +382 -157
  209. package/contracts/instance/InstanceReader.sol +7 -10
  210. package/contracts/instance/InstanceService.sol +174 -155
  211. package/contracts/instance/ObjectManager.sol +6 -8
  212. package/contracts/instance/base/ComponentService.sol +5 -5
  213. package/contracts/instance/base/KeyValueStore.sol +5 -2
  214. package/contracts/instance/base/Lifecycle.sol +11 -2
  215. package/contracts/instance/module/IAccess.sol +20 -13
  216. package/contracts/instance/module/IBundle.sol +2 -1
  217. package/contracts/instance/module/IComponents.sol +35 -0
  218. package/contracts/instance/module/IDistribution.sol +2 -1
  219. package/contracts/instance/module/IPolicy.sol +26 -1
  220. package/contracts/instance/module/ISetup.sol +7 -22
  221. package/contracts/instance/service/ApplicationService.sol +123 -41
  222. package/contracts/instance/service/BundleService.sol +76 -38
  223. package/contracts/instance/service/DistributionService.sol +139 -47
  224. package/contracts/instance/service/IApplicationService.sol +7 -7
  225. package/contracts/instance/service/IBundleService.sol +19 -11
  226. package/contracts/instance/service/IDistributionService.sol +19 -4
  227. package/contracts/instance/service/IPolicyService.sol +3 -20
  228. package/contracts/instance/service/IPoolService.sol +17 -2
  229. package/contracts/instance/service/PolicyService.sol +59 -132
  230. package/contracts/instance/service/PoolService.sol +128 -17
  231. package/contracts/instance/service/ProductService.sol +10 -2
  232. package/contracts/registry/ChainNft.sol +8 -0
  233. package/contracts/registry/IRegistry.sol +2 -0
  234. package/contracts/registry/ITransferInterceptor.sol +1 -0
  235. package/contracts/registry/Registry.sol +23 -20
  236. package/contracts/registry/RegistryService.sol +5 -5
  237. package/contracts/shared/Registerable.sol +2 -2
  238. package/contracts/shared/TokenHandler.sol +11 -5
  239. package/contracts/types/Blocknumber.sol +1 -0
  240. package/contracts/types/Fee.sol +1 -0
  241. package/contracts/types/NftId.sol +8 -0
  242. package/contracts/types/ObjectType.sol +1 -0
  243. package/contracts/types/Referral.sol +4 -0
  244. package/contracts/types/RoleId.sol +13 -6
  245. package/contracts/types/Seconds.sol +54 -0
  246. package/contracts/types/StateId.sol +1 -0
  247. package/contracts/types/Timestamp.sol +13 -13
  248. package/contracts/types/UFixed.sol +1 -0
  249. package/contracts/types/Version.sol +1 -0
  250. package/package.json +1 -1
@@ -17,6 +17,7 @@ import {StateId} from "../types/StateId.sol";
17
17
 
18
18
  import {IRegistry} from "../registry/IRegistry.sol";
19
19
  import {IBundle} from "../instance/module/IBundle.sol";
20
+ import {IComponents} from "../instance/module/IComponents.sol";
20
21
  import {IDistribution} from "../instance/module/IDistribution.sol";
21
22
  import {IInstance} from "./IInstance.sol";
22
23
  import {IKeyValueStore} from "../instance/base/IKeyValueStore.sol";
@@ -30,19 +31,15 @@ import {TimestampLib} from "../types/Timestamp.sol";
30
31
  contract InstanceReader {
31
32
  bool private _initialized;
32
33
 
33
- IRegistry internal _registry;
34
34
  IInstance internal _instance;
35
35
  IKeyValueStore internal _store;
36
36
 
37
- function initialize(address registry, address instance) public {
37
+ function initialize(address instance) public {
38
38
  require(!_initialized, "ERROR:CRD-000:ALREADY_INITIALIZED");
39
39
 
40
40
  require(
41
- address(registry) != address(0),
42
- "ERROR:CRD-001:REGISTRY_ZERO");
43
-
44
-
45
- _registry = IRegistry(registry);
41
+ address(instance) != address(0),
42
+ "ERROR:CRD-001:INSTANCE_ZERO");
46
43
 
47
44
  _instance = IInstance(instance);
48
45
  _store = IKeyValueStore(instance);
@@ -151,14 +148,14 @@ contract InstanceReader {
151
148
  }
152
149
  }
153
150
 
154
- function getPoolSetupInfo(NftId poolNftId)
151
+ function getComponentInfo(NftId poolNftId)
155
152
  public
156
153
  view
157
- returns (ISetup.PoolSetupInfo memory info)
154
+ returns (IComponents.ComponentInfo memory info)
158
155
  {
159
156
  bytes memory data = _store.getData(toPoolKey(poolNftId));
160
157
  if (data.length > 0) {
161
- return abi.decode(data, (ISetup.PoolSetupInfo));
158
+ return abi.decode(data, (IComponents.ComponentInfo));
162
159
  }
163
160
  }
164
161
 
@@ -2,6 +2,7 @@
2
2
  pragma solidity ^0.8.20;
3
3
 
4
4
  import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol";
5
+ import {ShortString, ShortStrings} from "@openzeppelin/contracts/utils/ShortStrings.sol";
5
6
 
6
7
  import {Instance} from "./Instance.sol";
7
8
  import {IInstance} from "./IInstance.sol";
@@ -9,6 +10,7 @@ import {InstanceAccessManager} from "./InstanceAccessManager.sol";
9
10
  import {IInstanceService} from "./IInstanceService.sol";
10
11
  import {InstanceReader} from "./InstanceReader.sol";
11
12
  import {BundleManager} from "./BundleManager.sol";
13
+ import {AccessManagerUpgradeableInitializeable} from "./AccessManagerUpgradeableInitializeable.sol";
12
14
  import {IRegistry} from "../registry/IRegistry.sol";
13
15
  import {IRegistryService} from "../registry/IRegistryService.sol";
14
16
  import {ChainNft} from "../registry/ChainNft.sol";
@@ -16,7 +18,7 @@ import {Service} from "../../contracts/shared/Service.sol";
16
18
  import {IService} from "../shared/IService.sol";
17
19
  import {NftId} from "../../contracts/types/NftId.sol";
18
20
  import {RoleId} 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, APPLICATION_SERVICE_ROLE, POLICY_SERVICE_ROLE, CLAIM_SERVICE_ROLE, BUNDLE_SERVICE_ROLE} from "../types/RoleId.sol";
21
+ import {ADMIN_ROLE, INSTANCE_OWNER_ROLE, DISTRIBUTION_OWNER_ROLE, POOL_OWNER_ROLE, PRODUCT_OWNER_ROLE, INSTANCE_SERVICE_ROLE, DISTRIBUTION_SERVICE_ROLE, POOL_SERVICE_ROLE, PRODUCT_SERVICE_ROLE, APPLICATION_SERVICE_ROLE, POLICY_SERVICE_ROLE, CLAIM_SERVICE_ROLE, BUNDLE_SERVICE_ROLE, INSTANCE_ROLE} from "../types/RoleId.sol";
20
22
  import {ObjectType, INSTANCE, BUNDLE, APPLICATION, POLICY, CLAIM, PRODUCT, DISTRIBUTION, REGISTRY, POOL} from "../types/ObjectType.sol";
21
23
  import {IDistributionComponent} from "../components/IDistributionComponent.sol";
22
24
  import {IPoolComponent} from "../components/IPoolComponent.sol";
@@ -26,7 +28,7 @@ contract InstanceService is
26
28
  Service,
27
29
  IInstanceService
28
30
  {
29
-
31
+ address internal _masterOzAccessManager;
30
32
  address internal _masterInstanceAccessManager;
31
33
  address internal _masterInstance;
32
34
  address internal _masterInstanceReader;
@@ -35,20 +37,24 @@ contract InstanceService is
35
37
  // TODO update to real hash when instance is stable
36
38
  bytes32 public constant INSTANCE_CREATION_CODE_HASH = bytes32(0);
37
39
 
38
- modifier onlyInstanceOwner(NftId instanceNftId) {
39
- IRegistry registry = getRegistry();
40
- ChainNft chainNft = ChainNft(registry.getChainNftAddress());
41
-
42
- if( msg.sender != chainNft.ownerOf(instanceNftId.toInt())) {
43
- revert ErrorInstanceServiceNotInstanceOwner(msg.sender, instanceNftId);
40
+ modifier onlyInstanceOwner(NftId instanceNftId) {
41
+ if(msg.sender != getRegistry().ownerOf(instanceNftId)) {
42
+ revert ErrorInstanceServiceRequestUnauhorized(msg.sender);
44
43
  }
45
44
  _;
46
45
  }
47
-
46
+ // TODO check service domain?
47
+ // TODO check release version?
48
48
  modifier onlyRegisteredService() {
49
- address caller = msg.sender;
50
- if (! getRegistry().isRegisteredService(caller)) {
51
- revert ErrorInstanceServiceRequestUnauhorized(caller);
49
+ if (! getRegistry().isRegisteredService(msg.sender)) {
50
+ revert ErrorInstanceServiceRequestUnauhorized(msg.sender);
51
+ }
52
+ _;
53
+ }
54
+ // TODO check release version?
55
+ modifier onlyComponent() {
56
+ if (! getRegistry().isRegisteredComponent(msg.sender)) {
57
+ revert ErrorInstanceServiceRequestUnauhorized(msg.sender);
52
58
  }
53
59
  _;
54
60
  }
@@ -56,7 +62,8 @@ contract InstanceService is
56
62
  function createInstanceClone()
57
63
  external
58
64
  returns (
59
- InstanceAccessManager clonedAccessManager,
65
+ AccessManagerUpgradeableInitializeable clonedOzAccessManager,
66
+ InstanceAccessManager clonedInstanceAccessManager,
60
67
  Instance clonedInstance,
61
68
  NftId clonedInstanceNftId,
62
69
  InstanceReader clonedInstanceReader,
@@ -70,42 +77,62 @@ contract InstanceService is
70
77
  address registryServiceAddress = registry.getServiceAddress(REGISTRY(), getMajorVersion());
71
78
  IRegistryService registryService = IRegistryService(registryServiceAddress);
72
79
 
73
- // initially set the authority of the access managar to this (being the instance service).
74
- // This will allow the instance service to bootstrap the authorizations of the instance
75
- // and then transfer the ownership of the access manager to the instance owner once everything is setup
76
- clonedAccessManager = InstanceAccessManager(Clones.clone(_masterInstanceAccessManager));
77
- clonedAccessManager.initialize(address(this));
80
+ clonedOzAccessManager = AccessManagerUpgradeableInitializeable(
81
+ Clones.clone(_masterOzAccessManager));
82
+
83
+ // initially grants ADMIN_ROLE to this (being the instance service).
84
+ // This will allow the instance service to bootstrap the authorizations of the instance.
85
+ // Instance service will not use oz access manager directlly but through instance access manager instead
86
+ // Instance service will renounce ADMIN_ROLE when bootstraping is finished
87
+ clonedOzAccessManager.initialize(address(this));
78
88
 
79
89
  clonedInstance = Instance(Clones.clone(_masterInstance));
80
- clonedInstance.initialize(address(clonedAccessManager), registryAddress, registryNftId, msg.sender);
90
+ clonedInstance.initialize(
91
+ address(clonedOzAccessManager),
92
+ registryAddress,
93
+ instanceOwner);
81
94
 
82
95
  clonedInstanceReader = InstanceReader(Clones.clone(address(_masterInstanceReader)));
83
- clonedInstanceReader.initialize(registryAddress, address(clonedInstance));
96
+ clonedInstanceReader.initialize(address(clonedInstance));
84
97
  clonedInstance.setInstanceReader(clonedInstanceReader);
85
98
 
86
99
  clonedBundleManager = BundleManager(Clones.clone(_masterInstanceBundleManager));
87
- clonedBundleManager.initialize(address(clonedAccessManager), registryAddress, address(clonedInstance));
100
+ clonedBundleManager.initialize(address(clonedInstance));
88
101
  clonedInstance.setBundleManager(clonedBundleManager);
89
102
 
103
+ clonedInstanceAccessManager = InstanceAccessManager(Clones.clone(_masterInstanceAccessManager));
104
+ clonedOzAccessManager.grantRole(ADMIN_ROLE().toInt(), address(clonedInstanceAccessManager), 0);
105
+ clonedInstanceAccessManager.initialize(address(clonedInstance));
106
+ clonedInstance.setInstanceAccessManager(clonedInstanceAccessManager);
107
+
90
108
  // TODO amend setters with instance specific , policy manager ...
91
109
 
92
- _grantInitialAuthorizations(clonedAccessManager, clonedInstance, clonedBundleManager);
110
+ _grantInitialAuthorizations(clonedInstanceAccessManager, clonedInstance, clonedBundleManager, instanceOwner);
93
111
 
94
- // to complete setup switch instance ownership to the instance owner
95
- // TODO: use a role less powerful than admin, maybe INSTANCE_ADMIN (does not exist yet)
96
- clonedAccessManager.grantRole(ADMIN_ROLE(), instanceOwner);
97
- clonedAccessManager.revokeRole(ADMIN_ROLE(), address(this));
112
+ clonedOzAccessManager.renounceRole(ADMIN_ROLE().toInt(), address(this));
98
113
 
99
114
  IRegistry.ObjectInfo memory info = registryService.registerInstance(clonedInstance, instanceOwner);
100
115
  clonedInstanceNftId = info.nftId;
101
116
  // clonedInstance.linkToRegisteredNftId();
102
117
 
103
- emit LogInstanceCloned(address(clonedAccessManager), address(clonedInstance), address(clonedInstanceReader), clonedInstanceNftId);
118
+ emit LogInstanceCloned(
119
+ address(clonedOzAccessManager),
120
+ address(clonedInstanceAccessManager),
121
+ address(clonedInstance),
122
+ address(clonedBundleManager),
123
+ address(clonedInstanceReader),
124
+ clonedInstanceNftId);
104
125
  }
105
126
 
106
- function _grantInitialAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
107
- _createGifRoles(clonedAccessManager);
108
- _createGifTargets(clonedAccessManager, clonedInstance, clonedBundleManager);
127
+ function _grantInitialAuthorizations(
128
+ InstanceAccessManager clonedAccessManager,
129
+ Instance clonedInstance,
130
+ BundleManager clonedBundleManager,
131
+ address instanceOwner)
132
+ internal
133
+ {
134
+ _createCoreAndGifRoles(clonedAccessManager);
135
+ _createCoreTargets(clonedAccessManager, clonedInstance, clonedBundleManager);
109
136
  _grantDistributionServiceAuthorizations(clonedAccessManager, clonedInstance);
110
137
  _grantPoolServiceAuthorizations(clonedAccessManager, clonedInstance);
111
138
  _grantProductServiceAuthorizations(clonedAccessManager, clonedInstance);
@@ -114,33 +141,35 @@ contract InstanceService is
114
141
  _grantClaimServiceAuthorizations(clonedAccessManager, clonedInstance);
115
142
  _grantBundleServiceAuthorizations(clonedAccessManager, clonedInstance, clonedBundleManager);
116
143
  _grantInstanceServiceAuthorizations(clonedAccessManager, clonedInstance);
144
+ _grantInstanceOwnerAuthorizations(clonedAccessManager, instanceOwner);
117
145
  }
118
146
 
119
- function _createGifRoles(InstanceAccessManager clonedAccessManager) internal {
120
- clonedAccessManager.createGifRole(DISTRIBUTION_OWNER_ROLE(), "DistributionOwnerRole");
121
- clonedAccessManager.createGifRole(POOL_OWNER_ROLE(), "PoolOwnerRole");
122
- clonedAccessManager.createGifRole(PRODUCT_OWNER_ROLE(), "ProductOwnerRole");
123
-
124
- clonedAccessManager.createGifRole(DISTRIBUTION_SERVICE_ROLE(), "DistributionServiceRole");
125
- clonedAccessManager.createGifRole(POOL_SERVICE_ROLE(), "PoolServiceRole");
126
- clonedAccessManager.createGifRole(PRODUCT_SERVICE_ROLE(), "ProductServiceRole");
127
- clonedAccessManager.createGifRole(APPLICATION_SERVICE_ROLE(), "ApplicationServiceRole");
128
- clonedAccessManager.createGifRole(POLICY_SERVICE_ROLE(), "PolicyServiceRole");
129
- clonedAccessManager.createGifRole(CLAIM_SERVICE_ROLE(), "ClaimServiceRole");
130
- clonedAccessManager.createGifRole(BUNDLE_SERVICE_ROLE(), "BundleServiceRole");
131
- clonedAccessManager.createGifRole(INSTANCE_SERVICE_ROLE(), "InstanceServiceRole");
147
+ function _createCoreAndGifRoles(InstanceAccessManager clonedAccessManager) internal {
148
+ // default roles controlled by ADMIN_ROLE -> core roles
149
+ // all set/granted only once during cloning (the only exception is INSTANCE_OWNER_ROLE, hooked to instance nft)
150
+ clonedAccessManager.createCoreRole(INSTANCE_SERVICE_ROLE(), "InstanceServiceRole");
151
+ clonedAccessManager.createCoreRole(DISTRIBUTION_SERVICE_ROLE(), "DistributionServiceRole");
152
+ clonedAccessManager.createCoreRole(POOL_SERVICE_ROLE(), "PoolServiceRole");
153
+ clonedAccessManager.createCoreRole(APPLICATION_SERVICE_ROLE(), "ApplicationServiceRole");
154
+ clonedAccessManager.createCoreRole(PRODUCT_SERVICE_ROLE(), "ProductServiceRole");
155
+ clonedAccessManager.createCoreRole(CLAIM_SERVICE_ROLE(), "ClaimServiceRole");
156
+ clonedAccessManager.createCoreRole(POLICY_SERVICE_ROLE(), "PolicyServiceRole");
157
+ clonedAccessManager.createCoreRole(BUNDLE_SERVICE_ROLE(), "BundleServiceRole");
158
+ // default roles controlled by INSTANCE_OWNER_ROLE -> gif roles
159
+ clonedAccessManager.createGifRole(DISTRIBUTION_OWNER_ROLE(), "DistributionOwnerRole", INSTANCE_OWNER_ROLE());
160
+ clonedAccessManager.createGifRole(POOL_OWNER_ROLE(), "PoolOwnerRole", INSTANCE_OWNER_ROLE());
161
+ clonedAccessManager.createGifRole(PRODUCT_OWNER_ROLE(), "ProductOwnerRole", INSTANCE_OWNER_ROLE());
132
162
  }
133
163
 
134
- function _createGifTargets(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
135
- clonedAccessManager.createGifTarget(address(clonedAccessManager), "InstanceAccessManager");
136
- clonedAccessManager.createGifTarget(address(clonedInstance), "Instance");
137
- clonedAccessManager.createGifTarget(address(clonedBundleManager), "BundleManager");
164
+ function _createCoreTargets(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
165
+ clonedAccessManager.createCoreTarget(address(clonedAccessManager), "InstanceAccessManager");
166
+ clonedAccessManager.createCoreTarget(address(clonedInstance), "Instance");
167
+ clonedAccessManager.createCoreTarget(address(clonedBundleManager), "BundleManager");
138
168
  }
139
169
 
140
170
  function _grantDistributionServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
141
171
  // configure authorization for distribution service on instance
142
- IRegistry registry = getRegistry();
143
- address distributionServiceAddress = registry.getServiceAddress(DISTRIBUTION(), getMajorVersion());
172
+ address distributionServiceAddress = getRegistry().getServiceAddress(DISTRIBUTION(), getMajorVersion());
144
173
  clonedAccessManager.grantRole(DISTRIBUTION_SERVICE_ROLE(), distributionServiceAddress);
145
174
  bytes4[] memory instanceDistributionServiceSelectors = new bytes4[](11);
146
175
  instanceDistributionServiceSelectors[0] = clonedInstance.createDistributionSetup.selector;
@@ -154,7 +183,7 @@ contract InstanceService is
154
183
  instanceDistributionServiceSelectors[8] = clonedInstance.createReferral.selector;
155
184
  instanceDistributionServiceSelectors[9] = clonedInstance.updateReferral.selector;
156
185
  instanceDistributionServiceSelectors[10] = clonedInstance.updateReferralState.selector;
157
- clonedAccessManager.setTargetFunctionRole(
186
+ clonedAccessManager.setCoreTargetFunctionRole(
158
187
  "Instance",
159
188
  instanceDistributionServiceSelectors,
160
189
  DISTRIBUTION_SERVICE_ROLE());
@@ -167,7 +196,7 @@ contract InstanceService is
167
196
  bytes4[] memory instancePoolServiceSelectors = new bytes4[](4);
168
197
  instancePoolServiceSelectors[0] = clonedInstance.createPoolSetup.selector;
169
198
  instancePoolServiceSelectors[1] = clonedInstance.updatePoolSetup.selector;
170
- clonedAccessManager.setTargetFunctionRole(
199
+ clonedAccessManager.setCoreTargetFunctionRole(
171
200
  "Instance",
172
201
  instancePoolServiceSelectors,
173
202
  POOL_SERVICE_ROLE());
@@ -183,7 +212,7 @@ contract InstanceService is
183
212
  instanceProductServiceSelectors[2] = clonedInstance.createRisk.selector;
184
213
  instanceProductServiceSelectors[3] = clonedInstance.updateRisk.selector;
185
214
  instanceProductServiceSelectors[4] = clonedInstance.updateRiskState.selector;
186
- clonedAccessManager.setTargetFunctionRole(
215
+ clonedAccessManager.setCoreTargetFunctionRole(
187
216
  "Instance",
188
217
  instanceProductServiceSelectors,
189
218
  PRODUCT_SERVICE_ROLE());
@@ -197,7 +226,7 @@ contract InstanceService is
197
226
  instanceApplicationServiceSelectors[0] = clonedInstance.createApplication.selector;
198
227
  instanceApplicationServiceSelectors[1] = clonedInstance.updateApplication.selector;
199
228
  instanceApplicationServiceSelectors[2] = clonedInstance.updateApplicationState.selector;
200
- clonedAccessManager.setTargetFunctionRole(
229
+ clonedAccessManager.setCoreTargetFunctionRole(
201
230
  "Instance",
202
231
  instanceApplicationServiceSelectors,
203
232
  APPLICATION_SERVICE_ROLE());
@@ -210,7 +239,7 @@ contract InstanceService is
210
239
  bytes4[] memory instancePolicyServiceSelectors = new bytes4[](2);
211
240
  instancePolicyServiceSelectors[0] = clonedInstance.updatePolicy.selector;
212
241
  instancePolicyServiceSelectors[1] = clonedInstance.updatePolicyState.selector;
213
- clonedAccessManager.setTargetFunctionRole(
242
+ clonedAccessManager.setCoreTargetFunctionRole(
214
243
  "Instance",
215
244
  instancePolicyServiceSelectors,
216
245
  POLICY_SERVICE_ROLE());
@@ -224,7 +253,7 @@ contract InstanceService is
224
253
  bytes4[] memory instanceClaimServiceSelectors = new bytes4[](0);
225
254
  // instanceClaimServiceSelectors[0] = clonedInstance.updatePolicy.selector;
226
255
  // instanceClaimServiceSelectors[1] = clonedInstance.updatePolicyState.selector;
227
- clonedAccessManager.setTargetFunctionRole(
256
+ clonedAccessManager.setCoreTargetFunctionRole(
228
257
  "Instance",
229
258
  instanceClaimServiceSelectors,
230
259
  CLAIM_SERVICE_ROLE());
@@ -234,10 +263,11 @@ contract InstanceService is
234
263
  // configure authorization for bundle service on instance
235
264
  address bundleServiceAddress = getRegistry().getServiceAddress(BUNDLE(), getMajorVersion());
236
265
  clonedAccessManager.grantRole(BUNDLE_SERVICE_ROLE(), address(bundleServiceAddress));
237
- bytes4[] memory instanceBundleServiceSelectors = new bytes4[](2);
266
+ bytes4[] memory instanceBundleServiceSelectors = new bytes4[](3);
238
267
  instanceBundleServiceSelectors[0] = clonedInstance.createBundle.selector;
239
268
  instanceBundleServiceSelectors[1] = clonedInstance.updateBundle.selector;
240
- clonedAccessManager.setTargetFunctionRole(
269
+ instanceBundleServiceSelectors[2] = clonedInstance.updateBundleState.selector;
270
+ clonedAccessManager.setCoreTargetFunctionRole(
241
271
  "Instance",
242
272
  instanceBundleServiceSelectors,
243
273
  BUNDLE_SERVICE_ROLE());
@@ -249,59 +279,82 @@ contract InstanceService is
249
279
  bundleManagerBundleServiceSelectors[2] = clonedBundleManager.add.selector;
250
280
  bundleManagerBundleServiceSelectors[3] = clonedBundleManager.lock.selector;
251
281
  bundleManagerBundleServiceSelectors[4] = clonedBundleManager.unlock.selector;
252
- clonedAccessManager.setTargetFunctionRole(
282
+ clonedAccessManager.setCoreTargetFunctionRole(
253
283
  "BundleManager",
254
284
  bundleManagerBundleServiceSelectors,
255
285
  BUNDLE_SERVICE_ROLE());
256
286
  }
257
287
 
258
288
  function _grantInstanceServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
259
- // configure authorization for instance service on instance
289
+ // configure authorization for instance service on instance
260
290
  address instanceServiceAddress = getRegistry().getServiceAddress(INSTANCE(), getMajorVersion());
261
291
  clonedAccessManager.grantRole(INSTANCE_SERVICE_ROLE(), instanceServiceAddress);
262
292
  bytes4[] memory instanceInstanceServiceSelectors = new bytes4[](1);
263
293
  instanceInstanceServiceSelectors[0] = clonedInstance.setInstanceReader.selector;
264
- clonedAccessManager.setTargetFunctionRole(
294
+ clonedAccessManager.setCoreTargetFunctionRole(
265
295
  "Instance",
266
296
  instanceInstanceServiceSelectors,
267
297
  INSTANCE_SERVICE_ROLE());
268
298
 
269
- bytes4[] memory instanceAccessManagerInstanceServiceSelectors = new bytes4[](1);
270
- instanceAccessManagerInstanceServiceSelectors[0] = clonedAccessManager.createGifTarget.selector;
271
- clonedAccessManager.setTargetFunctionRole(
299
+ // configure authorizations for instance service on instance access manager
300
+ bytes4[] memory accessManagerInstanceServiceSelectors = new bytes4[](3);
301
+ accessManagerInstanceServiceSelectors[0] = clonedAccessManager.createGifTarget.selector;
302
+ accessManagerInstanceServiceSelectors[1] = clonedAccessManager.setTargetLocked.selector;
303
+ accessManagerInstanceServiceSelectors[2] = clonedAccessManager.setCoreTargetFunctionRole.selector;
304
+ clonedAccessManager.setCoreTargetFunctionRole(
272
305
  "InstanceAccessManager",
273
- instanceAccessManagerInstanceServiceSelectors,
306
+ accessManagerInstanceServiceSelectors,
274
307
  INSTANCE_SERVICE_ROLE());
275
308
  }
276
309
 
310
+ function _grantInstanceOwnerAuthorizations(InstanceAccessManager clonedAccessManager, address instanceOwner) internal {
311
+ // configure authorization for instance owner on instance access manager
312
+ // instance owner role is granted/revoked ONLY by INSTANCE_ROLE
313
+ bytes4[] memory accessManagerInstanceOwnerSelectors = new bytes4[](3);
314
+ accessManagerInstanceOwnerSelectors[0] = clonedAccessManager.createRole.selector;
315
+ accessManagerInstanceOwnerSelectors[1] = clonedAccessManager.createTarget.selector;
316
+ accessManagerInstanceOwnerSelectors[2] = clonedAccessManager.setTargetFunctionRole.selector;
317
+ clonedAccessManager.setCoreTargetFunctionRole(
318
+ "InstanceAccessManager",
319
+ accessManagerInstanceOwnerSelectors,
320
+ INSTANCE_OWNER_ROLE());
321
+ }
322
+
323
+
277
324
  function setAndRegisterMasterInstance(address instanceAddress)
278
325
  external
279
326
  onlyOwner
280
327
  returns(NftId masterInstanceNftId)
281
328
  {
282
329
  if(_masterInstance != address(0)) { revert ErrorInstanceServiceMasterInstanceAlreadySet(); }
330
+ if(_masterOzAccessManager != address(0)) { revert ErrorInstanceServiceMasterOzAccessManagerAlreadySet(); }
283
331
  if(_masterInstanceAccessManager != address(0)) { revert ErrorInstanceServiceMasterInstanceAccessManagerAlreadySet(); }
284
332
  if(_masterInstanceBundleManager != address(0)) { revert ErrorInstanceServiceMasterBundleManagerAlreadySet(); }
285
333
 
286
334
  if(instanceAddress == address(0)) { revert ErrorInstanceServiceInstanceAddressZero(); }
287
335
 
288
336
  IInstance instance = IInstance(instanceAddress);
289
- InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
290
- address accessManagerAddress = address(accessManager);
337
+ AccessManagerUpgradeableInitializeable ozAccessManager = AccessManagerUpgradeableInitializeable(instance.authority());
338
+ address ozAccessManagerAddress = address(ozAccessManager);
339
+ InstanceAccessManager instanceAccessManager = instance.getInstanceAccessManager();
340
+ address instanceAccessManagerAddress = address(instanceAccessManager);
291
341
  InstanceReader instanceReader = instance.getInstanceReader();
292
342
  address instanceReaderAddress = address(instanceReader);
293
343
  BundleManager bundleManager = instance.getBundleManager();
294
344
  address bundleManagerAddress = address(bundleManager);
295
345
 
296
- if(accessManagerAddress == address(0)) { revert ErrorInstanceServiceAccessManagerZero(); }
346
+ if(ozAccessManagerAddress == address(0)) { revert ErrorInstanceServiceOzAccessManagerZero();}
347
+ if(instanceAccessManagerAddress == address(0)) { revert ErrorInstanceServiceInstanceAccessManagerZero(); }
297
348
  if(instanceReaderAddress == address(0)) { revert ErrorInstanceServiceInstanceReaderZero(); }
298
349
  if(bundleManagerAddress == address(0)) { revert ErrorInstanceServiceBundleManagerZero(); }
299
350
 
300
- if(instance.authority() != accessManagerAddress) { revert ErrorInstanceServiceInstanceAuthorityMismatch(); }
351
+ if(instance.authority() != instanceAccessManager.authority()) { revert ErrorInstanceServiceInstanceAuthorityMismatch(); }
352
+ if(bundleManager.authority() != instanceAccessManager.authority()) { revert ErrorInstanceServiceBundleManagerAuthorityMismatch(); }
301
353
  if(instanceReader.getInstance() != instance) { revert ErrorInstanceServiceInstanceReaderInstanceMismatch2(); }
302
354
  if(bundleManager.getInstance() != instance) { revert ErrorInstanceServiceBundleMangerInstanceMismatch(); }
303
355
 
304
- _masterInstanceAccessManager = accessManagerAddress;
356
+ _masterOzAccessManager = ozAccessManagerAddress;
357
+ _masterInstanceAccessManager = instanceAccessManagerAddress;
305
358
  _masterInstance = instanceAddress;
306
359
  _masterInstanceReader = instanceReaderAddress;
307
360
  _masterInstanceBundleManager = bundleManagerAddress;
@@ -325,19 +378,16 @@ contract InstanceService is
325
378
  _masterInstanceReader = instanceReaderAddress;
326
379
  }
327
380
 
328
- // TODO access restriction
329
- function upgradeInstanceReader(NftId instanceNftId) external {
381
+ function upgradeInstanceReader(NftId instanceNftId)
382
+ external
383
+ onlyInstanceOwner(instanceNftId)
384
+ {
330
385
  IRegistry registry = getRegistry();
331
386
  IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
332
387
  Instance instance = Instance(instanceInfo.objectAddress);
333
- address owner = instance.getOwner();
334
-
335
- if (msg.sender != owner) {
336
- revert ErrorInstanceServiceRequestUnauhorized(msg.sender);
337
- }
338
388
 
339
389
  InstanceReader upgradedInstanceReaderClone = InstanceReader(Clones.clone(address(_masterInstanceReader)));
340
- upgradedInstanceReaderClone.initialize(address(registry), address(instance));
390
+ upgradedInstanceReaderClone.initialize(address(instance));
341
391
  instance.setInstanceReader(upgradedInstanceReaderClone);
342
392
  }
343
393
 
@@ -380,97 +430,66 @@ contract InstanceService is
380
430
  registerInterface(type(IInstanceService).interfaceId);
381
431
  }
382
432
 
383
- function hasRole(address account, RoleId role, address instanceAddress) public view returns (bool) {
384
- Instance instance = Instance(instanceAddress);
385
- InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
386
- return accessManager.hasRole(role, account);
387
- }
433
+ // all gif targets MUST be childs of instanceNftId
434
+ function createGifTarget(
435
+ NftId instanceNftId,
436
+ address targetAddress,
437
+ string memory targetName,
438
+ bytes4[][] memory selectors,
439
+ RoleId[] memory roles
440
+ )
441
+ external
442
+ onlyRegisteredService
443
+ {
444
+ (
445
+ IInstance instance, // or instanceInfo
446
+ NftId targetNftId // or targetInfo
447
+ ) = _validateInstanceAndComponent(instanceNftId, targetAddress);
388
448
 
389
- function createGifTarget(NftId instanceNftId, address targetAddress, string memory targetName) external onlyRegisteredService {
390
- IRegistry registry = getRegistry();
391
- IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
392
- Instance instance = Instance(instanceInfo.objectAddress);
393
- InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
449
+ InstanceAccessManager accessManager = instance.getInstanceAccessManager();
394
450
  accessManager.createGifTarget(targetAddress, targetName);
395
- }
396
-
397
- function grantDistributionDefaultPermissions(NftId instanceNftId, address distributionAddress, string memory distributionName) external onlyRegisteredService {
398
- IRegistry registry = getRegistry();
399
- IRegistry.ObjectInfo memory distributionInfo = registry.getObjectInfo(distributionAddress);
400
-
401
- if (distributionInfo.objectType != DISTRIBUTION()) {
402
- revert ErrorInstanceServiceInvalidComponentType(distributionAddress, DISTRIBUTION(), distributionInfo.objectType);
451
+ // set proposed target config
452
+ // TODO restriction: for gif targets can set only once and only here?
453
+ // assume config is a mix of gif and custom roles and no further configuration by INSTANCE_OWNER_ROLE is ever needed?
454
+ for(uint roleIdx = 0; roleIdx < roles.length; roleIdx++)
455
+ {
456
+ accessManager.setCoreTargetFunctionRole(targetName, selectors[roleIdx], roles[roleIdx]);
403
457
  }
404
-
405
- IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
406
- Instance instance = Instance(instanceInfo.objectAddress);
407
- InstanceAccessManager instanceAccessManager = InstanceAccessManager(instance.authority());
408
-
409
- bytes4[] memory fctSelectors = new bytes4[](1);
410
- fctSelectors[0] = IDistributionComponent.setFees.selector;
411
- instanceAccessManager.setTargetFunctionRole(distributionName, fctSelectors, DISTRIBUTION_OWNER_ROLE());
412
-
413
- bytes4[] memory fctSelectors2 = new bytes4[](2);
414
- fctSelectors2[0] = IDistributionComponent.processSale.selector;
415
- fctSelectors2[1] = IDistributionComponent.processRenewal.selector;
416
- instanceAccessManager.setTargetFunctionRole(distributionName, fctSelectors2, PRODUCT_SERVICE_ROLE());
417
458
  }
418
459
 
419
- function grantPoolDefaultPermissions(NftId instanceNftId, address poolAddress, string memory poolName) external onlyRegisteredService {
460
+ // TODO called by component, but target can be component helper...so needs target name
461
+ // TODO check that targetName associated with component...how???
462
+ //function setTargetLocked(string memory targetName, bool locked) onlyComponent external {
463
+ function setComponentLocked(bool locked) onlyComponent external {
464
+ address componentAddress = msg.sender;
420
465
  IRegistry registry = getRegistry();
421
- IRegistry.ObjectInfo memory poolInfo = registry.getObjectInfo(poolAddress);
422
-
423
- if (poolInfo.objectType != POOL()) {
424
- revert ErrorInstanceServiceInvalidComponentType(poolAddress, POOL(), poolInfo.objectType);
425
- }
426
-
427
- IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
428
- Instance instance = Instance(instanceInfo.objectAddress);
429
- InstanceAccessManager instanceAccessManager = InstanceAccessManager(instance.authority());
430
-
431
- bytes4[] memory fctSelectors = new bytes4[](1);
432
- fctSelectors[0] = IPoolComponent.setFees.selector;
433
- instanceAccessManager.setTargetFunctionRole(poolName, fctSelectors, POOL_OWNER_ROLE());
466
+ NftId instanceNftId = registry.getObjectInfo(componentAddress).parentNftId;
467
+ address instanceAddress = registry.getObjectInfo(instanceNftId).objectAddress;
468
+ IInstance instance = IInstance(instanceAddress);
434
469
 
435
- bytes4[] memory fctSelectors2 = new bytes4[](1);
436
- fctSelectors2[0] = IPoolComponent.verifyApplication.selector;
437
- instanceAccessManager.setTargetFunctionRole(poolName, fctSelectors2, POLICY_SERVICE_ROLE());
470
+ InstanceAccessManager accessManager = instance.getInstanceAccessManager();
471
+ // TODO setLocked by target address?
472
+ string memory componentName = ShortStrings.toString(accessManager.getTargetInfo(componentAddress).name);
473
+ accessManager.setTargetLocked(componentName, locked);
438
474
  }
439
475
 
440
- function grantProductDefaultPermissions(NftId instanceNftId, address productAddress, string memory productName) external onlyRegisteredService {
476
+ function _validateInstanceAndComponent(NftId instanceNftId, address componentAddress)
477
+ internal
478
+ view
479
+ returns (IInstance instance, NftId componentNftId)
480
+ {
441
481
  IRegistry registry = getRegistry();
442
- IRegistry.ObjectInfo memory productInfo = registry.getObjectInfo(productAddress);
443
-
444
- if (productInfo.objectType != PRODUCT()) {
445
- revert ErrorInstanceServiceInvalidComponentType(productAddress, PRODUCT(), productInfo.objectType);
446
- }
447
-
448
482
  IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
449
- Instance instance = Instance(instanceInfo.objectAddress);
450
- InstanceAccessManager instanceAccessManager = InstanceAccessManager(instance.authority());
451
-
452
- bytes4[] memory fctSelectors = new bytes4[](1);
453
- fctSelectors[0] = IProductComponent.setFees.selector;
454
- instanceAccessManager.setTargetFunctionRole(productName, fctSelectors, PRODUCT_OWNER_ROLE());
455
- }
483
+ if(instanceInfo.objectType != INSTANCE()) {
484
+ revert ErrorInstanceServiceNotInstance(instanceNftId);
485
+ }
456
486
 
457
- function setTargetLocked(string memory targetName, bool locked) external {
458
- address componentAddress = msg.sender;
459
- IRegistry registry = getRegistry();
460
487
  IRegistry.ObjectInfo memory componentInfo = registry.getObjectInfo(componentAddress);
461
- if (componentInfo.nftId.eqz()) {
462
- revert ErrorInstanceServiceComponentNotRegistered(componentAddress);
488
+ if(componentInfo.parentNftId != instanceNftId) {
489
+ revert ErrorInstanceServiceInstanceComponentMismatch(instanceNftId, componentInfo.nftId);
463
490
  }
464
491
 
465
- // TODO validate component type
466
-
467
-
468
- address instanceAddress = registry.getObjectInfo(componentInfo.parentNftId).objectAddress;
469
- IInstance instance = IInstance(instanceAddress);
470
-
471
- InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
472
- accessManager.setTargetClosed(targetName, locked);
492
+ instance = Instance(instanceInfo.objectAddress);
493
+ componentNftId = componentInfo.nftId;
473
494
  }
474
-
475
- }
476
-
495
+ }
@@ -24,18 +24,16 @@ contract ObjectManager is
24
24
  IInstance internal _instance; // store instance address -> more flexible, instance may not be registered during ObjectManager initialization
25
25
 
26
26
  /// @dev call to initialize MUST be made in the same transaction as cloning of the contract
27
- function initialize(
28
- address authority,
29
- address registry,
30
- address instance
31
- )
27
+ function initialize(address instanceAddress)
28
+ initializer
32
29
  external
33
30
  {
34
- initialize(authority, registry);
31
+ IInstance instance = IInstance(instanceAddress);
32
+ initialize(instance.authority(), instance.getRegistryAddress());
35
33
 
36
- _instance = IInstance(instance);
34
+ _instance = instance;
37
35
 
38
- emit LogObjectManagerInitialized(instance);
36
+ emit LogObjectManagerInitialized(instanceAddress);
39
37
  }
40
38
 
41
39
  function getInstance() external view returns (IInstance) {
@@ -87,10 +87,10 @@ abstract contract ComponentService is Service {
87
87
  // check instance has assigned required role to owner
88
88
  instanceNftId = componentInfo.parentNftId;
89
89
  instance = _getInstance(instanceNftId);
90
- bool hasRole = getInstanceService().hasRole(
91
- owner,
92
- requiredRole,
93
- address(instance));
90
+ InstanceAccessManager accessManager = instance.getInstanceAccessManager();
91
+ bool hasRole = accessManager.hasRole(
92
+ requiredRole,
93
+ owner);
94
94
 
95
95
  if(!hasRole) {
96
96
  revert ErrorComponentServiceExpectedRoleMissing(instanceNftId, requiredRole, owner);
@@ -126,7 +126,7 @@ abstract contract ComponentService is Service {
126
126
  address instanceAddress = registry.getObjectInfo(info.parentNftId).objectAddress;
127
127
  instance = IInstance(instanceAddress);
128
128
 
129
- InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
129
+ InstanceAccessManager accessManager = instance.getInstanceAccessManager();
130
130
  if (accessManager.isTargetLocked(info.objectAddress)) {
131
131
  revert IAccess.ErrorIAccessTargetLocked(info.objectAddress);
132
132
  }