@etherisc/gif-next 0.0.2-da0f894-204 → 0.0.2-db1e1e4-828

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 (258) hide show
  1. package/README.md +6 -83
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
  3. package/artifacts/contracts/components/Component.sol/Component.json +68 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +64 -14
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IComponent.sol/IComponent.json +158 -0
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +150 -10
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +184 -149
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +158 -0
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +114 -189
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +68 -0
  18. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  19. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  20. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  21. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +64 -50
  22. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  23. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +5 -0
  24. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  25. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +127 -182
  26. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +175 -51
  28. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  29. package/artifacts/contracts/instance/Instance.sol/Instance.json +215 -252
  30. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  31. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +472 -126
  32. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  33. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +102 -168
  34. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  35. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +304 -171
  36. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +71 -23
  38. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  39. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +8 -13
  40. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +1 -1
  41. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +85 -30
  42. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  43. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  44. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  45. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +40 -10
  46. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  47. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
  48. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  49. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +56 -73
  50. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  51. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  52. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
  53. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  54. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  55. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  56. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  57. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  58. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  59. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +145 -53
  60. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  61. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +21 -13
  62. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
  63. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +384 -249
  64. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  65. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +74 -14
  66. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +1 -1
  67. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +104 -41
  68. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  69. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +11 -7
  70. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  71. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +356 -111
  72. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  73. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +57 -45
  74. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  75. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +101 -14
  76. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
  77. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +212 -186
  78. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +1 -1
  79. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +80 -14
  80. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +250 -18
  82. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  83. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +106 -19
  84. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +511 -14
  86. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +80 -14
  88. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +152 -60
  90. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  91. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +27 -19
  92. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +561 -51
  94. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +24 -12
  96. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +114 -51
  98. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +16 -12
  100. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  101. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
  102. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  103. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +19 -0
  104. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  105. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +0 -24
  106. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  107. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
  108. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  109. package/artifacts/contracts/registry/Registry.sol/Registry.json +31 -12
  110. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
  111. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +2 -2
  112. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  113. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +17 -36
  114. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  115. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +7 -7
  116. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  117. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +23 -11
  118. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  119. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  120. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  121. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  122. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  123. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  124. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  125. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  126. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  127. package/artifacts/contracts/shared/IService.sol/IService.json +80 -14
  128. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  129. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  130. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  131. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  132. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
  133. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  134. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
  135. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  136. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
  137. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  138. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  139. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  140. package/artifacts/contracts/shared/Service.sol/Service.json +86 -15
  141. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  142. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
  143. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  144. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  145. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  146. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  147. package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
  148. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  149. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +2 -2
  150. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  151. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +6 -6
  152. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  153. package/artifacts/contracts/test/TestService.sol/TestService.json +101 -26
  154. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  155. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  156. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  157. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  158. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +2 -2
  159. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  160. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  161. package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +4 -0
  162. package/artifacts/contracts/types/Amount.sol/AmountLib.json +161 -0
  163. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  164. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  165. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  166. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  167. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  168. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  169. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  170. package/artifacts/contracts/types/Fee.sol/FeeLib.json +40 -9
  171. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  172. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  173. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  174. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
  175. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  176. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  177. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  178. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  179. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  180. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  181. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  182. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +23 -4
  183. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  184. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  185. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  187. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +1 -1
  188. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  189. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  190. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  191. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +2 -2
  192. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  193. package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
  194. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  195. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
  196. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  197. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  198. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  199. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  200. package/contracts/components/Component.sol +42 -10
  201. package/contracts/components/Distribution.sol +0 -13
  202. package/contracts/components/IComponent.sol +9 -1
  203. package/contracts/components/IDistributionComponent.sol +0 -8
  204. package/contracts/components/IPoolComponent.sol +5 -43
  205. package/contracts/components/Pool.sol +47 -122
  206. package/contracts/components/Product.sol +4 -0
  207. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
  208. package/contracts/instance/BundleManager.sol +6 -4
  209. package/contracts/instance/Cloneable.sol +7 -2
  210. package/contracts/instance/IInstance.sol +16 -10
  211. package/contracts/instance/IInstanceService.sol +18 -5
  212. package/contracts/instance/Instance.sol +46 -9
  213. package/contracts/instance/InstanceAccessManager.sol +388 -158
  214. package/contracts/instance/InstanceReader.sol +8 -10
  215. package/contracts/instance/InstanceService.sol +184 -179
  216. package/contracts/instance/ObjectManager.sol +6 -8
  217. package/contracts/instance/base/ComponentService.sol +17 -30
  218. package/contracts/instance/base/KeyValueStore.sol +13 -5
  219. package/contracts/instance/base/Lifecycle.sol +11 -2
  220. package/contracts/instance/module/IAccess.sol +21 -14
  221. package/contracts/instance/module/IBundle.sol +6 -4
  222. package/contracts/instance/module/IComponents.sol +41 -0
  223. package/contracts/instance/module/ISetup.sol +4 -17
  224. package/contracts/instance/service/ApplicationService.sol +22 -18
  225. package/contracts/instance/service/BundleService.sol +209 -77
  226. package/contracts/instance/service/ClaimService.sol +3 -3
  227. package/contracts/instance/service/DistributionService.sol +118 -77
  228. package/contracts/instance/service/IApplicationService.sol +1 -0
  229. package/contracts/instance/service/IBundleService.sol +63 -25
  230. package/contracts/instance/service/IDistributionService.sol +14 -1
  231. package/contracts/instance/service/IPolicyService.sol +2 -0
  232. package/contracts/instance/service/IPoolService.sol +82 -3
  233. package/contracts/instance/service/PolicyService.sol +96 -138
  234. package/contracts/instance/service/PoolService.sol +214 -20
  235. package/contracts/instance/service/ProductService.sol +30 -53
  236. package/contracts/registry/ChainNft.sol +8 -0
  237. package/contracts/registry/IRegistry.sol +2 -0
  238. package/contracts/registry/IRegistryService.sol +4 -3
  239. package/contracts/registry/ITransferInterceptor.sol +1 -0
  240. package/contracts/registry/Registry.sol +23 -20
  241. package/contracts/registry/RegistryService.sol +10 -11
  242. package/contracts/registry/ReleaseManager.sol +20 -18
  243. package/contracts/shared/IService.sol +4 -6
  244. package/contracts/shared/Service.sol +21 -7
  245. package/contracts/shared/TokenHandler.sol +11 -5
  246. package/contracts/test/TestService.sol +1 -1
  247. package/contracts/types/Amount.sol +60 -0
  248. package/contracts/types/Blocknumber.sol +1 -0
  249. package/contracts/types/Fee.sol +13 -5
  250. package/contracts/types/NftId.sol +8 -0
  251. package/contracts/types/ObjectType.sol +1 -0
  252. package/contracts/types/Referral.sol +4 -0
  253. package/contracts/types/RoleId.sol +6 -4
  254. package/contracts/types/StateId.sol +1 -0
  255. package/contracts/types/Timestamp.sol +1 -0
  256. package/contracts/types/UFixed.sol +1 -0
  257. package/contracts/types/Version.sol +1 -0
  258. package/package.json +1 -1
