@etherisc/gif-next 0.0.2-2a0a7d0-893 → 0.0.2-2a59cd5-352

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 (249) hide show
  1. package/README.md +73 -1
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
  3. package/artifacts/contracts/components/Component.sol/Component.json +405 -6
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +883 -141
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IComponent.sol/IComponent.json +113 -6
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +798 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +662 -43
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +656 -0
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +583 -75
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +504 -5
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  33. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  36. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  39. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  40. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +2 -2
  41. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  42. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  43. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +450 -35
  44. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  45. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +111 -7
  46. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  47. package/artifacts/contracts/instance/Instance.sol/Instance.json +589 -223
  48. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  49. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +39 -89
  50. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  51. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +58 -53
  52. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  53. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +400 -96
  54. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  55. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +175 -25
  56. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  57. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +2 -2
  58. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +1 -1
  59. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +166 -7
  60. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  61. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  62. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  63. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +2 -2
  64. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  65. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
  66. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  67. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +13 -13
  68. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  69. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  70. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  71. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  72. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  73. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  74. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  75. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +1117 -0
  76. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
  77. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +290 -66
  78. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  79. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +169 -19
  80. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +439 -27
  82. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  83. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +194 -16
  84. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  85. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +638 -0
  86. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +118 -40
  88. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +217 -7
  90. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  91. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +33 -20
  92. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +20 -7
  94. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +20 -7
  96. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +223 -64
  98. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +182 -32
  100. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  101. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +186 -27
  102. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  103. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +166 -16
  104. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  105. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +186 -27
  106. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  107. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +166 -16
  108. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  109. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  110. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +15 -2
  111. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  112. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +100 -26
  113. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  114. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  115. package/artifacts/contracts/registry/Registry.sol/Registry.json +28 -15
  116. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
  117. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +2 -2
  118. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  119. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +260 -40
  120. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  121. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +166 -16
  122. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  123. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +11 -11
  124. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  125. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +160 -10
  126. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  127. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  128. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  129. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  130. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +37 -0
  131. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  132. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +129 -0
  133. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  134. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +18 -5
  135. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  136. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.json +69 -0
  137. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  138. package/artifacts/contracts/shared/IService.sol/IService.json +20 -7
  139. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  140. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -2
  141. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  142. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +156 -11
  143. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  144. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +269 -0
  145. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  146. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +156 -6
  147. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  148. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +152 -11
  149. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  150. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +105 -0
  151. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  152. package/artifacts/contracts/shared/Service.sol/Service.json +166 -7
  153. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  154. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  155. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  156. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  157. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -2
  158. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  159. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  160. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +152 -11
  161. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  162. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  163. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  164. package/artifacts/contracts/test/TestService.sol/TestService.json +184 -25
  165. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  166. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  167. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  168. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +8 -8
  169. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  170. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  171. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  172. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  173. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  174. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  175. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  176. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  177. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  178. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  179. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  180. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  181. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  182. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  183. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  184. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  185. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +2 -2
  187. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  188. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  189. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  190. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  191. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  192. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  193. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  194. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  195. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  196. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  197. package/contracts/components/Component.sol +121 -62
  198. package/contracts/components/Distribution.sol +207 -53
  199. package/contracts/components/IComponent.sol +16 -3
  200. package/contracts/components/IDistributionComponent.sol +59 -3
  201. package/contracts/components/IPoolComponent.sol +50 -29
  202. package/contracts/components/IProductComponent.sol +5 -1
  203. package/contracts/components/Pool.sol +133 -137
  204. package/contracts/components/Product.sol +90 -107
  205. package/contracts/instance/IInstance.sol +26 -6
  206. package/contracts/instance/IInstanceService.sol +19 -0
  207. package/contracts/instance/Instance.sol +58 -30
  208. package/contracts/instance/InstanceAccessManager.sol +12 -13
  209. package/contracts/instance/InstanceService.sol +119 -39
  210. package/contracts/instance/base/ComponentService.sol +3 -2
  211. package/contracts/instance/module/IAccess.sol +3 -4
  212. package/contracts/instance/module/ISetup.sol +5 -4
  213. package/contracts/instance/service/ApplicationService.sol +268 -0
  214. package/contracts/instance/service/BundleService.sol +11 -6
  215. package/contracts/instance/service/DistributionService.sol +197 -30
  216. package/contracts/instance/service/IApplicationService.sol +82 -0
  217. package/contracts/instance/service/IBundleService.sol +11 -1
  218. package/contracts/instance/service/IDistributionService.sol +53 -0
  219. package/contracts/instance/service/IPolicyService.sol +10 -16
  220. package/contracts/instance/service/PolicyService.sol +84 -98
  221. package/contracts/instance/service/PoolService.sol +9 -42
  222. package/contracts/instance/service/ProductService.sol +20 -28
  223. package/contracts/registry/IRegistry.sol +3 -2
  224. package/contracts/registry/IRegistryService.sol +16 -6
  225. package/contracts/registry/Registry.sol +20 -8
  226. package/contracts/registry/RegistryService.sol +50 -85
  227. package/contracts/registry/ReleaseManager.sol +19 -40
  228. package/contracts/registry/TokenRegistry.sol +4 -3
  229. package/contracts/shared/ERC165.sol +12 -11
  230. package/contracts/shared/INftOwnable.sol +12 -6
  231. package/contracts/shared/IPolicyHolder.sol +26 -0
  232. package/contracts/shared/IRegisterable.sol +4 -4
  233. package/contracts/shared/IRegistryLinked.sol +15 -0
  234. package/contracts/shared/IVersionable.sol +2 -2
  235. package/contracts/shared/NftOwnable.sol +113 -59
  236. package/contracts/shared/PolicyHolder.sol +81 -0
  237. package/contracts/shared/ProxyManager.sol +5 -4
  238. package/contracts/shared/Registerable.sol +15 -24
  239. package/contracts/shared/RegistryLinked.sol +64 -0
  240. package/contracts/shared/Service.sol +5 -5
  241. package/contracts/shared/Versionable.sol +3 -2
  242. package/contracts/test/TestRegisterable.sol +1 -1
  243. package/contracts/test/TestService.sol +1 -1
  244. package/contracts/types/DistributorType.sol +2 -2
  245. package/contracts/types/ObjectType.sol +6 -2
  246. package/package.json +3 -3
  247. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  248. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -100
  249. package/contracts/instance/base/IInstanceBase.sol +0 -21
