@etherisc/gif-next 0.0.2-b643f7e-850 → 0.0.2-b7cfc95-746

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