@etherisc/gif-next 0.0.2-c96f882-016 → 0.0.2-ca9d515-311

Sign up to get free protection for your applications and to get access to all the features.
Files changed (234) hide show
  1. package/README.md +63 -1
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  3. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +139 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +149 -15
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +101 -0
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +28 -2
  11. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  12. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  13. package/artifacts/contracts/components/Pool.sol/Pool.json +181 -16
  14. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  15. package/artifacts/contracts/components/Product.sol/Product.json +157 -56
  16. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +1 -1
  17. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +1 -1
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  31. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  35. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  36. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  37. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  39. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  40. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  41. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  42. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +788 -0
  43. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  44. package/artifacts/contracts/instance/{AccessManagedSimple.sol/AccessManagedSimple.json → Cloneable.sol/Cloneable.json} +74 -3
  45. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +1 -1
  46. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  47. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1395 -22
  48. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  49. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +448 -0
  50. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  51. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +6 -1
  52. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  53. package/artifacts/contracts/instance/Instance.sol/Instance.json +208 -155
  54. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  55. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +57 -47
  56. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  57. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +763 -0
  58. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  59. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +177 -38
  60. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  61. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +341 -57
  62. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  63. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +135 -15
  64. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  65. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +285 -0
  66. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
  67. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +40 -0
  68. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  69. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  70. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  71. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  72. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +2 -2
  73. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  74. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
  75. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  76. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  77. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  78. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  79. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  80. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  81. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  82. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  83. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +923 -0
  84. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  85. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +440 -0
  86. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +18 -18
  88. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  89. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +684 -0
  90. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  91. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +428 -0
  92. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  93. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +669 -0
  94. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  96. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  97. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +664 -0
  98. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +9 -71
  100. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  101. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +17 -232
  102. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  103. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +984 -0
  104. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  105. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +464 -0
  106. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  107. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +718 -0
  108. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  109. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +428 -0
  110. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  111. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +768 -0
  112. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  113. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +420 -0
  114. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  115. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  116. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +23 -105
  117. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  118. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +94 -19
  119. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  120. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  121. package/artifacts/contracts/registry/Registry.sol/Registry.json +70 -145
  122. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  123. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +61 -29
  124. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  125. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +44 -35
  126. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  127. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +410 -0
  128. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  129. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  130. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  131. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  132. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  133. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  134. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  135. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  136. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  137. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  138. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
  139. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  140. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +4 -4
  141. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +1 -1
  142. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  143. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  144. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  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/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  148. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +4 -4
  149. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  150. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  151. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  152. package/artifacts/contracts/test/TestService.sol/TestService.json +11 -11
  153. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  154. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  155. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  156. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  157. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  158. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  159. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  160. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  161. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  162. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  163. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  164. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  165. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  166. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  167. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  168. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  169. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  170. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  172. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  173. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  174. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  175. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  176. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  177. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  178. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  179. package/contracts/components/BaseComponent.sol +57 -11
  180. package/contracts/components/Distribution.sol +15 -18
  181. package/contracts/components/IBaseComponent.sol +7 -0
  182. package/contracts/components/IDistributionComponent.sol +1 -0
  183. package/contracts/components/IPoolComponent.sol +5 -1
  184. package/contracts/components/Pool.sol +43 -31
  185. package/contracts/components/Product.sol +42 -47
  186. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
  187. package/contracts/instance/BundleManager.sol +129 -0
  188. package/contracts/instance/Cloneable.sol +46 -0
  189. package/contracts/instance/IInstance.sol +39 -7
  190. package/contracts/instance/IInstanceBase.sol +26 -0
  191. package/contracts/instance/IInstanceService.sol +5 -3
  192. package/contracts/instance/Instance.sol +55 -32
  193. package/contracts/instance/InstanceAccessManager.sol +6 -6
  194. package/contracts/instance/InstanceBase.sol +41 -0
  195. package/contracts/instance/InstanceReader.sol +26 -1
  196. package/contracts/instance/InstanceService.sol +156 -33
  197. package/contracts/instance/InstanceServiceManager.sol +6 -5
  198. package/contracts/instance/ObjectManager.sol +101 -0
  199. package/contracts/instance/base/ComponentServiceBase.sol +42 -19
  200. package/contracts/instance/module/IBundle.sol +1 -0
  201. package/contracts/instance/module/ISetup.sol +3 -0
  202. package/contracts/instance/service/BundleService.sol +260 -0
  203. package/contracts/instance/service/BundleServiceManager.sol +54 -0
  204. package/contracts/instance/service/DistributionService.sol +118 -0
  205. package/contracts/instance/service/DistributionServiceManager.sol +54 -0
  206. package/contracts/instance/service/IBundleService.sol +45 -0
  207. package/contracts/instance/service/IPolicyService.sol +87 -0
  208. package/contracts/instance/service/IPoolService.sol +6 -23
  209. package/contracts/instance/service/IProductService.sol +6 -73
  210. package/contracts/instance/service/PolicyService.sol +508 -0
  211. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  212. package/contracts/instance/service/PoolService.sol +124 -0
  213. package/contracts/instance/service/PoolServiceManager.sol +54 -0
  214. package/contracts/instance/service/ProductService.sol +173 -0
  215. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  216. package/contracts/registry/IRegistry.sol +8 -17
  217. package/contracts/registry/IRegistryService.sol +27 -12
  218. package/contracts/registry/Registry.sol +18 -42
  219. package/contracts/registry/RegistryService.sol +30 -116
  220. package/contracts/registry/RegistryServiceManager.sol +21 -5
  221. package/contracts/registry/TokenRegistry.sol +111 -0
  222. package/contracts/shared/ERC165.sol +6 -2
  223. package/contracts/shared/NftOwnable.sol +2 -4
  224. package/contracts/shared/Registerable.sol +1 -0
  225. package/contracts/shared/Service.sol +1 -0
  226. package/contracts/types/NftIdSet.sol +26 -24
  227. package/contracts/types/RoleId.sol +10 -0
  228. package/contracts/types/StateId.sol +4 -0
  229. package/package.json +1 -1
  230. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
  231. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
  232. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1132
  233. package/contracts/instance/AccessManagedSimple.sol +0 -122
  234. package/contracts/instance/AccessManagerSimple.sol +0 -692
