@etherisc/gif-next 0.0.2-836e6e4-400 → 0.0.2-83e16a6-272

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 (303) hide show
  1. package/README.md +73 -1
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +853 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +874 -257
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/components/{BaseComponent.sol/BaseComponent.json → IComponent.sol/IComponent.json} +147 -103
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +791 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +655 -43
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +654 -5
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +590 -235
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +524 -161
  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/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  39. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  40. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +38 -62
  41. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  42. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  43. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +875 -128
  44. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  45. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +122 -165
  46. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  47. package/artifacts/contracts/instance/Instance.sol/Instance.json +790 -437
  48. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  49. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +103 -176
  50. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  51. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +61 -97
  52. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  53. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +387 -231
  54. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  55. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +331 -82
  56. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  57. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +8 -32
  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} +175 -155
  60. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  61. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  62. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  63. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +2 -2
  64. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  65. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
  66. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  67. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +24 -13
  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/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  75. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +858 -0
  76. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  77. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +657 -0
  78. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
  79. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +394 -232
  80. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +308 -79
  82. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  83. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +743 -0
  84. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  85. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +637 -0
  86. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +441 -177
  88. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +328 -71
  90. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  91. package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IApplicationService.sol/IApplicationService.json} +187 -191
  92. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +157 -204
  94. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  95. package/artifacts/contracts/{components/IBaseComponent.sol/IBaseComponent.json → instance/service/IClaimService.sol/IClaimService.json} +151 -137
  96. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +184 -150
  98. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +125 -217
  100. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  101. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +16 -179
  102. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  103. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +16 -179
  104. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  105. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +384 -246
  106. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  107. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +339 -86
  108. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  109. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +209 -198
  110. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  111. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +305 -76
  112. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  113. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +209 -198
  114. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  115. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +305 -76
  116. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  117. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  118. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +98 -5
  119. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  120. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +104 -201
  121. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  122. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  123. package/artifacts/contracts/registry/Registry.sol/Registry.json +112 -27
  124. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
  125. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +18 -18
  126. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  127. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +209 -238
  128. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  129. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +300 -81
  130. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  131. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +70 -69
  132. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  133. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +151 -50
  134. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  135. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  136. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  137. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  138. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +40 -29
  139. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  140. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +129 -0
  141. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  142. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +21 -34
  143. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  144. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.json +48 -0
  145. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  146. package/artifacts/contracts/shared/IService.sol/IService.json +16 -179
  147. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  148. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
  149. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  150. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +120 -27
  151. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  152. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
  153. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  154. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +294 -61
  155. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  156. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +129 -51
  157. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  158. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
  159. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  160. package/artifacts/contracts/shared/Service.sol/Service.json +106 -160
  161. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  162. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  163. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  164. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  165. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
  166. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  167. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  168. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +129 -51
  169. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  170. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  171. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  172. package/artifacts/contracts/test/TestService.sol/TestService.json +127 -217
  173. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  174. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  175. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  176. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +8 -190
  177. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  178. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  179. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  180. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  181. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  182. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
  183. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  184. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  185. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  187. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  188. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  189. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  190. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  191. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  192. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  193. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  194. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  195. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  196. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
  197. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  198. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +2 -2
  199. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  200. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  201. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  202. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  203. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  204. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  205. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  206. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  207. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  208. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  209. package/contracts/components/Component.sol +241 -0
  210. package/contracts/components/Distribution.sol +209 -64
  211. package/contracts/components/IComponent.sol +54 -0
  212. package/contracts/components/IDistributionComponent.sol +59 -3
  213. package/contracts/components/IPoolComponent.sol +50 -29
  214. package/contracts/components/IProductComponent.sol +7 -3
  215. package/contracts/components/Pool.sol +135 -152
  216. package/contracts/components/Product.sol +114 -121
  217. package/contracts/instance/BundleManager.sol +7 -11
  218. package/contracts/instance/IInstance.sol +42 -12
  219. package/contracts/instance/IInstanceService.sol +23 -2
  220. package/contracts/instance/Instance.sol +84 -69
  221. package/contracts/instance/InstanceAccessManager.sol +31 -38
  222. package/contracts/instance/InstanceReader.sol +3 -25
  223. package/contracts/instance/InstanceService.sol +234 -58
  224. package/contracts/instance/InstanceServiceManager.sol +1 -1
  225. package/contracts/instance/ObjectManager.sol +7 -24
  226. package/contracts/instance/base/ComponentService.sol +134 -0
  227. package/contracts/instance/module/IAccess.sol +4 -5
  228. package/contracts/instance/module/IPolicy.sol +4 -2
  229. package/contracts/instance/module/ISetup.sol +5 -4
  230. package/contracts/instance/service/ApplicationService.sol +268 -0
  231. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  232. package/contracts/instance/service/BundleService.sol +49 -11
  233. package/contracts/instance/service/BundleServiceManager.sol +1 -1
  234. package/contracts/instance/service/ClaimService.sol +151 -0
  235. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  236. package/contracts/instance/service/DistributionService.sol +206 -43
  237. package/contracts/instance/service/DistributionServiceManager.sol +1 -1
  238. package/contracts/instance/service/IApplicationService.sol +82 -0
  239. package/contracts/instance/service/IBundleService.sol +12 -3
  240. package/contracts/instance/service/IClaimService.sol +61 -0
  241. package/contracts/instance/service/IDistributionService.sol +53 -0
  242. package/contracts/instance/service/IPolicyService.sol +48 -46
  243. package/contracts/instance/service/PolicyService.sol +153 -182
  244. package/contracts/instance/service/PolicyServiceManager.sol +2 -2
  245. package/contracts/instance/service/PoolService.sol +24 -37
  246. package/contracts/instance/service/PoolServiceManager.sol +1 -1
  247. package/contracts/instance/service/ProductService.sol +99 -34
  248. package/contracts/instance/service/ProductServiceManager.sol +2 -2
  249. package/contracts/registry/IRegistry.sol +16 -8
  250. package/contracts/registry/IRegistryService.sol +19 -10
  251. package/contracts/registry/Registry.sol +120 -52
  252. package/contracts/registry/RegistryAccessManager.sol +31 -25
  253. package/contracts/registry/RegistryService.sol +94 -134
  254. package/contracts/registry/RegistryServiceManager.sol +13 -13
  255. package/contracts/registry/ReleaseManager.sol +94 -120
  256. package/contracts/registry/TokenRegistry.sol +19 -13
  257. package/contracts/shared/ERC165.sol +14 -12
  258. package/contracts/shared/INftOwnable.sol +11 -10
  259. package/contracts/shared/IPolicyHolder.sol +26 -0
  260. package/contracts/shared/IRegisterable.sol +4 -6
  261. package/contracts/shared/IRegistryLinked.sol +12 -0
  262. package/contracts/shared/IVersionable.sol +4 -47
  263. package/contracts/shared/NftOwnable.sol +66 -80
  264. package/contracts/shared/PolicyHolder.sol +81 -0
  265. package/contracts/shared/ProxyManager.sol +100 -25
  266. package/contracts/shared/Registerable.sol +14 -30
  267. package/contracts/shared/RegistryLinked.sol +48 -0
  268. package/contracts/shared/Service.sol +19 -19
  269. package/contracts/shared/Versionable.sol +4 -92
  270. package/contracts/test/TestRegisterable.sol +1 -1
  271. package/contracts/test/TestService.sol +1 -1
  272. package/contracts/types/ClaimId.sol +52 -0
  273. package/contracts/types/DistributorType.sol +2 -2
  274. package/contracts/types/ObjectType.sol +9 -5
  275. package/contracts/types/PayoutId.sol +54 -0
  276. package/contracts/types/RoleId.sol +5 -5
  277. package/package.json +3 -3
  278. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  279. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  280. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
  281. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +0 -1206
  282. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  283. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +0 -448
  284. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  285. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +0 -763
  286. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  287. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  288. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  289. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  290. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -814
  291. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  292. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  293. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +0 -442
  294. package/contracts/components/BaseComponent.sol +0 -148
  295. package/contracts/components/IBaseComponent.sol +0 -32
  296. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +0 -23
  297. package/contracts/instance/IInstanceBase.sol +0 -26
  298. package/contracts/instance/InstanceBase.sol +0 -41
  299. package/contracts/instance/base/ComponentServiceBase.sol +0 -72
  300. package/contracts/instance/base/IInstanceBase.sol +0 -23
  301. package/contracts/instance/service/ComponentOwnerService.sol +0 -315
  302. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  303. package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -0,0 +1,134 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IComponent} from "../../components/IComponent.sol";
