@etherisc/gif-next 0.0.2-b4fc06b-491 → 0.0.2-b5e5146-738

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 (261) hide show
  1. package/README.md +63 -1
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +656 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +329 -90
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/{shared/RegisterableUpgradable.sol/RegisterableUpgradable.json → components/IComponent.sol/IComponent.json} +171 -158
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +496 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +568 -2
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +596 -5
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +360 -118
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +342 -147
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  33. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  36. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  37. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  39. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  40. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  41. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  42. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +764 -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/IInstance.sol/IInstance.dbg.json +1 -1
  46. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1657 -28
  47. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  48. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +104 -19
  49. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  50. package/artifacts/contracts/instance/Instance.sol/Instance.json +203 -660
  51. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  52. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +219 -115
  53. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  54. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +164 -66
  55. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  56. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +270 -76
  57. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  58. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +67 -26
  59. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  60. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +261 -0
  61. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  62. package/artifacts/contracts/instance/base/{ComponentServiceBase.sol/ComponentServiceBase.json → ComponentService.sol/ComponentService.json} +138 -16
  63. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  64. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  65. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  66. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +2 -2
  67. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  68. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
  69. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  70. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +59 -16
  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 +1102 -0
  79. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  80. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +449 -0
  81. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  82. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +772 -0
  83. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  84. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +437 -0
  85. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  86. package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IBundleService.sol/IBundleService.json} +295 -46
  87. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  88. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +13 -18
  89. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  90. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +766 -0
  91. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  92. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +15 -82
  93. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  94. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +25 -245
  95. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  96. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1227 -0
  97. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  98. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +505 -0
  99. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  100. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +806 -0
  101. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  102. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +437 -0
  103. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  104. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +856 -0
  105. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  106. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +437 -0
  107. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  108. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  109. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  110. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +215 -218
  111. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  112. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +220 -111
  113. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  114. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  115. package/artifacts/contracts/registry/Registry.sol/Registry.json +227 -312
  116. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  117. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  118. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  119. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +69 -130
  120. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  121. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +51 -95
  122. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  123. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
  124. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  125. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +394 -0
  126. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  127. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  128. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  129. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  130. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  131. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +0 -5
  132. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  133. package/artifacts/contracts/shared/IService.sol/IService.json +13 -18
  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 +19 -6
  137. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  138. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +19 -6
  139. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  140. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +19 -11
  141. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  142. package/artifacts/contracts/shared/Service.sol/Service.json +26 -18
  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 +19 -11
  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 +44 -36
  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/Component.sol +237 -0
  180. package/contracts/components/Distribution.sol +38 -54
  181. package/contracts/components/IComponent.sol +43 -0
  182. package/contracts/components/IDistributionComponent.sol +5 -1
  183. package/contracts/components/IPoolComponent.sol +11 -3
  184. package/contracts/components/IProductComponent.sol +7 -3
  185. package/contracts/components/Pool.sol +69 -80
  186. package/contracts/components/Product.sol +76 -108
  187. package/contracts/instance/BundleManager.sol +125 -0
  188. package/contracts/instance/Cloneable.sol +46 -0
  189. package/contracts/instance/IInstance.sol +54 -10
  190. package/contracts/instance/IInstanceService.sol +14 -4
  191. package/contracts/instance/Instance.sol +73 -246
  192. package/contracts/instance/InstanceAccessManager.sol +88 -78
  193. package/contracts/instance/InstanceReader.sol +29 -26
  194. package/contracts/instance/InstanceService.sol +311 -77
  195. package/contracts/instance/InstanceServiceManager.sol +10 -12
  196. package/contracts/instance/ObjectManager.sol +84 -0
  197. package/contracts/instance/base/ComponentService.sol +134 -0
  198. package/contracts/instance/module/IAccess.sol +27 -17
  199. package/contracts/instance/module/IBundle.sol +1 -0
  200. package/contracts/instance/module/ISetup.sol +3 -0
  201. package/contracts/instance/service/BundleService.sol +293 -0
  202. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  203. package/contracts/instance/service/DistributionService.sol +105 -0
  204. package/contracts/instance/service/DistributionServiceManager.sol +51 -0
  205. package/contracts/instance/service/IBundleService.sol +44 -0
  206. package/contracts/instance/service/IPolicyService.sol +94 -0
  207. package/contracts/instance/service/IPoolService.sol +6 -23
  208. package/contracts/instance/service/IProductService.sol +6 -73
  209. package/contracts/instance/service/PolicyService.sol +538 -0
  210. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  211. package/contracts/instance/service/PoolService.sol +109 -0
  212. package/contracts/instance/service/PoolServiceManager.sol +51 -0
  213. package/contracts/instance/service/ProductService.sol +232 -0
  214. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  215. package/contracts/registry/ChainNft.sol +1 -1
  216. package/contracts/registry/IRegistry.sol +37 -29
  217. package/contracts/registry/IRegistryService.sol +44 -14
  218. package/contracts/registry/Registry.sol +218 -234
  219. package/contracts/registry/RegistryAccessManager.sol +216 -0
  220. package/contracts/registry/RegistryService.sol +83 -265
  221. package/contracts/registry/RegistryServiceManager.sol +20 -22
  222. package/contracts/registry/ReleaseManager.sol +332 -0
  223. package/contracts/registry/TokenRegistry.sol +112 -0
  224. package/contracts/shared/ERC165.sol +6 -2
  225. package/contracts/shared/IRegisterable.sol +1 -3
  226. package/contracts/shared/IService.sol +2 -1
  227. package/contracts/shared/NftOwnable.sol +7 -4
  228. package/contracts/shared/ProxyManager.sol +1 -1
  229. package/contracts/shared/Registerable.sol +11 -14
  230. package/contracts/shared/Service.sol +14 -8
  231. package/contracts/test/TestService.sol +3 -2
  232. package/contracts/types/NftIdSet.sol +26 -24
  233. package/contracts/types/RoleId.sol +14 -6
  234. package/contracts/types/StateId.sol +4 -0
  235. package/package.json +1 -1
  236. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  237. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -314
  238. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  239. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -267
  240. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
  241. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
  242. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1132
  243. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  244. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  245. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  246. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  247. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  248. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  249. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  250. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  251. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  252. package/contracts/components/BaseComponent.sol +0 -86
  253. package/contracts/components/IBaseComponent.sol +0 -24
  254. package/contracts/instance/AccessManagedSimple.sol +0 -122
  255. package/contracts/instance/AccessManagerSimple.sol +0 -692
  256. package/contracts/instance/IAccessManagerSimple.sol +0 -391
  257. package/contracts/instance/base/ComponentServiceBase.sol +0 -49
  258. package/contracts/instance/base/IInstanceBase.sol +0 -23
  259. package/contracts/instance/service/ComponentOwnerService.sol +0 -317
  260. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  261. package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -1,42 +1,36 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {ObjectType, POOL} from "../types/ObjectType.sol";