@@ -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, PUBLIC_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,
@@ -67,45 +74,65 @@ contract InstanceService is
67
74
  IRegistry registry = getRegistry();
68
75
  address registryAddress = address(registry);
69
76
  NftId registryNftId = registry.getNftId(registryAddress);
70
- address registryServiceAddress = registry.getServiceAddress(REGISTRY(), getMajorVersion());
77
+ address registryServiceAddress = registry.getServiceAddress(REGISTRY(), getVersion().toMajorPart());
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(), getVersion().toMajorPart());
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());
@@ -162,12 +191,12 @@ contract InstanceService is
162
191
 
163
192
  function _grantPoolServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
164
193
  // configure authorization for pool service on instance
165
- address poolServiceAddress = getRegistry().getServiceAddress(POOL(), getMajorVersion());
194
+ address poolServiceAddress = getRegistry().getServiceAddress(POOL(), getVersion().toMajorPart());
166
195
  clonedAccessManager.grantRole(POOL_SERVICE_ROLE(), address(poolServiceAddress));
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());
@@ -175,7 +204,7 @@ contract InstanceService is
175
204
 
176
205
  function _grantProductServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
177
206
  // configure authorization for product service on instance
178
- address productServiceAddress = getRegistry().getServiceAddress(PRODUCT(), getMajorVersion());
207
+ address productServiceAddress = getRegistry().getServiceAddress(PRODUCT(), getVersion().toMajorPart());
179
208
  clonedAccessManager.grantRole(PRODUCT_SERVICE_ROLE(), address(productServiceAddress));
