@etherisc/gif-next 0.0.2-bf75dbb-287 → 0.0.2-c2a8d66-341

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 (246) hide show
  1. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  2. package/artifacts/contracts/components/{IBaseComponent.sol/IBaseComponent.json → Component.sol/Component.json} +300 -12
  3. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.json +199 -94
  5. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  6. package/artifacts/contracts/components/{BaseComponent.sol/BaseComponent.json → IComponent.sol/IComponent.json} +86 -84
  7. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +496 -0
  9. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +512 -74
  11. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +596 -5
  13. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  14. package/artifacts/contracts/components/Pool.sol/Pool.json +180 -205
  15. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  16. package/artifacts/contracts/components/Product.sol/Product.json +204 -110
  17. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +1 -1
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  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/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  36. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  37. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  38. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +38 -62
  39. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  40. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  41. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +284 -2
  42. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  43. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +115 -19
  44. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  45. package/artifacts/contracts/instance/Instance.sol/Instance.json +117 -601
  46. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  47. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +416 -186
  48. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  49. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +41 -82
  50. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  51. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +253 -226
  52. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  53. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +38 -97
  54. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  55. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +8 -32
  56. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  57. package/artifacts/contracts/instance/base/{ComponentServiceBase.sol/ComponentServiceBase.json → ComponentService.sol/ComponentService.json} +124 -61
  58. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  59. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  60. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  61. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  62. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  63. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +65 -44
  64. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  65. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  66. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  67. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  68. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  69. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  70. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  71. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1102 -0
  72. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  73. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +449 -0
  74. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  75. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +149 -93
  76. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  77. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +29 -36
  78. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  79. package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IBundleService.sol/IBundleService.json} +295 -46
  80. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +13 -18
  82. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  83. package/artifacts/contracts/{shared/RegisterableUpgradable.sol/RegisterableUpgradable.json → instance/service/IPolicyService.sol/IPolicyService.json} +372 -48
  84. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +12 -246
  86. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +17 -246
  88. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  89. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1227 -0
  90. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  91. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +505 -0
  92. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +126 -369
  94. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +29 -56
  96. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +137 -428
  98. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +29 -80
  100. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  101. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  102. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  103. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +231 -133
  104. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  105. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +127 -93
  106. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  107. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  108. package/artifacts/contracts/registry/Registry.sol/Registry.json +243 -234
  109. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  110. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  111. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  112. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +68 -161
  113. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  114. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +51 -104
  115. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  116. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
  117. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  118. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +13 -29
  119. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  120. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  121. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  122. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  123. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +0 -5
  124. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  125. package/artifacts/contracts/shared/IService.sol/IService.json +13 -18
  126. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  127. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  128. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +19 -6
  129. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  130. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +19 -6
  131. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  132. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +19 -11
  133. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  134. package/artifacts/contracts/shared/Service.sol/Service.json +26 -18
  135. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  136. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  137. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  138. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  139. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  140. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +19 -11
  141. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  142. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +6 -6
  143. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  144. package/artifacts/contracts/test/TestService.sol/TestService.json +44 -36
  145. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  146. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  147. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  148. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  149. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  150. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  151. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  152. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  153. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  154. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  155. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  156. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  157. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  158. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  159. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  160. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  161. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  162. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  163. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  164. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  165. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  166. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  167. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  168. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  169. package/contracts/components/Component.sol +216 -0
  170. package/contracts/components/Distribution.sol +41 -51
  171. package/contracts/components/IComponent.sol +43 -0
  172. package/contracts/components/IDistributionComponent.sol +5 -2
  173. package/contracts/components/IPoolComponent.sol +6 -21
  174. package/contracts/components/IProductComponent.sol +7 -3
  175. package/contracts/components/Pool.sol +50 -109
  176. package/contracts/components/Product.sol +66 -89
  177. package/contracts/instance/BundleManager.sol +7 -11
  178. package/contracts/instance/IInstance.sol +25 -9
  179. package/contracts/instance/IInstanceService.sol +12 -4
  180. package/contracts/instance/Instance.sol +45 -230
  181. package/contracts/instance/InstanceAccessManager.sol +333 -166
  182. package/contracts/instance/InstanceReader.sol +3 -25
  183. package/contracts/instance/InstanceService.sol +352 -143
  184. package/contracts/instance/InstanceServiceManager.sol +5 -8
  185. package/contracts/instance/ObjectManager.sol +7 -24
  186. package/contracts/instance/base/ComponentService.sol +134 -0
  187. package/contracts/instance/module/IAccess.sol +36 -20
  188. package/contracts/instance/service/BundleService.sol +293 -0
  189. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  190. package/contracts/instance/service/DistributionService.sol +43 -25
  191. package/contracts/instance/service/DistributionServiceManager.sol +6 -9
  192. package/contracts/instance/service/IBundleService.sol +44 -0
  193. package/contracts/instance/service/IPolicyService.sol +94 -0
  194. package/contracts/instance/service/IPoolService.sol +2 -33
  195. package/contracts/instance/service/IProductService.sol +2 -72
  196. package/contracts/instance/service/PolicyService.sol +538 -0
  197. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  198. package/contracts/instance/service/PoolService.sol +33 -210
  199. package/contracts/instance/service/PoolServiceManager.sol +5 -8
  200. package/contracts/instance/service/ProductService.sol +122 -459
  201. package/contracts/registry/ChainNft.sol +1 -1
  202. package/contracts/registry/IRegistry.sol +36 -17
  203. package/contracts/registry/IRegistryService.sol +28 -13
  204. package/contracts/registry/Registry.sol +227 -218
  205. package/contracts/registry/RegistryAccessManager.sol +216 -0
  206. package/contracts/registry/RegistryService.sol +61 -157
  207. package/contracts/registry/RegistryServiceManager.sol +18 -36
  208. package/contracts/registry/ReleaseManager.sol +332 -0
  209. package/contracts/registry/TokenRegistry.sol +8 -7
  210. package/contracts/shared/IRegisterable.sol +1 -3
  211. package/contracts/shared/IService.sol +2 -1
  212. package/contracts/shared/NftOwnable.sol +5 -0
  213. package/contracts/shared/ProxyManager.sol +1 -1
  214. package/contracts/shared/Registerable.sol +10 -14
  215. package/contracts/shared/Service.sol +13 -8
  216. package/contracts/test/TestService.sol +3 -2
  217. package/contracts/types/RoleId.sol +18 -15
  218. package/package.json +3 -3
  219. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  220. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  221. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
  222. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +0 -1206
  223. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  224. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  225. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  226. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +0 -448
  227. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  228. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +0 -763
  229. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  230. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  231. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  232. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  233. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  234. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  235. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  236. package/contracts/components/BaseComponent.sol +0 -132
  237. package/contracts/components/IBaseComponent.sol +0 -31
  238. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +0 -23
  239. package/contracts/instance/IAccessManagerSimple.sol +0 -391
  240. package/contracts/instance/IInstanceBase.sol +0 -26
  241. package/contracts/instance/InstanceBase.sol +0 -41
  242. package/contracts/instance/base/ComponentServiceBase.sol +0 -134
  243. package/contracts/instance/base/IInstanceBase.sol +0 -23
  244. package/contracts/instance/service/ComponentOwnerService.sol +0 -317
  245. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  246. package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -7,7 +7,7 @@ import {ProxyManager} from "../shared/ProxyManager.sol";