@@ -13,18 +13,25 @@ import {InstanceAccessManager} from "./InstanceAccessManager.sol";
13
13
  import {BundleManager} from "./BundleManager.sol";
14
14
  import {InstanceReader} from "./InstanceReader.sol";
15
15
 
16
- import {IKeyValueStore} from "./base/IKeyValueStore.sol";
17
-
18
16
  import {IBundle} from "./module/IBundle.sol";
19
- import {ISetup} from "./module/ISetup.sol";
20
- import {IRisk} from "./module/IRisk.sol";
21
- import {IPolicy} from "./module/IPolicy.sol";
22
-
17
+ import {IBundleService} from "./service/IBundleService.sol";
23
18
  import {IDistributionService} from "./service/IDistributionService.sol";
19
+ import {InstanceAccessManager} from "./InstanceAccessManager.sol";
20
+ import {IKeyValueStore} from "./base/IKeyValueStore.sol";
21
+ import {IPolicy} from "./module/IPolicy.sol";
22
+ import {IDistribution} from "./module/IDistribution.sol";
23
+ import {IPolicyService} from "./service/IPolicyService.sol";
24
24
  import {IPoolService} from "./service/IPoolService.sol";
25
25
  import {IProductService} from "./service/IProductService.sol";
26
26
  import {IPolicyService} from "./service/IPolicyService.sol";
27
27
  import {IBundleService} from "./service/IBundleService.sol";
28
+ import {IRisk} from "./module/IRisk.sol";
29
+ import {ISetup} from "./module/ISetup.sol";
30
+ import {NftId} from "../types/NftId.sol";
31
+ import {RiskId} from "../types/RiskId.sol";
32
+ import {StateId} from "../types/StateId.sol";
33
+ import {VersionPart} from "../types/Version.sol";
34
+ import {Key32} from "../types/Key32.sol";
28
35
 
29
36
 
30
37
 
