@etherisc/gif-next 0.0.2-fe77319 → 0.0.2-ff282a4-523

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 (431) hide show
  1. package/README.md +359 -8
  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 +780 -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 +4 -0
  13. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +778 -0
  14. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  15. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +284 -523
  16. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  17. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +616 -0
  18. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  19. package/artifacts/contracts/instance/Instance.sol/Instance.json +529 -601
  20. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  21. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +1348 -0
  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 +4 -0
  25. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1574 -0
  26. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  27. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +979 -0
  28. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  29. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +656 -0
  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/base/Cloneable.sol/Cloneable.json +190 -0
  34. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  35. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +478 -0
  36. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  37. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.json +115 -0
  38. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  39. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +581 -0
  40. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  41. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +194 -0
  42. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  43. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.json +256 -0
  44. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  45. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +237 -0
  46. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  47. package/artifacts/contracts/instance/{access/IAccess.sol/IAccess.json → module/IBundle.sol/IBundle.json} +2 -2
  48. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  49. package/artifacts/contracts/instance/{component/IComponent.sol/IComponent.json → module/IComponents.sol/IComponents.json} +2 -2
  50. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  51. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.json +10 -0
  52. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  53. package/artifacts/contracts/instance/{policy → module}/IPolicy.sol/IPolicy.json +1 -1
  54. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  55. package/artifacts/contracts/instance/{pool/IPoolModule.sol/IPool.json → module/IRisk.sol/IRisk.json} +2 -2
  56. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  57. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.json +10 -0
  58. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  59. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.json +10 -0
  60. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +4 -0
  61. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +1288 -0
  62. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  63. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +696 -0
  64. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +4 -0
  65. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +735 -0
  66. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  67. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +1095 -0
  68. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +4 -0
  69. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +1077 -0
  70. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +4 -0
  71. package/artifacts/contracts/pool/Pool.sol/Pool.json +1407 -0
  72. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +4 -0
  73. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +1622 -0
  74. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  75. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +708 -0
  76. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  77. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +918 -0
  78. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  79. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +648 -0
  80. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +4 -0
  81. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +1386 -0
  82. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  83. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +748 -0
  84. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  85. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +493 -0
  86. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +4 -0
  87. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +753 -0
  88. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  89. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +651 -0
  90. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +4 -0
  91. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +510 -0
  92. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  93. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +861 -0
  94. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +4 -0
  95. package/artifacts/contracts/product/IProductService.sol/IProductService.json +442 -0
  96. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +4 -0
  97. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +1281 -0
  98. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  99. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +740 -0
  100. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +4 -0
  101. package/artifacts/contracts/product/PricingService.sol/PricingService.json +1004 -0
  102. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
  103. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +688 -0
  104. package/artifacts/contracts/product/Product.sol/Product.dbg.json +4 -0
  105. package/artifacts/contracts/product/Product.sol/Product.json +1198 -0
  106. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +4 -0
  107. package/artifacts/contracts/product/ProductService.sol/ProductService.json +864 -0
  108. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  109. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +640 -0
  110. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +4 -0
  111. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +784 -0
  112. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  113. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +604 -71
  114. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  115. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +919 -0
  116. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  117. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +52 -0
  118. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  119. package/artifacts/contracts/registry/Registry.sol/Registry.json +702 -72
  120. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  121. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  122. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  123. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1211 -0
  124. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  125. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +657 -0
  126. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  127. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +620 -0
  128. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  129. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +485 -0
  130. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  131. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  132. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +4 -0
  133. package/artifacts/contracts/shared/Component.sol/Component.json +873 -0
  134. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +4 -0
  135. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +631 -0
  136. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  137. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +73 -0
  138. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +4 -0
  139. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +636 -0
  140. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  141. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +125 -0
  142. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  143. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +189 -0
  144. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  145. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +175 -0
  146. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  147. package/artifacts/contracts/{instance/access/IAccess.sol/IAccessCheckRole.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +11 -11
  148. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  149. package/artifacts/contracts/shared/IService.sol/IService.json +327 -0
  150. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  151. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +55 -0
  152. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  153. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +238 -0
  154. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  155. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +302 -0
  156. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  157. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +569 -0
  158. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  159. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +339 -0
  160. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  161. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +71 -0
  162. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  163. package/artifacts/contracts/shared/Service.sol/Service.json +488 -0
  164. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  165. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +114 -0
  166. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  167. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  168. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  169. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +78 -0
  170. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +4 -0
  171. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +309 -0
  172. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +4 -0
  173. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +545 -0
  174. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +4 -0
  175. package/artifacts/contracts/staking/Staking.sol/Staking.json +497 -0
  176. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +4 -0
  177. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +623 -0
  178. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +4 -0
  179. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +797 -0
  180. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +4 -0
  181. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +632 -0
  182. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  183. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.json +10 -0
  184. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +4 -0
  185. package/artifacts/contracts/type/Amount.sol/AmountLib.json +281 -0
  186. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  187. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +174 -0
  188. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  189. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +179 -0
  190. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  191. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +104 -0
  192. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +4 -0
  193. package/artifacts/contracts/type/Fee.sol/FeeLib.json +312 -0
  194. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +4 -0
  195. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +125 -0
  196. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +4 -0
  197. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +166 -0
  198. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  199. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +33 -0
  200. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  201. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +92 -0
  202. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  203. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +209 -0
  204. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +4 -0
  205. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +142 -0
  206. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +4 -0
  207. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +86 -0
  208. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +4 -0
  209. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +156 -0
  210. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +4 -0
  211. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +124 -0
  212. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +4 -0
  213. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +92 -0
  214. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +4 -0
  215. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +280 -0
  216. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +4 -0
  217. package/artifacts/contracts/type/UFixed.sol/MathLib.json +10 -0
  218. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +4 -0
  219. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +479 -0
  220. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +4 -0
  221. package/artifacts/contracts/type/Version.sol/VersionLib.json +177 -0
  222. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +4 -0
  223. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +49 -0
  224. package/contracts/distribution/Distribution.sol +285 -0
  225. package/contracts/distribution/DistributionService.sol +349 -0
  226. package/contracts/distribution/DistributionServiceManager.sol +51 -0
  227. package/contracts/distribution/IDistributionComponent.sol +71 -0
  228. package/contracts/distribution/IDistributionService.sol +87 -0
  229. package/contracts/instance/BundleManager.sol +126 -0
  230. package/contracts/instance/IInstance.sol +72 -15
  231. package/contracts/instance/IInstanceService.sol +73 -0
  232. package/contracts/instance/Instance.sol +210 -44
  233. package/contracts/instance/InstanceAccessManager.sol +543 -0
  234. package/contracts/instance/InstanceAuthorizationsLib.sol +308 -0
  235. package/contracts/instance/InstanceReader.sol +368 -0
  236. package/contracts/instance/InstanceService.sol +308 -0
  237. package/contracts/instance/InstanceServiceManager.sol +54 -0
  238. package/contracts/instance/InstanceStore.sol +211 -0
  239. package/contracts/instance/base/Cloneable.sol +51 -0
  240. package/contracts/instance/base/IKeyValueStore.sol +53 -0
  241. package/contracts/instance/base/ILifecycle.sol +30 -0
  242. package/contracts/instance/base/KeyValueStore.sol +169 -0
  243. package/contracts/instance/base/Lifecycle.sol +121 -0
  244. package/contracts/instance/base/ObjectManager.sol +82 -0
  245. package/contracts/instance/module/IAccess.sol +54 -0
  246. package/contracts/instance/module/IBundle.sol +23 -0
  247. package/contracts/instance/module/IComponents.sol +41 -0
  248. package/contracts/instance/module/IDistribution.sol +42 -0
  249. package/contracts/instance/module/IPolicy.sol +78 -0
  250. package/contracts/instance/module/IRisk.sol +11 -0
  251. package/contracts/instance/module/ISetup.sol +33 -0
  252. package/contracts/instance/module/ITreasury.sol +23 -0
  253. package/contracts/pool/BundleService.sol +382 -0
  254. package/contracts/pool/BundleServiceManager.sol +51 -0
  255. package/contracts/pool/IBundleService.sol +118 -0
  256. package/contracts/pool/IPoolComponent.sol +114 -0
  257. package/contracts/pool/IPoolService.sol +114 -0
  258. package/contracts/pool/Pool.sol +302 -0
  259. package/contracts/pool/PoolService.sol +403 -0
  260. package/contracts/pool/PoolServiceManager.sol +51 -0
  261. package/contracts/product/ApplicationService.sol +186 -0
  262. package/contracts/product/ApplicationServiceManager.sol +35 -0
  263. package/contracts/product/ClaimService.sol +442 -0
  264. package/contracts/product/ClaimServiceManager.sol +35 -0
  265. package/contracts/product/IApplicationService.sol +62 -0
  266. package/contracts/product/IClaimService.sol +93 -0
  267. package/contracts/product/IPolicyService.sol +80 -0
  268. package/contracts/product/IPricingService.sol +37 -0
  269. package/contracts/product/IProductComponent.sol +41 -0
  270. package/contracts/product/IProductService.sol +40 -0
  271. package/contracts/product/PolicyService.sol +376 -0
  272. package/contracts/product/PolicyServiceManager.sol +54 -0
  273. package/contracts/product/PricingService.sol +275 -0
  274. package/contracts/product/PricingServiceManager.sol +51 -0
  275. package/contracts/product/Product.sol +379 -0
  276. package/contracts/product/ProductService.sol +210 -0
  277. package/contracts/product/ProductServiceManager.sol +54 -0
  278. package/contracts/registry/ChainNft.sol +216 -0
  279. package/contracts/registry/IRegistry.sol +95 -51
  280. package/contracts/registry/IRegistryService.sol +69 -0
  281. package/contracts/registry/ITransferInterceptor.sol +7 -0
  282. package/contracts/registry/Registry.sol +436 -128
  283. package/contracts/registry/RegistryAccessManager.sol +207 -0
  284. package/contracts/registry/RegistryService.sol +304 -0
  285. package/contracts/registry/RegistryServiceManager.sol +60 -0
  286. package/contracts/registry/ReleaseManager.sol +360 -0
  287. package/contracts/registry/TokenRegistry.sol +116 -0
  288. package/contracts/shared/AccessManagerUpgradeableInitializeable.sol +13 -0
  289. package/contracts/shared/Component.sol +271 -0
  290. package/contracts/shared/ComponentService.sol +150 -0
  291. package/contracts/shared/ERC165.sol +27 -0
  292. package/contracts/shared/IComponent.sol +90 -0
  293. package/contracts/shared/INftOwnable.sol +23 -0
  294. package/contracts/shared/IPolicyHolder.sol +40 -0
  295. package/contracts/shared/IRegisterable.sol +15 -0
  296. package/contracts/shared/IRegistryLinked.sol +11 -0
  297. package/contracts/shared/IService.sol +18 -0
  298. package/contracts/shared/IVersionable.sol +53 -0
  299. package/contracts/shared/NftOwnable.sol +118 -0
  300. package/contracts/shared/PolicyHolder.sol +94 -0
  301. package/contracts/shared/ProxyManager.sol +169 -0
  302. package/contracts/shared/Registerable.sol +75 -0
  303. package/contracts/shared/RegistryLinked.sol +43 -0
  304. package/contracts/shared/Service.sol +72 -0
  305. package/contracts/shared/TokenHandler.sol +35 -0
  306. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  307. package/contracts/shared/Versionable.sol +59 -0
  308. package/contracts/staking/IStaking.sol +15 -0
  309. package/contracts/staking/IStakingService.sol +105 -0
  310. package/contracts/staking/Staking.sol +64 -0
  311. package/contracts/staking/StakingManager.sol +44 -0
  312. package/contracts/staking/StakingService.sol +204 -0
  313. package/contracts/staking/StakingServiceManager.sol +41 -0
  314. package/contracts/type/AddressSet.sol +58 -0
  315. package/contracts/type/Amount.sol +109 -0
  316. package/contracts/type/Blocknumber.sol +119 -0
  317. package/contracts/type/ClaimId.sol +75 -0
  318. package/contracts/type/DistributorType.sol +55 -0
  319. package/contracts/type/Fee.sol +65 -0
  320. package/contracts/type/Key32.sol +50 -0
  321. package/contracts/type/NftId.sol +80 -0
  322. package/contracts/type/NftIdSet.sol +62 -0
  323. package/contracts/type/ObjectType.sol +166 -0
  324. package/contracts/type/PayoutId.sol +82 -0
  325. package/contracts/type/Referral.sol +89 -0
  326. package/contracts/type/RiskId.sol +43 -0
  327. package/contracts/type/RoleId.sol +132 -0
  328. package/contracts/type/Seconds.sol +54 -0
  329. package/contracts/type/StateId.sol +110 -0
  330. package/contracts/type/Timestamp.sol +132 -0
  331. package/contracts/type/UFixed.sol +326 -0
  332. package/contracts/type/Version.sol +108 -0
  333. package/package.json +21 -6
  334. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  335. package/artifacts/contracts/components/Component.sol/Component.json +0 -179
  336. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  337. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  338. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  339. package/artifacts/contracts/components/IPool.sol/IPoolComponent.json +0 -179
  340. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  341. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -192
  342. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +0 -4
  343. package/artifacts/contracts/components/Pool.sol/Pool.json +0 -195
  344. package/artifacts/contracts/components/Product.sol/Product.dbg.json +0 -4
  345. package/artifacts/contracts/components/Product.sol/Product.json +0 -213
  346. package/artifacts/contracts/experiment/A.sol/A.dbg.json +0 -4
  347. package/artifacts/contracts/experiment/A.sol/A.json +0 -128
  348. package/artifacts/contracts/experiment/A.sol/AShared.dbg.json +0 -4
  349. package/artifacts/contracts/experiment/A.sol/AShared.json +0 -42
  350. package/artifacts/contracts/experiment/B.sol/B.dbg.json +0 -4
  351. package/artifacts/contracts/experiment/B.sol/B.json +0 -76
  352. package/artifacts/contracts/experiment/C.sol/C.dbg.json +0 -4
  353. package/artifacts/contracts/experiment/C.sol/C.json +0 -89
  354. package/artifacts/contracts/experiment/IA.sol/IA.dbg.json +0 -4
  355. package/artifacts/contracts/experiment/IA.sol/IA.json +0 -128
  356. package/artifacts/contracts/experiment/IA.sol/ISharedA.dbg.json +0 -4
  357. package/artifacts/contracts/experiment/IA.sol/ISharedA.json +0 -37
  358. package/artifacts/contracts/experiment/IB.sol/IB.dbg.json +0 -4
  359. package/artifacts/contracts/experiment/IB.sol/IB.json +0 -50
  360. package/artifacts/contracts/experiment/IC.sol/IC.dbg.json +0 -4
  361. package/artifacts/contracts/experiment/IC.sol/IC.json +0 -63
  362. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  363. package/artifacts/contracts/instance/access/Access.sol/AccessModule.json +0 -400
  364. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  365. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  366. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  367. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  368. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  369. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.json +0 -336
  370. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  371. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.json +0 -327
  372. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  373. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -105
  374. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  375. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  376. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +0 -179
  377. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  378. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -245
  379. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  380. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -94
  381. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  382. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.json +0 -24
  383. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  384. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  385. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.json +0 -231
  386. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  387. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.json +0 -231
  388. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  389. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  390. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.json +0 -149
  391. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  392. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.json +0 -162
  393. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  394. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  395. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  396. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.json +0 -114
  397. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  398. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  399. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  400. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -125
  401. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  402. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +0 -24
  403. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  404. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +0 -166
  405. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  406. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  407. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  408. package/artifacts/contracts/registry/Registry.sol/Registerable.json +0 -166
  409. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  410. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  411. package/contracts/components/Component.sol +0 -62
  412. package/contracts/components/IPool.sol +0 -9
  413. package/contracts/components/IProduct.sol +0 -11
  414. package/contracts/components/Pool.sol +0 -29
  415. package/contracts/components/Product.sol +0 -65
  416. package/contracts/experiment/A.sol +0 -56
  417. package/contracts/experiment/B.sol +0 -23
  418. package/contracts/experiment/C.sol +0 -28
  419. package/contracts/experiment/IA.sol +0 -18
  420. package/contracts/experiment/IB.sol +0 -9
  421. package/contracts/experiment/IC.sol +0 -11
  422. package/contracts/instance/access/Access.sol +0 -218
  423. package/contracts/instance/access/IAccess.sol +0 -83
  424. package/contracts/instance/component/ComponentModule.sol +0 -259
  425. package/contracts/instance/component/IComponent.sol +0 -94
  426. package/contracts/instance/policy/IPolicy.sol +0 -66
  427. package/contracts/instance/policy/PolicyModule.sol +0 -106
  428. package/contracts/instance/pool/IPoolModule.sol +0 -40
  429. package/contracts/instance/pool/PoolModule.sol +0 -83
  430. package/contracts/instance/product/IProductService.sol +0 -45
  431. package/contracts/instance/product/ProductService.sol +0 -105
@@ -0,0 +1,80 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRisk} from "../instance/module/IRisk.sol";
5
+ import {IService} from "../shared/IService.sol";
6
+
7
+ import {Amount} from "../type/Amount.sol";
8
+ import {ClaimId} from "../type/ClaimId.sol";
9
+ import {NftId} from "../type/NftId.sol";
10
+ import {PayoutId} from "../type/PayoutId.sol";
11
+ import {ReferralId} from "../type/Referral.sol";
12
+ import {RiskId} from "../type/RiskId.sol";
13
+ import {Seconds} from "../type/Seconds.sol";
14
+ import {StateId} from "../type/StateId.sol";
15
+ import {Timestamp} from "../type/Timestamp.sol";
16
+ import {UFixed} from "../type/UFixed.sol";
17
+ import {Fee} from "../type/Fee.sol";
18
+
19
+ interface IPolicyService is IService {
20
+
21
+ error ErrorPolicyServicePolicyProductMismatch(NftId applicationNftId, NftId expectedProductNftId, NftId actualProductNftId);
22
+ error ErrorPolicyServicePolicyStateNotApplied(NftId applicationNftId);
23
+
24
+ error ErrorIPolicyServiceInsufficientAllowance(address customer, address tokenHandlerAddress, uint256 amount);
25
+ error ErrorPolicyServicePremiumAlreadyPaid(NftId policyNftId, Amount premiumPaidAmount);
26
+ error ErrorIPolicyServicePolicyNotActivated(NftId policyNftId);
27
+ error ErrorIPolicyServicePolicyAlreadyClosed(NftId policyNftId);
28
+ error ErrorIPolicyServicePolicyNotActive(NftId policyNftId, StateId state);
29
+ error ErrorPolicyServicePremiumNotFullyPaid(NftId policyNftId, Amount premiumAmount, Amount premiumPaidAmount);
30
+ error ErrorIPolicyServiceOpenClaims(NftId policyNftId, uint16 openClaimsCount);
31
+ error ErrorIPolicyServicePolicyHasNotExpired(NftId policyNftId, Timestamp expiredAt);
32
+
33
+ error ErrorPolicyServicePremiumMismatch(NftId policyNftId, Amount expectedPremiumAmount, Amount recalculatedPremiumAmount);
34
+ error ErrorPolicyServiceTransferredPremiumMismatch(NftId policyNftId, Amount expectedPremiumAmount, Amount transferredPremiumAmount);
35
+
36
+ /// @dev collateralizes the policy represented by {policyNftId}
37
+ /// sets the policy state to collateralized
38
+ /// may set the policy state to activated and set the activation date
39
+ /// optionally collects premiums and activates the policy.
40
+ /// - premium payment is only attempted if requirePremiumPayment is set to true
41
+ /// - activation is only done if activateAt is a non-zero timestamp
42
+ /// an application can only be collateralized in applied state
43
+ /// only the related product may collateralize an application
44
+ function collateralize(
45
+ NftId policyNftId,
46
+ bool requirePremiumPayment,
47
+ Timestamp activateAt
48
+ ) external;
49
+
50
+ /// @dev declines an application represented by {policyNftId}
51
+ /// an application can only be declined in applied state
52
+ /// only the related product may decline an application
53
+ function decline(NftId policyNftId) external;
54
+
55
+ /// @dev collects the premium token for the specified policy
56
+ function collectPremium(NftId policyNftId, Timestamp activateAt) external;
57
+
58
+ /// @dev activates the specified policy and sets the activation date in the policy metadata
59
+ /// to activate a policy it needs to be in underwritten state
60
+ function activate(NftId policyNftId, Timestamp activateAt) external;
61
+
62
+ /// @dev expires the specified policy and sets the expiry date in the policy metadata
63
+ /// to expire a policy it must be in active state, policies may be expired even when the predefined expiry date is still in the future
64
+ /// a policy can only be closed when it has been expired. in addition, it must not have any open claims
65
+ /// this function can only be called by a product. the policy needs to match with the calling product
66
+ function expire(NftId policyNftId) external;
67
+
68
+ /// @dev closes the specified policy and sets the closed data in the policy metadata
69
+ /// a policy can only be closed when it has been expired. in addition, it must not have any open claims
70
+ /// this function can only be called by a product. the policy needs to match with the calling product
71
+ function close(NftId policyNftId) external;
72
+
73
+
74
+ // TODO move function to pool service
75
+ function calculateRequiredCollateral(
76
+ UFixed collateralizationLevel,
77
+ Amount sumInsuredAmount
78
+ ) external pure returns(Amount collateralAmount);
79
+
80
+ }
@@ -0,0 +1,37 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {Seconds} from "../type/Seconds.sol";
5
+ import {NftId} from "../type/NftId.sol";
6
+ import {ReferralId} from "../type/Referral.sol";
7
+ import {RiskId} from "../type/RiskId.sol";
8
+ import {Amount} from "../type/Amount.sol";
9
+
10
+ import {IService} from "./IApplicationService.sol";
11
+ import {IPolicy} from "../instance/module/IPolicy.sol";
12
+
13
+ interface IPricingService is IService
14
+ {
15
+ error ErrorIPricingServiceBundlePoolMismatch(NftId bundleNftId, NftId bundlePoolNftId, NftId poolNftId);
16
+ error ErrorIPricingServiceFeeCalculationMismatch(
17
+ uint256 distributionFeeFixAmount,
18
+ uint256 distributionFeeVarAmount,
19
+ uint256 distributionOwnerFeeFixAmount,
20
+ uint256 distributionOwnerFeeVarAmount,
21
+ uint256 commissionAmount,
22
+ uint256 discountAmount
23
+ );
24
+
25
+ function calculatePremium(
26
+ NftId productNftId,
27
+ RiskId riskId,
28
+ Amount sumInsuredAmount,
29
+ Seconds lifetime,
30
+ bytes memory applicationData,
31
+ NftId bundleNftId,
32
+ ReferralId referralId
33
+ )
34
+ external
35
+ view
36
+ returns (IPolicy.Premium memory premium);
37
+ }
@@ -0,0 +1,41 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {Amount} from "../type/Amount.sol";
5
+ import {Fee} from "../type/Fee.sol";
6
+ import {IComponent} from "../shared/IComponent.sol";
7
+ import {ISetup} from "../instance/module/ISetup.sol";
8
+ import {NftId} from "../type/NftId.sol";
9
+ import {ReferralId} from "../type/Referral.sol";
10
+ import {RiskId} from "../type/RiskId.sol";
11
+ import {Seconds} from "../type/Seconds.sol";
12
+
13
+ interface IProductComponent is IComponent {
14
+
15
+ function getSetupInfo() external view returns (ISetup.ProductSetupInfo memory setupInfo);
16
+
17
+ function setFees(
18
+ Fee memory productFee,
19
+ Fee memory processingFee
20
+ ) external;
21
+
22
+ function calculatePremium(
23
+ Amount sumInsuredAmount,
24
+ RiskId riskId,
25
+ Seconds lifetime,
26
+ bytes memory applicationData,
27
+ NftId bundleNftId,
28
+ ReferralId referralId
29
+ ) external view returns (Amount premiumAmount);
30
+
31
+ function calculateNetPremium(
32
+ Amount sumInsuredAmount,
33
+ RiskId riskId,
34
+ Seconds lifetime,
35
+ bytes memory applicationData
36
+ ) external view returns (Amount netPremiumAmount);
37
+
38
+
39
+ function getPoolNftId() external view returns (NftId poolNftId);
40
+ function getDistributionNftId() external view returns (NftId distributionNftId);
41
+ }
@@ -0,0 +1,40 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRisk} from "../instance/module/IRisk.sol";
5
+ import {IService} from "../shared/IService.sol";
6
+
7
+ import {NftId} from "../type/NftId.sol";
8
+ import {ReferralId} from "../type/Referral.sol";
9
+ import {RiskId} from "../type/RiskId.sol";
10
+ import {StateId} from "../type/StateId.sol";
11
+ import {Timestamp} from "../type/Timestamp.sol";
12
+ import {UFixed} from "../type/UFixed.sol";
13
+ import {Fee} from "../type/Fee.sol";
14
+
15
+ interface IProductService is IService {
16
+
17
+ function register(address productAddress) external returns(NftId);
18
+
19
+ function setFees(
20
+ Fee memory productFee,
21
+ Fee memory processingFee
22
+ ) external;
23
+
24
+ function createRisk(
25
+ RiskId riskId,
26
+ bytes memory data
27
+ ) external;
28
+
29
+
30
+ function updateRisk(
31
+ RiskId riskId,
32
+ bytes memory data
33
+ ) external;
34
+
35
+
36
+ function updateRiskState(
37
+ RiskId riskId,
38
+ StateId newState
39
+ ) external;
40
+ }
@@ -0,0 +1,376 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRegistry} from "../registry/IRegistry.sol";
5
+ import {Product} from "./Product.sol";
6
+ import {IComponents} from "../instance/module/IComponents.sol";
7
+ import {IDistributionComponent} from "../distribution/IDistributionComponent.sol";
8
+ import {IInstance} from "../instance/IInstance.sol";
9
+ import {IPolicy} from "../instance/module/IPolicy.sol";
10
+ import {IPoolComponent} from "../pool/IPoolComponent.sol";
11
+ import {IRisk} from "../instance/module/IRisk.sol";
12
+ import {IBundle} from "../instance/module/IBundle.sol";
13
+ import {ISetup} from "../instance/module/ISetup.sol";
14
+
15
+ import {TokenHandler} from "../shared/TokenHandler.sol";
16
+
17
+ import {Amount, AmountLib} from "../type/Amount.sol";
18
+ import {ClaimId, ClaimIdLib} from "../type/ClaimId.sol";
19
+ import {Timestamp, TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
20
+ import {UFixed, UFixedLib} from "../type/UFixed.sol";
21
+ import {ObjectType, APPLICATION, DISTRIBUTION, PRODUCT, POOL, POLICY, BUNDLE, CLAIM, PRICE} from "../type/ObjectType.sol";
22
+ import {APPLIED, COLLATERALIZED, ACTIVE, KEEP_STATE, CLOSED, DECLINED, CONFIRMED} from "../type/StateId.sol";
23
+ import {NftId, NftIdLib} from "../type/NftId.sol";
24
+ import {PayoutId, PayoutIdLib} from "../type/PayoutId.sol";
25
+ import {StateId} from "../type/StateId.sol";
26
+ import {VersionPart} from "../type/Version.sol";
27
+
28
+ import {ComponentService} from "../shared/ComponentService.sol";
29
+ import {IApplicationService} from "./IApplicationService.sol";
30
+ import {IBundleService} from "../pool/IBundleService.sol";
31
+ import {IClaimService} from "./IClaimService.sol";
32
+ import {IDistributionService} from "../distribution/IDistributionService.sol";
33
+ import {InstanceReader} from "../instance/InstanceReader.sol";
34
+ import {IPolicyService} from "./IPolicyService.sol";
35
+ import {IPoolService} from "../pool/IPoolService.sol";
36
+ import {IPricingService} from "./IPricingService.sol";
37
+ import {IService} from "../shared/IService.sol";
38
+ import {Service} from "../shared/Service.sol";
39
+
40
+ contract PolicyService is
41
+ ComponentService,
42
+ IPolicyService
43
+ {
44
+ using NftIdLib for NftId;
45
+ using TimestampLib for Timestamp;
46
+
47
+ IApplicationService internal _applicationService;
48
+ IBundleService internal _bundleService;
49
+ IClaimService internal _claimService;
50
+ IDistributionService internal _distributionService;
51
+ IPoolService internal _poolService;
52
+ IPricingService internal _pricingService;
53
+
54
+ event LogProductServiceSender(address sender);
55
+
56
+ function _initialize(
57
+ address owner,
58
+ bytes memory data
59
+ )
60
+ internal
61
+ virtual override
62
+ initializer
63
+ {
64
+ address registryAddress;
65
+ address initialOwner;
66
+ (registryAddress, initialOwner) = abi.decode(data, (address, address));
67
+
68
+ initializeService(registryAddress, address(0), owner);
69
+
70
+ VersionPart majorVersion = getVersion().toMajorPart();
71
+ _poolService = IPoolService(getRegistry().getServiceAddress(POOL(), majorVersion));
72
+ _bundleService = IBundleService(getRegistry().getServiceAddress(BUNDLE(), majorVersion));
73
+ _claimService = IClaimService(getRegistry().getServiceAddress(CLAIM(), majorVersion));
74
+ _applicationService = IApplicationService(getRegistry().getServiceAddress(APPLICATION(), majorVersion));
75
+ _distributionService = IDistributionService(getRegistry().getServiceAddress(DISTRIBUTION(), majorVersion));
76
+ _pricingService = IPricingService(getRegistry().getServiceAddress(PRICE(), majorVersion));
77
+
78
+ registerInterface(type(IPolicyService).interfaceId);
79
+ }
80
+
81
+
82
+ function getDomain() public pure override returns(ObjectType) {
83
+ return POLICY();
84
+ }
85
+
86
+
87
+ function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
88
+ IRegistry.ObjectInfo memory productInfo;
89
+ (, productInfo,) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
90
+ product = Product(productInfo.objectAddress);
91
+ }
92
+
93
+
94
+ function decline(
95
+ NftId policyNftId
96
+ )
97
+ external
98
+ override
99
+ {
100
+ revert();
101
+ }
102
+
103
+
104
+ /// @dev underwites application which includes the locking of the required collateral from the pool.
105
+ function collateralize(
106
+ NftId applicationNftId, // = policyNftId
107
+ bool requirePremiumPayment,
108
+ Timestamp activateAt
109
+ )
110
+ external
111
+ virtual override
112
+ {
113
+ // check caller is registered product
114
+ (NftId productNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
115
+ InstanceReader instanceReader = instance.getInstanceReader();
116
+
117
+ // check policy matches with calling product
118
+ IPolicy.PolicyInfo memory applicationInfo = instanceReader.getPolicyInfo(applicationNftId);
119
+ if(applicationInfo.productNftId != productNftId) {
120
+ revert ErrorPolicyServicePolicyProductMismatch(
121
+ applicationNftId,
122
+ applicationInfo.productNftId,
123
+ productNftId);
124
+ }
125
+
126
+ // check policy is in state applied
127
+ if (instanceReader.getPolicyState(applicationNftId) != APPLIED()) {
128
+ revert ErrorPolicyServicePolicyStateNotApplied(applicationNftId);
129
+ }
130
+
131
+ StateId newPolicyState = COLLATERALIZED();
132
+
133
+ // optional activation of policy
134
+ if(activateAt > zeroTimestamp()) {
135
+ newPolicyState = ACTIVE();
136
+ applicationInfo.activatedAt = activateAt;
137
+ applicationInfo.expiredAt = activateAt.addSeconds(applicationInfo.lifetime);
138
+ }
139
+
140
+ // lock bundle collateral
141
+ Amount netPremiumAmount = AmountLib.zero(); // > 0 if immediate premium payment
142
+
143
+ // optional collection of premium
144
+ if(requirePremiumPayment) {
145
+ netPremiumAmount = _processPremiumByTreasury(
146
+ instance,
147
+ applicationNftId,
148
+ applicationInfo.premiumAmount);
149
+
150
+ applicationInfo.premiumPaidAmount = applicationInfo.premiumPaidAmount + applicationInfo.premiumAmount;
151
+ }
152
+
153
+ // store updated policy info
154
+ instance.getInstanceStore().updatePolicy(applicationNftId, applicationInfo, newPolicyState);
155
+
156
+ // lock collateral and update pool and bundle book keeping
157
+ // pool retention level: fraction of sum insured that product will cover from pool funds directly
158
+ // eg retention level 30%, payouts up to 30% of the sum insured will be made from the product's pool directly
159
+ // for the remaining 70% the pool owns a policy that will cover claims that exceed the 30% of the sum insured
160
+ // might also call pool component (for isVerifyingApplications pools)
161
+ _poolService.lockCollateral(
162
+ instance,
163
+ productNftId,
164
+ applicationNftId,
165
+ applicationInfo,
166
+ netPremiumAmount); // for pool book keeping (fee + additional capital)
167
+
168
+ // TODO: add logging
169
+ }
170
+
171
+
172
+ function calculateRequiredCollateral(
173
+ UFixed collateralizationLevel,
174
+ Amount sumInsuredAmount
175
+ )
176
+ public
177
+ pure
178
+ virtual
179
+ returns(Amount collateralAmount)
180
+ {
181
+ UFixed collateralUFixed = collateralizationLevel * sumInsuredAmount.toUFixed();
182
+ return AmountLib.toAmount(collateralUFixed.toInt());
183
+ }
184
+
185
+ function collectPremium(
186
+ NftId policyNftId,
187
+ Timestamp activateAt
188
+ )
189
+ external
190
+ virtual
191
+ {
192
+ // check caller is registered product
193
+ (NftId productNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
194
+ InstanceReader instanceReader = instance.getInstanceReader();
195
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
196
+
197
+ if (policyInfo.premiumPaidAmount == policyInfo.premiumAmount) {
198
+ revert ErrorPolicyServicePremiumAlreadyPaid(policyNftId, policyInfo.premiumPaidAmount);
199
+ }
200
+
201
+ Amount unpaidPremiumAmount = policyInfo.premiumAmount - policyInfo.premiumPaidAmount;
202
+
203
+ Amount netPremiumAmount = _processPremiumByTreasury(
204
+ instance,
205
+ policyNftId,
206
+ unpaidPremiumAmount);
207
+
208
+ policyInfo.premiumPaidAmount = policyInfo.premiumPaidAmount + unpaidPremiumAmount;
209
+
210
+ _bundleService.increaseBalance(instance, policyInfo.bundleNftId, netPremiumAmount);
211
+ instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
212
+
213
+ if(activateAt.gtz() && policyInfo.activatedAt.eqz()) {
214
+ activate(policyNftId, activateAt);
215
+ }
216
+
217
+ // TODO: add logging
218
+ }
219
+
220
+ function activate(NftId policyNftId, Timestamp activateAt) public override {
221
+ // check caller is registered product
222
+ (,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
223
+ InstanceReader instanceReader = instance.getInstanceReader();
224
+
225
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
226
+
227
+ require(
228
+ policyInfo.activatedAt.eqz(),
229
+ "ERROR:PRS-020:ALREADY_ACTIVATED");
230
+
231
+ policyInfo.activatedAt = activateAt;
232
+ policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
233
+
234
+ instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, ACTIVE());
235
+
236
+ // TODO: add logging
237
+ }
238
+
239
+
240
+ function expire(
241
+ NftId policyNftId
242
+ )
243
+ external
244
+ override
245
+ // solhint-disable-next-line no-empty-blocks
246
+ {
247
+
248
+ }
249
+
250
+ function close(
251
+ NftId policyNftId
252
+ )
253
+ external
254
+ override
255
+ {
256
+ (,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
257
+ InstanceReader instanceReader = instance.getInstanceReader();
258
+
259
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
260
+
261
+ if (policyInfo.activatedAt.eqz()) {
262
+ revert ErrorIPolicyServicePolicyNotActivated(policyNftId);
263
+ }
264
+
265
+ StateId state = instanceReader.getPolicyState(policyNftId);
266
+ if (state != ACTIVE()) {
267
+ revert ErrorIPolicyServicePolicyNotActive(policyNftId, state);
268
+ }
269
+
270
+ if (policyInfo.closedAt.gtz()) {
271
+ revert ErrorIPolicyServicePolicyAlreadyClosed(policyNftId);
272
+ }
273
+
274
+ // TODO consider to allow for underpaid premiums (with the effects of reducing max payouts accordingly)
275
+ if (!(policyInfo.premiumAmount == policyInfo.premiumPaidAmount)) {
276
+ revert ErrorPolicyServicePremiumNotFullyPaid(policyNftId, policyInfo.premiumAmount, policyInfo.premiumPaidAmount);
277
+ }
278
+
279
+ if (policyInfo.openClaimsCount > 0) {
280
+ revert ErrorIPolicyServiceOpenClaims(policyNftId, policyInfo.openClaimsCount);
281
+ }
282
+
283
+ policyInfo.closedAt = TimestampLib.blockTimestamp();
284
+
285
+ _poolService.releaseCollateral(
286
+ instance,
287
+ policyNftId,
288
+ policyInfo);
289
+
290
+ instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, CLOSED());
291
+ }
292
+
293
+
294
+ function _processPremiumByTreasury(
295
+ IInstance instance,
296
+ NftId policyNftId,
297
+ Amount premiumExpectedAmount
298
+ )
299
+ internal
300
+ returns (Amount netPremiumAmount)
301
+ {
302
+ // process token transfer(s)
303
+ if(premiumExpectedAmount.eqz()) {
304
+ return AmountLib.zero();
305
+ }
306
+
307
+ NftId productNftId = getRegistry().getObjectInfo(policyNftId).parentNftId;
308
+ IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
309
+ IPolicy.Premium memory premium = _pricingService.calculatePremium(
310
+ productNftId,
311
+ policyInfo.riskId,
312
+ policyInfo.sumInsuredAmount,
313
+ policyInfo.lifetime,
314
+ policyInfo.applicationData,
315
+ policyInfo.bundleNftId,
316
+ policyInfo.referralId
317
+ );
318
+
319
+ if (premium.premiumAmount != premiumExpectedAmount.toInt()) {
320
+ revert ErrorPolicyServicePremiumMismatch(
321
+ policyNftId,
322
+ premiumExpectedAmount,
323
+ AmountLib.toAmount(premium.premiumAmount));
324
+ }
325
+
326
+ address policyOwner = getRegistry().ownerOf(policyNftId);
327
+ ISetup.ProductSetupInfo memory productSetupInfo = instance.getInstanceReader().getProductSetupInfo(productNftId);
328
+ TokenHandler tokenHandler = productSetupInfo.tokenHandler;
329
+ if (tokenHandler.getToken().allowance(policyOwner, address(tokenHandler)) < premium.premiumAmount) {
330
+ revert ErrorIPolicyServiceInsufficientAllowance(policyOwner, address(tokenHandler), premium.premiumAmount);
331
+ }
332
+
333
+ Amount productFeeAmountToTransfer = AmountLib.toAmount(premium.productFeeFixAmount + premium.productFeeVarAmount);
334
+ Amount distributionFeeAmountToTransfer = AmountLib.toAmount(premium.distributionFeeFixAmount + premium.distributionFeeVarAmount - premium.discountAmount);
335
+ uint256 poolFeeAmountToTransfer = premium.poolFeeFixAmount + premium.poolFeeVarAmount;
336
+ uint256 bundleFeeAmountToTransfer = premium.bundleFeeFixAmount + premium.bundleFeeVarAmount;
337
+ Amount poolAmountToTransfer = AmountLib.toAmount(premium.netPremiumAmount + poolFeeAmountToTransfer + bundleFeeAmountToTransfer);
338
+
339
+ netPremiumAmount = AmountLib.toAmount(premium.netPremiumAmount);
340
+
341
+ // move product fee to product wallet
342
+ {
343
+ address productWallet = productSetupInfo.wallet;
344
+ tokenHandler.transfer(policyOwner, productWallet, productFeeAmountToTransfer);
345
+ }
346
+
347
+ // move distribution fee to distribution wallet
348
+ {
349
+ ISetup.DistributionSetupInfo memory distributionSetupInfo = instance.getInstanceReader().getDistributionSetupInfo(productSetupInfo.distributionNftId);
350
+ address distributionWallet = distributionSetupInfo.wallet;
351
+ tokenHandler.transfer(policyOwner, distributionWallet, distributionFeeAmountToTransfer);
352
+ _distributionService.processSale(productSetupInfo.distributionNftId, policyInfo.referralId, premium, distributionFeeAmountToTransfer);
353
+ }
354
+
355
+ // move netpremium, bundleFee and poolFee to pool wallet
356
+ {
357
+ address poolWallet = instance.getInstanceReader().getComponentInfo(productSetupInfo.poolNftId).wallet;
358
+ tokenHandler.transfer(policyOwner, poolWallet, poolAmountToTransfer);
359
+ _poolService.processSale(policyInfo.bundleNftId, premium, poolAmountToTransfer);
360
+ }
361
+
362
+ // validate total amount transferred
363
+ {
364
+ Amount totalTransferred = distributionFeeAmountToTransfer + poolAmountToTransfer + productFeeAmountToTransfer;
365
+
366
+ if (premium.premiumAmount != totalTransferred.toInt()) {
367
+ revert ErrorPolicyServiceTransferredPremiumMismatch(
368
+ policyNftId,
369
+ AmountLib.toAmount(premium.premiumAmount),
370
+ totalTransferred);
371
+ }
372
+ }
373
+
374
+ // TODO: add logging
375
+ }
376
+ }
@@ -0,0 +1,54 @@
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 {PolicyService} from "./PolicyService.sol";
7
+ import {Registry} from "../registry/Registry.sol";
8
+ import {RegistryService} from "../registry/RegistryService.sol";
9
+ import {VersionLib} from "../type/Version.sol";
10
+
11
+ contract PolicyServiceManager is ProxyManager {
12
+
13
+ PolicyService private _policyService;
14
+
15
+ /// @dev initializes proxy manager with product service implementation
16
+ constructor(
17
+ address registryAddress
18
+ )
19
+ ProxyManager(registryAddress)
20
+ {
21
+ PolicyService svc = new PolicyService();
22
+ bytes memory data = abi.encode(registryAddress, address(this));
23
+ IVersionable versionable = deploy(
24
+ address(svc),
25
+ data);
26
+
27
+ _policyService = PolicyService(address(versionable));
28
+
29
+ // Registry registry = Registry(registryAddress);
30
+ // address registryServiceAddress = registry.getServiceAddress("RegistryService", VersionLib.toVersion(3, 0, 0).toMajorPart());
31
+ // RegistryService registryService = RegistryService(registryServiceAddress);
32
+ // TODO this must have a role or own nft to register service
33
+ //registryService.registerService(_productService);
34
+
35
+ // TODO no nft to link yet
36
+ // link ownership of instance service manager ot nft owner of instance service
37
+ //_linkToNftOwnable(
38
+ // address(registryAddress),
39
+ // address(_productService));
40
+
41
+ // implies that after this constructor call only upgrade functionality is available
42
+ // _isDeployed = true;
43
+ }
44
+
45
+ //--- view functions ----------------------------------------------------//
46
+ function getPolicyService()
47
+ external
48
+ view
49
+ returns (PolicyService policyService)
50
+ {
51
+ return _policyService;
52
+ }
53
+
54
+ }