5
- import {IProductService} from "../instance/service/IProductService.sol";
4
+ import {POOL} from "../types/ObjectType.sol";
6
5
  import {IPoolService} from "../instance/service/IPoolService.sol";
7
- import {NftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
6
+ import {IBundleService} from "../instance/service/IBundleService.sol";
7
+ import {NftId, NftIdLib} from "../types/NftId.sol";
8
8
  import {Fee} from "../types/Fee.sol";
9
9
  import {UFixed} from "../types/UFixed.sol";
10
10
  import {IPoolComponent} from "./IPoolComponent.sol";
11
- import {BaseComponent} from "./BaseComponent.sol";
11
+ import {Component} from "./Component.sol";
12
12
  import {TokenHandler} from "../shared/TokenHandler.sol";
13
13
  import {ISetup} from "../instance/module/ISetup.sol";
14
14
 
15
- import {IRegistry} from "../registry/IRegistry.sol";
16
-
17
- // import {IPool} from "../instance/module/pool/IPoolModule.sol";
18
- import {ITreasury} from "../instance/module/ITreasury.sol";
19
15
  import {ISetup} from "../instance/module/ISetup.sol";
20
16
  import {InstanceReader} from "../instance/InstanceReader.sol";
21
17
 
22
- import {IRegisterable} from "../shared/IRegisterable.sol";
23
- import {Registerable} from "../shared/Registerable.sol";
24
18
 
25
- contract Pool is BaseComponent, IPoolComponent {
19
+ abstract contract Pool is Component, IPoolComponent {
26
20
  using NftIdLib for NftId;
27
21
 
28
- bool internal _isVerifying;
22
+ bool internal _isConfirmingApplication;
29
23
  UFixed internal _collateralizationLevel;
30
24
 
31
25
  Fee internal _initialPoolFee;
32
26
  Fee internal _initialStakingFee;
33
27
  Fee internal _initialPerformanceFee;
34
28
 
29
+ TokenHandler internal _tokenHandler;
30
+
35
31
  // may be used to interact with instance by derived contracts
36
32
  IPoolService internal _poolService;
37
-
38
- // only relevant to protect callback functions for "active" pools
39
- IProductService private _productService;
33
+ IBundleService private _bundleService;
40
34
 
41
35
  modifier onlyPoolService() {
42
36
  require(
@@ -45,39 +39,41 @@ contract Pool is BaseComponent, IPoolComponent {
45
39
  _;
46
40
  }
47
41
 
48
- modifier onlyProductService() {
49
- require(
50
- msg.sender == address(_productService),
51
- "ERROR:POL-002:NOT_PRODUCT_SERVICE");
52
- _;
53
- }
54
-
55
42
  constructor(
56
43
  address registry,
57
44
  NftId instanceNftId,
58
- NftId productNftId,
45
+ string memory name,
59
46
  // TODO refactor into tokenNftId
60
47
  address token,
61
48
  bool isInterceptor,
62
- bool verifying,
49
+ bool isConfirmingApplication,
63
50
  UFixed collateralizationLevel,
64
51
  Fee memory poolFee,
65
52
  Fee memory stakingFee,
66
53
  Fee memory performanceFee,
67
- address initialOwner
68
- )
69
- BaseComponent(registry, instanceNftId, productNftId, token, POOL(), isInterceptor, initialOwner)
70
- {
71
- _isVerifying = verifying;
54
+ address initialOwner,
55
+ bytes memory data
56
+ ) Component(
57
+ registry,
58
+ instanceNftId,
59
+ name,
60
+ token,
61
+ POOL(),
62
+ isInterceptor,
63
+ initialOwner,
64
+ data
65
+ ) {
66
+ _isConfirmingApplication = isConfirmingApplication;
72
67
  // TODO add validation
73
68
  _collateralizationLevel = collateralizationLevel;
74
69
  _initialPoolFee = poolFee;
75
70
  _initialStakingFee = stakingFee;
76
71
  _initialPerformanceFee = performanceFee;
77
72
 
78
- // TODO: reactivate when services are available again
79
- // _poolService = _instance.getPoolService();
80
- // _productService = _instance.getProductService();
73
+ _tokenHandler = new TokenHandler(token);
74
+
75
+ _poolService = getInstance().getPoolService();
76
+ _bundleService = getInstance().getBundleService();
81
77
 
82
78
  _registerInterface(type(IPoolComponent).interfaceId);
83
79
  }
@@ -93,7 +89,7 @@ contract Pool is BaseComponent, IPoolComponent {
93
89
  returns(NftId bundleNftId)
94
90
  {
95
91
  address owner = msg.sender;
96
- bundleNftId = _poolService.createBundle(
92
+ bundleNftId = _bundleService.createBundle(
97
93
  owner,
98
94
  fee,
99
95
  initialAmount,
@@ -138,8 +134,8 @@ contract Pool is BaseComponent, IPoolComponent {
138
134
  }
139
135
 
140
136
 
141
- function isVerifying() external view override returns (bool verifying) {
142
- return _isVerifying;
137
+ function isConfirmingApplication() external view override returns (bool isConfirmingApplication) {
138
+ return _isConfirmingApplication;
143
139
  }
144
140
 
145
141
  function getCollateralizationLevel() external view override returns (UFixed collateralizationLevel) {
@@ -166,57 +162,50 @@ contract Pool is BaseComponent, IPoolComponent {
166
162
  override
167
163
  // TODO add onlyBundleOwner
168
164
  {
169
- _poolService.setBundleFee(bundleNftId, fee);
165
+ _bundleService.setBundleFee(bundleNftId, fee);
170
166
  }
171
167
 
172
- function getSetupInfo() public view returns (ISetup.PoolSetupInfo memory setupInfo) {
173
- // TODO fix this
174
- if (getNftId().eq(zeroNftId())) {
175
- return ISetup.PoolSetupInfo(
176
- _productNftId,
177
- TokenHandler(address(0)),
178
- _collateralizationLevel,
179
- _initialPoolFee,
180
- _initialStakingFee,
181
- _initialPerformanceFee,
182
- _isVerifying,
183
- _wallet
184
- );
185
- }
168
+ function lockBundle(
169
+ NftId bundleNftId
170
+ )
171
+ external
172
+ override
173
+ // TODO add onlyBundleOwner
174
+ {
175
+ _bundleService.lockBundle(bundleNftId);
176
+ }
186
177
 
187
- InstanceReader reader = _instance.getInstanceReader();
188
- return reader.getPoolSetupInfo(getNftId());
178
+ function unlockBundle(
179
+ NftId bundleNftId
180
+ )
181
+ external
182
+ override
183
+ // TODO add onlyBundleOwner
184
+ {
185
+ _bundleService.unlockBundle(bundleNftId);
189
186
  }
190
187
 
191
- // from IRegisterable
188
+ function getSetupInfo() public view returns (ISetup.PoolSetupInfo memory setupInfo) {
189
+ InstanceReader reader = getInstance().getInstanceReader();
190
+ setupInfo = reader.getPoolSetupInfo(getNftId());
192
191
 
193
- // TODO used only once, occupies space
194
- // TODO do not use super
195
- function getInitialInfo()
196
- public
197
- view
198
- override (IRegisterable, Registerable)
199
- returns (IRegistry.ObjectInfo memory, bytes memory)
200
- {
201
- (
202
- IRegistry.ObjectInfo memory info,
203
- bytes memory data
204
- ) = super.getInitialInfo();
192
+ // fallback to initial setup info (wallet is always != address(0))
193
+ if(setupInfo.wallet == address(0)) {
194
+ setupInfo = _getInitialSetupInfo();
195
+ }
196
+ }
205
197
 
206
- return (
207
- info,
208
- abi.encode(
209
- ISetup.PoolSetupInfo(
210
- getProductNftId(),
211
- TokenHandler(address(0)),
212
- _collateralizationLevel,
213
- _initialPoolFee,
214
- _initialStakingFee,
215
- _initialPerformanceFee,
216
- _isVerifying,
217
- _wallet
218
- )
219
- )
198
+ function _getInitialSetupInfo() internal view returns (ISetup.PoolSetupInfo memory) {
199
+ return ISetup.PoolSetupInfo(
200
+ getProductNftId(),
201
+ _tokenHandler,
202
+ _collateralizationLevel,
203
+ _initialPoolFee,
204
+ _initialStakingFee,
205
+ _initialPerformanceFee,
206
+ false,
207
+ _isConfirmingApplication,
208
+ getWallet()
220
209
  );
221
210
  }
222
211
 
@@ -248,7 +237,7 @@ contract Pool is BaseComponent, IPoolComponent {
248
237
  internal
249
238
  returns(NftId bundleNftId)
250
239
  {
251
- bundleNftId = _poolService.createBundle(
240
+ bundleNftId = _bundleService.createBundle(
252
241
  bundleOwner,
253
242
  fee,
254
243
  amount,
@@ -4,37 +4,33 @@ pragma solidity ^0.8.19;
4
4
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
5
 
6
6
  import {IRisk} from "../instance/module/IRisk.sol";
7
- import {ITreasury} from "../instance/module/ITreasury.sol";
8
- import {IProductService} from "../instance/service/IProductService.sol";
7
+ import {IPolicyService} from "../instance/service/IPolicyService.sol";
9
8
  import {IProductComponent} from "./IProductComponent.sol";
10
- import {NftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
11
- import {ObjectType, PRODUCT} from "../types/ObjectType.sol";
9
+ import {NftId, NftIdLib} from "../types/NftId.sol";
10
+ import {PRODUCT} from "../types/ObjectType.sol";
12
11
  import {ReferralId} from "../types/Referral.sol";
13
12
  import {RiskId, RiskIdLib} from "../types/RiskId.sol";
14
13
  import {StateId} from "../types/StateId.sol";
15
14
  import {Timestamp} from "../types/Timestamp.sol";
16
- import {Fee, FeeLib} from "../types/Fee.sol";
17
- import {BaseComponent} from "./BaseComponent.sol";
15
+ import {Fee} from "../types/Fee.sol";
16
+ import {Component} from "./Component.sol";
18
17
 
19
- import {IRegistry} from "../registry/IRegistry.sol";
20
- import {IRegisterable} from "../shared/IRegisterable.sol";
21
- import {Registerable} from "../shared/Registerable.sol";
22
18
  import {TokenHandler} from "../shared/TokenHandler.sol";
23
19
 
24
20
  import {InstanceReader} from "../instance/InstanceReader.sol";
25
21
  import {ISetup} from "../instance/module/ISetup.sol";
26
22
  import {Pool} from "../components/Pool.sol";
23
+ import {Distribution} from "../components/Distribution.sol";
27
24
 
28
- import {zeroNftId} from "../types/NftId.sol";
29
-
30
- contract Product is BaseComponent, IProductComponent {
25
+ abstract contract Product is Component, IProductComponent {
31
26
  using NftIdLib for NftId;
32
27
 
33
- IProductService internal _productService;
28
+ IPolicyService internal _policyService;
34
29
  Pool internal _pool;
35
- address internal _distribution;
30
+ Distribution internal _distribution;
36
31
  Fee internal _initialProductFee;
37
32
  Fee internal _initialProcessingFee;
33
+ TokenHandler internal _tokenHandler;
38
34
 
39
35
  NftId internal _poolNftId;
40
36
  NftId internal _distributionNftId;
@@ -42,24 +38,36 @@ contract Product is BaseComponent, IProductComponent {
42
38
  constructor(
43
39
  address registry,
44
40
  NftId instanceNftid,
41
+ string memory name,
45
42
  address token,
46
43
  bool isInterceptor,
47
44
  address pool,
48
45
  address distribution,
49
46
  Fee memory productFee,
50
47
  Fee memory processingFee,
51
- address initialOwner
52
- ) BaseComponent(registry, instanceNftid, zeroNftId(), token, PRODUCT(), isInterceptor, initialOwner) {
48
+ address initialOwner,
49
+ bytes memory data
50
+ ) Component (
51
+ registry,
52
+ instanceNftid,
53
+ name,
54
+ token,
55
+ PRODUCT(),
56
+ isInterceptor,
57
+ initialOwner,
58
+ data
59
+ ) {
53
60
  // TODO add validation
54
- // TODO: reactivate when services are available again
55
- // _productService = _instance.getProductService();
61
+ _policyService = getInstance().getPolicyService();
56
62
  _pool = Pool(pool);
57
- _distribution = distribution;
63
+ _distribution = Distribution(distribution);
58
64
  _initialProductFee = productFee;
59
65
  _initialProcessingFee = processingFee;
60
66
 
67
+ _tokenHandler = new TokenHandler(token);
68
+
61
69
  _poolNftId = getRegistry().getNftId(address(_pool));
62
- _distributionNftId = getRegistry().getNftId(_distribution);
70
+ _distributionNftId = getRegistry().getNftId(address(_distribution));
63
71
 
64
72
  _registerInterface(type(IProductComponent).interfaceId);
65
73
  }
@@ -70,15 +78,15 @@ contract Product is BaseComponent, IProductComponent {
70
78
  RiskId riskId,
71
79
  uint256 lifetime,
72
80
  bytes memory applicationData,
73
- ReferralId referralId,
74
- NftId bundleNftId
81
+ NftId bundleNftId,
82
+ ReferralId referralId
75
83
  )
76
84
  external
77
85
  view
78
86
  override
79
87
  returns (uint256 premiumAmount)
80
88
  {
81
- (premiumAmount,,,,) = _productService.calculatePremium(
89
+ (premiumAmount,,,,) = _policyService.calculatePremium(
82
90
  riskId,
83
91
  sumInsuredAmount,
84
92
  lifetime,
@@ -112,19 +120,19 @@ contract Product is BaseComponent, IProductComponent {
112
120
  RiskId id,
113
121
  bytes memory data
114
122
  ) internal {
115
- _productService.createRisk(
123
+ getProductService().createRisk(
116
124
  id,
117
125
  data
118
126
  );
119
127
  }
120
128
 
121
- function _setRiskInfo(
129
+ function _updateRisk(
122
130
  RiskId id,
123
- IRisk.RiskInfo memory info
131
+ bytes memory data
124
132
  ) internal {
125
- _productService.setRiskInfo(
133
+ getProductService().updateRisk(
126
134
  id,
127
- info
135
+ data
128
136
  );
129
137
  }
130
138
 
@@ -132,14 +140,14 @@ contract Product is BaseComponent, IProductComponent {
132
140
  RiskId id,
133
141
  StateId state
134
142
  ) internal {
135
- _productService.updateRiskState(
143
+ getProductService().updateRiskState(
136
144
  id,
137
145
  state
138
146
  );
139
147
  }
140
148
 
141
149
  function _getRiskInfo(RiskId id) internal view returns (IRisk.RiskInfo memory info) {
142
- return _instance.getInstanceReader().getRiskInfo(id);
150
+ return getInstance().getInstanceReader().getRiskInfo(id);
143
151
  }
144
152
 
145
153
  function _createApplication(
@@ -151,7 +159,7 @@ contract Product is BaseComponent, IProductComponent {
151
159
  NftId bundleNftId,
152
160
  ReferralId referralId
153
161
  ) internal returns (NftId nftId) {
154
- nftId = _productService.createApplication(
162
+ nftId = _policyService.createApplication(
155
163
  applicationOwner,
156
164
  riskId,
157
165
  sumInsuredAmount,
@@ -169,7 +177,7 @@ contract Product is BaseComponent, IProductComponent {
169
177
  )
170
178
  internal
171
179
  {
172
- _productService.underwrite(
180
+ _policyService.underwrite(
173
181
  policyNftId,
174
182
  requirePremiumPayment,
175
183
  activateAt);
@@ -181,7 +189,7 @@ contract Product is BaseComponent, IProductComponent {
181
189
  )
182
190
  internal
183
191
  {
184
- _productService.collectPremium(
192
+ _policyService.collectPremium(
185
193
  policyNftId,
186
194
  activateAt);
187
195
  }
@@ -192,17 +200,25 @@ contract Product is BaseComponent, IProductComponent {
192
200
  )
193
201
  internal
194
202
  {
195
- _productService.activate(
203
+ _policyService.activate(
196
204
  policyNftId,
197
205
  activateAt);
198
206
  }
199
207
 
208
+ function _close(
209
+ NftId policyNftId
210
+ )
211
+ internal
212
+ {
213
+ _policyService.close(policyNftId);
214
+ }
215
+
200
216
  function getPoolNftId() external view override returns (NftId poolNftId) {
201
217
  return getRegistry().getNftId(address(_pool));
202
218
  }
203
219
 
204
220
  function getDistributionNftId() external view override returns (NftId distributionNftId) {
205
- return getRegistry().getNftId(_distribution);
221
+ return getRegistry().getNftId(address(_distribution));
206
222
  }
207
223
 
208
224
  // from product component
@@ -214,84 +230,36 @@ contract Product is BaseComponent, IProductComponent {
214
230
  onlyOwner
215
231
  override
216
232
  {
217
- _productService.setFees(productFee, processingFee);
233
+ getProductService().setFees(productFee, processingFee);
218
234
  }
219
235
 
220
236
  function getSetupInfo() public view returns (ISetup.ProductSetupInfo memory setupInfo) {
221
- if (getNftId().eq(zeroNftId())) {
222
- return ISetup.ProductSetupInfo(
223
- _token,
224
- TokenHandler(address(0)),
225
- _distributionNftId,
226
- _poolNftId,
227
- FeeLib.zeroFee(), //_instance.getDistributionFee(_distributionNftId)
228
- _initialProductFee,
229
- _initialProcessingFee,
230
- FeeLib.zeroFee(), //_instance.getPoolFee(_poolNftId)
231
- FeeLib.zeroFee(), //_instance.getStakingFee(_poolNftId)
232
- FeeLib.zeroFee() //_instance.getPerformanceFee(_poolNftId)
233
- );
234
- }
235
-
236
- InstanceReader reader = _instance.getInstanceReader();
237
- return reader.getProductSetupInfo(getNftId());
238
- }
237
+ InstanceReader reader = getInstance().getInstanceReader();
238
+ setupInfo = reader.getProductSetupInfo(getNftId());
239
239
 
240
- // from IRegisterable
240
+ // fallback to initial setup info (wallet is always != address(0))
241
+ if(setupInfo.wallet == address(0)) {
242
+ setupInfo = _getInitialSetupInfo();
243
+ }
244
+ }
241
245
 
242
- // TODO used only once, occupies space
243
- function getInitialInfo()
244
- public
245
- view
246
- override (IRegisterable, Registerable)
247
- returns (IRegistry.ObjectInfo memory, bytes memory)
248
- {
249
- // from Registerable
250
- (
251
- IRegistry.ObjectInfo memory productInfo,
252
- bytes memory data
253
- ) = super.getInitialInfo();
254
-
255
- // TODO read pool & distribution fees
256
- // 1) from pool -> the only option -> pool must be registered first?
257
- // 2) from instance -> all fees are set into instance at product registration which is ongoing here
258
- // checks are done in registryProduct() where THIS function is called
259
- //require(getRegistry().getObjectInfo(_poolNftId).objectType == POOL(), "POOL_NOT_REGISTERED");
260
- //require(getRegistry().getObjectInfo(_distributionNftId).objectType == DISTRIBUTION(), "DISTRIBUTION_NOT_REGISTERED");
261
-
262
- // from PoolComponent
263
- (
264
- IRegistry.ObjectInfo memory poolInfo,
265
- bytes memory poolData
266
- ) = _pool.getInitialInfo();
267
-
268
- (
269
- /*IPool.PoolInfo memory info*/,
270
- /*address wallet*/,
271
- /*IERC20Metadata token*/,
272
- Fee memory initialPoolFee,
273
- Fee memory initialStakingFee,
274
- Fee memory initialPerformanceFee
275
- ) = abi.decode(poolData, (ISetup.PoolSetupInfo, address, IERC20Metadata, Fee, Fee, Fee));
276
-
277
- // TODO from DistributionComponent
278
-
279
- return (
280
- productInfo,
281
- abi.encode(
282
- ISetup.ProductSetupInfo(
283
- _token,
284
- TokenHandler(address(0)),
285
- _distributionNftId,
286
- _poolNftId,
287
- FeeLib.zeroFee(), //_instance.getDistributionFee(_distributionNftId)
288
- _initialProductFee,
289
- _initialProcessingFee,
290
- initialPoolFee,
291
- initialStakingFee,
292
- initialPerformanceFee
293
- )
294
- )
246
+ function _getInitialSetupInfo() internal view returns (ISetup.ProductSetupInfo memory setupInfo) {
247
+ ISetup.DistributionSetupInfo memory distributionSetupInfo = _distribution.getSetupInfo();
248
+ ISetup.PoolSetupInfo memory poolSetupInfo = _pool.getSetupInfo();
249
+
250
+ return ISetup.ProductSetupInfo(
251
+ getToken(),
252
+ _tokenHandler,
253
+ _distributionNftId,
254
+ _poolNftId,
255
+ distributionSetupInfo.distributionFee,
256
+ _initialProductFee,
257
+ _initialProcessingFee,
258
+ poolSetupInfo.poolFee,
259
+ poolSetupInfo.stakingFee,
260
+ poolSetupInfo.performanceFee,
261
+ false,
262
+ getWallet()
295
263
  );
296
264
  }
297
265
  }
@@ -0,0 +1,125 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IInstance} from "./IInstance.sol";
5
+ import {INSTANCE} from "../types/ObjectType.sol";
6
+ import {InstanceReader} from "./InstanceReader.sol";
7
+ import {IPolicy} from "../instance/module/IPolicy.sol";
8
+ import {IRegistry} from "../registry/IRegistry.sol";
9
+ import {LibNftIdSet} from "../types/NftIdSet.sol";
10
+ import {NftId} from "../types/NftId.sol";
11
+ import {TimestampLib} from "../types/Timestamp.sol";
12
+
13
+ import {ObjectManager} from "./ObjectManager.sol";
14
+
15
+ contract BundleManager is
16
+ ObjectManager
17
+ {
18
+
19
+ event LogBundleManagerPolicyLinked(NftId bundleNftId, NftId policyNftId);
20
+ event LogBundleManagerPolicyUnlinked(NftId bundleNftId, NftId policyNftId);
21
+
22
+ event LogBundleManagerBundleAdded(NftId poolNftId, NftId bundleNftId);
23
+ event LogBundleManagerBundleUnlocked(NftId poolNftId, NftId bundleNftId);
24
+ event LogBundleManagerBundleLocked(NftId poolNftId, NftId bundleNftId);
25
+
26
+ error ErrorBundleManagerErrorPolicyAlreadyActivated(NftId policyNftId);
27
+ error ErrorBundleManagerErrorBundleLocked(NftId bundleNftId, NftId policyNftId);
28
+ error ErrorBundleManagerPolicyWithOpenClaims(NftId policyNftId, uint256 openClaimsCount);
29
+ error ErrorBundleManagerPolicyNotCloseable(NftId policyNftId);
30
+ error ErrorBundleManagerBundleUnknown(NftId bundleNftId);
31
+ error ErrorBundleManagerBundleNotRegistered(NftId bundleNftId);
32
+
33
+ mapping(NftId bundleNftId => LibNftIdSet.Set policies) internal _activePolicies;
34
+
35
+ /// @dev links a policy with its bundle
36
+ // to link a policy it MUST NOT yet have been activated
37
+ // the bundle MUST be unlocked (active) for linking (underwriting) and registered with this instance
38
+ function linkPolicy(NftId policyNftId) external restricted() {
39
+ NftId bundleNftId = _instance.getInstanceReader().getPolicyInfo(policyNftId).bundleNftId;
40
+ // decision will likely depend on the decision what to check here and what in the service
41
+ NftId poolNftId = _instance.getInstanceReader().getBundleInfo(bundleNftId).poolNftId;
42
+
43
+ // ensure bundle is unlocked (in active set) and registered with this instance
44
+ if (!_isActive(poolNftId, bundleNftId)) {
45
+ revert ErrorBundleManagerErrorBundleLocked(bundleNftId, policyNftId);
46
+ }
47
+
48
+ LibNftIdSet.add(_activePolicies[bundleNftId], policyNftId);
49
+ emit LogBundleManagerPolicyLinked(bundleNftId, policyNftId);
50
+ }
51
+
52
+
53
+ /// @dev unlinks a policy from its bundle
54
+ // to unlink a policy it must closable, ie. meet one of the following criterias
55
+ // - the policy MUST be past its expiry period and it MUST NOT have any open claims
56
+ // - the policy's payoutAmount MUST be equal to its sumInsuredAmount and MUST NOT have any open claims
57
+ function unlinkPolicy(NftId policyNftId) external restricted() {
58
+ IPolicy.PolicyInfo memory policyInfo = _instance.getInstanceReader().getPolicyInfo(policyNftId);
59
+
60
+ NftId bundleNftId = policyInfo.bundleNftId;
61
+ // decision will likely depend on the decision what to check here and what in the service
62
+ NftId poolNftId = _instance.getInstanceReader().getBundleInfo(bundleNftId).poolNftId;
63
+
64
+ // ensure bundle is registered with this instance
65
+ if (!_contains(poolNftId, bundleNftId)) {
66
+ revert ErrorBundleManagerBundleUnknown(bundleNftId);
67
+ }
68
+
69
+ LibNftIdSet.remove(_activePolicies[bundleNftId], policyNftId);
70
+ emit LogBundleManagerPolicyUnlinked(policyInfo.bundleNftId, policyNftId);
71
+ }
72
+
73
+
74
+ /// @dev add a new bundle to a riskpool registerd with this instance
75
+ // the corresponding pool is fetched via instance reader
76
+ function add(NftId bundleNftId) external restricted() {
77
+ NftId poolNftId = _instance.getInstanceReader().getBundleInfo(bundleNftId).poolNftId;
78
+
79
+ // ensure pool is registered with instance
80
+ if(poolNftId.eqz()) {
81
+ revert ErrorBundleManagerBundleNotRegistered(bundleNftId);
82
+ }
83
+
84
+ _add(poolNftId, bundleNftId);
85
+ emit LogBundleManagerBundleAdded(poolNftId, bundleNftId);
86
+ }
87
+
88
+ /// @dev unlocked (active) bundles are available to underwrite new policies
89
+ function unlock(NftId bundleNftId) external restricted() {
90
+ NftId poolNftId = _instance.getInstanceReader().getBundleInfo(bundleNftId).poolNftId;
91
+ _activate(poolNftId, bundleNftId);
92
+ emit LogBundleManagerBundleUnlocked(poolNftId, bundleNftId);
93
+ }
94
+
95
+ /// @dev locked (deactivated) bundles may not underwrite any new policies
96
+ function lock(NftId bundleNftId) external restricted() {
97
+ NftId poolNftId = _instance.getInstanceReader().getBundleInfo(bundleNftId).poolNftId;
98
+ _deactivate(poolNftId, bundleNftId);
99
+ emit LogBundleManagerBundleLocked(poolNftId, bundleNftId);
100
+ }
101
+
102
+ function bundles(NftId poolNftId) external view returns(uint256) {
103
+ return _objects(poolNftId);
104
+ }
105
+
106
+ function getBundleNftId(NftId poolNftId, uint256 idx) external view returns(NftId bundleNftId) {
107
+ return _getObject(poolNftId, idx);
108
+ }
109
+
110
+ function activeBundles(NftId poolNftId) external view returns(uint256) {
111
+ return _activeObjs(poolNftId);
112
+ }
113
+
114
+ function getActiveBundleNftId(NftId poolNftId, uint256 idx) external view returns(NftId bundleNftId) {
115
+ return _getActiveObject(poolNftId, idx);
116
+ }
117
+
118
+ function activePolicies(NftId bundleNftId) external view returns(uint256) {
119
+ return LibNftIdSet.size(_activePolicies[bundleNftId]);
120
+ }
121
+
122
+ function getActivePolicy(NftId bundleNftId, uint256 idx) external view returns(NftId policyNftId) {
123
+ return LibNftIdSet.getElementAt(_activePolicies[bundleNftId], idx);
124
+ }
125
+ }