@etherisc/gif-next 0.0.2-aad7ee0-660 → 0.0.2-ab4c2da-820

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (249) hide show
  1. package/README.md +67 -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/ISM.sol/ISM.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  36. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  37. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  38. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  39. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +788 -0
  40. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  41. package/artifacts/contracts/instance/{AccessManagedSimple.sol/AccessManagedSimple.json → Cloneable.sol/Cloneable.json} +74 -3
  42. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +1 -1
  43. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  44. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1373 -93
  45. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  46. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +448 -0
  47. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  48. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +30 -14
  49. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  50. package/artifacts/contracts/instance/Instance.sol/Instance.json +195 -155
  51. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  52. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +57 -47
  53. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  54. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +763 -0
  55. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  56. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +177 -38
  57. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  58. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +378 -67
  59. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  60. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +145 -17
  61. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  62. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +285 -0
  63. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
  64. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +49 -9
  65. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  66. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  67. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  68. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  69. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  70. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  71. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  72. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  73. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  74. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  75. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  76. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  77. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  78. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +923 -0
  79. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  80. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +440 -0
  81. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  82. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +39 -52
  83. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  84. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +90 -36
  85. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  86. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +20 -20
  87. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  88. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +669 -0
  89. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  90. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +13 -13
  91. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  92. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +13 -13
  93. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  94. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +664 -0
  95. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  96. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +15 -77
  97. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  98. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +25 -240
  99. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  100. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +971 -0
  101. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  102. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +464 -0
  103. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  104. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +705 -0
  105. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  106. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +428 -0
  107. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  108. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +755 -0
  109. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  110. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +420 -0
  111. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  112. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  113. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  114. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +197 -68
  115. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  116. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +187 -83
  117. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  118. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  119. package/artifacts/contracts/registry/Registry.sol/Registry.json +197 -182
  120. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  121. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  122. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  123. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +31 -97
  124. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  125. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +38 -91
  126. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  127. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +551 -0
  128. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  129. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +397 -0
  130. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  131. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  132. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  133. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  134. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  135. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  136. package/artifacts/contracts/shared/IService.sol/IService.json +13 -13
  137. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  138. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  139. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  140. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  141. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
  142. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  143. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +4 -4
  144. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +1 -1
  145. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  146. package/artifacts/contracts/shared/Service.sol/Service.json +13 -13
  147. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  148. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  149. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  150. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  151. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  152. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  153. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +4 -4
  154. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  155. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  156. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  157. package/artifacts/contracts/test/TestService.sol/TestService.json +31 -31
  158. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  159. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  160. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  161. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  162. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +2 -2
  163. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  164. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  165. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  166. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  167. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  168. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  169. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  170. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  172. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  173. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  174. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  175. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  176. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  177. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  178. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  179. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  180. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  181. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  182. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  183. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  184. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  185. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
  187. package/contracts/components/BaseComponent.sol +57 -11
  188. package/contracts/components/Distribution.sol +15 -18
  189. package/contracts/components/IBaseComponent.sol +7 -0
  190. package/contracts/components/IDistributionComponent.sol +1 -0
  191. package/contracts/components/IPoolComponent.sol +5 -1
  192. package/contracts/components/Pool.sol +43 -31
  193. package/contracts/components/Product.sol +42 -47
  194. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
  195. package/contracts/instance/BundleManager.sol +129 -0
  196. package/contracts/instance/Cloneable.sol +46 -0
  197. package/contracts/instance/IInstance.sol +34 -7
  198. package/contracts/instance/IInstanceBase.sol +26 -0
  199. package/contracts/instance/IInstanceService.sol +7 -3
  200. package/contracts/instance/Instance.sol +54 -32
  201. package/contracts/instance/InstanceAccessManager.sol +6 -6
  202. package/contracts/instance/InstanceBase.sol +41 -0
  203. package/contracts/instance/InstanceReader.sol +26 -1
  204. package/contracts/instance/InstanceService.sol +229 -68
  205. package/contracts/instance/InstanceServiceManager.sol +8 -6
  206. package/contracts/instance/ObjectManager.sol +101 -0
  207. package/contracts/instance/base/ComponentServiceBase.sol +45 -12
  208. package/contracts/instance/module/IBundle.sol +1 -0
  209. package/contracts/instance/module/ISetup.sol +3 -0
  210. package/contracts/instance/service/BundleService.sol +260 -0
  211. package/contracts/instance/service/BundleServiceManager.sol +55 -0
  212. package/contracts/instance/service/ComponentOwnerService.sol +4 -6
  213. package/contracts/instance/service/DistributionService.sol +53 -12
  214. package/contracts/instance/service/DistributionServiceManager.sol +8 -6
  215. package/contracts/instance/service/IBundleService.sol +45 -0
  216. package/contracts/instance/service/IPolicyService.sol +87 -0
  217. package/contracts/instance/service/IPoolService.sol +6 -23
  218. package/contracts/instance/service/IProductService.sol +6 -73
  219. package/contracts/instance/service/PolicyService.sol +503 -0
  220. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  221. package/contracts/instance/service/PoolService.sol +122 -0
  222. package/contracts/instance/service/PoolServiceManager.sol +55 -0
  223. package/contracts/instance/service/ProductService.sol +168 -0
  224. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  225. package/contracts/registry/ChainNft.sol +1 -1
  226. package/contracts/registry/IRegistry.sol +25 -6
  227. package/contracts/registry/IRegistryService.sol +36 -13
  228. package/contracts/registry/Registry.sol +165 -203
  229. package/contracts/registry/RegistryAccessManager.sol +207 -0
  230. package/contracts/registry/RegistryService.sol +83 -197
  231. package/contracts/registry/RegistryServiceManager.sol +20 -22
  232. package/contracts/registry/ReleaseManager.sol +382 -0
  233. package/contracts/registry/TokenRegistry.sol +110 -0
  234. package/contracts/shared/ERC165.sol +6 -2
  235. package/contracts/shared/IService.sol +2 -1
  236. package/contracts/shared/NftOwnable.sol +2 -4
  237. package/contracts/shared/ProxyManager.sol +1 -1
  238. package/contracts/shared/Registerable.sol +1 -0
  239. package/contracts/shared/Service.sol +11 -7
  240. package/contracts/test/TestService.sol +3 -2
  241. package/contracts/types/NftIdSet.sol +26 -24
  242. package/contracts/types/RoleId.sol +14 -5
  243. package/contracts/types/Version.sol +4 -1
  244. package/package.json +1 -1
  245. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
  246. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
  247. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1132
  248. package/contracts/instance/AccessManagedSimple.sol +0 -122
  249. package/contracts/instance/AccessManagerSimple.sol +0 -692