5
+ import {IRegistry} from "../../registry/IRegistry.sol";
6
+ import {IRegistryService} from "../../registry/IRegistryService.sol";
7
+ import {IInstance} from "../../instance/IInstance.sol";
8
+ import {IAccess} from "../module/IAccess.sol";
9
+ import {ObjectType, INSTANCE, REGISTRY} from "../../types/ObjectType.sol";
10
+ import {NftId} from "../../types/NftId.sol";
11
+ import {RoleId} from "../../types/RoleId.sol";
12
+
13
+ import {Service} from "../../shared/Service.sol";
14
+ import {InstanceService} from "../InstanceService.sol";
15
+ import {InstanceAccessManager} from "../InstanceAccessManager.sol";
16
+
17
+ abstract contract ComponentService is Service {
18
+
19
+ error ErrorComponentServiceAlreadyRegistered(address component, NftId nftId);
20
+ error ErrorComponentServiceNotComponent(address component);
21
+ error ErrorComponentServiceInvalidType(address component, ObjectType requiredType, ObjectType componentType);
22
+ error ErrorComponentServiceSenderNotOwner(address component, address initialOwner, address sender);
23
+ error ErrorComponentServiceExpectedRoleMissing(NftId instanceNftId, RoleId requiredRole, address sender);
24
+ error ErrorComponentServiceComponentLocked(address component);
25
+
26
+ /// @dev modifier to check if caller is a registered service
27
+ modifier onlyService() {
28
+ address caller = msg.sender;
29
+ require(getRegistry().isRegisteredService(caller), "ERROR_NOT_SERVICE");
30
+ _;
31
+ }
32
+
33
+ // view functions
34
+
35
+ function getRegistryService() public view virtual returns (IRegistryService) {
36
+ address service = getRegistry().getServiceAddress(REGISTRY(), getMajorVersion());
37
+ return IRegistryService(service);
38
+ }
39
+
40
+ function getInstanceService() public view returns (InstanceService) {
41
+ address service = getRegistry().getServiceAddress(INSTANCE(), getMajorVersion());
42
+ return InstanceService(service);
43
+ }
44
+
45
+ // internal functions
46
+ function _checkComponentForRegistration(
47
+ address componentAddress,
48
+ ObjectType requiredType,
49
+ RoleId requiredRole
50
+ )
51
+ internal
52
+ view
53
+ returns (
54
+ IComponent component,
55
+ address owner,
56
+ IInstance instance,
57
+ NftId instanceNftId
58
+ )
59
+ {
60
+ // component may only be registerd by initial owner of component
61
+ owner = msg.sender;
62
+
63
+ // check component has not already been registerd
64
+ NftId compoentNftId = getRegistry().getNftId(componentAddress);
65
+ if(compoentNftId.gtz()) {
66
+ revert ErrorComponentServiceAlreadyRegistered(componentAddress, compoentNftId);
67
+ }
68
+
69
+ // check this is a component
70
+ component = IComponent(componentAddress);
71
+ if(!component.supportsInterface(type(IComponent).interfaceId)) {
72
+ revert ErrorComponentServiceNotComponent(componentAddress);
73
+ }
74
+
75
+ // check component is of required type
76
+ IRegistry.ObjectInfo memory componentInfo = component.getInitialInfo();
77
+ if(componentInfo.objectType != requiredType) {
78
+ revert ErrorComponentServiceInvalidType(componentAddress, requiredType, componentInfo.objectType);
79
+ }
80
+
81
+ // check msg.sender is component owner
82
+ address initialOwner = componentInfo.initialOwner;
83
+ if(owner != initialOwner) {
84
+ revert ErrorComponentServiceSenderNotOwner(componentAddress, componentInfo.initialOwner, owner);
85
+ }
86
+
87
+ // check instance has assigned required role to owner
88
+ instanceNftId = componentInfo.parentNftId;
89
+ instance = _getInstance(instanceNftId);
90
+ bool hasRole = getInstanceService().hasRole(
91
+ owner,
92
+ requiredRole,
93
+ address(instance));
94
+
95
+ if(!hasRole) {
96
+ revert ErrorComponentServiceExpectedRoleMissing(instanceNftId, requiredRole, owner);
97
+ }
98
+ }
99
+
100
+ // internal view functions
101
+
102
+ function _getInstance(NftId instanceNftId) internal view returns (IInstance) {
103
+ IRegistry.ObjectInfo memory instanceInfo = getRegistry().getObjectInfo(instanceNftId);
104
+ return IInstance(instanceInfo.objectAddress);
105
+ }
106
+
107
+ function _getAndVerifyComponentInfoAndInstance(
108
+ //address component,
109
+ ObjectType expectedType
110
+ )
111
+ internal
112
+ view
113
+ returns(
114
+ IRegistry.ObjectInfo memory info,
115
+ IInstance instance
116
+ )
117
+ {
118
+ IRegistry registry = getRegistry();
119
+ //TODO redundant check -> just check type
120
+ //NftId componentNftId = registry.getNftId(component);
121
+ //require(componentNftId.gtz(), "ERROR_COMPONENT_UNKNOWN");
122
+
123
+ info = registry.getObjectInfo(msg.sender);
124
+ require(info.objectType == expectedType, "OBJECT_TYPE_INVALID");
125
+
126
+ address instanceAddress = registry.getObjectInfo(info.parentNftId).objectAddress;
127
+ instance = IInstance(instanceAddress);
128
+
129
+ InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
130
+ if (accessManager.isTargetLocked(info.objectAddress)) {
131
+ revert IAccess.ErrorIAccessTargetLocked(info.objectAddress);
132
+ }
133
+ }
134
+ }
@@ -1,7 +1,6 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
5
4
  import {ShortString, ShortStrings} from "@openzeppelin/contracts/utils/ShortStrings.sol";