180
209
  bytes4[] memory instanceProductServiceSelectors = new bytes4[](5);
181
210
  instanceProductServiceSelectors[0] = clonedInstance.createProductSetup.selector;
@@ -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());
@@ -191,13 +220,13 @@ contract InstanceService is
191
220
 
192
221
  function _grantApplicationServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
193
222
  // configure authorization for application services on instance
194
- address applicationServiceAddress = getRegistry().getServiceAddress(APPLICATION(), getMajorVersion());
223
+ address applicationServiceAddress = getRegistry().getServiceAddress(APPLICATION(), getVersion().toMajorPart());
195
224
  clonedAccessManager.grantRole(APPLICATION_SERVICE_ROLE(), applicationServiceAddress);
196
225
  bytes4[] memory instanceApplicationServiceSelectors = new bytes4[](3);
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());
@@ -205,12 +234,12 @@ contract InstanceService is
205
234
 
206
235
  function _grantPolicyServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
207
236
  // configure authorization for policy services on instance
208
- address policyServiceAddress = getRegistry().getServiceAddress(POLICY(), getMajorVersion());
237
+ address policyServiceAddress = getRegistry().getServiceAddress(POLICY(), getVersion().toMajorPart());
209
238
  clonedAccessManager.grantRole(POLICY_SERVICE_ROLE(), policyServiceAddress);
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());
@@ -218,13 +247,13 @@ contract InstanceService is
218
247
 
219
248
  function _grantClaimServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
220
249
  // configure authorization for claim/payout services on instance
221
- address claimServiceAddress = getRegistry().getServiceAddress(CLAIM(), getMajorVersion());
250
+ address claimServiceAddress = getRegistry().getServiceAddress(CLAIM(), getVersion().toMajorPart());
222
251
  clonedAccessManager.grantRole(POLICY_SERVICE_ROLE(), claimServiceAddress);
223
252
  // TODO add claims function authz
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());
@@ -232,12 +261,13 @@ contract InstanceService is
232
261
 
233
262
  function _grantBundleServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
234
263
  // configure authorization for bundle service on instance
235
- address bundleServiceAddress = getRegistry().getServiceAddress(BUNDLE(), getMajorVersion());
264
+ address bundleServiceAddress = getRegistry().getServiceAddress(BUNDLE(), getVersion().toMajorPart());
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,64 +279,87 @@ 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
260
- address instanceServiceAddress = getRegistry().getServiceAddress(INSTANCE(), getMajorVersion());
289
+ // configure authorization for instance service on instance
290
+ address instanceServiceAddress = getRegistry().getServiceAddress(INSTANCE(), getVersion().toMajorPart());
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;
308
361
 
309
- IRegistryService registryService = IRegistryService(getRegistry().getServiceAddress(REGISTRY(), getMajorVersion()));
362
+ IRegistryService registryService = IRegistryService(getRegistry().getServiceAddress(REGISTRY(), getVersion().toMajorPart()));
310
363
  IInstance masterInstance = IInstance(_masterInstance);
311
364
  IRegistry.ObjectInfo memory info = registryService.registerInstance(masterInstance, getOwner());
312
365
  masterInstanceNftId = info.nftId;
@@ -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
 
@@ -358,7 +408,7 @@ contract InstanceService is
358
408
  }
359
409
 
360
410
  // From IService