@@ -0,0 +1,260 @@
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 {ComponentServiceBase} from "../base/ComponentServiceBase.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
+ import {IBaseComponent} from "../../components/IBaseComponent.sol";
33
+
34
+ string constant BUNDLE_SERVICE_NAME = "BundleService";
35
+
36
+ contract BundleService is
37
+ ComponentServiceBase,
38
+ IBundleService
39
+ {
40
+ using NftIdLib for NftId;
41
+
42
+ string public constant NAME = "BundleService";
43
+
44
+ address internal _registryAddress;
45
+
46
+ function _initialize(
47
+ address owner,
48
+ bytes memory data
49
+ )
50
+ internal
51
+ initializer
52
+ virtual override
53
+ {
54
+ address registryAddress;
55
+ address initialOwner;
56
+ (registryAddress, initialOwner) = abi.decode(data, (address, address));
57
+ // TODO while PoolService is not deployed in PoolServiceManager constructor
58
+ // owner is PoolServiceManager deployer
59
+ _initializeService(registryAddress, owner);
60
+
61
+ _registerInterface(type(IBundleService).interfaceId);
62
+ }
63
+
64
+ function getDomain() public pure override(Service, IService) returns(ObjectType) {
65
+ return BUNDLE();
66
+ }
67
+
68
+ function createBundle(
69
+ address owner,
70
+ Fee memory fee,
71
+ uint256 stakingAmount,
72
+ uint256 lifetime,
73
+ bytes calldata filter
74
+ )
75
+ external
76
+ override
77
+ returns(NftId bundleNftId)
78
+ {
79
+ (IRegistry.ObjectInfo memory info, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
80
+ InstanceReader instanceReader = instance.getInstanceReader();
81
+ NftId poolNftId = info.nftId;
82
+
83
+ IBundle.BundleInfo memory bundleInfo = IBundle.BundleInfo(
84
+ poolNftId,
85
+ fee,
86
+ filter,
87
+ stakingAmount,
88
+ 0,
89
+ stakingAmount,
90
+ lifetime,
91
+ zeroTimestamp(),
92
+ zeroTimestamp()
93
+ );
94
+
95
+ // register bundle with registry
96
+ bundleNftId = getRegistryService().registerBundle(
97
+ IRegistry.ObjectInfo(
98
+ zeroNftId(),
99
+ poolNftId,
100
+ BUNDLE(),
101
+ false, // intercepting property for bundles is defined on pool
102
+ address(0),
103
+ owner,
104
+ abi.encode(bundleInfo)
105
+ )
106
+ );
107
+
108
+ // create bundle info in instance
109
+ instance.createBundle(bundleNftId, bundleInfo);
110
+
111
+ BundleManager bundleManager = instance.getBundleManager();
112
+ bundleManager.add(bundleNftId);
113
+
114
+ _processStakingByTreasury(
115
+ instanceReader,
116
+ poolNftId,
117
+ bundleNftId,
118
+ stakingAmount);
119
+
120
+ // TODO add logging
121
+ }
122
+
123
+ function setBundleFee(
124
+ NftId bundleNftId,
125
+ Fee memory fee
126
+ )
127
+ external
128
+ override
129
+ {
130
+ (IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
131
+ InstanceReader instanceReader = instance.getInstanceReader();
132
+ NftId poolNftId = info.nftId;
133
+
134
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
135
+ require(bundleInfo.poolNftId.gtz(), "ERROR:PLS-010:BUNDLE_UNKNOWN");
136
+ require(poolNftId == bundleInfo.poolNftId, "ERROR:PLS-011:BUNDLE_POOL_MISMATCH");
137
+
138
+ bundleInfo.fee = fee;
139
+
140
+ instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
141
+ }
142
+
143
+ function updateBundle(NftId instanceNftId, NftId bundleNftId, IBundle.BundleInfo memory bundleInfo, StateId state)
144
+ external
145
+ onlyService
146
+ {
147
+ IRegistry.ObjectInfo memory instanceInfo = getRegistry().getObjectInfo(instanceNftId);
148
+ IInstance instance = IInstance(instanceInfo.objectAddress);
149
+ instance.updateBundle(bundleNftId, bundleInfo, state);
150
+ }
151
+
152
+ function lockBundle(NftId bundleNftId)
153
+ external
154
+ {
155
+ (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
156
+ BundleManager bundleManager = instance.getBundleManager();
157
+ bundleManager.lock(bundleNftId);
158
+ }
159
+
160
+ function unlockBundle(NftId bundleNftId)
161
+ external
162
+ {
163
+ (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
164
+ BundleManager bundleManager = instance.getBundleManager();
165
+ bundleManager.unlock(bundleNftId);
166
+ }
167
+
168
+ function underwritePolicy(IInstance instance,
169
+ NftId policyNftId,
170
+ NftId bundleNftId,
171
+ uint256 collateralAmount,
172
+ uint256 netPremiumAmount
173
+ )
174
+ external
175
+ onlyService
176
+ {
177
+ InstanceReader instanceReader = instance.getInstanceReader();
178
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
179
+
180
+ // lock collateral
181
+ bundleInfo.lockedAmount += collateralAmount;
182
+ bundleInfo.balanceAmount += netPremiumAmount;
183
+
184
+ instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
185
+
186
+ linkPolicy(instance, policyNftId);
187
+ }
188
+
189
+ /// @dev links policy to bundle
190
+ function linkPolicy(IInstance instance, NftId policyNftId)
191
+ internal
192
+ onlyService
193
+ {
194
+ InstanceReader instanceReader = instance.getInstanceReader();
195
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
196
+
197
+ // ensure policy has not yet been activated
198
+ if (policyInfo.activatedAt.gtz()) {
199
+ revert BundleManager.ErrorBundleManagerErrorPolicyAlreadyActivated(policyNftId);
200
+ }
201
+
202
+ BundleManager bundleManager = instance.getBundleManager();
203
+ bundleManager.linkPolicy(policyNftId);
204
+ }
205
+
206
+ /// @dev unlinks policy from bundle
207
+ function unlinkPolicy(IInstance instance, NftId policyNftId)
208
+ internal
209
+ onlyService
210
+ {
211
+ InstanceReader instanceReader = instance.getInstanceReader();
212
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
213
+
214
+ // ensure policy has no open claims
215
+ if (policyInfo.openClaimsCount > 0) {
216
+ revert BundleManager.ErrorBundleManagerPolicyWithOpenClaims(
217
+ policyNftId,
218
+ policyInfo.openClaimsCount);
219
+ }
220
+
221
+ // ensure policy is closeable
222
+ if (policyInfo.expiredAt < TimestampLib.blockTimestamp()
223
+ || policyInfo.payoutAmount < policyInfo.sumInsuredAmount)
224
+ {
225
+ revert BundleManager.ErrorBundleManagerPolicyNotCloseable(policyNftId);
226
+ }
227
+
228
+ BundleManager bundleManager = instance.getBundleManager();
229
+ bundleManager.unlinkPolicy(policyNftId);
230
+ }
231
+
232
+ function _processStakingByTreasury(
233
+ InstanceReader instanceReader,
234
+ NftId poolNftId,
235
+ NftId bundleNftId,
236
+ uint256 stakingAmount
237
+ )
238
+ internal
239
+ {
240
+ // process token transfer(s)
241
+ if(stakingAmount > 0) {
242
+ ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(poolNftId);
243
+ TokenHandler tokenHandler = poolInfo.tokenHandler;
244
+ address bundleOwner = getRegistry().ownerOf(bundleNftId);
245
+ Fee memory stakingFee = poolInfo.stakingFee;
246
+
247
+ tokenHandler.transfer(
248
+ bundleOwner,
249
+ poolInfo.wallet,
250
+ stakingAmount
251
+ );
252
+
253
+
254
+ if (! FeeLib.feeIsZero(stakingFee)) {
255
+ (uint256 stakingFeeAmount, uint256 netAmount) = FeeLib.calculateFee(stakingFee, stakingAmount);
256
+ // TODO: track staking fees in pool's state (issue #177)
257
+ }
258
+ }
259
+ }
260
+ }
@@ -0,0 +1,55 @@
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 {VersionLib} from "../../types/Version.sol";
10
+ import {ObjectType, SERVICE} from "../../types/ObjectType.sol";
11
+
12
+ contract BundleServiceManager is ProxyManager {
13
+
14
+ BundleService private _bundleService;
15
+
16
+ /// @dev initializes proxy manager with pool service implementation
17
+ constructor(
18
+ address registryAddress
19
+ )
20
+ ProxyManager()
21
+ {
22
+ BundleService bundleSrv = new BundleService();
23
+ bytes memory data = abi.encode(registryAddress, address(this));
24
+ IVersionable versionable = deploy(
25
+ address(bundleSrv),
26
+ data);
27
+
28
+ _bundleService = BundleService(address(versionable));
29
+
30
+ Registry registry = Registry(registryAddress);
31
+ address registryServiceAddress = registry.getServiceAddress(SERVICE(), VersionLib.toVersion(3, 0, 0).toMajorPart());
32
+ RegistryService registryService = RegistryService(registryServiceAddress);
33
+ // TODO this must have a role or own nft to register service
34
+ //registryService.registerService(_poolService);
35
+
36
+ // TODO no nft to link yet
37
+ // link ownership of instance service manager ot nft owner of instance service
38
+ //_linkToNftOwnable(
39
+ // address(registryAddress),
40
+ // address(_poolService));
41
+
42
+ // implies that after this constructor call only upgrade functionality is available
43
+ _isDeployed = true;
44
+ }
45
+
46
+ //--- view functions ----------------------------------------------------//
47
+ function getBundleService()
48
+ external
49
+ view
50
+ returns (BundleService)
51
+ {
52
+ return _bundleService;
53
+ }
54
+
55
+ }
@@ -16,7 +16,7 @@ import {IVersionable} from "../../shared/IVersionable.sol";
16
16
  import {Versionable} from "../../shared/Versionable.sol";
17
17
 
18
18
  import {RoleId, PRODUCT_OWNER_ROLE, POOL_OWNER_ROLE, DISTRIBUTION_OWNER_ROLE, ORACLE_OWNER_ROLE} from "../../types/RoleId.sol";
19
- import {ObjectType, TOKEN, COMPONENT, PRODUCT, ORACLE, POOL, DISTRIBUTION} from "../../types/ObjectType.sol";
19
+ import {ObjectType, SERVICE, TOKEN, COMPONENT, PRODUCT, ORACLE, POOL, DISTRIBUTION} from "../../types/ObjectType.sol";
20
20
  import {StateId, ACTIVE, PAUSED} from "../../types/StateId.sol";
21
21
  import {Key32} from "../../types/Key32.sol";
22
22
  import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
@@ -50,8 +50,6 @@ contract ComponentOwnerService is
50
50
 
51
51
  error CollateralizationLevelIsZero();
52
52
 
53
- string public constant NAME = "ComponentOwnerService";
54
-
55
53
  modifier onlyRegisteredComponent(IBaseComponent component) {
56
54
  NftId nftId = getRegistry().getNftId(address(component));
57
55
  require(nftId.gtz(), "ERROR:COS-001:COMPONENT_UNKNOWN");
@@ -68,8 +66,8 @@ contract ComponentOwnerService is
68
66
  _registerInterface(type(IComponentOwnerService).interfaceId);
69
67
  }
70
68
 
71
- function getName() public pure override(IService, Service) returns(string memory name) {
72
- return NAME;
69
+ function getDomain() public pure override(Service, IService) returns(ObjectType) {
70
+ return COMPONENT();
73
71
  }
74
72
 
75
73
  function getRoleForType(
@@ -90,7 +88,7 @@ contract ComponentOwnerService is
90
88
  }
91
89
 
92
90
  function getRegistryService() public view virtual returns (IRegistryService) {
93
- address service = getRegistry().getServiceAddress("RegistryService", getMajorVersion());
91
+ address service = getRegistry().getServiceAddress(SERVICE(), getMajorVersion());
94
92
  return IRegistryService(service);
95
93
  }
96
94
 
@@ -2,15 +2,17 @@
2
2
  pragma solidity ^0.8.19;
3
3
 
4
4
  import {IRegistry} from "../../registry/IRegistry.sol";
5
+ import {IRegistryService} from "../../registry/IRegistryService.sol";
5
6
  import {IInstance} from "../../instance/IInstance.sol";
6
7
  import {InstanceReader} from "../../instance/InstanceReader.sol";
7
8
  import {ISetup} from "../../instance/module/ISetup.sol";
8
9
  import {ITreasury} from "../../instance/module/ITreasury.sol";
9
10
 
10
- import {NftId} from "../../types/NftId.sol";
11
+ import {NftId, NftIdLib} from "../../types/NftId.sol";
11
12
  import {Fee} from "../../types/Fee.sol";
13
+ import {DISTRIBUTION_OWNER_ROLE} from "../../types/RoleId.sol";
12
14
  import {KEEP_STATE} from "../../types/StateId.sol";
13
- import {DISTRIBUTION} from "../../types/ObjectType.sol";
15
+ import {ObjectType, DISTRIBUTION} from "../../types/ObjectType.sol";
14
16
  import {Version, VersionLib} from "../../types/Version.sol";
15
17
 
16
18
  import {IVersionable} from "../../shared/IVersionable.sol";
@@ -20,14 +22,18 @@ import {IService} from "../../shared/IService.sol";
20
22
  import {Service} from "../../shared/Service.sol";
21
23
  import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
22
24
  import {IDistributionService} from "./IDistributionService.sol";
25
+ import {Distribution} from "../../components/Distribution.sol";
26
+ import {InstanceService} from "../InstanceService.sol";
27
+ import {Instance} from "../Instance.sol";
28
+ import {INftOwnable} from "../../shared/INftOwnable.sol";
29
+ import {IBaseComponent} from "../../components/IBaseComponent.sol";
23
30
 
24
- string constant DISTRIBUTION_SERVICE_NAME = "DistributionService";
25
31
 
26
32
  contract DistributionService is
27
33
  ComponentServiceBase,
28
34
  IDistributionService
29
35
  {
30
- string public constant NAME = "DistributionService";
36
+ using NftIdLib for NftId;
31
37
 
32
38
  address internal _registryAddress;
33
39
 
@@ -39,20 +45,55 @@ contract DistributionService is
39
45
  initializer
40
46
  virtual override
41
47
  {
42
- address initialOwner = address(0);
43
- (_registryAddress, initialOwner) = abi.decode(data, (address, address));
48
+ address initialOwner;
49
+ address registryAddress;
50
+ (registryAddress, initialOwner) = abi.decode(data, (address, address));
51
+ // TODO while DistributionService is not deployed in DistributionServiceManager constructor
52
+ // owner is DistributionServiceManager deployer
53
+ _initializeService(registryAddress, owner);
44
54
 
45
- // IRegistry registry = IRegistry(_registryAddress);
55
+ _registerInterface(type(IDistributionService).interfaceId);
56
+ }
46
57
 
47
- _initializeService(_registryAddress, initialOwner);
58
+ function getDomain() public pure override(Service, IService) returns(ObjectType) {
59
+ return DISTRIBUTION();
60
+ }
48
61
 
49
- _registerInterface(type(IService).interfaceId);
50
- _registerInterface(type(IDistributionService).interfaceId);
62
+ function register(address distributionAddress)
63
+ external
64
+ returns(NftId distributionNftId)
65
+ {
66
+ address distributionOwner = msg.sender;
67
+ IBaseComponent distribution = IBaseComponent(distributionAddress);
68
+
69
+ IRegistry.ObjectInfo memory info;
70
+ bytes memory data;
71
+ (info, data) = getRegistryService().registerDistribution(distribution, distributionOwner);
72
+
73
+ IInstance instance = _getInstance(info);
74
+
75
+ bool hasRole = getInstanceService().hasRole(
76
+ distributionOwner,
77
+ DISTRIBUTION_OWNER_ROLE(),
78
+ address(instance));
79
+
80
+ if(!hasRole) {
81
+ revert ExpectedRoleMissing(DISTRIBUTION_OWNER_ROLE(), distributionOwner);
82
+ }
83
+
84
+ distributionNftId = info.nftId;
85
+ ISetup.DistributionSetupInfo memory initialSetup = _decodeAndVerifyDistributionSetup(data);
86
+ instance.createDistributionSetup(distributionNftId, initialSetup);
51
87
  }
52
88
 
89
+ function _decodeAndVerifyDistributionSetup(bytes memory data) internal returns(ISetup.DistributionSetupInfo memory setup)
90
+ {
91
+ setup = abi.decode(
92
+ data,
93
+ (ISetup.DistributionSetupInfo)
94
+ );
53
95
 
54
- function getName() public pure override(IService, Service) returns(string memory name) {
55
- return NAME;
96
+ // TODO add checks if applicable
56
97
  }
57
98
 
58
99
  function setFees(
@@ -7,6 +7,7 @@ import {DistributionService} from "./DistributionService.sol";
7
7
  import {Registry} from "../../registry/Registry.sol";
8
8
  import {RegistryService} from "../../registry/RegistryService.sol";
9
9
  import {VersionLib} from "../../types/Version.sol";
10
+ import {SERVICE} from "../../types/ObjectType.sol";
10
11
 
11
12
  contract DistributionServiceManager is ProxyManager {
12
13
 
@@ -27,15 +28,16 @@ contract DistributionServiceManager is ProxyManager {
27
28
  _distributionService = DistributionService(address(versionable));
28
29
 
29
30
  Registry registry = Registry(registryAddress);
30
- address registryServiceAddress = registry.getServiceAddress("RegistryService", VersionLib.toVersion(3, 0, 0).toMajorPart());
31
+ address registryServiceAddress = registry.getServiceAddress(SERVICE(), VersionLib.toVersion(3, 0, 0).toMajorPart());
31
32
  RegistryService registryService = RegistryService(registryServiceAddress);
33
+ // TODO this must have a role or own nft to register service
34
+ //registryService.registerService(_distributionService);
32
35
 
33
- registryService.registerService(_distributionService);
34
-
36
+ // TODO no nft to link yet
35
37
  // link ownership of instance service manager ot nft owner of instance service
36
- _linkToNftOwnable(
37
- address(registryAddress),
38
- address(_distributionService));
38
+ //_linkToNftOwnable(
39
+ // address(registryAddress),
40
+ // address(_distributionService));
39
41
 
40
42
  // implies that after this constructor call only upgrade functionality is available
41
43
  _isDeployed = true;
@@ -0,0 +1,45 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {NftId} from "../../types/NftId.sol";
5
+ import {Fee} from "../../types/Fee.sol";
6
+ import {StateId} from "../../types/StateId.sol";
7
+ import {IService} from "../../shared/IService.sol";
8
+ import {IBundle} from "../module/IBundle.sol";
9
+ import {IInstance} from "../../instance/IInstance.sol";
10
+
11
+ interface IBundleService is IService {
12
+ error ErrorIBundleServiceInsufficientAllowance(address bundleOwner, address tokenHandlerAddress, uint256 amount);
13
+
14
+ function createBundle(
15
+ address owner,
16
+ Fee memory fee,
17
+ uint256 amount,
18
+ uint256 lifetime,
19
+ bytes calldata filter
20
+ ) external returns(NftId bundleNftId);
21
+
22
+ function setBundleFee(
23
+ NftId bundleNftId,
24
+ Fee memory fee
25
+ ) external;
26
+
27
+ function updateBundle(NftId instanceNftId, NftId bundleNftId, IBundle.BundleInfo memory bundleInfo, StateId state) external;
28
+
29
+ function underwritePolicy(IInstance instanceNftId,
30
+ NftId policyNftId,
31
+ NftId bundleNftId,
32
+ uint256 collateralAmount,
33
+ uint256 netPremium
34
+ ) external;
35
+
36
+ // function fundBundle(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
37
+
38
+ // function defundBundle(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
39
+
40
+ function lockBundle(NftId bundleNftId) external;
41
+
42
+ function unlockBundle(NftId bundleNftId) external;
43
+
44
+ // function closeBundle(NftId bundleNftId) external;
45
+ }
@@ -0,0 +1,87 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRisk} from "../module/IRisk.sol";
5
+ import {IService} from "../../shared/IService.sol";
6
+
7
+ import {NftId} from "../../types/NftId.sol";
8
+ import {ReferralId} from "../../types/Referral.sol";
9
+ import {RiskId} from "../../types/RiskId.sol";
10
+ import {StateId} from "../../types/StateId.sol";
11
+ import {Timestamp} from "../../types/Timestamp.sol";
12
+ import {UFixed} from "../../types/UFixed.sol";
13
+ import {Fee} from "../../types/Fee.sol";
14
+
15
+ interface IPolicyService is IService {
16
+
17
+ error ErrorIPolicyServiceInsufficientAllowance(address customer, address tokenHandlerAddress, uint256 amount);
18
+
19
+ function calculatePremium(
20
+ RiskId riskId,
21
+ uint256 sumInsuredAmount,
22
+ uint256 lifetime,
23
+ bytes memory applicationData,
24
+ NftId bundleNftId,
25
+ ReferralId referralId
26
+ )
27
+ external
28
+ view
29
+ returns (
30
+ uint256 premiumAmount,
31
+ uint256 productFeeAmount,
32
+ uint256 poolFeeAmount,
33
+ uint256 bundleFeeAmount,
34
+ uint256 distributionFeeAmount
35
+ );
36
+
37
+
38
+ function createApplication(
39
+ address applicationOwner,
40
+ RiskId riskId,
41
+ uint256 sumInsuredAmount,
42
+ uint256 lifetime,
43
+ bytes memory applicationData,
44
+ NftId bundleNftId,
45
+ ReferralId referralId
46
+ ) external returns (NftId nftId);
47
+
48
+ /**
49
+ * @dev revokes the application represented by {policyNftId}.
50
+ * an application can only be revoked in applied state.
51
+ * only the application holder may revoke an application.
52
+ */
53
+ function revoke(NftId policyNftId) external;
54
+
55
+ /**
56
+ * @dev underwrites the policy represented by {policyNftId}.
57
+ * optionally collects premiums and activates the policy.
58
+ * - premium payment is only attempted if requirePremiumPayment is set to true
59
+ * - activation is only done if activateAt is a non-zero timestamp
60
+ */
61
+ function underwrite(
62
+ NftId policyNftId,
63
+ bool requirePremiumPayment,
64
+ Timestamp activateAt
65
+ ) external;
66
+
67
+ // function decline(uint256 nftId) external;
68
+ // function expire(uint256 nftId) external;
69
+
70
+ function collectPremium(NftId policyNftId, Timestamp activateAt) external;
71
+
72
+ function activate(NftId policyNftId, Timestamp activateAt) external;
73
+
74
+
75
+ function close(NftId nftId) external;
76
+
77
+ // function createClaim(uint256 nftId, uint256 claimAmount) external;
78
+ // function confirmClaim(uint256 nftId, uint256 claimId, uint256 claimAmount) external;
79
+ // function declineClaim(uint256 nftId, uint256 claimId) external;
80
+ // function closeClaim(uint256 nftId, uint256 claimId) external; // TODO payoutClaim() -> implicit close when payed out in full
81
+
82
+ function calculateRequiredCollateral(
83
+ UFixed collateralizationLevel,
84
+ uint256 sumInsuredAmount
85
+ ) external pure returns(uint256 collateralAmount);
86
+
87
+ }
@@ -3,35 +3,18 @@ pragma solidity ^0.8.19;
3
3
 
4
4
  import {NftId} from "../../types/NftId.sol";
5
5
  import {Fee} from "../../types/Fee.sol";
6
+ import {StateId} from "../../types/StateId.sol";
6
7
  import {IService} from "../../shared/IService.sol";
8
+ import {IBundle} from "../module/IBundle.sol";
9
+ import {IInstance} from "../../instance/IInstance.sol";
7
10
 
8
11
  interface IPoolService is IService {
12
+
13
+ function register(address poolAddress) external returns(NftId);
14
+
9
15
  function setFees(
10
16
  Fee memory poolFee,
11
17
  Fee memory stakingFee,
12
18
  Fee memory performanceFee
13
19
  ) external;
14
-
15
- function createBundle(
16
- address owner,
17
- Fee memory fee,
18
- uint256 amount,
19
- uint256 lifetime,
20
- bytes calldata filter
21
- ) external returns(NftId bundleNftId);
22
-
23
- function setBundleFee(
24
- NftId bundleNftId,
25
- Fee memory fee
26
- ) external;
27
-
28
- // function fundBundle(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
29
-
30
- // function defundBundle(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
31
-
32
- // function lockBundle(NftId bundleNftId) external;
33
-
34
- // function unlockBundle(NftId bundleNftId) external;
35
-
36
- // function closeBundle(NftId bundleNftId) external;
37
20
  }