6
5
 
7
6
  import {RoleId} from "../../types/RoleId.sol";
@@ -34,15 +33,15 @@ interface IAccess {
34
33
  error ErrorIAccessRoleNameNotUnique(RoleId roleId, ShortString name);
35
34
  error ErrorIAccessRoleInvalidUpdate(RoleId roleId, bool isCustom);
36
35
  error ErrorIAccessRoleIsCustomIsImmutable(RoleId roleId, bool isCustom, bool isCustomExisting);
37
- error ErrorIAccessSetLockedForNonexstentRole(RoleId roleId);
38
36
  error ErrorIAccessGrantNonexstentRole(RoleId roleId);
39
37
  error ErrorIAccessRevokeNonexstentRole(RoleId roleId);
40
38
  error ErrorIAccessRenounceNonexstentRole(RoleId roleId);
41
39
 
42
40
  error ErrorIAccessTargetAddressZero();
43
- error ErrorIAccessTargetAlreadyExists(address target, ShortString name);
41
+ error ErrorIAccessTargetDoesNotExist(ShortString name);
42
+ error ErrorIAccessTargetAddressDoesNotExist(address target);
43
+ error ErrorIAccessTargetExists(address target, ShortString name);
44
44
  error ErrorIAccessTargetNameEmpty(address target);
45
45
  error ErrorIAccessTargetNameExists(address target, address existingTarget, ShortString name);
46
- error ErrorIAccessSetLockedForNonexstentTarget(address target);
47
-
46
+ error ErrorIAccessTargetLocked(address target);
48
47
  }