7
7
  import {InstanceService} from "./InstanceService.sol";
8
8
  import {Registry} from "../registry/Registry.sol";
9
9
  import {RegistryService} from "../registry/RegistryService.sol";
10
- import {VersionLib} from "../types/Version.sol";
10
+ import {REGISTRY} from "../types/ObjectType.sol";
11
11
 
12
12
  contract InstanceServiceManager is ProxyManager {
13
13
 
@@ -28,10 +28,10 @@ contract InstanceServiceManager is ProxyManager {
28
28
 
29
29
  _instanceService = InstanceService(address(versionable));
30
30
 
31
- Registry registry = Registry(registryAddress);
32
- address registryServiceAddress = registry.getServiceAddress("RegistryService", VersionLib.toVersion(3, 0, 0).toMajorPart());
33
- RegistryService registryService = RegistryService(registryServiceAddress);
34
- // TODO this must have a role or own nft to register service
31
+ // TODO `this` must have a role or own nft to register service
32
+ //Registry registry = Registry(registryAddress);
33
+ //address registryServiceAddress = registry.getServiceAddress(REGISTRY(), _instanceService.getMajorVersion());
34
+ //RegistryService registryService = RegistryService(registryServiceAddress);
35
35
  //registryService.registerService(_instanceService);
36
36
  // RegistryService registryService = _instanceService.getRegistryService();
37
37
 
@@ -40,9 +40,6 @@ contract InstanceServiceManager is ProxyManager {
40
40
  //_linkToNftOwnable(
41
41
  // address(registryAddress),
42
42
  // address(_instanceService));
43
-
44
- // implies that after this constructor call only upgrade functionality is available
45
- _isDeployed = true;
46
43
  }
47
44
 
48
45
  //--- view functions ----------------------------------------------------//
@@ -14,49 +14,32 @@ contract ObjectManager is
14
14
  Cloneable
15
15
  {
16
16
 
17
- event LogObjectManagerInitialized(NftId instanceNftId, address instanceReader);
17
+ event LogObjectManagerInitialized(address instance);
18
18
 
19
19
  error ErrorObjectManagerNftIdInvalid(NftId instanceNftId);
20
20
  error ErrorObjectManagerAlreadyAdded(NftId componentNftId, NftId objectNftId);
21
21
 
22
22
  mapping(NftId compnentNftId => LibNftIdSet.Set objects) internal _activeObjects;
23
23
  mapping(NftId compnentNftId => LibNftIdSet.Set objects) internal _allObjects;
24
- NftId internal _instanceNftId;
25
- InstanceReader internal _instanceReader;
26
-
27
- constructor() Cloneable() {
28
- _instanceReader = InstanceReader(address(0));
29
- }
24
+ IInstance internal _instance; // store instance address -> more flexible, instance may not be registered during ObjectManager initialization
30
25
 
31
26
  /// @dev call to initialize MUST be made in the same transaction as cloning of the contract
32
27
  function initialize(
33
28
  address authority,
34
29
  address registry,
35
- NftId instanceNftId
30
+ address instance
36
31
  )
37
32
  external
38
33
  {
39
34
  initialize(authority, registry);
40
35
 
41
- // check/handle instance nft id/instance reader
42
- IRegistry.ObjectInfo memory instanceInfo = _registry.getObjectInfo(instanceNftId);
43
- if (instanceInfo.objectType != INSTANCE()) {
44
- revert ErrorObjectManagerNftIdInvalid(instanceNftId);
45
- }
46
-
47
- IInstance instance = IInstance(instanceInfo.objectAddress);
48
- _instanceReader = instance.getInstanceReader();
49
- _instanceNftId = instanceNftId;
36
+ _instance = IInstance(instance);
50
37
 
51
- emit LogObjectManagerInitialized(instanceNftId, address(_instanceReader));
52
- }
53
-
54
- function getInstanceReader() external view returns (InstanceReader) {
55
- return _instanceReader;
38
+ emit LogObjectManagerInitialized(instance);
56
39
  }
57
40
 
58
- function getInstanceNftId() external view returns (NftId) {
59
- return _instanceNftId;
41
+ function getInstance() external view returns (IInstance) {
42
+ return _instance;
60
43
  }
61
44
 
62
45
  function _add(NftId componentNftId, NftId objectNftId) internal {
@@ -0,0 +1,134 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IComponent} from "../../components/IComponent.sol";
5
+ import {IRegistry} from "../../registry/IRegistry.sol";
6
+ import {IRegistryService} from "../../registry/IRegistryService.sol";
7
+ import {IInstance} from "../../instance/IInstance.sol";
8
+ import {IAccess} from "../module/IAccess.sol";
9
+ import {ObjectType, INSTANCE, REGISTRY} from "../../types/ObjectType.sol";
10
+ import {NftId} from "../../types/NftId.sol";
11
+ import {RoleId} from "../../types/RoleId.sol";
12
+
13
+ import {Service} from "../../shared/Service.sol";
14
+ import {InstanceService} from "../InstanceService.sol";
15
+ import {InstanceAccessManager} from "../InstanceAccessManager.sol";
16
+
17
+ abstract contract ComponentService is Service {
18
+
19
+ error ErrorComponentServiceAlreadyRegistered(address component, NftId nftId);
20
+ error ErrorComponentServiceNotComponent(address component);
21
+ error ErrorComponentServiceInvalidType(address component, ObjectType requiredType, ObjectType componentType);
22
+ error ErrorComponentServiceSenderNotOwner(address component, address initialOwner, address sender);
23
+ error ErrorComponentServiceExpectedRoleMissing(NftId instanceNftId, RoleId requiredRole, address sender);
24
+ error ErrorComponentServiceComponentLocked(address component);
25
+
26
+ /// @dev modifier to check if caller is a registered service
27
+ modifier onlyService() {
28
+ address caller = msg.sender;
29
+ require(getRegistry().isRegisteredService(caller), "ERROR_NOT_SERVICE");
30
+ _;
31
+ }
32
+
33
+ // view functions
34
+
35
+ function getRegistryService() public view virtual returns (IRegistryService) {
36
+ address service = getRegistry().getServiceAddress(REGISTRY(), getMajorVersion());
37
+ return IRegistryService(service);
38
+ }
39
+
40
+ function getInstanceService() public view returns (InstanceService) {
41
+ address service = getRegistry().getServiceAddress(INSTANCE(), getMajorVersion());
42
+ return InstanceService(service);
43
+ }
44
+
45
+ // internal functions
46
+ function _checkComponentForRegistration(
47
+ address componentAddress,
48
+ ObjectType requiredType,
49
+ RoleId requiredRole
50
+ )
51
+ internal
52
+ view
53
+ returns (
54
+ IComponent component,
55
+ address owner,
56
+ IInstance instance,
57
+ NftId instanceNftId
58
+ )
59
+ {
60
+ // component may only be registerd by initial owner of component
61
+ owner = msg.sender;
62
+
63
+ // check component has not already been registerd
64
+ NftId compoentNftId = _registry.getNftId(componentAddress);
65
+ if(compoentNftId.gtz()) {
66
+ revert ErrorComponentServiceAlreadyRegistered(componentAddress, compoentNftId);
67
+ }
68
+
69
+ // check this is a component
70
+ component = IComponent(componentAddress);
71
+ if(!component.supportsInterface(type(IComponent).interfaceId)) {
72
+ revert ErrorComponentServiceNotComponent(componentAddress);
73
+ }
74
+
75
+ // check component is of required type
76
+ IRegistry.ObjectInfo memory componentInfo = component.getInitialInfo();
77
+ if(componentInfo.objectType != requiredType) {
78
+ revert ErrorComponentServiceInvalidType(componentAddress, requiredType, componentInfo.objectType);
79
+ }
80
+
81
+ // check msg.sender is component owner
82
+ address initialOwner = componentInfo.initialOwner;
83
+ if(owner != initialOwner) {
84
+ revert ErrorComponentServiceSenderNotOwner(componentAddress, componentInfo.initialOwner, owner);
85
+ }
86
+
87
+ // check instance has assigned required role to owner
88
+ instanceNftId = componentInfo.parentNftId;
89
+ instance = _getInstance(instanceNftId);
90
+ bool hasRole = getInstanceService().hasRole(
91
+ owner,
92
+ requiredRole,
93
+ address(instance));
94
+
95
+ if(!hasRole) {
96
+ revert ErrorComponentServiceExpectedRoleMissing(instanceNftId, requiredRole, owner);
97
+ }
98
+ }
99
+
100
+ // internal view functions
101
+
102
+ function _getInstance(NftId instanceNftId) internal view returns (IInstance) {
103
+ IRegistry.ObjectInfo memory instanceInfo = getRegistry().getObjectInfo(instanceNftId);
104
+ return IInstance(instanceInfo.objectAddress);
105
+ }
106
+
107
+ function _getAndVerifyComponentInfoAndInstance(
108
+ //address component,
109
+ ObjectType expectedType
110
+ )
111
+ internal
112
+ view
113
+ returns(
114
+ IRegistry.ObjectInfo memory info,
115
+ IInstance instance
116
+ )
117
+ {
118
+ IRegistry registry = getRegistry();
119
+ //TODO redundant check -> just check type
120
+ //NftId componentNftId = registry.getNftId(component);
121
+ //require(componentNftId.gtz(), "ERROR_COMPONENT_UNKNOWN");
122
+
123
+ info = registry.getObjectInfo(msg.sender);
124
+ require(info.objectType == expectedType, "OBJECT_TYPE_INVALID");
125
+
126
+ address instanceAddress = registry.getObjectInfo(info.parentNftId).objectAddress;
127
+ instance = IInstance(instanceAddress);
128
+
129
+ InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
130
+ if (accessManager.isTargetLocked(info.objectAddress)) {
131
+ revert IAccess.ErrorIAccessTargetLocked(info.objectAddress);
132
+ }
133
+ }
134
+ }
@@ -1,38 +1,54 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
5
4
  import {ShortString, ShortStrings} from "@openzeppelin/contracts/utils/ShortStrings.sol";
6
5
 
7
6
  import {RoleId} from "../../types/RoleId.sol";
7
+ import {Timestamp} from "../../types/Timestamp.sol";
8
+ import {NftId} from "../../types/NftId.sol";
8
9
 
9
10
  interface IAccess {
11
+
12
+ enum Type {
13
+ Core,
14
+ Gif,
15
+ Custom
16
+ }
17
+
10
18
  struct RoleInfo {
11
19
  ShortString name;
12
- bool isCustom;
20
+ Type rtype;
21
+ //bool isLocked;
22
+ RoleId admin;
23
+ Timestamp createdAt;
24
+ Timestamp updatedAt;
13
25
  }
14
26
 
15
27
  struct TargetInfo {
16
28
  ShortString name;
17
- bool isCustom;
29
+ Type ttype;
30
+ bool isLocked;
31
+ Timestamp createdAt;
32
+ Timestamp updatedAt;
18
33
  }
19
34
 
20
- error ErrorTargetAddressZero();
21
- error ErrorTargetAlreadyExists(address target, ShortString name);
22
- error ErrorTargetDoesNotExist(address target);
23
- error ErrorTargetNameEmpty(address target);
24
- error ErrorTargetNameExists(address target, address existingTarget, ShortString name);
25
-
26
- error ErrorRoleIdInvalid(RoleId roleId);
27
- error ErrorRoleIdTooBig(RoleId roleId);
28
- error ErrorRoleIdTooSmall(RoleId roleId);
29
- error ErrorRoleIdAlreadyExists(RoleId roleId, ShortString name);
30
- error ErrorRoleIdNotActive(RoleId roleId);
31
- error ErrorRoleNameEmpty(RoleId roleId);
32
- error ErrorRoleNameNotUnique(RoleId roleId, ShortString name);
33
- error ErrorRoleInvalidUpdate(RoleId roleId, bool isCustom);
34
- error ErrorGrantNonexstentRole(RoleId roleId);
35
- error ErrorRevokeNonexstentRole(RoleId roleId);
36
- error ErrorRenounceNonexstentRole(RoleId roleId);
35
+ error ErrorIAccessCallerIsNotRoleAdmin(address caller, RoleId roleId);
36
+
37
+ error ErrorIAccessRoleIdInvalid(RoleId roleId);
38
+ error ErrorIAccessRoleIdTooBig(RoleId roleId);
39
+ error ErrorIAccessRoleIdTooSmall(RoleId roleId);
40
+ error ErrorIAccessRoleIdAlreadyExists(RoleId roleId);
41
+ error ErrorIAccessRoleNameEmpty(RoleId roleId);
42
+ error ErrorIAccessRoleNameNotUnique(RoleId roleId, ShortString name);
43
+ error ErrorIAccessRoleTypeInvalid(RoleId roleId, Type rtype);
37
44
 
45
+ error ErrorIAccessTargetAddressZero();
46
+ error ErrorIAccessTargetDoesNotExist(ShortString name);
47
+ error ErrorIAccessTargetAlreadyExists(address target, ShortString name);
48
+ error ErrorIAccessTargetTypeInvalid(ShortString name, Type ttype);
49
+ error ErrorIAccessTargetInstanceMismatch(ShortString name, NftId instanceNftId);
50
+ error ErrorIAccessTargetNameEmpty(address target);
51
+ error ErrorIAccessTargetNameExists(address target, address existingTarget, ShortString name);
52
+ error ErrorIAccessTargetLocked(address target);
53
+ error ErrorIAccessTargetIsRegistered(address target);
38
54
  }
@@ -0,0 +1,293 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {Pool} from "../../components/Pool.sol";
5
+ import {IRegistry} from "../../registry/IRegistry.sol";
6
+ import {IInstance} from "../../instance/IInstance.sol";
7
+ import {IBundle} from "../../instance/module/IBundle.sol";
8
+ import {TokenHandler} from "../../instance/module/ITreasury.sol";
9
+ import {ISetup} from "../module/ISetup.sol";
10
+ import {IPolicy} from "../module/IPolicy.sol";
11
+
12
+ import {IVersionable} from "../../shared/IVersionable.sol";
13
+ import {Versionable} from "../../shared/Versionable.sol";
14
+ import {INftOwnable} from "../../shared/INftOwnable.sol";
15
+
16
+ import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
17
+ import {ObjectType, POOL, BUNDLE} from "../../types/ObjectType.sol";
18
+ import {POOL_OWNER_ROLE, RoleId} from "../../types/RoleId.sol";
19
+ import {Fee, FeeLib} from "../../types/Fee.sol";
20
+ import {Version, VersionLib} from "../../types/Version.sol";
21
+ import {KEEP_STATE, StateId} from "../../types/StateId.sol";
22
+ import {TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
23
+
24
+ import {IService} from "../../shared/IService.sol";
25
+ import {Service} from "../../shared/Service.sol";
26
+ import {BundleManager} from "../BundleManager.sol";
27
+ import {ComponentService} from "../base/ComponentService.sol";
28
+ import {IBundleService} from "./IBundleService.sol";
29
+ import {IRegistryService} from "../../registry/IRegistryService.sol";
30
+ import {InstanceService} from "../InstanceService.sol";
31
+ import {InstanceReader} from "../InstanceReader.sol";
32
+
33
+ string constant BUNDLE_SERVICE_NAME = "BundleService";
34
+
35
+ contract BundleService is
36
+ ComponentService,
37
+ IBundleService
38
+ {
39
+ using NftIdLib for NftId;
40
+
41
+ string public constant NAME = "BundleService";
42
+
43
+ address internal _registryAddress;
44
+
45
+ function _initialize(
46
+ address owner,
47
+ bytes memory data
48
+ )
49
+ internal
50
+ initializer
51
+ virtual override
52
+ {
53
+ address registryAddress;
54
+ address initialOwner;
55
+ (registryAddress, initialOwner) = abi.decode(data, (address, address));
56
+ // TODO while PoolService is not deployed in PoolServiceManager constructor
57
+ // owner is PoolServiceManager deployer
58
+ _initializeService(registryAddress, owner);
59
+
60
+ _registerInterface(type(IBundleService).interfaceId);
61
+ }
62
+
63
+ function getDomain() public pure override(Service, IService) returns(ObjectType) {
64
+ return BUNDLE();
65
+ }
66
+
67
+ function createBundle(
68
+ address owner,
69
+ Fee memory fee,
70
+ uint256 stakingAmount,
71
+ uint256 lifetime,
72
+ bytes calldata filter
73
+ )
74
+ external
75
+ override
76
+ returns(NftId bundleNftId)
77
+ {
78
+ (IRegistry.ObjectInfo memory info, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
79
+ InstanceReader instanceReader = instance.getInstanceReader();
80
+ NftId poolNftId = info.nftId;
81
+
82
+ IBundle.BundleInfo memory bundleInfo = IBundle.BundleInfo(
83
+ poolNftId,
84
+ fee,
85
+ filter,
86
+ stakingAmount,
87
+ 0,
88
+ stakingAmount,
89
+ lifetime,
90
+ zeroTimestamp(),
91
+ zeroTimestamp()
92
+ );
93
+
94
+ // register bundle with registry
95
+ bundleNftId = getRegistryService().registerBundle(
96
+ IRegistry.ObjectInfo(
97
+ zeroNftId(),
98
+ poolNftId,
99
+ BUNDLE(),
100
+ false, // intercepting property for bundles is defined on pool
101
+ address(0),
102
+ owner,
103
+ abi.encode(bundleInfo)
104
+ )
105
+ );
106
+
107
+ // create bundle info in instance
108
+ instance.createBundle(bundleNftId, bundleInfo);
109
+
110
+ BundleManager bundleManager = instance.getBundleManager();
111
+ bundleManager.add(bundleNftId);
112
+
113
+ _processStakingByTreasury(
114
+ instanceReader,
115
+ poolNftId,
116
+ bundleNftId,
117
+ stakingAmount);
118
+
119
+ // TODO add logging
120
+ }
121
+
122
+ function setBundleFee(
123
+ NftId bundleNftId,
124
+ Fee memory fee
125
+ )
126
+ external
127
+ override
128
+ {
129
+ (IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
130
+ InstanceReader instanceReader = instance.getInstanceReader();
131
+ NftId poolNftId = info.nftId;
132
+
133
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
134
+ require(bundleInfo.poolNftId.gtz(), "ERROR:PLS-010:BUNDLE_UNKNOWN");
135
+ require(poolNftId == bundleInfo.poolNftId, "ERROR:PLS-011:BUNDLE_POOL_MISMATCH");
136
+
137
+ bundleInfo.fee = fee;
138
+
139
+ instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
140
+ }
141
+
142
+ function updateBundle(NftId instanceNftId, NftId bundleNftId, IBundle.BundleInfo memory bundleInfo, StateId state)
143
+ external
144
+ onlyService
145
+ {
146
+ IRegistry.ObjectInfo memory instanceInfo = getRegistry().getObjectInfo(instanceNftId);
147
+ IInstance instance = IInstance(instanceInfo.objectAddress);
148
+ instance.updateBundle(bundleNftId, bundleInfo, state);
149
+ }
150
+
151
+ function lockBundle(NftId bundleNftId)
152
+ external
153
+ {
154
+ (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
155
+ BundleManager bundleManager = instance.getBundleManager();
156
+ bundleManager.lock(bundleNftId);
157
+ }
158
+
159
+ function unlockBundle(NftId bundleNftId)
160
+ external
161
+ {
162
+ (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
163
+ BundleManager bundleManager = instance.getBundleManager();
164
+ bundleManager.unlock(bundleNftId);
165
+ }
166
+
167
+ function underwritePolicy(IInstance instance,
168
+ NftId policyNftId,
169
+ NftId bundleNftId,
170
+ uint256 collateralAmount,
171
+ uint256 netPremiumAmount
172
+ )
173
+ external
174
+ onlyService
175
+ {
176
+ InstanceReader instanceReader = instance.getInstanceReader();
177
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
178
+
179
+ // lock collateral
180
+ bundleInfo.lockedAmount += collateralAmount;
181
+ bundleInfo.balanceAmount += netPremiumAmount;
182
+
183
+ instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
184
+
185
+ linkPolicy(instance, policyNftId);
186
+ }
187
+
188
+ function increaseBalance(IInstance instance,
189
+ NftId bundleNftId,
190
+ uint256 amount
191
+ )
192
+ external
193
+ onlyService
194
+ {
195
+ InstanceReader instanceReader = instance.getInstanceReader();
196
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
197
+
198
+ bundleInfo.balanceAmount += amount;
199
+
200
+ instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
201
+ }
202
+
203
+ function closePolicy(IInstance instance,
204
+ NftId policyNftId,
205
+ NftId bundleNftId,
206
+ uint256 collateralAmount
207
+ )
208
+ external
209
+ onlyService
210
+ {
211
+ InstanceReader instanceReader = instance.getInstanceReader();
212
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
213
+
214
+ // lock collateral
215
+ bundleInfo.lockedAmount -= collateralAmount;
216
+
217
+ instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
218
+
219
+ unlinkPolicy(instance, policyNftId);
220
+ }
221
+
222
+ /// @dev links policy to bundle
223
+ function linkPolicy(IInstance instance, NftId policyNftId)
224
+ internal
225
+ onlyService
226
+ {
227
+ InstanceReader instanceReader = instance.getInstanceReader();
228
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
229
+
230
+ // ensure policy has not yet been activated
231
+ if (policyInfo.activatedAt.gtz()) {
232
+ revert BundleManager.ErrorBundleManagerErrorPolicyAlreadyActivated(policyNftId);
233
+ }
234
+
235
+ BundleManager bundleManager = instance.getBundleManager();
236
+ bundleManager.linkPolicy(policyNftId);
237
+ }
238
+
239
+ /// @dev unlinks policy from bundle
240
+ function unlinkPolicy(IInstance instance, NftId policyNftId)
241
+ internal
242
+ onlyService
243
+ {
244
+ InstanceReader instanceReader = instance.getInstanceReader();
245
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
246
+
247
+ // ensure policy has no open claims
248
+ if (policyInfo.openClaimsCount > 0) {
249
+ revert BundleManager.ErrorBundleManagerPolicyWithOpenClaims(
250
+ policyNftId,
251
+ policyInfo.openClaimsCount);
252
+ }
253
+
254
+ // ensure policy is closeable
255
+ if ( TimestampLib.blockTimestamp() < policyInfo.expiredAt
256
+ && policyInfo.payoutAmount < policyInfo.sumInsuredAmount)
257
+ {
258
+ revert BundleManager.ErrorBundleManagerPolicyNotCloseable(policyNftId);
259
+ }
260
+
261
+ BundleManager bundleManager = instance.getBundleManager();
262
+ bundleManager.unlinkPolicy(policyNftId);
263
+ }
264
+
265
+ function _processStakingByTreasury(
266
+ InstanceReader instanceReader,
267
+ NftId poolNftId,
268
+ NftId bundleNftId,
269
+ uint256 stakingAmount
270
+ )
271
+ internal
272
+ {
273
+ // process token transfer(s)
274
+ if(stakingAmount > 0) {
275
+ ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(poolNftId);
276
+ TokenHandler tokenHandler = poolInfo.tokenHandler;
277
+ address bundleOwner = getRegistry().ownerOf(bundleNftId);
278
+ Fee memory stakingFee = poolInfo.stakingFee;
279
+
280
+ tokenHandler.transfer(
281
+ bundleOwner,
282
+ poolInfo.wallet,
283
+ stakingAmount
284
+ );
285
+
286
+
287
+ if (! FeeLib.feeIsZero(stakingFee)) {
288
+ (uint256 stakingFeeAmount, uint256 netAmount) = FeeLib.calculateFee(stakingFee, stakingAmount);
289
+ // TODO: track staking fees in pool's state (issue #177)
290
+ }
291
+ }
292
+ }
293
+ }
@@ -0,0 +1,51 @@
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 {BundleService} from "./BundleService.sol";
7
+ import {Registry} from "../../registry/Registry.sol";
8
+ import {RegistryService} from "../../registry/RegistryService.sol";
9
+ import {ObjectType, REGISTRY} from "../../types/ObjectType.sol";
10
+
11
+ contract BundleServiceManager is ProxyManager {
12
+
13
+ BundleService private _bundleService;
14
+
15
+ /// @dev initializes proxy manager with pool service implementation
16
+ constructor(
17
+ address registryAddress
18
+ )
19
+ ProxyManager()
20
+ {
21
+ BundleService bundleSrv = new BundleService();
22
+ bytes memory data = abi.encode(registryAddress, address(this));
23
+ IVersionable versionable = deploy(
24
+ address(bundleSrv),
25
+ data);
26
+
27
+ _bundleService = BundleService(address(versionable));
28
+
29
+ // TODO `this` must have a role or own nft to register service
30
+ //Registry registry = Registry(registryAddress);
31
+ //address registryServiceAddress = registry.getServiceAddress(REGISTRY(), _bundleService.getMajorVersion());
32
+ //RegistryService registryService = RegistryService(registryServiceAddress);
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
+
42
+ //--- view functions ----------------------------------------------------//
43
+ function getBundleService()
44
+ external
45
+ view
46
+ returns (BundleService)
47
+ {
48
+ return _bundleService;
49
+ }
50
+
51
+ }