@etherisc/gif-next 0.0.2-e922e07-736 → 0.0.2-e94f4c7-084

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