@@ -2,12 +2,14 @@
2
2
  pragma solidity ^0.8.20;
3
3
 
4
4
  import {NftId} from "../../types/NftId.sol";
5
- import {NumberId} from "../../types/NumberId.sol";
5
+ import {ClaimId} from "../../types/ClaimId.sol";
6
6
  import {ReferralId} from "../../types/Referral.sol";
7
7
  import {RiskId} from "../../types/RiskId.sol";
8
8
  import {Timestamp} from "../../types/Timestamp.sol";
9
9
 
10
10
  interface IPolicy {
11
+
12
+ /// @dev policy data for the full policy lifecycle
11
13
  struct PolicyInfo {
12
14
  NftId productNftId;
13
15
  NftId bundleNftId;
@@ -37,7 +39,7 @@ interface IPolicy {
37
39
 
38
40
  // claimId neeeds to be encoded policyNftId:claimId combination
39
41
  struct PayoutInfo {
40
- NumberId claimId;
42
+ ClaimId claimId;
41
43
  uint256 amount;
42
44
  bytes data;
43
45
  Timestamp paidAt; // payoment of confirmed claim amount (or declinedAt)
@@ -28,19 +28,20 @@ interface ISetup {
28
28
  NftId productNftId;
29
29
  TokenHandler tokenHandler;
30
30
  Fee distributionFee; // default distribution fee (no referral id)
31
- bool isIntercepting; // intercepts nft transfers (for distributors)
32
31
  address wallet;
33
32
  }
34
33
 
35
34
  struct PoolSetupInfo {
36
35
  NftId productNftId;
37
36
  TokenHandler tokenHandler;
38
- UFixed collateralizationLevel;
37
+ bool isInterceptingBundleTransfers; // intercepts nft transfers for bundles
38
+ bool isExternallyManaged; // funding bundles is restricted to book keeping, actual funds may be provided as needed to support payouts
39
+ bool isVerifyingApplications; // underwriting requires the pool component checks/confirms the applications
40
+ UFixed collateralizationLevel; // factor to calculate collateral for sum insurance (default 100%)
41
+ UFixed retentionLevel; // amount of collateral held in pool (default 100%)
39
42
  Fee poolFee; // pool fee on net premium
40
43
  Fee stakingFee; // pool fee on staked capital from investor
41
44
  Fee performanceFee; // pool fee on profits from capital investors
42
- bool isIntercepting; // intercepts nft transfers (for bundles)
43
- bool isConfirmingApplication; // confirms applications before they are underwritten
44
45
  address wallet;
45
46
  }
46
47
  }
@@ -0,0 +1,268 @@
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 "./IApplicationService.sol";
6
+
7
+ import {IRegistry} from "../../registry/IRegistry.sol";
8
+ import {IProductComponent} from "../../components/IProductComponent.sol";
9
+ import {Product} from "../../components/Product.sol";
10
+ import {IPoolComponent} from "../../components/IPoolComponent.sol";
11
+ import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
12
+ import {IInstance} from "../IInstance.sol";
13
+ import {IPolicy} from "../module/IPolicy.sol";
14
+ import {IRisk} from "../module/IRisk.sol";
15
+ import {IBundle} from "../module/IBundle.sol";
16
+ import {IProductService} from "./IProductService.sol";
17
+ import {ITreasury} from "../module/ITreasury.sol";
18
+ import {ISetup} from "../module/ISetup.sol";
19
+
20
+ import {TokenHandler} from "../../shared/TokenHandler.sol";
21
+
22
+ import {IVersionable} from "../../shared/IVersionable.sol";
23
+ import {Versionable} from "../../shared/Versionable.sol";
24
+
25
+ import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
26
+ import {UFixed, UFixedLib} from "../../types/UFixed.sol";
27
+ import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
28
+ import {ObjectType, INSTANCE, PRODUCT, POOL, APPLICATION, POLICY, BUNDLE} from "../../types/ObjectType.sol";
29
+ import {APPLIED, REVOKED, UNDERWRITTEN, ACTIVE, KEEP_STATE, CLOSED} from "../../types/StateId.sol";
30
+ import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
31
+ import {Fee, FeeLib} from "../../types/Fee.sol";
32
+ import {ReferralId} from "../../types/Referral.sol";
33
+ import {RiskId} from "../../types/RiskId.sol";
34
+ import {StateId} from "../../types/StateId.sol";
35
+ import {Version, VersionLib} from "../../types/Version.sol";
36
+
37
+ import {ComponentService} from "../base/ComponentService.sol";
38
+ import {InstanceReader} from "../InstanceReader.sol";
39
+ import {IApplicationService} from "./IApplicationService.sol";
40
+ import {IBundleService} from "./IBundleService.sol";
41
+ import {IPoolService} from "./IPoolService.sol";
42
+ import {IService} from "../../shared/IService.sol";
43
+ import {Service} from "../../shared/Service.sol";
44
+
45
+
46
+ contract ApplicationService is
47
+ ComponentService,
48
+ IApplicationService
49
+ {
50
+
51
+ function _initialize(
52
+ address owner,
53
+ bytes memory data
54
+ )
55
+ internal
56
+ virtual override
57
+ initializer()
58
+ {
59
+ // TODO check this, might no longer be the way, refactor if necessary
60
+ address registryAddress;
61
+ address initialOwner;
62
+ (registryAddress, initialOwner) = abi.decode(data, (address, address));
63
+
64
+ initializeService(registryAddress, owner);
65
+ registerInterface(type(IApplicationService).interfaceId);
66
+ }
67
+
68
+
69
+ function getDomain() public pure override(IService, Service) returns(ObjectType) {
70
+ return APPLICATION();
71
+ }
72
+
73
+
74
+ function create(
75
+ address applicationOwner,
76
+ RiskId riskId,
77
+ uint256 sumInsuredAmount,
78
+ uint256 lifetime,
79
+ NftId bundleNftId,
80
+ ReferralId referralId,
81
+ bytes memory applicationData
82
+ )
83
+ external
84
+ virtual
85
+ returns (NftId applicationNftId)
86
+ {
87
+ (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
88
+ // TODO: add validations (see create bundle in pool service)
89
+
90
+ applicationNftId = getRegistryService().registerPolicy(
91
+ IRegistry.ObjectInfo(
92
+ zeroNftId(),
93
+ productInfo.nftId,
94
+ POLICY(),
95
+ false, // intercepting property for policies is defined on product
96
+ address(0),
97
+ applicationOwner,
98
+ ""
99
+ )
100
+ );
101
+
102
+ (uint256 premiumAmount,,,,) = calculatePremium(
103
+ riskId,
104
+ sumInsuredAmount,
105
+ lifetime,
106
+ applicationData,
107
+ bundleNftId,
108
+ referralId
109
+ );
110
+
111
+ IPolicy.PolicyInfo memory policyInfo = IPolicy.PolicyInfo(
112
+ productInfo.nftId,
113
+ bundleNftId,
114
+ referralId,
115
+ riskId,
116
+ sumInsuredAmount,
117
+ premiumAmount,
118
+ 0,
119
+ lifetime,
120
+ applicationData,
121
+ "",
122
+ 0,
123
+ 0,
124
+ 0,
125
+ zeroTimestamp(),
126
+ zeroTimestamp(),
127
+ zeroTimestamp()
128
+ );
129
+
130
+ instance.createApplication(applicationNftId, policyInfo);
131
+ instance.updateApplicationState(applicationNftId, APPLIED());
132
+
133
+ // TODO: add logging
134
+ }
135
+
136
+
137
+ function renew(
138
+ NftId policyNftId, // policy to be renewd (renewal inherits policy attributes)
139
+ NftId bundleNftId // will likely need a newer bundle for underwriting
140
+ )
141
+ external
142
+ virtual override
143
+ returns (NftId applicationNftId)
144
+ {
145
+
146
+ }
147
+
148
+
149
+ function adjust(
150
+ NftId applicationNftId,
151
+ RiskId riskId,
152
+ NftId bundleNftId,
153
+ ReferralId referralId,
154
+ uint256 sumInsuredAmount,
155
+ uint256 lifetime,
156
+ bytes memory applicationData
157
+ )
158
+ external
159
+ virtual override
160
+ {
161
+
162
+ }
163
+
164
+ function revoke(NftId applicationNftId)
165
+ external
166
+ virtual override
167
+ {
168
+ (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
169
+ instance.updateApplicationState(applicationNftId, REVOKED());
170
+ }
171
+
172
+
173
+ function calculatePremium(
174
+ RiskId riskId,
175
+ uint256 sumInsuredAmount,
176
+ uint256 lifetime,
177
+ bytes memory applicationData,
178
+ NftId bundleNftId,
179
+ ReferralId referralId
180
+ )
181
+ public
182
+ view
183
+ virtual override
184
+ returns (
185
+ uint256 premiumAmount,
186
+ uint256 distributionFeeAmount,
187
+ uint256 productFeeAmount,
188
+ uint256 poolFeeAmount,
189
+ uint256 bundleFeeAmount
190
+ )
191
+ {
192
+ Product product = _getAndVerifyInstanceAndProduct();
193
+ uint256 netPremiumAmount = product.calculateNetPremium(
194
+ sumInsuredAmount,
195
+ riskId,
196
+ lifetime,
197
+ applicationData
198
+ );
199
+
200
+ (
201
+ productFeeAmount,
202
+ poolFeeAmount,
203
+ bundleFeeAmount,
204
+ distributionFeeAmount
205
+ ) = _calculateFeeAmounts(
206
+ netPremiumAmount,
207
+ product,
208
+ bundleNftId,
209
+ referralId
210
+ );
211
+
212
+ premiumAmount = netPremiumAmount + productFeeAmount;
213
+ premiumAmount += poolFeeAmount + bundleFeeAmount;
214
+ premiumAmount += distributionFeeAmount;
215
+ }
216
+
217
+
218
+ // internal functions
219
+
220
+ function _calculateFeeAmounts(
221
+ uint256 netPremiumAmount,
222
+ Product product,
223
+ NftId bundleNftId,
224
+ ReferralId referralId
225
+ )
226
+ internal
227
+ view
228
+ returns (
229
+ uint256 productFeeAmount,
230
+ uint256 poolFeeAmount,
231
+ uint256 bundleFeeAmount,
232
+ uint256 distributionFeeAmount
233
+ )
234
+ {
235
+ InstanceReader instanceReader;
236
+ {
237
+ IInstance instance = product.getInstance();
238
+ instanceReader = instance.getInstanceReader();
239
+ }
240
+
241
+ NftId poolNftId = product.getPoolNftId();
242
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
243
+ require(bundleInfo.poolNftId == poolNftId,"ERROR:PRS-035:BUNDLE_POOL_MISMATCH");
244
+
245
+ {
246
+ ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(product.getProductNftId());
247
+ (productFeeAmount,) = FeeLib.calculateFee(productSetupInfo.productFee, netPremiumAmount);
248
+ }
249
+ {
250
+ ISetup.PoolSetupInfo memory poolSetupInfo = instanceReader.getPoolSetupInfo(poolNftId);
251
+ (poolFeeAmount,) = FeeLib.calculateFee(poolSetupInfo.poolFee, netPremiumAmount);
252
+ }
253
+ {
254
+ NftId distributionNftId = product.getDistributionNftId();
255
+ ISetup.DistributionSetupInfo memory distributionSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
256
+ (distributionFeeAmount,) = FeeLib.calculateFee(distributionSetupInfo.distributionFee, netPremiumAmount);
257
+ }
258
+
259
+ (bundleFeeAmount,) = FeeLib.calculateFee(bundleInfo.fee, netPremiumAmount);
260
+ }
261
+
262
+
263
+ function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
264
+ IRegistry.ObjectInfo memory productInfo;
265
+ (productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
266
+ product = Product(productInfo.objectAddress);
267
+ }
268
+ }
@@ -0,0 +1,35 @@
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 {ApplicationService} from "./ApplicationService.sol";
7
+
8
+ contract ApplicationServiceManager is ProxyManager {
9
+
10
+ ApplicationService private _applicationService;
11
+
12
+ /// @dev initializes proxy manager with service implementation
13
+ constructor(
14
+ address registryAddress
15
+ )
16
+ ProxyManager(registryAddress)
17
+ {
18
+ ApplicationService svc = new ApplicationService();
19
+ bytes memory data = abi.encode(registryAddress, address(this));
20
+ IVersionable versionable = deploy(
21
+ address(svc),
22
+ data);
23
+
24
+ _applicationService = ApplicationService(address(versionable));
25
+ }
26
+
27
+ //--- view functions ----------------------------------------------------//
28
+ function getApplicationService()
29
+ external
30
+ view
31
+ returns (ApplicationService)
32
+ {
33
+ return _applicationService;
34
+ }
35
+ }
@@ -24,17 +24,16 @@ import {TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
24
24
  import {IService} from "../../shared/IService.sol";
25
25
  import {Service} from "../../shared/Service.sol";
26
26
  import {BundleManager} from "../BundleManager.sol";
27
- import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
27
+ import {ComponentService} from "../base/ComponentService.sol";
28
28
  import {IBundleService} from "./IBundleService.sol";
29
29
  import {IRegistryService} from "../../registry/IRegistryService.sol";
30
30
  import {InstanceService} from "../InstanceService.sol";
31
31
  import {InstanceReader} from "../InstanceReader.sol";
32
- import {IBaseComponent} from "../../components/IBaseComponent.sol";
33
32
 
34
33
  string constant BUNDLE_SERVICE_NAME = "BundleService";
35
34
 
36
35
  contract BundleService is
37
- ComponentServiceBase,
36
+ ComponentService,
38
37
  IBundleService
39
38
  {
40
39
  using NftIdLib for NftId;
@@ -56,9 +55,8 @@ contract BundleService is
56
55
  (registryAddress, initialOwner) = abi.decode(data, (address, address));
57
56
  // TODO while PoolService is not deployed in PoolServiceManager constructor
58
57
  // owner is PoolServiceManager deployer
59
- _initializeService(registryAddress, owner);
60
-
61
- _registerInterface(type(IBundleService).interfaceId);
58
+ initializeService(registryAddress, owner);
59
+ registerInterface(type(IBundleService).interfaceId);
62
60
  }
63
61
 
64
62
  function getDomain() public pure override(Service, IService) returns(ObjectType) {
@@ -165,17 +163,23 @@ contract BundleService is
165
163
  bundleManager.unlock(bundleNftId);
166
164
  }
167
165
 
168
- function underwritePolicy(IInstance instance,
166
+ function lockCollateral(
167
+ IInstance instance,
169
168
  NftId policyNftId,
170
169
  NftId bundleNftId,
171
170
  uint256 collateralAmount,
172
171
  uint256 netPremiumAmount
173
172
  )
174
173
  external
175
- onlyService
174
+ onlyService
175
+ returns (
176
+ IBundle.BundleInfo memory bundleInfo
177
+ )
176
178
  {
177
179
  InstanceReader instanceReader = instance.getInstanceReader();
178
- IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
180
+ bundleInfo = instanceReader.getBundleInfo(bundleNftId);
181
+
182
+ // TODO add validation
179
183
 
180
184
  // lock collateral
181
185
  bundleInfo.lockedAmount += collateralAmount;
@@ -186,6 +190,40 @@ contract BundleService is
186
190
  linkPolicy(instance, policyNftId);
187
191
  }
188
192
 
193
+ function increaseBalance(IInstance instance,
194
+ NftId bundleNftId,
195
+ uint256 amount
196
+ )
197
+ external
198
+ onlyService
199
+ {
200
+ InstanceReader instanceReader = instance.getInstanceReader();
201
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
202
+
203
+ bundleInfo.balanceAmount += amount;
204
+
205
+ instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
206
+ }
207
+
208
+ function closePolicy(IInstance instance,
209
+ NftId policyNftId,
210
+ NftId bundleNftId,
211
+ uint256 collateralAmount
212
+ )
213
+ external
214
+ onlyService
215
+ {
216
+ InstanceReader instanceReader = instance.getInstanceReader();
217
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
218
+
219
+ // lock collateral
220
+ bundleInfo.lockedAmount -= collateralAmount;
221
+
222
+ instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
223
+
224
+ unlinkPolicy(instance, policyNftId);
225
+ }
226
+
189
227
  /// @dev links policy to bundle
190
228
  function linkPolicy(IInstance instance, NftId policyNftId)
191
229
  internal
@@ -219,8 +257,8 @@ contract BundleService is
219
257
  }
220
258
 
221
259
  // ensure policy is closeable
222
- if (policyInfo.expiredAt < TimestampLib.blockTimestamp()
223
- || policyInfo.payoutAmount < policyInfo.sumInsuredAmount)
260
+ if ( TimestampLib.blockTimestamp() < policyInfo.expiredAt
261
+ && policyInfo.payoutAmount < policyInfo.sumInsuredAmount)
224
262
  {
225
263
  revert BundleManager.ErrorBundleManagerPolicyNotCloseable(policyNftId);
226
264
  }
@@ -16,7 +16,7 @@ contract BundleServiceManager is ProxyManager {
16
16
  constructor(
17
17
  address registryAddress
18
18
  )
19
- ProxyManager()
19
+ ProxyManager(registryAddress)
20
20
  {
21
21
  BundleService bundleSrv = new BundleService();
22
22
  bytes memory data = abi.encode(registryAddress, address(this));