361
- function getDomain() public pure override(Service, IService) returns(ObjectType) {
411
+ function getDomain() public pure override returns(ObjectType) {
362
412
  return INSTANCE();
363
413
  }
364
414
 
@@ -376,115 +426,70 @@ contract InstanceService is
376
426
  (registryAddress, initialOwner) = abi.decode(data, (address, address));
377
427
  // TODO while InstanceService is not deployed in InstanceServiceManager constructor
378
428
  // owner is InstanceServiceManager deployer
379
- initializeService(registryAddress, owner);
429
+ initializeService(registryAddress, address(0), owner);
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 setComponentLocked(bool locked) onlyComponent external {
463
+ address componentAddress = msg.sender;
420
464
  IRegistry registry = getRegistry();
421
- IRegistry.ObjectInfo memory poolInfo = registry.getObjectInfo(poolAddress);
465
+ NftId instanceNftId = registry.getObjectInfo(componentAddress).parentNftId;
422
466
 
423
- if (poolInfo.objectType != POOL()) {
424
- revert ErrorInstanceServiceInvalidComponentType(poolAddress, POOL(), poolInfo.objectType);
425
- }
467
+ IInstance instance = IInstance(
468
+ registry.getObjectInfo(
469
+ instanceNftId).objectAddress);
426
470
 
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());
434
-
435
- bytes4[] memory fctSelectors2 = new bytes4[](1);
436
- fctSelectors2[0] = IPoolComponent.verifyApplication.selector;
437
- instanceAccessManager.setTargetFunctionRole(poolName, fctSelectors2, POLICY_SERVICE_ROLE());
438
-
439
- // bundle owner specific functions
440
- bytes4[] memory fctSelectors3 = new bytes4[](7);
441
- fctSelectors3[0] = IPoolComponent.stake.selector;
442
- fctSelectors3[1] = IPoolComponent.unstake.selector;
443
- fctSelectors3[2] = IPoolComponent.extend.selector;
444
- fctSelectors3[3] = IPoolComponent.lockBundle.selector;
445
- fctSelectors3[4] = IPoolComponent.unlockBundle.selector;
446
- fctSelectors3[5] = IPoolComponent.close.selector;
447
- fctSelectors3[6] = IPoolComponent.setBundleFee.selector;
448
- instanceAccessManager.setTargetFunctionRole(
449
- poolName,
450
- fctSelectors3,
451
- IPoolComponent(poolAddress).getBundleOwnerRole());
471
+ instance.getInstanceAccessManager().setTargetLocked(
472
+ componentAddress,
473
+ locked);
452
474
  }
453
475
 
454
- 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
+ {
455
481
  IRegistry registry = getRegistry();
456
- IRegistry.ObjectInfo memory productInfo = registry.getObjectInfo(productAddress);
457
-
458
- if (productInfo.objectType != PRODUCT()) {
459
- revert ErrorInstanceServiceInvalidComponentType(productAddress, PRODUCT(), productInfo.objectType);
460
- }
461
-
462
482
  IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
463
- Instance instance = Instance(instanceInfo.objectAddress);
464
- InstanceAccessManager instanceAccessManager = InstanceAccessManager(instance.authority());
465
-
466
- bytes4[] memory fctSelectors = new bytes4[](1);
467
- fctSelectors[0] = IProductComponent.setFees.selector;
468
- instanceAccessManager.setTargetFunctionRole(productName, fctSelectors, PRODUCT_OWNER_ROLE());
469
- }
483
+ if(instanceInfo.objectType != INSTANCE()) {
484
+ revert ErrorInstanceServiceNotInstance(instanceNftId);
485
+ }
470
486
 
471
- function setTargetLocked(string memory targetName, bool locked) external {
472
- address componentAddress = msg.sender;
473
- IRegistry registry = getRegistry();
474
487
  IRegistry.ObjectInfo memory componentInfo = registry.getObjectInfo(componentAddress);
475
- if (componentInfo.nftId.eqz()) {
476
- revert ErrorInstanceServiceComponentNotRegistered(componentAddress);
488
+ if(componentInfo.parentNftId != instanceNftId) {
489
+ revert ErrorInstanceServiceInstanceComponentMismatch(instanceNftId, componentInfo.nftId);
477
490
  }
478
491
 
479
- // TODO validate component type
480
-
481
-
482
- address instanceAddress = registry.getObjectInfo(componentInfo.parentNftId).objectAddress;
483
- IInstance instance = IInstance(instanceAddress);
484
-
485
- InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
486
- accessManager.setTargetClosed(targetName, locked);
492
+ instance = Instance(instanceInfo.objectAddress);
493
+ componentNftId = componentInfo.nftId;
487
494
  }
488
-
489
- }
490
-
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) {