@@ -53,6 +60,18 @@ interface IInstance is IRegisterable, IKeyValueStore, IAccessManaged {
53
60
  function updateProductSetup(NftId productNftId, ISetup.ProductSetupInfo memory setup, StateId newState) external;
54
61
  function updateProductSetupState(NftId productNftId, StateId newState) external;
55
62
 
63
+ function createDistributorType(Key32 distributorKey, IDistribution.DistributorTypeInfo memory info) external;
64
+ function updateDistributorType(Key32 distributorKey, IDistribution.DistributorTypeInfo memory info, StateId newState) external;
65
+ function updateDistributorTypeState(Key32 distributorKey, StateId newState) external;
66
+
67
+ function createDistributor(NftId nftId, IDistribution.DistributorInfo memory info) external;
68
+ function updateDistributor(NftId nftId, IDistribution.DistributorInfo memory info, StateId newState) external;
69
+ function updateDistributorState(NftId nftId, StateId newState) external;
70
+
71
+ function createReferral(Key32 referralKey, IDistribution.ReferralInfo memory referralInfo) external;
72
+ function updateReferral(Key32 referralKey, IDistribution.ReferralInfo memory referralInfo, StateId newState) external;
73
+ function updateReferralState(Key32 referralKey, StateId newState) external;
74
+
56
75
  function createRisk(RiskId riskId, IRisk.RiskInfo memory risk) external;
57
76
  function updateRisk(RiskId riskId, IRisk.RiskInfo memory risk, StateId newState) external;
58
77
  function updateRiskState(RiskId riskId, StateId newState) external;
@@ -61,6 +80,7 @@ interface IInstance is IRegisterable, IKeyValueStore, IAccessManaged {
61
80
  function updatePolicy(NftId policyNftId, IPolicy.PolicyInfo memory policy, StateId newState) external;
62
81
  function updatePolicyState(NftId policyNftId, StateId newState) external;
63
82
 
83
+ function getMajorVersion() external pure returns (VersionPart majorVersion);
64
84
  function getInstanceReader() external view returns (InstanceReader);
65
85
  function getBundleManager() external view returns (BundleManager);
66
86
  }
@@ -17,9 +17,28 @@ import {BundleManager} from "./BundleManager.sol";
17
17
 
18
18
  interface IInstanceService is IService {
19
19
 
20
+ error ErrorInstanceServiceMasterInstanceAlreadySet();
21
+ error ErrorInstanceServiceMasterInstanceAccessManagerAlreadySet();
22
+ error ErrorInstanceServiceMasterBundleManagerAlreadySet();
23
+ error ErrorInstanceServiceInstanceAddressZero();
24
+
25
+ error ErrorInstanceServiceMasterInstanceReaderNotSet();
26
+ error ErrorInstanceServiceInstanceReaderAddressZero();
27
+ error ErrorInstanceServiceInstanceReaderSameAsMasterInstanceReader();
28
+ error ErrorInstanceServiceInstanceReaderInstanceMismatch();
29
+
30
+ error ErrorInstanceServiceAccessManagerZero();
31
+ error ErrorInstanceServiceInstanceReaderZero();
32
+ error ErrorInstanceServiceBundleManagerZero();
33
+
34
+ error ErrorInstanceServiceInstanceAuthorityMismatch();
35
+ error ErrorInstanceServiceInstanceReaderInstanceMismatch2();
36
+ error ErrorInstanceServiceBundleMangerInstanceMismatch();
37
+
20
38
  error ErrorInstanceServiceRequestUnauhorized(address caller);
21
39
  error ErrorInstanceServiceNotInstanceOwner(address caller, NftId instanceNftId);
22
40
  error ErrorInstanceServiceComponentNotRegistered(address componentAddress);
41
+ error ErrorInstanceServiceInvalidComponentType(address componentAddress, ObjectType expectedType, ObjectType componentType);
23
42
 
24
43
  event LogInstanceCloned(address clonedAccessManagerAddress, address clonedInstanceAddress, address clonedInstanceReaderAddress, NftId clonedInstanceNftId);
25
44
 
@@ -6,7 +6,7 @@ import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/acce
6
6
  import {Key32, KeyId, Key32Lib} from "../types/Key32.sol";
7
7
  import {NftId} from "../types/NftId.sol";
8
8
  import {NumberId} from "../types/NumberId.sol";
9
- import {ObjectType, BUNDLE, DISTRIBUTION, INSTANCE, POLICY, POOL, ROLE, PRODUCT, TARGET, COMPONENT} from "../types/ObjectType.sol";
9
+ import {ObjectType, BUNDLE, DISTRIBUTION, INSTANCE, POLICY, POOL, ROLE, PRODUCT, TARGET, COMPONENT, DISTRIBUTOR, DISTRIBUTOR_TYPE} from "../types/ObjectType.sol";
10
10
  import {RiskId, RiskIdLib} from "../types/RiskId.sol";
11
11
  import {RoleId, RoleIdLib} from "../types/RoleId.sol";
12
12
  import {StateId, ACTIVE} from "../types/StateId.sol";
@@ -25,6 +25,7 @@ import {KeyValueStore} from "./base/KeyValueStore.sol";
25
25
 
26
26
  import {IAccess} from "./module/IAccess.sol";
27
27
  import {IBundle} from "./module/IBundle.sol";
28
+ import {IDistribution} from "./module/IDistribution.sol";
28
29
  import {IPolicy} from "./module/IPolicy.sol";
29
30
  import {IRisk} from "./module/IRisk.sol";
30
31
  import {ISetup} from "./module/ISetup.sol";
@@ -34,7 +35,7 @@ import {IPoolService} from "./service/IPoolService.sol";
34
35
  import {IProductService} from "./service/IProductService.sol";
35
36
  import {IPolicyService} from "./service/IPolicyService.sol";
36
37
  import {IBundleService} from "./service/IBundleService.sol";
37
-
38
+ import {VersionPart, VersionPartLib} from "../types/Version.sol";
38
39
 
39
40
  contract Instance is
40
41
  IInstance,
@@ -42,18 +43,29 @@ contract Instance is
42
43
  Registerable,
43
44
  KeyValueStore
44
45
  {
46
+
47
+ uint256 public constant GIF_MAJOR_VERSION = 3;
48
+
49
+ uint64 public constant ADMIN_ROLE = type(uint64).min;
50
+ uint64 public constant PUBLIC_ROLE = type(uint64).max;
51
+ uint64 public constant CUSTOM_ROLE_ID_MIN = 10000;
52
+
53
+ uint32 public constant EXECUTION_DELAY = 0;
54
+
55
+ bool private _initialized;
56
+
57
+ InstanceAccessManager internal _accessManager;
45
58
  InstanceReader internal _instanceReader;
46
59
  BundleManager internal _bundleManager;
47
60
 
48
61
  function initialize(address accessManagerAddress, address registryAddress, NftId registryNftId, address initialOwner)
49
62
  public
50
- initializer
63
+ initializer()
51
64
  {
52
65
  __AccessManaged_init(accessManagerAddress);
53
66
 
54
- _initializeRegisterable(registryAddress, registryNftId, INSTANCE(), false, initialOwner, "");
55
-
56
- _registerInterface(type(IInstance).interfaceId);
67
+ initializeRegisterable(registryAddress, registryNftId, INSTANCE(), false, initialOwner, "");
68
+ registerInterface(type(IInstance).interfaceId);
57
69
  }
58
70
 
59
71
  //--- ProductSetup ------------------------------------------------------//
@@ -95,43 +107,43 @@ contract Instance is
95
107
  updateState(_toNftKey32(poolNftId, POOL()), newState);
96
108
  }
97
109
 
98
- //--- DistributorType ---------------------------------------------------//
99
- function createDistributorType(NftId policyNftId, NumberId payoutId, IPolicy.PayoutInfo memory payout) external restricted() {
100
- create(toPolicyKey32(policyNftId), abi.encode(payout));
110
+ //--- DistributorType -------------------------------------------------------//
111
+ function createDistributorType(Key32 distributorKey, IDistribution.DistributorTypeInfo memory info) external restricted() {
112
+ create(distributorKey, abi.encode(info));
101
113
  }
102
114
 
103
- function updateDistributorType(NftId policyNftId, NumberId payoutId, IPolicy.PayoutInfo memory payout, StateId newState) external restricted() {
104
- update(toPolicyKey32(policyNftId), abi.encode(payout), newState);
115
+ function updateDistributorType(Key32 distributorKey, IDistribution.DistributorTypeInfo memory info, StateId newState) external restricted() {
116
+ update(distributorKey, abi.encode(info), newState);
105
117
  }
106
118
 
107
- function updateDistributorTypeState(NftId policyNftId, StateId newState) external restricted() {
108
- updateState(toPolicyKey32(policyNftId), newState);
119
+ function updateDistributorTypeState(Key32 distributorKey, StateId newState) external restricted() {
120
+ updateState(distributorKey, newState);
109
121
  }
110
122
 
111
123
  //--- Distributor -------------------------------------------------------//
112
- function createDistributor(NftId policyNftId, NumberId payoutId, IPolicy.PayoutInfo memory payout) external restricted() {
113
- create(toPolicyKey32(policyNftId), abi.encode(payout));
124
+ function createDistributor(NftId nftId, IDistribution.DistributorInfo memory info) external restricted() {
125
+ create(toDistributorKey32(nftId), abi.encode(info));
114
126
  }
115
127
 
116
- function updateDistributor(NftId policyNftId, NumberId payoutId, IPolicy.PayoutInfo memory payout, StateId newState) external restricted() {
117
- update(toPolicyKey32(policyNftId), abi.encode(payout), newState);
128
+ function updateDistributor(NftId nftId, IDistribution.DistributorInfo memory info, StateId newState) external restricted() {
129
+ update(toDistributorKey32(nftId), abi.encode(info), newState);
118
130
  }
119
131
 
120
- function updateDistributorState(NftId policyNftId, StateId newState) external restricted() {
121
- updateState(toPolicyKey32(policyNftId), newState);
132
+ function updateDistributorState(NftId nftId, StateId newState) external restricted() {
133
+ updateState(toDistributorKey32(nftId), newState);
122
134
  }
123
135
 
124
136
  //--- Referral ----------------------------------------------------------//
125
- function createReferral(NftId policyNftId, NumberId payoutId, IPolicy.PayoutInfo memory payout) external restricted() {
126
- create(toPolicyKey32(policyNftId), abi.encode(payout));
137
+ function createReferral(Key32 referralKey, IDistribution.ReferralInfo memory referralInfo) external restricted() {
138
+ create(referralKey, abi.encode(referralInfo));
127
139
  }
128
140
 
129
- function updateReferral(NftId policyNftId, NumberId payoutId, IPolicy.PayoutInfo memory payout, StateId newState) external restricted() {
130
- update(toPolicyKey32(policyNftId), abi.encode(payout), newState);
141
+ function updateReferral(Key32 referralKey, IDistribution.ReferralInfo memory referralInfo, StateId newState) external restricted() {
142
+ update(referralKey, abi.encode(referralInfo), newState);
131
143
  }
132
144
 
133
- function updateReferralState(NftId policyNftId, StateId newState) external restricted() {
134
- updateState(toPolicyKey32(policyNftId), newState);
145
+ function updateReferralState(Key32 referralKey, StateId newState) external restricted() {
146
+ updateState(referralKey, newState);
135
147
  }
136
148
 
137
149
  //--- Bundle ------------------------------------------------------------//
@@ -212,24 +224,36 @@ contract Instance is
212
224
  return policyNftId.toKey32(POLICY());
213
225
  }
214
226
 
227
+ function toDistributionKey32(NftId distNftId) public pure returns (Key32) {
228
+ return distNftId.toKey32(DISTRIBUTION());
229
+ }
230
+
231
+ function toDistributorTypeKey32(NftId distNftId) public pure returns (Key32) {
232
+ return distNftId.toKey32(DISTRIBUTOR_TYPE());
233
+ }
234
+
235
+ function toDistributorKey32(NftId distNftId) public pure returns (Key32) {
236
+ return distNftId.toKey32(DISTRIBUTOR());
237
+ }
238
+
215
239
  function getDistributionService() external view returns (IDistributionService) {
216
- return IDistributionService(_registry.getServiceAddress(DISTRIBUTION(), VersionPart.wrap(3)));
240
+ return IDistributionService(getRegistry().getServiceAddress(DISTRIBUTION(), VersionPart.wrap(3)));
217
241
  }
218
242
 
219
243
  function getProductService() external view returns (IProductService) {
220
- return IProductService(_registry.getServiceAddress(PRODUCT(), VersionPart.wrap(3)));
244
+ return IProductService(getRegistry().getServiceAddress(PRODUCT(), VersionPart.wrap(3)));
221
245
  }
222
246
 
223
247
  function getPoolService() external view returns (IPoolService) {
224
- return IPoolService(_registry.getServiceAddress(POOL(), VersionPart.wrap(3)));
248
+ return IPoolService(getRegistry().getServiceAddress(POOL(), VersionPart.wrap(3)));
225
249
  }
226
250
 
227
251
  function getPolicyService() external view returns (IPolicyService) {
228
- return IPolicyService(_registry.getServiceAddress(POLICY(), VersionPart.wrap(3)));
252
+ return IPolicyService(getRegistry().getServiceAddress(POLICY(), VersionPart.wrap(3)));
229
253
  }
230
254
 
231
255
  function getBundleService() external view returns (IBundleService) {
232
- return IBundleService(_registry.getServiceAddress(BUNDLE(), VersionPart.wrap(3)));
256
+ return IBundleService(getRegistry().getServiceAddress(BUNDLE(), VersionPart.wrap(3)));
233
257
  }
234
258
 
235
259
  function setInstanceReader(InstanceReader instanceReader) external restricted() {
@@ -237,6 +261,10 @@ contract Instance is
237
261
  _instanceReader = instanceReader;
238
262
  }
239
263
 
264
+ function getMajorVersion() external pure returns (VersionPart majorVersion) {
265
+ return VersionPartLib.toVersionPart(GIF_MAJOR_VERSION);
266
+ }
267
+
240
268
  function getInstanceReader() external view returns (InstanceReader) {
241
269
  return _instanceReader;
242
270
  }
@@ -58,7 +58,7 @@ contract InstanceAccessManager is
58
58
 
59
59
  function setRoleLocked(RoleId roleId, bool locked) external restricted() {
60
60
  if (!roleExists(roleId)) {
61
- revert IAccess.ErrorIAccessSetLockedForNonexstentRole(roleId);
61
+ revert IAccess.ErrorIAccessRoleIdInvalid(roleId);
62
62
  }
63
63
 
64
64
  _role[roleId].isLocked = locked;
@@ -71,7 +71,7 @@ contract InstanceAccessManager is
71
71
 
72
72
  function grantRole(RoleId roleId, address member) external restricted() returns (bool granted) {
73
73
  if (!roleExists(roleId)) {
74
- revert IAccess.ErrorIAccessGrantNonexstentRole(roleId);
74
+ revert IAccess.ErrorIAccessRoleIdInvalid(roleId);
75
75
  }
76
76
 
77
77
  if (_role[roleId].isLocked) {
@@ -161,7 +161,7 @@ contract InstanceAccessManager is
161
161
  address target = _targetForName[ShortStrings.toShortString(targetName)];
162
162
 
163
163
  if (target == address(0)) {
164
- revert IAccess.ErrorIAccessSetLockedForNonexstentTarget(target);
164
+ revert IAccess.ErrorIAccessTargetDoesNotExist(ShortStrings.toShortString(targetName));
165
165
  }
166
166
 
167
167
  _target[target].isLocked = locked;
@@ -236,7 +236,7 @@ contract InstanceAccessManager is
236
236
  }
237
237
 
238
238
  if (_target[target].createdAt.gtz()) {
239
- revert IAccess.ErrorIAccessTargetAlreadyExists(target, _target[target].name);
239
+ revert IAccess.ErrorIAccessTargetExists(target, _target[target].name);
240
240
  }
241
241
  if (_targetForName[ShortStrings.toShortString(name)] != address(0)) {
242
242
  revert IAccess.ErrorIAccessTargetNameExists(target, _targetForName[ShortStrings.toShortString(name)], ShortStrings.toShortString(name));
@@ -258,20 +258,19 @@ contract InstanceAccessManager is
258
258
  // TODO: implement
259
259
  }
260
260
 
261
- function setTargetFunctionRole(
262
- address target,
263
- bytes4[] calldata selectors,
264
- uint64 roleId
265
- ) public virtual restricted() {
266
- _accessManager.setTargetFunctionRole(target, selectors, roleId);
267
- }
268
-
269
261
  function setTargetFunctionRole(
270
262
  string memory targetName,
271
263
  bytes4[] calldata selectors,
272
264
  RoleId roleId
273
265
  ) public virtual restricted() {
274
266
  address target = _targetForName[ShortStrings.toShortString(targetName)];
267
+
268
+ if (target == address(0)) {
269
+ revert IAccess.ErrorIAccessTargetDoesNotExist(ShortStrings.toShortString(targetName));
270
+ }
271
+ if (! roleExists(roleId)) {
272
+ revert IAccess.ErrorIAccessRoleIdInvalid(roleId);
273
+ }
275
274
  uint64 roleIdInt = RoleId.unwrap(roleId);
276
275
  _accessManager.setTargetFunctionRole(target, selectors, roleIdInt);
277
276
  }
@@ -279,7 +278,7 @@ contract InstanceAccessManager is
279
278
  function setTargetClosed(string memory targetName, bool closed) public restricted() {
280
279
  address target = _targetForName[ShortStrings.toShortString(targetName)];
281
280
  if (target == address(0)) {
282
- revert IAccess.ErrorIAccessTargetAddressZero();
281
+ revert IAccess.ErrorIAccessTargetDoesNotExist(ShortStrings.toShortString(targetName));
283
282
  }
284
283
  _accessManager.setTargetClosed(target, closed);
285
284
  }
@@ -18,6 +18,9 @@ import {NftId} from "../../contracts/types/NftId.sol";
18
18
  import {RoleId} from "../types/RoleId.sol";
19
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
20
  import {ObjectType, INSTANCE, BUNDLE, POLICY, PRODUCT, DISTRIBUTION, REGISTRY, POOL} from "../types/ObjectType.sol";
21
+ import {IDistributionComponent} from "../components/IDistributionComponent.sol";
22
+ import {IPoolComponent} from "../components/IPoolComponent.sol";
23
+ import {IProductComponent} from "../components/IProductComponent.sol";
21
24
 
22
25
  contract InstanceService is Service, IInstanceService {
23
26
 
@@ -31,7 +34,7 @@ contract InstanceService is Service, IInstanceService {
31
34
 
32
35
  modifier onlyInstanceOwner(NftId instanceNftId) {
33
36
  IRegistry registry = getRegistry();
34
- ChainNft chainNft = registry.getChainNft();
37
+ ChainNft chainNft = ChainNft(registry.getChainNftAddress());
35
38
 
36
39
  if( msg.sender != chainNft.ownerOf(instanceNftId.toInt())) {
37
40
  revert ErrorInstanceServiceNotInstanceOwner(msg.sender, instanceNftId);
@@ -90,9 +93,9 @@ contract InstanceService is Service, IInstanceService {
90
93
  clonedAccessManager.grantRole(ADMIN_ROLE(), instanceOwner);
91
94
  clonedAccessManager.revokeRole(ADMIN_ROLE(), address(this));
92
95
 
93
- ( IRegistry.ObjectInfo memory info, ) = registryService.registerInstance(clonedInstance, instanceOwner);
96
+ IRegistry.ObjectInfo memory info = registryService.registerInstance(clonedInstance, instanceOwner);
94
97
  clonedInstanceNftId = info.nftId;
95
- clonedInstance.linkToRegisteredNftId();
98
+ // clonedInstance.linkToRegisteredNftId();
96
99
 
97
100
  emit LogInstanceCloned(address(clonedAccessManager), address(clonedInstance), address(clonedInstanceReader), clonedInstanceNftId);
98
101
  }
@@ -122,6 +125,7 @@ contract InstanceService is Service, IInstanceService {
122
125
  }
123
126
 
124
127
  function _createGifTargets(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
128
+ clonedAccessManager.createGifTarget(address(clonedAccessManager), "InstanceAccessManager");
125
129
  clonedAccessManager.createGifTarget(address(clonedInstance), "Instance");
126
130
  clonedAccessManager.createGifTarget(address(clonedBundleManager), "BundleManager");
127
131
  }
@@ -131,18 +135,27 @@ contract InstanceService is Service, IInstanceService {
131
135
  IRegistry registry = getRegistry();
132
136
  address distributionServiceAddress = registry.getServiceAddress(DISTRIBUTION(), getMajorVersion());
133
137
  clonedAccessManager.grantRole(DISTRIBUTION_SERVICE_ROLE(), distributionServiceAddress);
134
- bytes4[] memory instanceDistributionServiceSelectors = new bytes4[](2);
138
+ bytes4[] memory instanceDistributionServiceSelectors = new bytes4[](11);
135
139
  instanceDistributionServiceSelectors[0] = clonedInstance.createDistributionSetup.selector;
136
140
  instanceDistributionServiceSelectors[1] = clonedInstance.updateDistributionSetup.selector;
141
+ instanceDistributionServiceSelectors[2] = clonedInstance.createDistributorType.selector;
142
+ instanceDistributionServiceSelectors[3] = clonedInstance.updateDistributorType.selector;
143
+ instanceDistributionServiceSelectors[4] = clonedInstance.updateDistributorTypeState.selector;
144
+ instanceDistributionServiceSelectors[5] = clonedInstance.createDistributor.selector;
145
+ instanceDistributionServiceSelectors[6] = clonedInstance.updateDistributor.selector;
146
+ instanceDistributionServiceSelectors[7] = clonedInstance.updateDistributorState.selector;
147
+ instanceDistributionServiceSelectors[8] = clonedInstance.createReferral.selector;
148
+ instanceDistributionServiceSelectors[9] = clonedInstance.updateReferral.selector;
149
+ instanceDistributionServiceSelectors[10] = clonedInstance.updateReferralState.selector;
137
150
  clonedAccessManager.setTargetFunctionRole(
138
151
  "Instance",
139
152
  instanceDistributionServiceSelectors,
140
- DISTRIBUTION_SERVICE_ROLE());
153
+ DISTRIBUTION_SERVICE_ROLE());
141
154
  }
142
155
 
143
156
  function _grantPoolServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
144
157
  // configure authorization for pool service on instance
145
- address poolServiceAddress = _registry.getServiceAddress(POOL(), getMajorVersion());
158
+ address poolServiceAddress = getRegistry().getServiceAddress(POOL(), getMajorVersion());
146
159
  clonedAccessManager.grantRole(POOL_SERVICE_ROLE(), address(poolServiceAddress));
147
160
  bytes4[] memory instancePoolServiceSelectors = new bytes4[](4);
148
161
  instancePoolServiceSelectors[0] = clonedInstance.createPoolSetup.selector;
@@ -155,7 +168,7 @@ contract InstanceService is Service, IInstanceService {
155
168
 
156
169
  function _grantProductServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
157
170
  // configure authorization for product service on instance
158
- address productServiceAddress = _registry.getServiceAddress(PRODUCT(), getMajorVersion());
171
+ address productServiceAddress = getRegistry().getServiceAddress(PRODUCT(), getMajorVersion());
159
172
  clonedAccessManager.grantRole(PRODUCT_SERVICE_ROLE(), address(productServiceAddress));
160
173
  bytes4[] memory instanceProductServiceSelectors = new bytes4[](5);
161
174
  instanceProductServiceSelectors[0] = clonedInstance.createProductSetup.selector;
@@ -171,7 +184,7 @@ contract InstanceService is Service, IInstanceService {
171
184
 
172
185
  function _grantPolicyServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
173
186
  // configure authorization for policy service on instance
174
- address policyServiceAddress = _registry.getServiceAddress(POLICY(), getMajorVersion());
187
+ address policyServiceAddress = getRegistry().getServiceAddress(POLICY(), getMajorVersion());
175
188
  clonedAccessManager.grantRole(POLICY_SERVICE_ROLE(), address(policyServiceAddress));
176
189
  bytes4[] memory instancePolicyServiceSelectors = new bytes4[](3);
177
190
  instancePolicyServiceSelectors[0] = clonedInstance.createPolicy.selector;
@@ -185,7 +198,7 @@ contract InstanceService is Service, IInstanceService {
185
198
 
186
199
  function _grantBundleServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
187
200
  // configure authorization for bundle service on instance
188
- address bundleServiceAddress = _registry.getServiceAddress(BUNDLE(), getMajorVersion());
201
+ address bundleServiceAddress = getRegistry().getServiceAddress(BUNDLE(), getMajorVersion());
189
202
  clonedAccessManager.grantRole(BUNDLE_SERVICE_ROLE(), address(bundleServiceAddress));
190
203
  bytes4[] memory instanceBundleServiceSelectors = new bytes4[](2);
191
204
  instanceBundleServiceSelectors[0] = clonedInstance.createBundle.selector;
@@ -210,7 +223,7 @@ contract InstanceService is Service, IInstanceService {
210
223
 
211
224
  function _grantInstanceServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
212
225
  // configure authorization for instance service on instance
213
- address instanceServiceAddress = _registry.getServiceAddress(INSTANCE(), getMajorVersion());
226
+ address instanceServiceAddress = getRegistry().getServiceAddress(INSTANCE(), getMajorVersion());
214
227
  clonedAccessManager.grantRole(INSTANCE_SERVICE_ROLE(), instanceServiceAddress);
215
228
  bytes4[] memory instanceInstanceServiceSelectors = new bytes4[](1);
216
229
  instanceInstanceServiceSelectors[0] = clonedInstance.setInstanceReader.selector;
@@ -218,33 +231,41 @@ contract InstanceService is Service, IInstanceService {
218
231
  "Instance",
219
232
  instanceInstanceServiceSelectors,
220
233
  INSTANCE_SERVICE_ROLE());
234
+
235
+ bytes4[] memory instanceAccessManagerInstanceServiceSelectors = new bytes4[](1);
236
+ instanceAccessManagerInstanceServiceSelectors[0] = clonedAccessManager.createGifTarget.selector;
237
+ clonedAccessManager.setTargetFunctionRole(
238
+ "InstanceAccessManager",
239
+ instanceAccessManagerInstanceServiceSelectors,
240
+ INSTANCE_SERVICE_ROLE());
221
241
  }
222
242
 
223
- function setMasterInstance(
224
- address accessManagerAddress,
225
- address instanceAddress,
226
- address instanceReaderAddress,
227
- address bundleManagerAddress)
243
+ function setAndRegisterMasterInstance(address instanceAddress)
228
244
  external
229
245
  onlyOwner
230
246
  returns(NftId masterInstanceNftId)
231
247
  {
232
- require(_masterInstanceAccessManager == address(0), "ERROR:CRD-001:ACCESS_MANAGER_MASTER_ALREADY_SET");
233
- require(_masterInstance == address(0), "ERROR:CRD-002:INSTANCE_MASTER_ALREADY_SET");
234
- require(_masterInstanceBundleManager == address(0), "ERROR:CRD-004:BUNDLE_MANAGER_MASTER_ALREADY_SET");
248
+ if(_masterInstance != address(0)) { revert ErrorInstanceServiceMasterInstanceAlreadySet(); }
249
+ if(_masterInstanceAccessManager != address(0)) { revert ErrorInstanceServiceMasterInstanceAccessManagerAlreadySet(); }
250
+ if(_masterInstanceBundleManager != address(0)) { revert ErrorInstanceServiceMasterBundleManagerAlreadySet(); }
235
251
 
236
- require (accessManagerAddress != address(0), "ERROR:CRD-005:ACCESS_MANAGER_ZERO");
237
- require (instanceAddress != address(0), "ERROR:CRD-006:INSTANCE_ZERO");
238
- require (instanceReaderAddress != address(0), "ERROR:CRD-007:INSTANCE_READER_ZERO");
239
- require (bundleManagerAddress != address(0), "ERROR:CRD-008:BUNDLE_MANAGER_ZERO");
252
+ if(instanceAddress == address(0)) { revert ErrorInstanceServiceInstanceAddressZero(); }
240
253
 
241
254
  IInstance instance = IInstance(instanceAddress);
242
- InstanceReader instanceReader = InstanceReader(instanceReaderAddress);
243
- BundleManager bundleManager = BundleManager(bundleManagerAddress);
244
-
245
- require(instance.authority() == accessManagerAddress, "ERROR:CRD-009:INSTANCE_AUTHORITY_MISMATCH");
246
- require(instanceReader.getInstance() == instance, "ERROR:CRD-010:INSTANCE_READER_INSTANCE_MISMATCH");
247
- require(bundleManager.getInstance() == instance, "ERROR:CRD-011:BUNDLE_MANAGER_INSTANCE_MISMATCH");
255
+ InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
256
+ address accessManagerAddress = address(accessManager);
257
+ InstanceReader instanceReader = instance.getInstanceReader();
258
+ address instanceReaderAddress = address(instanceReader);
259
+ BundleManager bundleManager = instance.getBundleManager();
260
+ address bundleManagerAddress = address(bundleManager);
261
+
262
+ if(accessManagerAddress == address(0)) { revert ErrorInstanceServiceAccessManagerZero(); }
263
+ if(instanceReaderAddress == address(0)) { revert ErrorInstanceServiceInstanceReaderZero(); }
264
+ if(bundleManagerAddress == address(0)) { revert ErrorInstanceServiceBundleManagerZero(); }
265
+
266
+ if(instance.authority() != accessManagerAddress) { revert ErrorInstanceServiceInstanceAuthorityMismatch(); }
267
+ if(instanceReader.getInstance() != instance) { revert ErrorInstanceServiceInstanceReaderInstanceMismatch2(); }
268
+ if(bundleManager.getInstance() != instance) { revert ErrorInstanceServiceBundleMangerInstanceMismatch(); }
248
269
 
249
270
  _masterInstanceAccessManager = accessManagerAddress;
250
271
  _masterInstance = instanceAddress;
@@ -253,19 +274,19 @@ contract InstanceService is Service, IInstanceService {
253
274
 
254
275
  IRegistryService registryService = IRegistryService(getRegistry().getServiceAddress(REGISTRY(), getMajorVersion()));
255
276
  IInstance masterInstance = IInstance(_masterInstance);
256
- (IRegistry.ObjectInfo memory info, ) = registryService.registerInstance(masterInstance, getOwner());
277
+ IRegistry.ObjectInfo memory info = registryService.registerInstance(masterInstance, getOwner());
257
278
  masterInstanceNftId = info.nftId;
258
279
 
259
- masterInstance.linkToRegisteredNftId();
280
+ // masterInstance.linkToRegisteredNftId();
260
281
  }
261
282
 
262
283
  function setMasterInstanceReader(address instanceReaderAddress) external onlyOwner {
263
- require(_masterInstanceReader != address(0), "ERROR:CRD-003:INSTANCE_READER_MASTER_NOT_SET");
264
- require (instanceReaderAddress != address(0), "ERROR:CRD-012:INSTANCE_READER_ZERO");
265
- require(instanceReaderAddress != _masterInstanceReader, "ERROR:CRD-014:INSTANCE_READER_MASTER_SAME_AS_NEW");
284
+ if(_masterInstanceReader == address(0)) { revert ErrorInstanceServiceMasterInstanceReaderNotSet(); }
285
+ if(instanceReaderAddress == address(0)) { revert ErrorInstanceServiceInstanceReaderAddressZero(); }
286
+ if(instanceReaderAddress == _masterInstanceReader) { revert ErrorInstanceServiceInstanceReaderSameAsMasterInstanceReader(); }
266
287
 
267
288
  InstanceReader instanceReader = InstanceReader(instanceReaderAddress);
268
- require(instanceReader.getInstance() == IInstance(_masterInstance), "ERROR:CRD-015:INSTANCE_READER_INSTANCE_MISMATCH");
289
+ if(instanceReader.getInstance() != IInstance(_masterInstance)) { revert ErrorInstanceServiceInstanceReaderInstanceMismatch(); }
269
290
 
270
291
  _masterInstanceReader = instanceReaderAddress;
271
292
  }
@@ -321,9 +342,8 @@ contract InstanceService is Service, IInstanceService {
321
342
  (registryAddress, initialOwner) = abi.decode(data, (address, address));
322
343
  // TODO while InstanceService is not deployed in InstanceServiceManager constructor
323
344
  // owner is InstanceServiceManager deployer
324
- _initializeService(registryAddress, owner);
325
-
326
- _registerInterface(type(IInstanceService).interfaceId);
345
+ initializeService(registryAddress, owner);
346
+ registerInterface(type(IInstanceService).interfaceId);
327
347
  }
328
348
 
329
349
  function hasRole(address account, RoleId role, address instanceAddress) public view returns (bool) {
@@ -332,12 +352,72 @@ contract InstanceService is Service, IInstanceService {
332
352
  return accessManager.hasRole(role, account);
333
353
  }
334
354
 
335
- function createTarget(NftId instanceNftId, address targetAddress, string memory targetName) external onlyRegisteredService {
355
+ function createGifTarget(NftId instanceNftId, address targetAddress, string memory targetName) external onlyRegisteredService {
336
356
  IRegistry registry = getRegistry();
337
357
  IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
338
358
  Instance instance = Instance(instanceInfo.objectAddress);
339
359
  InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
340
- accessManager.createTarget(targetAddress, targetName);
360
+ accessManager.createGifTarget(targetAddress, targetName);
361
+ }
362
+
363
+ function grantDistributionDefaultPermissions(NftId instanceNftId, address distributionAddress, string memory distributionName) external onlyRegisteredService {
364
+ IRegistry registry = getRegistry();
365
+ IRegistry.ObjectInfo memory distributionInfo = registry.getObjectInfo(distributionAddress);
366
+
367
+ if (distributionInfo.objectType != DISTRIBUTION()) {
368
+ revert ErrorInstanceServiceInvalidComponentType(distributionAddress, DISTRIBUTION(), distributionInfo.objectType);
369
+ }
370
+
371
+ IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
372
+ Instance instance = Instance(instanceInfo.objectAddress);
373
+ InstanceAccessManager instanceAccessManager = InstanceAccessManager(instance.authority());
374
+
375
+ bytes4[] memory fctSelectors = new bytes4[](1);
376
+ fctSelectors[0] = IDistributionComponent.setFees.selector;
377
+ instanceAccessManager.setTargetFunctionRole(distributionName, fctSelectors, DISTRIBUTION_OWNER_ROLE());
378
+
379
+ bytes4[] memory fctSelectors2 = new bytes4[](2);
380
+ fctSelectors2[0] = IDistributionComponent.processSale.selector;
381
+ fctSelectors2[1] = IDistributionComponent.processRenewal.selector;
382
+ instanceAccessManager.setTargetFunctionRole(distributionName, fctSelectors2, PRODUCT_SERVICE_ROLE());
383
+ }
384
+
385
+ function grantPoolDefaultPermissions(NftId instanceNftId, address poolAddress, string memory poolName) external onlyRegisteredService {
386
+ IRegistry registry = getRegistry();
387
+ IRegistry.ObjectInfo memory poolInfo = registry.getObjectInfo(poolAddress);
388
+
389
+ if (poolInfo.objectType != POOL()) {
390
+ revert ErrorInstanceServiceInvalidComponentType(poolAddress, POOL(), poolInfo.objectType);
391
+ }
392
+
393
+ IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
394
+ Instance instance = Instance(instanceInfo.objectAddress);
395
+ InstanceAccessManager instanceAccessManager = InstanceAccessManager(instance.authority());
396
+
397
+ bytes4[] memory fctSelectors = new bytes4[](1);
398
+ fctSelectors[0] = IPoolComponent.setFees.selector;
399
+ instanceAccessManager.setTargetFunctionRole(poolName, fctSelectors, POOL_OWNER_ROLE());
400
+
401
+ bytes4[] memory fctSelectors2 = new bytes4[](1);
402
+ fctSelectors2[0] = IPoolComponent.verifyApplication.selector;
403
+ instanceAccessManager.setTargetFunctionRole(poolName, fctSelectors2, POLICY_SERVICE_ROLE());
404
+ }
405
+
406
+ function grantProductDefaultPermissions(NftId instanceNftId, address productAddress, string memory productName) external onlyRegisteredService {
407
+ IRegistry registry = getRegistry();
408
+ IRegistry.ObjectInfo memory productInfo = registry.getObjectInfo(productAddress);
409
+
410
+ if (productInfo.objectType != PRODUCT()) {
411
+ revert ErrorInstanceServiceInvalidComponentType(productAddress, PRODUCT(), productInfo.objectType);
412
+ }
413
+
414
+ IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
415
+ Instance instance = Instance(instanceInfo.objectAddress);
416
+ InstanceAccessManager instanceAccessManager = InstanceAccessManager(instance.authority());
417
+
418
+ bytes4[] memory fctSelectors = new bytes4[](1);
419
+ fctSelectors[0] = IProductComponent.setFees.selector;
420
+ instanceAccessManager.setTargetFunctionRole(productName, fctSelectors, PRODUCT_OWNER_ROLE());
341
421
  }
342
422
 
343
423
  function setTargetLocked(string memory targetName, bool locked) external {
@@ -49,6 +49,7 @@ abstract contract ComponentService is Service {
49
49
  RoleId requiredRole
50
50
  )
51
51
  internal
52
+ view
52
53
  returns (
53
54
  IComponent component,
54
55
  address owner,
@@ -60,7 +61,7 @@ abstract contract ComponentService is Service {
60
61
  owner = msg.sender;
61
62
 
62
63
  // check component has not already been registerd
63
- NftId compoentNftId = _registry.getNftId(componentAddress);
64
+ NftId compoentNftId = getRegistry().getNftId(componentAddress);
64
65
  if(compoentNftId.gtz()) {
65
66
  revert ErrorComponentServiceAlreadyRegistered(componentAddress, compoentNftId);
66
67
  }
@@ -72,7 +73,7 @@ abstract contract ComponentService is Service {
72
73
  }
73
74
 
74
75
  // check component is of required type
75
- (IRegistry.ObjectInfo memory componentInfo, ) = component.getInitialInfo();
76
+ IRegistry.ObjectInfo memory componentInfo = component.getInitialInfo();
76
77
  if(componentInfo.objectType != requiredType) {
77
78
  revert ErrorComponentServiceInvalidType(componentAddress, requiredType, componentInfo.objectType);
78
79
  }