@etherisc/gif-next 0.0.2-979c9aa-391 → 0.0.2-989147f-853

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 (507) hide show
  1. package/README.md +8 -13
  2. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +4 -0
  3. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +1376 -0
  4. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +4 -0
  5. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +1556 -0
  6. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  7. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +819 -0
  8. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +1000 -0
  10. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  11. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +840 -0
  12. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  13. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +73 -83
  14. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  15. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +275 -1359
  16. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  17. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +289 -214
  18. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  19. package/artifacts/contracts/instance/Instance.sol/Instance.json +441 -2539
  20. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  21. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +472 -181
  22. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +4 -0
  23. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +124 -0
  24. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  25. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +432 -280
  26. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +427 -471
  28. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  29. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +316 -145
  30. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
  31. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +2847 -0
  32. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +4 -0
  33. package/artifacts/contracts/instance/{Cloneable.sol → base/Cloneable.sol}/Cloneable.json +6 -1
  34. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  35. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +49 -0
  36. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  37. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  38. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +93 -14
  39. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  40. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +38 -13
  41. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  42. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.json +256 -0
  43. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  44. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +59 -65
  45. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  46. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  47. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
  48. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  49. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  50. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  51. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  52. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  53. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +4 -0
  54. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +1288 -0
  55. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  56. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +735 -0
  57. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +4 -0
  58. package/artifacts/contracts/{instance/service → pool}/IBundleService.sol/IBundleService.json +329 -263
  59. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  60. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +1095 -0
  61. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +4 -0
  62. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +1077 -0
  63. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +4 -0
  64. package/artifacts/contracts/pool/Pool.sol/Pool.json +1407 -0
  65. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +4 -0
  66. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +1622 -0
  67. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  68. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +747 -0
  69. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  70. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +918 -0
  71. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  72. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +687 -0
  73. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +4 -0
  74. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +1386 -0
  75. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  76. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +787 -0
  77. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  78. package/artifacts/contracts/{instance/service/IComponentOwnerService.sol/IComponentOwnerService.json → product/IApplicationService.sol/IApplicationService.json} +231 -204
  79. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +4 -0
  80. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +753 -0
  81. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  82. package/artifacts/contracts/{instance/service → product}/IPolicyService.sol/IPolicyService.json +277 -290
  83. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +4 -0
  84. package/artifacts/contracts/{instance/service/IPoolService.sol/IPoolService.json → product/IPricingService.sol/IPricingService.json} +254 -243
  85. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  86. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +861 -0
  87. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +4 -0
  88. package/artifacts/contracts/{instance/service → product}/IProductService.sol/IProductService.json +85 -179
  89. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +4 -0
  90. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +1281 -0
  91. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  92. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +779 -0
  93. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +4 -0
  94. package/artifacts/contracts/product/PricingService.sol/PricingService.json +1004 -0
  95. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
  96. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +727 -0
  97. package/artifacts/contracts/product/Product.sol/Product.dbg.json +4 -0
  98. package/artifacts/contracts/product/Product.sol/Product.json +1198 -0
  99. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +4 -0
  100. package/artifacts/contracts/product/ProductService.sol/ProductService.json +864 -0
  101. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  102. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +679 -0
  103. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  104. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
  105. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  106. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +283 -131
  107. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  108. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +268 -255
  109. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  110. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
  111. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  112. package/artifacts/contracts/registry/Registry.sol/Registry.json +302 -231
  113. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  114. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +238 -0
  115. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  116. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +313 -354
  117. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  118. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +322 -138
  119. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  120. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +846 -0
  121. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  122. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +132 -57
  123. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  124. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  125. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +4 -0
  126. package/artifacts/contracts/shared/Component.sol/Component.json +873 -0
  127. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +4 -0
  128. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +631 -0
  129. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  130. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  131. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +4 -0
  132. package/artifacts/contracts/{components/BaseComponent.sol/BaseComponent.json → shared/IComponent.sol/IComponent.json} +249 -82
  133. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  134. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +27 -29
  135. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  136. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +189 -0
  137. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  138. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +8 -34
  139. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  140. package/artifacts/contracts/{experiment/inheritance/IA.sol/ISharedA.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +15 -17
  141. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  142. package/artifacts/contracts/shared/IService.sol/IService.json +84 -178
  143. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  144. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
  145. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  146. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +109 -29
  147. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  148. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +302 -0
  149. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  150. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +310 -61
  151. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  152. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +118 -53
  153. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  154. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +71 -0
  155. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  156. package/artifacts/contracts/shared/Service.sol/Service.json +185 -165
  157. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  158. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +24 -6
  159. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  160. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  161. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  162. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
  163. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +4 -0
  164. package/artifacts/contracts/{instance/base/ComponentServiceBase.sol/ComponentServiceBase.json → staking/IStakingService.sol/IStakingService.json} +209 -207
  165. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +4 -0
  166. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +767 -0
  167. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +4 -0
  168. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +667 -0
  169. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  170. package/artifacts/contracts/{types → type}/AddressSet.sol/LibAddressSet.json +3 -3
  171. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +4 -0
  172. package/artifacts/contracts/type/Amount.sol/AmountLib.json +281 -0
  173. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  174. package/artifacts/contracts/{types → type}/Blocknumber.sol/BlocknumberLib.json +3 -3
  175. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  176. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +179 -0
  177. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  178. package/artifacts/contracts/{types → type}/DistributorType.sol/DistributorTypeLib.json +5 -5
  179. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +4 -0
  180. package/artifacts/contracts/type/Fee.sol/FeeLib.json +312 -0
  181. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +4 -0
  182. package/artifacts/contracts/{types → type}/Key32.sol/Key32Lib.json +3 -3
  183. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +4 -0
  184. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +166 -0
  185. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  186. package/artifacts/contracts/{types → type}/NftIdSet.sol/LibNftIdSet.json +3 -3
  187. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  188. package/artifacts/contracts/{types → type}/ObjectType.sol/ObjectTypeLib.json +3 -3
  189. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  190. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +209 -0
  191. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +4 -0
  192. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +142 -0
  193. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +4 -0
  194. package/artifacts/contracts/{types → type}/RiskId.sol/RiskIdLib.json +5 -5
  195. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +4 -0
  196. package/artifacts/contracts/{types → type}/RoleId.sol/RoleIdLib.json +5 -5
  197. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +4 -0
  198. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +124 -0
  199. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +4 -0
  200. package/artifacts/contracts/{types → type}/StateId.sol/StateIdLib.json +3 -3
  201. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +4 -0
  202. package/artifacts/contracts/{types → type}/Timestamp.sol/TimestampLib.json +39 -8
  203. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +4 -0
  204. package/artifacts/contracts/{types → type}/UFixed.sol/MathLib.json +3 -3
  205. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +4 -0
  206. package/artifacts/contracts/{types → type}/UFixed.sol/UFixedLib.json +3 -3
  207. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +4 -0
  208. package/artifacts/contracts/{types → type}/Version.sol/VersionLib.json +3 -3
  209. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +4 -0
  210. package/artifacts/contracts/{types → type}/Version.sol/VersionPartLib.json +3 -3
  211. package/contracts/distribution/Distribution.sol +285 -0
  212. package/contracts/distribution/DistributionService.sol +351 -0
  213. package/contracts/{instance/service → distribution}/DistributionServiceManager.sol +20 -20
  214. package/contracts/distribution/IDistributionComponent.sol +71 -0
  215. package/contracts/distribution/IDistributionService.sol +87 -0
  216. package/contracts/instance/BundleManager.sol +22 -25
  217. package/contracts/instance/IInstance.sol +56 -41
  218. package/contracts/instance/IInstanceService.sol +51 -16
  219. package/contracts/instance/Instance.sol +149 -196
  220. package/contracts/instance/InstanceAccessManager.sol +406 -167
  221. package/contracts/instance/InstanceAuthorizationsLib.sol +308 -0
  222. package/contracts/instance/InstanceReader.sol +102 -49
  223. package/contracts/instance/InstanceService.sol +214 -207
  224. package/contracts/instance/InstanceServiceManager.sol +15 -15
  225. package/contracts/instance/InstanceStore.sol +211 -0
  226. package/contracts/instance/{Cloneable.sol → base/Cloneable.sol} +8 -3
  227. package/contracts/instance/base/IKeyValueStore.sol +14 -10
  228. package/contracts/instance/base/ILifecycle.sol +3 -3
  229. package/contracts/instance/base/KeyValueStore.sol +44 -47
  230. package/contracts/instance/base/Lifecycle.sol +28 -7
  231. package/contracts/instance/{ObjectManager.sol → base/ObjectManager.sol} +16 -35
  232. package/contracts/instance/module/IAccess.sol +25 -19
  233. package/contracts/instance/module/IBundle.sol +11 -8
  234. package/contracts/instance/module/IComponents.sol +41 -0
  235. package/contracts/instance/module/IDistribution.sol +7 -4
  236. package/contracts/instance/module/IPolicy.sol +50 -17
  237. package/contracts/instance/module/IRisk.sol +1 -1
  238. package/contracts/instance/module/ISetup.sol +9 -22
  239. package/contracts/instance/module/ITreasury.sol +2 -2
  240. package/contracts/pool/BundleService.sol +384 -0
  241. package/contracts/{instance/service → pool}/BundleServiceManager.sol +19 -19
  242. package/contracts/pool/IBundleService.sol +118 -0
  243. package/contracts/pool/IPoolComponent.sol +114 -0
  244. package/contracts/pool/IPoolService.sol +114 -0
  245. package/contracts/pool/Pool.sol +302 -0
  246. package/contracts/pool/PoolService.sol +416 -0
  247. package/contracts/{instance/service → pool}/PoolServiceManager.sol +19 -19
  248. package/contracts/product/ApplicationService.sol +187 -0
  249. package/contracts/product/ApplicationServiceManager.sol +38 -0
  250. package/contracts/product/ClaimService.sol +443 -0
  251. package/contracts/product/ClaimServiceManager.sol +38 -0
  252. package/contracts/product/IApplicationService.sol +62 -0
  253. package/contracts/product/IClaimService.sol +93 -0
  254. package/contracts/product/IPolicyService.sol +80 -0
  255. package/contracts/product/IPricingService.sol +37 -0
  256. package/contracts/product/IProductComponent.sol +41 -0
  257. package/contracts/{instance/service → product}/IProductService.sol +10 -10
  258. package/contracts/product/PolicyService.sol +378 -0
  259. package/contracts/{instance/service → product}/PolicyServiceManager.sol +16 -13
  260. package/contracts/product/PricingService.sol +276 -0
  261. package/contracts/product/PricingServiceManager.sol +42 -0
  262. package/contracts/product/Product.sol +379 -0
  263. package/contracts/product/ProductService.sol +212 -0
  264. package/contracts/{instance/service → product}/ProductServiceManager.sol +16 -13
  265. package/contracts/registry/ChainNft.sol +9 -1
  266. package/contracts/registry/IRegistry.sol +52 -27
  267. package/contracts/registry/IRegistryService.sol +36 -28
  268. package/contracts/registry/ITransferInterceptor.sol +1 -0
  269. package/contracts/registry/Registry.sol +253 -234
  270. package/contracts/registry/RegistryAccessManager.sol +132 -0
  271. package/contracts/registry/RegistryService.sol +81 -208
  272. package/contracts/registry/RegistryServiceManager.sol +34 -42
  273. package/contracts/registry/ReleaseManager.sol +380 -0
  274. package/contracts/registry/TokenRegistry.sol +22 -17
  275. package/contracts/shared/AccessManagerUpgradeableInitializeable.sol +13 -0
  276. package/contracts/shared/Component.sol +271 -0
  277. package/contracts/shared/ComponentService.sol +141 -0
  278. package/contracts/shared/ERC165.sol +14 -12
  279. package/contracts/shared/IComponent.sol +90 -0
  280. package/contracts/shared/INftOwnable.sol +12 -11
  281. package/contracts/shared/IPolicyHolder.sol +40 -0
  282. package/contracts/shared/IRegisterable.sol +4 -6
  283. package/contracts/shared/IRegistryLinked.sol +11 -0
  284. package/contracts/shared/IService.sol +7 -4
  285. package/contracts/shared/IVersionable.sol +5 -48
  286. package/contracts/shared/NftOwnable.sol +64 -80
  287. package/contracts/shared/PolicyHolder.sol +94 -0
  288. package/contracts/shared/ProxyManager.sol +126 -25
  289. package/contracts/shared/Registerable.sol +26 -41
  290. package/contracts/shared/RegistryLinked.sol +43 -0
  291. package/contracts/shared/Service.sol +41 -24
  292. package/contracts/shared/TokenHandler.sol +14 -6
  293. package/contracts/shared/Versionable.sol +4 -92
  294. package/contracts/staking/IStakingService.sol +102 -0
  295. package/contracts/staking/StakingService.sol +169 -0
  296. package/contracts/staking/StakingServiceManager.sol +40 -0
  297. package/contracts/type/Amount.sol +109 -0
  298. package/contracts/{types → type}/Blocknumber.sol +1 -0
  299. package/contracts/type/ClaimId.sol +75 -0
  300. package/contracts/{types → type}/DistributorType.sol +2 -2
  301. package/contracts/{types → type}/Fee.sol +17 -8
  302. package/contracts/{types → type}/NftId.sol +8 -0
  303. package/contracts/{types → type}/NftIdSet.sol +1 -1
  304. package/contracts/{types → type}/ObjectType.sol +17 -7
  305. package/contracts/type/PayoutId.sol +82 -0
  306. package/contracts/{types → type}/Referral.sol +4 -0
  307. package/contracts/type/RoleId.sol +139 -0
  308. package/contracts/type/Seconds.sol +54 -0
  309. package/contracts/{types → type}/StateId.sol +7 -2
  310. package/contracts/{types → type}/Timestamp.sol +18 -13
  311. package/contracts/{types → type}/UFixed.sol +1 -0
  312. package/contracts/{types → type}/Version.sol +1 -0
  313. package/package.json +3 -3
  314. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  315. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +0 -4
  316. package/artifacts/contracts/components/Distribution.sol/Distribution.json +0 -772
  317. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  318. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -384
  319. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +0 -4
  320. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +0 -152
  321. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +0 -4
  322. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +0 -275
  323. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +0 -4
  324. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +0 -157
  325. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +0 -4
  326. package/artifacts/contracts/components/Pool.sol/Pool.json +0 -967
  327. package/artifacts/contracts/components/Product.sol/Product.dbg.json +0 -4
  328. package/artifacts/contracts/components/Product.sol/Product.json +0 -883
  329. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  330. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  331. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  332. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  333. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  334. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  335. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  336. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  337. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  338. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  339. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  340. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  341. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  342. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  343. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  344. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  345. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  346. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  347. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  348. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  349. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  350. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  351. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +0 -50
  352. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  353. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  354. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  355. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  356. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  357. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  358. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  359. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  360. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  361. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  362. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  363. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  364. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  365. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  366. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  367. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  368. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
  369. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +0 -1206
  370. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +0 -4
  371. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  372. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +0 -448
  373. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  374. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +0 -763
  375. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +0 -4
  376. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +0 -285
  377. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  378. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  379. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  380. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +0 -4
  381. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +0 -923
  382. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +0 -4
  383. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +0 -440
  384. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  385. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  386. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +0 -4
  387. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +0 -684
  388. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +0 -4
  389. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +0 -428
  390. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +0 -4
  391. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  392. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +0 -4
  393. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +0 -446
  394. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +0 -4
  395. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +0 -4
  396. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +0 -4
  397. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +0 -4
  398. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +0 -984
  399. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +0 -4
  400. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +0 -464
  401. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +0 -4
  402. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +0 -718
  403. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +0 -4
  404. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +0 -428
  405. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +0 -4
  406. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +0 -768
  407. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  408. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +0 -420
  409. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +0 -4
  410. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +0 -107
  411. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  412. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +0 -442
  413. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +0 -4
  414. package/artifacts/contracts/test/TestFee.sol/TestFee.json +0 -119
  415. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +0 -4
  416. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +0 -305
  417. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +0 -4
  418. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +0 -116
  419. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +0 -4
  420. package/artifacts/contracts/test/TestService.sol/TestService.json +0 -600
  421. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +0 -4
  422. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +0 -376
  423. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +0 -4
  424. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +0 -218
  425. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +0 -4
  426. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +0 -286
  427. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +0 -4
  428. package/artifacts/contracts/test/Usdc.sol/USDC.json +0 -376
  429. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +0 -4
  430. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +0 -4
  431. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +0 -4
  432. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +0 -10
  433. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +0 -4
  434. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +0 -4
  435. package/artifacts/contracts/types/Fee.sol/FeeLib.json +0 -257
  436. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +0 -4
  437. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +0 -4
  438. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +0 -153
  439. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +0 -4
  440. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +0 -4
  441. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +0 -100
  442. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +0 -4
  443. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +0 -4
  444. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +0 -123
  445. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +0 -4
  446. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +0 -4
  447. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +0 -4
  448. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +0 -4
  449. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +0 -4
  450. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +0 -4
  451. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +0 -4
  452. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +0 -4
  453. package/contracts/components/BaseComponent.sol +0 -148
  454. package/contracts/components/Distribution.sol +0 -163
  455. package/contracts/components/IBaseComponent.sol +0 -32
  456. package/contracts/components/IDistributionComponent.sol +0 -44
  457. package/contracts/components/IPoolComponent.sol +0 -66
  458. package/contracts/components/IProductComponent.sol +0 -35
  459. package/contracts/components/Pool.sol +0 -271
  460. package/contracts/components/Product.sol +0 -292
  461. package/contracts/experiment/cloning/Cloner.sol +0 -47
  462. package/contracts/experiment/errors/Require.sol +0 -38
  463. package/contracts/experiment/errors/Revert.sol +0 -44
  464. package/contracts/experiment/inheritance/A.sol +0 -53
  465. package/contracts/experiment/inheritance/B.sol +0 -28
  466. package/contracts/experiment/inheritance/C.sol +0 -34
  467. package/contracts/experiment/inheritance/IA.sol +0 -13
  468. package/contracts/experiment/inheritance/IB.sol +0 -10
  469. package/contracts/experiment/inheritance/IC.sol +0 -12
  470. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  471. package/contracts/experiment/statemachine/ISM.sol +0 -25
  472. package/contracts/experiment/statemachine/SM.sol +0 -57
  473. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  474. package/contracts/experiment/types/TypeA.sol +0 -47
  475. package/contracts/experiment/types/TypeB.sol +0 -29
  476. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +0 -23
  477. package/contracts/instance/IInstanceBase.sol +0 -26
  478. package/contracts/instance/InstanceBase.sol +0 -41
  479. package/contracts/instance/base/ComponentServiceBase.sol +0 -72
  480. package/contracts/instance/base/IInstanceBase.sol +0 -23
  481. package/contracts/instance/service/BundleService.sol +0 -260
  482. package/contracts/instance/service/ComponentOwnerService.sol +0 -317
  483. package/contracts/instance/service/DistributionService.sol +0 -118
  484. package/contracts/instance/service/IBundleService.sol +0 -45
  485. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  486. package/contracts/instance/service/IDistributionService.sol +0 -12
  487. package/contracts/instance/service/IPolicyService.sol +0 -87
  488. package/contracts/instance/service/IPoolService.sol +0 -20
  489. package/contracts/instance/service/PolicyService.sol +0 -508
  490. package/contracts/instance/service/PoolService.sol +0 -124
  491. package/contracts/instance/service/ProductService.sol +0 -173
  492. package/contracts/shared/ContractDeployerLib.sol +0 -72
  493. package/contracts/shared/RegisterableUpgradable.sol +0 -16
  494. package/contracts/test/TestFee.sol +0 -25
  495. package/contracts/test/TestRegisterable.sol +0 -18
  496. package/contracts/test/TestRoleId.sol +0 -14
  497. package/contracts/test/TestService.sol +0 -24
  498. package/contracts/test/TestToken.sol +0 -26
  499. package/contracts/test/TestVersion.sol +0 -44
  500. package/contracts/test/TestVersionable.sol +0 -17
  501. package/contracts/test/Usdc.sol +0 -26
  502. package/contracts/types/ChainId.sol +0 -38
  503. package/contracts/types/NumberId.sol +0 -52
  504. package/contracts/types/RoleId.sol +0 -91
  505. /package/contracts/{types → type}/AddressSet.sol +0 -0
  506. /package/contracts/{types → type}/Key32.sol +0 -0
  507. /package/contracts/{types → type}/RiskId.sol +0 -0
@@ -0,0 +1,416 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {Pool} from "./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 {IComponents} from "../instance/module/IComponents.sol";
10
+ import {IPolicy} from "../instance/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 {Amount, AmountLib} from "../type/Amount.sol";
17
+ import {Fee, FeeLib} from "../type/Fee.sol";
18
+ import {NftId, NftIdLib, zeroNftId} from "../type/NftId.sol";
19
+ import {ObjectType, POOL, BUNDLE} from "../type/ObjectType.sol";
20
+ import {PUBLIC_ROLE, POOL_OWNER_ROLE, POLICY_SERVICE_ROLE, RoleId} from "../type/RoleId.sol";
21
+ import {Fee, FeeLib} from "../type/Fee.sol";
22
+ import {Version, VersionLib} from "../type/Version.sol";
23
+ import {KEEP_STATE, StateId} from "../type/StateId.sol";
24
+ import {Seconds} from "../type/Seconds.sol";
25
+ import {TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
26
+ import {Version, VersionLib} from "../type/Version.sol";
27
+
28
+ import {IService} from "../shared/IService.sol";
29
+ import {Service} from "../shared/Service.sol";
30
+ import {BundleManager} from "../instance/BundleManager.sol";
31
+ import {ComponentService} from "../shared/ComponentService.sol";
32
+ import {IBundleService} from "./IBundleService.sol";
33
+ import {IPoolService} from "./IPoolService.sol";
34
+ import {IRegistryService} from "../registry/IRegistryService.sol";
35
+ import {InstanceService} from "../instance/InstanceService.sol";
36
+ import {InstanceReader} from "../instance/InstanceReader.sol";
37
+ import {IComponent} from "../shared/IComponent.sol";
38
+ import {IPoolComponent} from "./IPoolComponent.sol";
39
+
40
+ string constant POOL_SERVICE_NAME = "PoolService";
41
+
42
+ contract PoolService is
43
+ ComponentService,
44
+ IPoolService
45
+ {
46
+ using NftIdLib for NftId;
47
+ using AmountLib for Amount;
48
+
49
+ IBundleService internal _bundleService;
50
+
51
+ function _initialize(
52
+ address owner,
53
+ bytes memory data
54
+ )
55
+ internal
56
+ initializer
57
+ virtual override
58
+ {
59
+ (
60
+ address registryAddress,,
61
+ //address managerAddress
62
+ address authority
63
+ ) = abi.decode(data, (address, address, address));
64
+
65
+ initializeService(registryAddress, authority, owner);
66
+ _bundleService = IBundleService(getRegistry().getServiceAddress(BUNDLE(), getVersion().toMajorPart()));
67
+ registerInterface(type(IPoolService).interfaceId);
68
+ /*
69
+ // configure in access manager;
70
+ // call it
71
+ // TODO but in this case service should know access manager -> better to do role stuff outside of service???
72
+ accessManager.
73
+ policyService.poolService.lockCollateral();
74
+ policyService.poolService.releaseCollateral();
75
+ // !!! or just save addresses of calling services from config????
76
+ // and use common modifier -> on,yServiceAddress(_savedServiceAddresFromConfig/Registry)
77
+ // get addresses from registry by domain -> implies registration order -> unidirected graph
78
+ // for example _> bundle service should already be registered???
79
+ _policyService = IPolicyService(getRegistry().getServiceAddress(POLICY(), getVersion().toMajorPart()));
80
+ */
81
+ registerInterface(type(IPoolService).interfaceId);
82
+ }
83
+
84
+ function getDomain() public pure override returns(ObjectType) {
85
+ return POOL();
86
+ }
87
+
88
+ function register(address poolAddress)
89
+ external
90
+ returns(NftId poolNftId)
91
+ {
92
+ (
93
+ IComponent component,
94
+ address owner,
95
+ IInstance instance,
96
+ NftId instanceNftId
97
+ ) = _checkComponentForRegistration(
98
+ poolAddress,
99
+ POOL(),
100
+ POOL_OWNER_ROLE());
101
+
102
+ IPoolComponent pool = IPoolComponent(poolAddress);
103
+ IRegistry.ObjectInfo memory registryInfo = getRegistryService().registerPool(pool, owner);
104
+ pool.linkToRegisteredNftId();
105
+ poolNftId = registryInfo.nftId;
106
+
107
+ // amend component info with pool specific token handler
108
+ IComponents.ComponentInfo memory componentInfo = pool.getComponentInfo();
109
+ componentInfo.tokenHandler = new TokenHandler(address(componentInfo.token));
110
+
111
+ // save amended component info with instance
112
+ instance.getInstanceStore().createPoolSetup(poolNftId, componentInfo);
113
+
114
+ bytes4[][] memory selectors = new bytes4[][](2);
115
+ selectors[0] = new bytes4[](1);
116
+ selectors[1] = new bytes4[](1);
117
+
118
+ selectors[0][0] = IPoolComponent.setFees.selector;
119
+ selectors[1][0] = IPoolComponent.verifyApplication.selector;
120
+
121
+ RoleId[] memory roles = new RoleId[](2);
122
+ roles[0] = POOL_OWNER_ROLE();
123
+ roles[1] = POLICY_SERVICE_ROLE();
124
+
125
+ getInstanceService().createGifTarget(
126
+ instanceNftId,
127
+ poolAddress,
128
+ pool.getName(),
129
+ selectors,
130
+ roles);
131
+ }
132
+
133
+
134
+ function setMaxCapitalAmount(Amount maxCapitalAmount)
135
+ external
136
+ virtual
137
+ {
138
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
139
+ InstanceReader instanceReader = instance.getInstanceReader();
140
+
141
+ IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
142
+ IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
143
+ Amount previousMaxCapitalAmount = poolInfo.maxCapitalAmount;
144
+
145
+ poolInfo.maxCapitalAmount = maxCapitalAmount;
146
+ componentInfo.data = abi.encode(poolInfo);
147
+ instance.getInstanceStore().updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
148
+
149
+ emit LogPoolServiceMaxCapitalAmountUpdated(poolNftId, previousMaxCapitalAmount, maxCapitalAmount);
150
+ }
151
+
152
+ function setBundleOwnerRole(RoleId bundleOwnerRole)
153
+ external
154
+ virtual
155
+ {
156
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
157
+ InstanceReader instanceReader = instance.getInstanceReader();
158
+
159
+ IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
160
+ IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
161
+
162
+ // bundle owner role may only be set once per pool
163
+ if(poolInfo.bundleOwnerRole != PUBLIC_ROLE()) {
164
+ revert ErrorPoolServiceBundleOwnerRoleAlreadySet(poolNftId);
165
+ }
166
+
167
+ poolInfo.bundleOwnerRole = bundleOwnerRole;
168
+ componentInfo.data = abi.encode(poolInfo);
169
+ instance.getInstanceStore().updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
170
+
171
+ emit LogPoolServiceBundleOwnerRoleSet(poolNftId, bundleOwnerRole);
172
+ }
173
+
174
+
175
+ function setFees(
176
+ Fee memory poolFee,
177
+ Fee memory stakingFee,
178
+ Fee memory performanceFee
179
+ )
180
+ external
181
+ virtual
182
+ {
183
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
184
+ InstanceReader instanceReader = instance.getInstanceReader();
185
+
186
+ IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
187
+ IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
188
+
189
+ poolInfo.poolFee = poolFee;
190
+ poolInfo.stakingFee = stakingFee;
191
+ poolInfo.performanceFee = performanceFee;
192
+ componentInfo.data = abi.encode(poolInfo);
193
+ instance.getInstanceStore().updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
194
+
195
+ // TODO add logging
196
+ }
197
+
198
+ function createBundle(
199
+ address owner, // initial bundle owner
200
+ Fee memory fee, // fees deducted from premium that go to bundle owner
201
+ Amount stakingAmount, // staking amount - staking fees result in initial bundle capital
202
+ Seconds lifetime, // initial duration for which new policies are covered
203
+ bytes calldata filter // optional use case specific criteria that define if a policy may be covered by this bundle
204
+ )
205
+ external
206
+ virtual
207
+ returns(NftId bundleNftId)
208
+ {
209
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
210
+ InstanceReader instanceReader = instance.getInstanceReader();
211
+
212
+ // pool fee book keeping
213
+ IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
214
+ Amount stakingNetAmount = _processStakingFees(componentInfo, stakingAmount);
215
+
216
+ bundleNftId = _bundleService.create(
217
+ instance,
218
+ poolNftId,
219
+ owner,
220
+ fee,
221
+ stakingNetAmount,
222
+ lifetime,
223
+ filter);
224
+
225
+ // collect tokens from bundle owner
226
+ _transferStakingAmount(componentInfo, owner, stakingAmount);
227
+
228
+ emit LogPoolServiceBundleCreated(instance.getNftId(), poolNftId, bundleNftId);
229
+ }
230
+
231
+
232
+ function closeBundle(NftId bundleNftId)
233
+ external
234
+ virtual
235
+ {
236
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
237
+
238
+ // TODO book keeping for pool collateral released outside of retention level
239
+
240
+ // releasing collateral in bundle
241
+ _bundleService.close(instance, bundleNftId);
242
+
243
+ // TODO get performance fee for pool, transfer of remaining funds + bundle fees to bundle owner
244
+
245
+ emit LogPoolServiceBundleClosed(instance.getNftId(), poolNftId, bundleNftId);
246
+ }
247
+
248
+ function processSale(
249
+ NftId bundleNftId,
250
+ IPolicy.Premium memory premium,
251
+ Amount actualAmountTransferred
252
+ )
253
+ external
254
+ virtual
255
+ restricted
256
+ {
257
+ IRegistry registry = getRegistry();
258
+ IRegistry.ObjectInfo memory bundleObjectInfo = registry.getObjectInfo(bundleNftId);
259
+ IRegistry.ObjectInfo memory poolObjectInfo = registry.getObjectInfo(bundleObjectInfo.parentNftId);
260
+ IRegistry.ObjectInfo memory instanceObjectInfo = registry.getObjectInfo(poolObjectInfo.parentNftId);
261
+ IInstance instance = IInstance(instanceObjectInfo.objectAddress);
262
+
263
+ Amount poolFeeAmount = AmountLib.toAmount(premium.poolFeeFixAmount + premium.poolFeeVarAmount);
264
+ Amount bundleFeeAmount = AmountLib.toAmount(premium.bundleFeeFixAmount + premium.bundleFeeVarAmount);
265
+ Amount expectedTransferAmount = AmountLib.toAmount(premium.netPremiumAmount) + poolFeeAmount + bundleFeeAmount;
266
+ if (!(actualAmountTransferred == expectedTransferAmount)) {
267
+ revert ErrorPoolServiceInvalidTransferAmount(expectedTransferAmount, actualAmountTransferred);
268
+ }
269
+
270
+ // update pool fee balance
271
+ if (poolFeeAmount.gtz()) {
272
+ IComponents.ComponentInfo memory poolComponentInfo = instance.getInstanceReader().getComponentInfo(poolObjectInfo.nftId);
273
+ poolComponentInfo.feeAmount = poolComponentInfo.feeAmount.add(poolFeeAmount);
274
+ instance.getInstanceStore().updatePoolSetup(poolObjectInfo.nftId, poolComponentInfo, KEEP_STATE());
275
+ }
276
+
277
+ if (bundleFeeAmount.gtz()) {
278
+ _bundleService.updateBundleFees(instance, bundleNftId, bundleFeeAmount);
279
+ }
280
+ }
281
+
282
+ function lockCollateral(
283
+ IInstance instance,
284
+ NftId productNftId,
285
+ NftId applicationNftId,
286
+ IPolicy.PolicyInfo memory applicationInfo,
287
+ Amount premiumAmount // premium amount after product and distribution fees
288
+ )
289
+ external
290
+ virtual
291
+ restricted
292
+ {
293
+ InstanceReader instanceReader = instance.getInstanceReader();
294
+ NftId poolNftId = instanceReader.getProductSetupInfo(productNftId).poolNftId;
295
+ NftId bundleNftId = applicationInfo.bundleNftId;
296
+
297
+ // TODO move this check to application creation and don't repeat this here
298
+ // ensure that pool for bundle from application matches with pool for product of application
299
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
300
+ if(bundleInfo.poolNftId != poolNftId) {
301
+ revert ErrorPoolServiceBundlePoolMismatch(bundleInfo.poolNftId, poolNftId);
302
+ }
303
+
304
+ IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
305
+ IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
306
+
307
+ // TODO add correct required collateral calculation (collateralization level mibht be != 1, retention level might be < 1)
308
+ Amount collateralAmount = applicationInfo.sumInsuredAmount;
309
+
310
+ // TODO add correct net premium calculation (pool fee might be > 0)
311
+ Amount premiumAfterPoolFeeAmount = premiumAmount;
312
+
313
+ // lock collateral amount from involvedd bundle
314
+ _bundleService.lockCollateral(
315
+ instance,
316
+ applicationNftId,
317
+ bundleNftId,
318
+ collateralAmount,
319
+ premiumAfterPoolFeeAmount);
320
+
321
+ // also verify/confirm application by pool if necessary
322
+ if(poolInfo.isVerifyingApplications) {
323
+ address poolAddress = getRegistry().getObjectInfo(poolNftId).objectAddress;
324
+ IPoolComponent(poolAddress).verifyApplication(
325
+ applicationNftId,
326
+ applicationInfo.applicationData,
327
+ bundleNftId,
328
+ bundleInfo.filter,
329
+ collateralAmount);
330
+ }
331
+ }
332
+
333
+
334
+ function reduceCollateral(
335
+ IInstance instance,
336
+ NftId policyNftId,
337
+ IPolicy.PolicyInfo memory policyInfo,
338
+ Amount payoutAmount
339
+ )
340
+ external
341
+ virtual
342
+ restricted
343
+ {
344
+ _bundleService.releaseCollateral(
345
+ instance,
346
+ policyNftId,
347
+ policyInfo.bundleNftId,
348
+ payoutAmount);
349
+ }
350
+
351
+
352
+ /// @dev releases the remaining collateral linked to the specified policy
353
+ /// may only be called by the policy service for unlocked pool components
354
+ function releaseCollateral(
355
+ IInstance instance,
356
+ NftId policyNftId,
357
+ IPolicy.PolicyInfo memory policyInfo
358
+ )
359
+ external
360
+ virtual
361
+ restricted
362
+ {
363
+ _bundleService.releaseCollateral(
364
+ instance,
365
+ policyNftId,
366
+ policyInfo.bundleNftId,
367
+ policyInfo.sumInsuredAmount - policyInfo.claimAmount);
368
+
369
+ _bundleService.unlinkPolicy(
370
+ instance,
371
+ policyNftId);
372
+ }
373
+
374
+
375
+ function _processStakingFees(
376
+ IComponents.ComponentInfo memory componentInfo,
377
+ Amount stakingAmount
378
+ )
379
+ internal
380
+ returns (Amount stakingNetAmount)
381
+ {
382
+ stakingNetAmount = stakingAmount;
383
+
384
+ // check if any staking fees apply
385
+ Fee memory stakingFee = abi.decode(componentInfo.data, (IComponents.PoolInfo)).stakingFee;
386
+ if (FeeLib.gtz(stakingFee)) {
387
+ (Amount feeAmount, Amount netAmount) = FeeLib.calculateFee(stakingFee, stakingAmount);
388
+ stakingNetAmount = netAmount;
389
+
390
+ // TODO update fee balance for pool
391
+ }
392
+ }
393
+
394
+
395
+ // TODO create (I)TreasuryService that deals with all gif related token transfers
396
+ /// @dev transfers the specified amount from the bundle owner to the pool's wallet
397
+ function _transferStakingAmount(
398
+ IComponents.ComponentInfo memory componentInfo,
399
+ address bundleOwner,
400
+ Amount stakingAmount
401
+ )
402
+ internal
403
+ {
404
+ TokenHandler tokenHandler = componentInfo.tokenHandler;
405
+ address poolWallet = componentInfo.wallet;
406
+
407
+ if(stakingAmount.gtz()) {
408
+ tokenHandler.transfer(
409
+ bundleOwner,
410
+ poolWallet,
411
+ stakingAmount
412
+ );
413
+ }
414
+ }
415
+
416
+ }
@@ -1,12 +1,12 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IVersionable} from "../../shared/IVersionable.sol";
5
- import {ProxyManager} from "../../shared/ProxyManager.sol";
4
+ import {IVersionable} from "../shared/IVersionable.sol";
5
+ import {ProxyManager} from "../shared/ProxyManager.sol";
6
6
  import {PoolService} from "./PoolService.sol";
7
- import {Registry} from "../../registry/Registry.sol";
8
- import {RegistryService} from "../../registry/RegistryService.sol";
9
- import {VersionLib} from "../../types/Version.sol";
7
+ import {Registry} from "../registry/Registry.sol";
8
+ import {RegistryService} from "../registry/RegistryService.sol";
9
+ import {REGISTRY} from "../type/ObjectType.sol";
10
10
 
11
11
  contract PoolServiceManager is ProxyManager {
12
12
 
@@ -14,22 +14,25 @@ contract PoolServiceManager is ProxyManager {
14
14
 
15
15
  /// @dev initializes proxy manager with pool service implementation
16
16
  constructor(
17
- address registryAddress
18
- )
19
- ProxyManager()
17
+ address authority,
18
+ address registryAddress,
19
+ bytes32 salt
20
+ )
21
+ ProxyManager(registryAddress)
20
22
  {
21
- PoolService poolSrv = new PoolService();
22
- bytes memory data = abi.encode(registryAddress, address(this));
23
- IVersionable versionable = deploy(
23
+ PoolService poolSrv = new PoolService{salt: salt}();
24
+ bytes memory data = abi.encode(registryAddress, address(this), authority);
25
+ IVersionable versionable = deployDetermenistic(
24
26
  address(poolSrv),
25
- data);
27
+ data,
28
+ salt);
26
29
 
27
30
  _poolService = PoolService(address(versionable));
28
31
 
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
32
+ // TODO `this` must have a role or own nft to register service
33
+ //Registry registry = Registry(registryAddress);
34
+ //address registryServiceAddress = registry.getServiceAddress(REGISTRY(), _poolService.getMajorVersion());
35
+ //RegistryService registryService = RegistryService(registryServiceAddress);
33
36
  //registryService.registerService(_poolService);
34
37
 
35
38
  // TODO no nft to link yet
@@ -37,9 +40,6 @@ contract PoolServiceManager is ProxyManager {
37
40
  //_linkToNftOwnable(
38
41
  // address(registryAddress),
39
42
  // address(_poolService));
40
-
41
- // implies that after this constructor call only upgrade functionality is available
42
- _isDeployed = true;
43
43
  }
44
44
 
45
45
  //--- view functions ----------------------------------------------------//
@@ -0,0 +1,187 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {AmountLib} from "../type/Amount.sol";
5
+ import {Seconds} from "../type/Seconds.sol";
6
+ import {Timestamp, TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
7
+ import {UFixed, UFixedLib} from "../type/UFixed.sol";
8
+ import {Blocknumber, blockNumber} from "../type/Blocknumber.sol";
9
+ import {ObjectType, DISTRIBUTION, INSTANCE, PRODUCT, POOL, APPLICATION, POLICY, BUNDLE, PRICE} from "../type/ObjectType.sol";
10
+ import {APPLIED, REVOKED, ACTIVE, KEEP_STATE} from "../type/StateId.sol";
11
+ import {NftId, NftIdLib, zeroNftId} from "../type/NftId.sol";
12
+ import {Fee, FeeLib} from "../type/Fee.sol";
13
+ import {ReferralId} from "../type/Referral.sol";
14
+ import {RiskId} from "../type/RiskId.sol";
15
+ import {StateId} from "../type/StateId.sol";
16
+ import {Version, VersionLib} from "../type/Version.sol";
17
+ import {Amount, AmountLib} from "../type/Amount.sol";
18
+
19
+ import {TokenHandler} from "../shared/TokenHandler.sol";
20
+ import {IVersionable} from "../shared/IVersionable.sol";
21
+ import {Versionable} from "../shared/Versionable.sol";
22
+ import {IService} from "../shared/IService.sol";
23
+ import {Service} from "../shared/Service.sol";
24
+
25
+ import {IRegistry} from "../registry/IRegistry.sol";
26
+
27
+ import {IProductComponent} from "./IProductComponent.sol";
28
+ import {IPoolComponent} from "../pool/IPoolComponent.sol";
29
+ import {IDistributionComponent} from "../distribution/IDistributionComponent.sol";
30
+ import {Product} from "./Product.sol";
31
+
32
+ import {IComponents} from "../instance/module/IComponents.sol";
33
+ import {IPolicy} from "../instance/module/IPolicy.sol";
34
+ import {IRisk} from "../instance/module/IRisk.sol";
35
+ import {IBundle} from "../instance/module/IBundle.sol";
36
+ import {IProductService} from "./IProductService.sol";
37
+ import {ITreasury} from "../instance/module/ITreasury.sol";
38
+ import {ISetup} from "../instance/module/ISetup.sol";
39
+
40
+ import {ComponentService} from "../shared/ComponentService.sol";
41
+
42
+ import {IInstance} from "../instance/IInstance.sol";
43
+ import {InstanceReader} from "../instance/InstanceReader.sol";
44
+
45
+ import {IApplicationService} from "./IApplicationService.sol";
46
+ import {IBundleService} from "../pool/IBundleService.sol";
47
+ import {IDistributionService} from "../distribution/IDistributionService.sol";
48
+ import {IPoolService} from "../pool/IPoolService.sol";
49
+ import {IPricingService} from "./IPricingService.sol";
50
+
51
+
52
+ contract ApplicationService is
53
+ ComponentService,
54
+ IApplicationService
55
+ {
56
+ IDistributionService internal _distributionService;
57
+ IPricingService internal _pricingService;
58
+
59
+ function _initialize(
60
+ address owner,
61
+ bytes memory data
62
+ )
63
+ internal
64
+ virtual override
65
+ initializer()
66
+ {
67
+ (
68
+ address registryAddress,,
69
+ //address managerAddress
70
+ address authority
71
+ ) = abi.decode(data, (address, address, address));
72
+
73
+ initializeService(registryAddress, authority, owner);
74
+ registerInterface(type(IApplicationService).interfaceId);
75
+
76
+ _distributionService = IDistributionService(_getServiceAddress(DISTRIBUTION()));
77
+ _pricingService = IPricingService(_getServiceAddress(PRICE()));
78
+ }
79
+
80
+
81
+ function getDomain() public pure override returns(ObjectType) {
82
+ return APPLICATION();
83
+ }
84
+
85
+
86
+ function create(
87
+ address applicationOwner,
88
+ RiskId riskId,
89
+ Amount sumInsuredAmount,
90
+ Seconds lifetime,
91
+ NftId bundleNftId,
92
+ ReferralId referralId,
93
+ bytes memory applicationData
94
+ )
95
+ external
96
+ virtual
97
+ returns (NftId applicationNftId)
98
+ {
99
+ (NftId productNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
100
+ // TODO: add validations (see create bundle in pool service)
101
+
102
+ applicationNftId = getRegistryService().registerPolicy(
103
+ IRegistry.ObjectInfo(
104
+ zeroNftId(),
105
+ productNftId,
106
+ POLICY(),
107
+ false, // intercepting property for policies is defined on product
108
+ address(0),
109
+ applicationOwner,
110
+ ""
111
+ )
112
+ );
113
+
114
+ // (uint256 premiumAmount,,,,,) = calculatePremium(
115
+ IPolicy.Premium memory premium = _pricingService.calculatePremium(
116
+ productNftId,
117
+ riskId,
118
+ sumInsuredAmount,
119
+ lifetime,
120
+ applicationData,
121
+ bundleNftId,
122
+ referralId
123
+ );
124
+
125
+ IPolicy.PolicyInfo memory policyInfo = IPolicy.PolicyInfo({
126
+ productNftId: productNftId,
127
+ bundleNftId: bundleNftId,
128
+ referralId: referralId,
129
+ riskId: riskId,
130
+ sumInsuredAmount: sumInsuredAmount,
131
+ premiumAmount: AmountLib.toAmount(premium.premiumAmount),
132
+ premiumPaidAmount: AmountLib.zero(),
133
+ lifetime: lifetime,
134
+ applicationData: applicationData,
135
+ processData: "",
136
+ claimsCount: 0,
137
+ openClaimsCount: 0,
138
+ claimAmount: AmountLib.zero(),
139
+ payoutAmount: AmountLib.zero(),
140
+ activatedAt: zeroTimestamp(),
141
+ expiredAt: zeroTimestamp(),
142
+ closedAt: zeroTimestamp()
143
+ });
144
+
145
+ instance.getInstanceStore().createApplication(applicationNftId, policyInfo);
146
+
147
+ // TODO: add logging
148
+ }
149
+
150
+
151
+ function renew(
152
+ NftId policyNftId, // policy to be renewd (renewal inherits policy attributes)
153
+ NftId bundleNftId // will likely need a newer bundle for underwriting
154
+ )
155
+ external
156
+ virtual override
157
+ returns (NftId applicationNftId)
158
+ {
159
+
160
+ }
161
+
162
+
163
+ function adjust(
164
+ NftId applicationNftId,
165
+ RiskId riskId,
166
+ NftId bundleNftId,
167
+ ReferralId referralId,
168
+ Amount sumInsuredAmount,
169
+ Seconds lifetime,
170
+ bytes memory applicationData
171
+ )
172
+ external
173
+ virtual override
174
+ {
175
+
176
+ }
177
+
178
+ function revoke(NftId applicationNftId)
179
+ external
180
+ virtual override
181
+ {
182
+ (,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
183
+ instance.getInstanceStore().updateApplicationState(applicationNftId, REVOKED());
184
+ }
185
+
186
+ // internal functions
187
+ }