@@ -0,0 +1,54 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IVersionable} from "../../shared/IVersionable.sol";
5
+ import {ProxyManager} from "../../shared/ProxyManager.sol";
6
+ import {PoolService} from "./PoolService.sol";
7
+ import {Registry} from "../../registry/Registry.sol";
8
+ import {RegistryService} from "../../registry/RegistryService.sol";
9
+ import {VersionLib} from "../../types/Version.sol";
10
+
11
+ contract PoolServiceManager is ProxyManager {
12
+
13
+ PoolService private _poolService;
14
+
15
+ /// @dev initializes proxy manager with pool service implementation
16
+ constructor(
17
+ address registryAddress
18
+ )
19
+ ProxyManager()
20
+ {
21
+ PoolService poolSrv = new PoolService();
22
+ bytes memory data = abi.encode(registryAddress, address(this));
23
+ IVersionable versionable = deploy(
24
+ address(poolSrv),
25
+ data);
26
+
27
+ _poolService = PoolService(address(versionable));
28
+
29
+ Registry registry = Registry(registryAddress);
30
+ address registryServiceAddress = registry.getServiceAddress("RegistryService", VersionLib.toVersion(3, 0, 0).toMajorPart());
31
+ RegistryService registryService = RegistryService(registryServiceAddress);
32
+ // TODO this must have a role or own nft to register service
33
+ //registryService.registerService(_poolService);
34
+
35
+ // TODO no nft to link yet
36
+ // link ownership of instance service manager ot nft owner of instance service
37
+ //_linkToNftOwnable(
38
+ // address(registryAddress),
39
+ // address(_poolService));
40
+
41
+ // implies that after this constructor call only upgrade functionality is available
42
+ _isDeployed = true;
43
+ }
44
+
45
+ //--- view functions ----------------------------------------------------//
46
+ function getPoolService()
47
+ external
48
+ view
49
+ returns (PoolService poolService)
50
+ {
51
+ return _poolService;
52
+ }
53
+
54
+ }
@@ -0,0 +1,173 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRegistry} from "../../registry/IRegistry.sol";
5
+ import {IProductComponent} from "../../components/IProductComponent.sol";
6
+ import {Product} from "../../components/Product.sol";
7
+ import {IBaseComponent} from "../../components/IBaseComponent.sol";
8
+ import {IPoolComponent} from "../../components/IPoolComponent.sol";
9
+ import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
10
+ import {IInstance} from "../IInstance.sol";
11
+ import {IPolicy} from "../module/IPolicy.sol";
12
+ import {IRisk} from "../module/IRisk.sol";
13
+ import {IBundle} from "../module/IBundle.sol";
14
+ import {IProductService} from "./IProductService.sol";
15
+ import {ITreasury} from "../module/ITreasury.sol";
16
+ import {ISetup} from "../module/ISetup.sol";
17
+
18
+ import {TokenHandler} from "../../shared/TokenHandler.sol";
19
+
20
+ import {IVersionable} from "../../shared/IVersionable.sol";
21
+ import {Versionable} from "../../shared/Versionable.sol";
22
+
23
+ import {Timestamp, zeroTimestamp} from "../../types/Timestamp.sol";
24
+ import {UFixed, UFixedLib} from "../../types/UFixed.sol";
25
+ import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
26
+ import {ObjectType, INSTANCE, PRODUCT, POLICY} from "../../types/ObjectType.sol";
27
+ import {APPLIED, UNDERWRITTEN, ACTIVE, KEEP_STATE} from "../../types/StateId.sol";
28
+ import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
29
+ import {Fee, FeeLib} from "../../types/Fee.sol";
30
+ import {ReferralId} from "../../types/Referral.sol";
31
+ import {RiskId} from "../../types/RiskId.sol";
32
+ import {StateId} from "../../types/StateId.sol";
33
+ import {Version, VersionLib} from "../../types/Version.sol";
34
+ import {RoleId, PRODUCT_OWNER_ROLE} from "../../types/RoleId.sol";
35
+
36
+ import {IService} from "../../shared/IService.sol";
37
+ import {Service} from "../../shared/Service.sol";
38
+ import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
39
+ import {IProductService} from "./IProductService.sol";
40
+ import {InstanceReader} from "../InstanceReader.sol";
41
+ import {IPoolService} from "./PoolService.sol";
42
+ import {POOL_SERVICE_NAME} from "./PoolService.sol";
43
+
44
+ string constant PRODUCT_SERVICE_NAME = "ProductService";
45
+
46
+ // TODO or name this ProtectionService to have Product be something more generic (loan, savings account, ...)
47
+ contract ProductService is ComponentServiceBase, IProductService {
48
+ using NftIdLib for NftId;
49
+
50
+ string public constant NAME = "ProductService";
51
+
52
+ IPoolService internal _poolService;
53
+
54
+ event LogProductServiceSender(address sender);
55
+
56
+ function _initialize(
57
+ address owner,
58
+ bytes memory data
59
+ )
60
+ internal
61
+ initializer
62
+ virtual override
63
+ {
64
+ address registryAddress;
65
+ address initialOwner;
66
+ (registryAddress, initialOwner) = abi.decode(data, (address, address));
67
+
68
+ _initializeService(registryAddress, owner);
69
+
70
+ _poolService = IPoolService(_registry.getServiceAddress(POOL_SERVICE_NAME, getMajorVersion()));
71
+
72
+ _registerInterface(type(IProductService).interfaceId);
73
+ }
74
+
75
+
76
+ function getName() public pure override(IService, Service) returns(string memory name) {
77
+ return NAME;
78
+ }
79
+
80
+ function register(address productAddress)
81
+ external
82
+ returns(NftId productNftId)
83
+ {
84
+ address productOwner = msg.sender;
85
+ IBaseComponent product = IBaseComponent(productAddress);
86
+
87
+ IRegistry.ObjectInfo memory info;
88
+ bytes memory data;
89
+ (info, data) = getRegistryService().registerProduct(product, productOwner);
90
+
91
+ IInstance instance = _getInstance(info);
92
+ bool hasRole = getInstanceService().hasRole(
93
+ productOwner,
94
+ PRODUCT_OWNER_ROLE(),
95
+ address(instance));
96
+
97
+ if(!hasRole) {
98
+ revert ExpectedRoleMissing(PRODUCT_OWNER_ROLE(), productOwner);
99
+ }
100
+
101
+ productNftId = info.nftId;
102
+ ISetup.ProductSetupInfo memory initialSetup = _decodeAndVerifyProductSetup(data);
103
+ instance.createProductSetup(productNftId, initialSetup);
104
+ }
105
+
106
+ function _decodeAndVerifyProductSetup(bytes memory data) internal returns(ISetup.ProductSetupInfo memory setup)
107
+ {
108
+ setup = abi.decode(
109
+ data,
110
+ (ISetup.ProductSetupInfo)
111
+ );
112
+
113
+ // TODO add checks if applicable
114
+ }
115
+
116
+ function setFees(
117
+ Fee memory productFee,
118
+ Fee memory processingFee
119
+ )
120
+ external
121
+ {
122
+ // TODO check args
123
+
124
+ (
125
+ IRegistry.ObjectInfo memory productInfo,
126
+ IInstance instance
127
+ ) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
128
+
129
+ InstanceReader instanceReader = instance.getInstanceReader();
130
+ NftId productNftId = productInfo.nftId;
131
+ ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
132
+
133
+ productSetupInfo.productFee = productFee;
134
+ productSetupInfo.processingFee = processingFee;
135
+
136
+ instance.updateProductSetup(productNftId, productSetupInfo, KEEP_STATE());
137
+ }
138
+
139
+ function createRisk(
140
+ RiskId riskId,
141
+ bytes memory data
142
+ ) external override {
143
+ (
144
+ IRegistry.ObjectInfo memory productInfo,
145
+ IInstance instance
146
+ ) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
147
+ NftId productNftId = productInfo.nftId;
148
+ IRisk.RiskInfo memory riskInfo = IRisk.RiskInfo(productNftId, data);
149
+ instance.createRisk(
150
+ riskId,
151
+ riskInfo
152
+ );
153
+ }
154
+
155
+ function updateRisk(
156
+ RiskId riskId,
157
+ bytes memory data
158
+ ) external {
159
+ (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
160
+ InstanceReader instanceReader = instance.getInstanceReader();
161
+ IRisk.RiskInfo memory riskInfo = instanceReader.getRiskInfo(riskId);
162
+ riskInfo.data = data;
163
+ instance.updateRisk(riskId, riskInfo, KEEP_STATE());
164
+ }
165
+
166
+ function updateRiskState(
167
+ RiskId riskId,
168
+ StateId state
169
+ ) external {
170
+ (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
171
+ instance.updateRiskState(riskId, state);
172
+ }
173
+ }
@@ -0,0 +1,54 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IVersionable} from "../../shared/IVersionable.sol";
5
+ import {ProxyManager} from "../../shared/ProxyManager.sol";
6
+ import {ProductService} from "./ProductService.sol";
7
+ import {Registry} from "../../registry/Registry.sol";
8
+ import {RegistryService} from "../../registry/RegistryService.sol";
9
+ import {VersionLib} from "../../types/Version.sol";
10
+
11
+ contract ProductServiceManager is ProxyManager {
12
+
13
+ ProductService private _productService;
14
+
15
+ /// @dev initializes proxy manager with product service implementation
16
+ constructor(
17
+ address registryAddress
18
+ )
19
+ ProxyManager()
20
+ {
21
+ ProductService svc = new ProductService();
22
+ bytes memory data = abi.encode(registryAddress, address(this));
23
+ IVersionable versionable = deploy(
24
+ address(svc),
25
+ data);
26
+
27
+ _productService = ProductService(address(versionable));
28
+
29
+ // Registry registry = Registry(registryAddress);
30
+ // address registryServiceAddress = registry.getServiceAddress("RegistryService", VersionLib.toVersion(3, 0, 0).toMajorPart());
31
+ // RegistryService registryService = RegistryService(registryServiceAddress);
32
+ // TODO this must have a role or own nft to register service
33
+ //registryService.registerService(_productService);
34
+
35
+ // TODO no nft to link yet
36
+ // link ownership of instance service manager ot nft owner of instance service
37
+ //_linkToNftOwnable(
38
+ // address(registryAddress),
39
+ // address(_productService));
40
+
41
+ // implies that after this constructor call only upgrade functionality is available
42
+ _isDeployed = true;
43
+ }
44
+
45
+ //--- view functions ----------------------------------------------------//
46
+ function getProductService()
47
+ external
48
+ view
49
+ returns (ProductService productService)
50
+ {
51
+ return _productService;
52
+ }
53
+
54
+ }
@@ -13,30 +13,19 @@ interface IRegistry is IERC165 {
13
13
  event LogInitialMajorVersionSet(VersionPart majorVersion);
14
14
  event LogMajorVersionSet(VersionPart majorVersionMax);
15
15
  event LogRegistration(ObjectInfo info);
16
- event LogTokenStateSet(address token, VersionPart majorVersion, bool active);
17
16
  event LogServiceNameRegistration(string serviceName, VersionPart majorVersion);
18
17
 
19
- // supported versions
18
+ // setMajorVersion()
19
+ error NotOwner(address account);
20
20
  error MajorVersionMaxIncreaseInvalid(VersionPart newMajorVersionMax, VersionPart existingMaxMajorVersion);
21
21
 
22
- // token whitelisting
23
- error TokenNotRegistered(address token);
24
- error NotToken(address token);
25
- error TokenMajorVersionInvalid(VersionPart majorVersion);
26
-
27
- // register
22
+ // register()
28
23
  error NotRegistryService();
29
24
  error ZeroParentAddress();
25
+ error InvalidTypesCombination(ObjectType objectType, ObjectType parentType);
30
26
  error ContractAlreadyRegistered(address objectAddress);
31
27
  error InvalidServiceVersion(VersionPart majorVersion);
32
28
  error ServiceNameAlreadyRegistered(string name, VersionPart majorVersion);
33
-
34
- // approve
35
- error NotOwner(address account);
36
- error NotRegisteredContract(NftId registrarNftId);
37
- error NotService(NftId registrarNftId);
38
- error InvalidTypesCombination(ObjectType objectType, ObjectType parentType);
39
-
40
29
 
41
30
  struct ObjectInfo {
42
31
  NftId nftId;
@@ -53,7 +42,9 @@ interface IRegistry is IERC165 {
53
42
 
54
43
  function register(ObjectInfo memory info) external returns (NftId nftId);
55
44
 
56
- function setTokenActive(address token, VersionPart majorVersion, bool active) external;
45
+ function getMajorVersionMin() external view returns (VersionPart);
46
+
47
+ function getMajorVersionMax() external view returns (VersionPart);
57
48
 
58
49
  function getMajorVersion() external view returns (VersionPart);
59
50
 
@@ -75,7 +66,7 @@ interface IRegistry is IERC165 {
75
66
 
76
67
  function isRegistered(address contractAddress) external view returns (bool);
77
68
 
78
- function isTokenActive(address token, VersionPart majorVersion) external view returns (bool);
69
+ function isRegisteredService(address contractAddress) external view returns (bool);
79
70
 
80
71
  function getServiceName(NftId nftId) external view returns (string memory name);
81
72
 
@@ -12,24 +12,39 @@ import {IBaseComponent} from "../components/IBaseComponent.sol";
12
12
 
13
13
  interface IRegistryService is IService {
14
14
 
15
- function registerToken(address tokenAddress) external returns(NftId nftId);
15
+ error SelfRegistration();
16
+ error NotRegistryOwner();
16
17
 
17
- function registerService(IService service) external returns(IRegistry.ObjectInfo memory info, bytes memory data);
18
+ error NotService();
19
+ error NotInstance();
20
+ error NotProduct();
21
+ error NotPool();
22
+ error NotDistribution();
18
23
 
19
- function registerInstance(IRegisterable instance)
20
- external returns(IRegistry.ObjectInfo memory info, bytes memory data);
24
+ error UnexpectedRegisterableType(ObjectType expected, ObjectType found);
25
+ error NotRegisterableOwner(address expectedOwner);
26
+ error RegisterableOwnerIsZero();
27
+ error RegisterableOwnerIsRegistered();
28
+ error InvalidInitialOwner(address initialOwner);
29
+ error InvalidAddress(address registerableAddress);
21
30
 
22
- function registerProduct(IBaseComponent product, address owner)
23
- external returns(IRegistry.ObjectInfo memory info, bytes memory data);
24
31
 
25
- function registerPool(IBaseComponent pool, address owner)
26
- external returns(IRegistry.ObjectInfo memory info, bytes memory data);
32
+ function registerService(IService service) external returns(IRegistry.ObjectInfo memory info, bytes memory data);
27
33
 
28
- function registerDistribution(IBaseComponent distribution, address owner)
29
- external returns(IRegistry.ObjectInfo memory info, bytes memory data);
34
+ function registerInstance(IRegisterable instance)
35
+ external returns(IRegistry.ObjectInfo memory info, bytes memory data);
30
36
 
31
- function registerPolicy(IRegistry.ObjectInfo memory info) external returns(NftId nftId); // -> easy to upgrade
37
+ function registerProduct(IBaseComponent product, address owner)
38
+ external returns(IRegistry.ObjectInfo memory info, bytes memory data);
32
39
 
33
- function registerBundle(IRegistry.ObjectInfo memory info) external returns(NftId nftId);
40
+ function registerPool(IBaseComponent pool, address owner)
41
+ external returns(IRegistry.ObjectInfo memory info, bytes memory data);
42
+
43
+ function registerDistribution(IBaseComponent distribution, address owner)
44
+ external returns(IRegistry.ObjectInfo memory info, bytes memory data);
45
+
46
+ function registerPolicy(IRegistry.ObjectInfo memory info) external returns(NftId nftId); // -> easy to upgrade
47
+
48
+ function registerBundle(IRegistry.ObjectInfo memory info) external returns(NftId nftId);
34
49
  }
35
50
 
@@ -30,6 +30,7 @@ contract Registry is
30
30
  {
31
31
  uint256 public constant GIF_MAJOR_VERSION_AT_DEPLOYMENT = 3;
32
32
  address public constant NFT_LOCK_ADDRESS = address(0x1);
33
+ uint256 public constant REGISTRY_TOKEN_SEQUENCE_ID = 2;
33
34
  uint256 public constant REGISTRY_SERVICE_TOKEN_SEQUENCE_ID = 3;
34
35
  string public constant EMPTY_URI = "";
35
36
 
@@ -38,18 +39,12 @@ contract Registry is
38
39
  mapping(NftId nftId => ObjectInfo info) internal _info;
39
40
  mapping(address object => NftId nftId) internal _nftIdByAddress;
40
41
 
41
- mapping(NftId registrator => mapping(
42
- ObjectType objectType => bool)) internal _isApproved;
43
-
44
42
  mapping(ObjectType objectType => mapping(
45
43
  ObjectType parentType => bool)) internal _isValidContractCombination;
46
44
 
47
45
  mapping(ObjectType objectType => mapping(
48
46
  ObjectType parentType => bool)) internal _isValidObjectCombination;
49
47
 
50
- mapping(address token => mapping(
51
- VersionPart majorVersion => bool isActive)) internal _tokenIsActive;
52
-
53
48
  mapping(NftId nftId => string name) internal _string;
54
49
  mapping(bytes32 serviceNameHash => mapping(
55
50
  VersionPart majorVersion => address service)) internal _service;
@@ -67,7 +62,6 @@ contract Registry is
67
62
  }
68
63
 
69
64
  modifier onlyRegistryService() {
70
-
71
65
  if(msg.sender != _info[_serviceNftId].objectAddress) {
72
66
  revert NotRegistryService();
73
67
  }
@@ -181,39 +175,23 @@ contract Registry is
181
175
 
182
176
  emit LogRegistration(info);
183
177
  }
178
+ /// @dev earliest GIF major version
179
+ function getMajorVersionMin() external view returns (VersionPart) {
180
+ return VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT);
181
+ }
184
182
 
185
- /// @dev token state is informative, registry have no clue about used tokens
186
- // component owner is responsible for token selection and operations
187
- // service MUST deny registration of component with inactive token
188
- function setTokenActive(address token, VersionPart majorVersion, bool active)
189
- external
190
- onlyOwner
191
- {
192
- // verify that token is registered
193
- ObjectInfo memory info = _info[_nftIdByAddress[token]];
194
- if (info.nftId.eqz()) {
195
- revert TokenNotRegistered(token);
196
- }
197
-
198
- // verify provided address is a registered token
199
- if (info.objectType != TOKEN()) {
200
- revert NotToken(token);
201
- }
202
-
203
- // verify valid major version
204
- // ensure major version increments is one
205
- uint256 version = majorVersion.toInt();
206
- uint256 versionNow = _majorVersion.toInt();
207
- if (version < GIF_MAJOR_VERSION_AT_DEPLOYMENT || version > versionNow) {
208
- revert TokenMajorVersionInvalid(majorVersion);
209
- }
210
-
211
- _tokenIsActive[token][majorVersion] = active;
212
-
213
- emit LogTokenStateSet(token, majorVersion, active);
183
+ // TODO make distinction between active an not yet active version
184
+ // need to be thought trough, not yet clear if necessary
185
+ // need to answer question: what is the latest version during the upgrade process?
186
+ // likely setting up a new gif version does not fit into a single tx
187
+ // in this case we might want to have a period where the latest version is
188
+ // in the process of being set up while the latest active version is 1 major release smaller
189
+ /// @dev latest GIF major version (might not yet be active)
190
+ function getMajorVersionMax() external view returns (VersionPart) {
191
+ return _majorVersion;
214
192
  }
215
193
 
216
- /// @dev latest GIF release version
194
+ /// @dev latest active GIF release version
217
195
  function getMajorVersion() external view returns (VersionPart) {
218
196
  return _majorVersion;
219
197
  }
@@ -235,7 +213,6 @@ contract Registry is
235
213
  }
236
214
 
237
215
  function ownerOf(address contractAddress) public view returns (address) {
238
-
239
216
  return _chainNft.ownerOf(_nftIdByAddress[contractAddress].toInt());
240
217
  }
241
218
 
@@ -244,7 +221,6 @@ contract Registry is
244
221
  }
245
222
 
246
223
  function getObjectInfo(address object) external view override returns (ObjectInfo memory) {
247
-
248
224
  return _info[_nftIdByAddress[object]];
249
225
  }
250
226
 
@@ -256,8 +232,8 @@ contract Registry is
256
232
  return _nftIdByAddress[object].gtz();
257
233
  }
258
234
 
259
- function isTokenActive(address token, VersionPart majorVersion) external view returns (bool) {
260
- return _tokenIsActive[token][majorVersion];
235
+ function isRegisteredService(address object) external view override returns (bool) {
236
+ return _nftIdByAddress[object].gtz() && _info[_nftIdByAddress[object]].objectType == SERVICE();
261
237
  }
262
238
 
263
239
  function getServiceName(NftId nftId) external view returns (string memory) {
@@ -361,7 +337,7 @@ contract Registry is
361
337
  function _registerRegistry(address registryOwner)
362
338
  internal
363
339
  {
364
- uint256 registryId = _chainNft.calculateTokenId(2);
340
+ uint256 registryId = _chainNft.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID);
365
341
  NftId registryNftId = toNftId(registryId);
366
342
 
367
343
  NftId parentNftId;