@etherisc/gif-next 0.0.2-e5ea33d → 0.0.2-e69072e-892

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 (424) hide show
  1. package/README.md +413 -9
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
  3. package/artifacts/contracts/components/Component.sol/Component.json +626 -31
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +1279 -0
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/{registry/IChainNft.sol/IChainNft.json → components/IComponent.sol/IComponent.json} +234 -239
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +829 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +1029 -0
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +672 -0
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +1319 -81
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +959 -91
  18. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  19. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +764 -0
  20. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  21. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +185 -0
  22. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  23. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +2038 -508
  24. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  25. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +509 -0
  26. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  27. package/artifacts/contracts/instance/Instance.sol/Instance.json +2715 -456
  28. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  29. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +984 -0
  30. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  31. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1355 -0
  32. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  33. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +1046 -0
  34. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  35. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +693 -0
  36. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  37. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +261 -0
  38. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  39. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +552 -0
  40. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  41. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +429 -0
  42. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  43. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.json +115 -0
  44. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  45. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +502 -0
  46. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  47. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  48. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  49. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +254 -0
  50. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  51. package/artifacts/contracts/instance/{access/IAccess.sol/IAccess.json → module/IBundle.sol/IBundle.json} +2 -2
  52. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  53. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.json +10 -0
  54. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  55. package/artifacts/contracts/instance/{policy → module}/IPolicy.sol/IPolicy.json +1 -1
  56. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  57. package/artifacts/contracts/instance/{pool/IPoolModule.sol/IPool.json → module/IRisk.sol/IRisk.json} +2 -2
  58. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  59. package/artifacts/contracts/instance/{component/IComponent.sol/IComponent.json → module/ISetup.sol/ISetup.json} +2 -2
  60. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  61. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.json +10 -0
  62. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  63. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +968 -0
  64. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  65. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +665 -0
  66. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  67. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1096 -0
  68. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +661 -0
  70. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  71. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +754 -0
  72. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  73. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +637 -0
  74. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  75. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1553 -0
  76. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  77. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +793 -0
  78. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  79. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +556 -0
  80. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  81. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +633 -0
  82. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  83. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +409 -0
  84. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  85. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +858 -0
  86. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  87. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +519 -0
  88. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  89. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +347 -0
  90. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  91. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +384 -0
  92. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  93. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1000 -0
  94. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  95. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +689 -0
  96. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  97. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +727 -0
  98. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  99. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +649 -0
  100. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  101. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +777 -0
  102. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  103. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +649 -0
  104. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  105. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +239 -2
  106. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  107. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +519 -61
  108. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  109. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +890 -0
  110. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  111. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  112. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  113. package/artifacts/contracts/registry/Registry.sol/Registry.json +567 -75
  114. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  115. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  116. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  117. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1177 -0
  118. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  119. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +670 -0
  120. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  121. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
  122. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  123. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +498 -0
  124. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  125. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  126. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  127. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +73 -0
  128. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  129. package/artifacts/contracts/{registry/Registry.sol/Registerable.json → shared/INftOwnable.sol/INftOwnable.json} +46 -74
  130. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  131. package/artifacts/contracts/{instance/product/IProductService.sol/IProductService.json → shared/IPolicyHolder.sol/IPolicyHolder.json} +68 -53
  132. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  133. package/artifacts/contracts/{instance/pool/PoolModule.sol/PoolModule.json → shared/IRegisterable.sol/IRegisterable.json} +106 -80
  134. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  135. package/artifacts/contracts/{registry/IRegistry.sol → shared/IRegistryLinked.sol}/IRegistryLinked.json +18 -19
  136. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  137. package/artifacts/contracts/shared/IService.sol/IService.json +269 -0
  138. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  139. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +55 -0
  140. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  141. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +251 -0
  142. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  143. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
  144. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  145. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +582 -0
  146. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  147. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +352 -0
  148. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  149. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
  150. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  151. package/artifacts/contracts/shared/Service.sol/Service.json +425 -0
  152. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  153. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  154. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  155. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  156. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  157. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +78 -0
  158. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  159. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
  160. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  161. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +383 -0
  162. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  163. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
  164. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  165. package/artifacts/contracts/test/TestService.sol/TestService.json +521 -0
  166. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  167. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +376 -0
  168. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  169. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
  170. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  171. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +104 -0
  172. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  173. package/artifacts/contracts/test/Usdc.sol/USDC.json +376 -0
  174. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  175. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  176. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  177. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  178. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  179. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +2 -2
  180. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  181. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
  182. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  183. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  184. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  185. package/artifacts/contracts/types/Fee.sol/FeeLib.json +257 -0
  186. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  187. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +125 -0
  188. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  189. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
  190. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  191. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +33 -0
  192. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  193. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  194. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  195. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +92 -0
  196. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  197. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
  198. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  199. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  200. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  201. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  202. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  203. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
  204. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  205. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  206. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +4 -0
  207. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +92 -0
  208. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  209. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +97 -4
  210. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  211. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  212. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  213. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +479 -0
  214. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  215. package/artifacts/contracts/types/Version.sol/VersionLib.json +177 -0
  216. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  217. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +49 -0
  218. package/contracts/components/Component.sol +206 -45
  219. package/contracts/components/Distribution.sol +293 -0
  220. package/contracts/components/IComponent.sol +68 -0
  221. package/contracts/components/IDistributionComponent.sol +79 -0
  222. package/contracts/components/IPoolComponent.sol +151 -0
  223. package/contracts/components/IProductComponent.sol +40 -0
  224. package/contracts/components/Pool.sol +368 -12
  225. package/contracts/components/Product.sol +262 -28
  226. package/contracts/instance/BundleManager.sol +125 -0
  227. package/contracts/instance/Cloneable.sol +46 -0
  228. package/contracts/instance/IInstance.sol +91 -17
  229. package/contracts/instance/IInstanceService.sol +59 -0
  230. package/contracts/instance/Instance.sol +280 -53
  231. package/contracts/instance/InstanceAccessManager.sol +297 -0
  232. package/contracts/instance/InstanceReader.sol +293 -0
  233. package/contracts/instance/InstanceService.sol +490 -0
  234. package/contracts/instance/InstanceServiceManager.sol +54 -0
  235. package/contracts/instance/ObjectManager.sol +84 -0
  236. package/contracts/instance/base/ComponentService.sol +134 -0
  237. package/contracts/instance/base/IKeyValueStore.sol +49 -0
  238. package/contracts/instance/base/ILifecycle.sol +30 -0
  239. package/contracts/instance/base/KeyValueStore.sol +172 -0
  240. package/contracts/instance/base/Lifecycle.sol +100 -0
  241. package/contracts/instance/module/IAccess.sol +47 -0
  242. package/contracts/instance/module/IBundle.sol +21 -0
  243. package/contracts/instance/module/IDistribution.sol +41 -0
  244. package/contracts/instance/module/IPolicy.sol +72 -0
  245. package/contracts/instance/module/IRisk.sol +11 -0
  246. package/contracts/instance/module/ISetup.sol +46 -0
  247. package/contracts/instance/module/ITreasury.sol +23 -0
  248. package/contracts/instance/service/ApplicationService.sol +350 -0
  249. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  250. package/contracts/instance/service/BundleService.sol +299 -0
  251. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  252. package/contracts/instance/service/ClaimService.sol +151 -0
  253. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  254. package/contracts/instance/service/DistributionService.sol +394 -0
  255. package/contracts/instance/service/DistributionServiceManager.sol +51 -0
  256. package/contracts/instance/service/IApplicationService.sol +82 -0
  257. package/contracts/instance/service/IBundleService.sol +55 -0
  258. package/contracts/instance/service/IClaimService.sol +61 -0
  259. package/contracts/instance/service/IDistributionService.sol +86 -0
  260. package/contracts/instance/service/IPolicyService.sol +70 -0
  261. package/contracts/instance/service/IPoolService.sol +20 -0
  262. package/contracts/instance/service/IProductService.sol +40 -0
  263. package/contracts/instance/service/PolicyService.sol +404 -0
  264. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  265. package/contracts/instance/service/PoolService.sol +109 -0
  266. package/contracts/instance/service/PoolServiceManager.sol +51 -0
  267. package/contracts/instance/service/ProductService.sol +233 -0
  268. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  269. package/contracts/registry/ChainNft.sol +129 -62
  270. package/contracts/registry/IRegistry.sol +69 -50
  271. package/contracts/registry/IRegistryService.sol +67 -0
  272. package/contracts/registry/ITransferInterceptor.sol +6 -0
  273. package/contracts/registry/Registry.sol +395 -140
  274. package/contracts/registry/RegistryAccessManager.sol +216 -0
  275. package/contracts/registry/RegistryService.sol +283 -0
  276. package/contracts/registry/RegistryServiceManager.sol +62 -0
  277. package/contracts/registry/ReleaseManager.sol +322 -0
  278. package/contracts/registry/TokenRegistry.sol +116 -0
  279. package/contracts/shared/ContractDeployerLib.sol +72 -0
  280. package/contracts/shared/ERC165.sol +27 -0
  281. package/contracts/shared/INftOwnable.sol +23 -0
  282. package/contracts/shared/IPolicyHolder.sol +26 -0
  283. package/contracts/shared/IRegisterable.sol +15 -0
  284. package/contracts/shared/IRegistryLinked.sol +12 -0
  285. package/contracts/shared/IService.sol +18 -0
  286. package/contracts/shared/IVersionable.sol +53 -0
  287. package/contracts/shared/NftOwnable.sol +120 -0
  288. package/contracts/shared/PolicyHolder.sol +81 -0
  289. package/contracts/shared/ProxyManager.sol +169 -0
  290. package/contracts/shared/Registerable.sol +74 -0
  291. package/contracts/shared/RegistryLinked.sol +48 -0
  292. package/contracts/shared/Service.sol +58 -0
  293. package/contracts/shared/TokenHandler.sol +27 -0
  294. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  295. package/contracts/shared/Versionable.sol +59 -0
  296. package/contracts/test/TestFee.sol +25 -0
  297. package/contracts/test/TestRegisterable.sol +18 -0
  298. package/contracts/test/TestRoleId.sol +14 -0
  299. package/contracts/test/TestService.sol +25 -0
  300. package/contracts/test/TestToken.sol +26 -0
  301. package/contracts/test/TestVersion.sol +44 -0
  302. package/contracts/test/TestVersionable.sol +17 -0
  303. package/contracts/test/Usdc.sol +26 -0
  304. package/contracts/types/AddressSet.sol +58 -0
  305. package/contracts/types/ClaimId.sol +52 -0
  306. package/contracts/types/DistributorType.sol +55 -0
  307. package/contracts/types/Fee.sol +56 -0
  308. package/contracts/types/Key32.sol +50 -0
  309. package/contracts/types/NftId.sol +22 -1
  310. package/contracts/types/NftIdSet.sol +62 -0
  311. package/contracts/types/NumberId.sol +52 -0
  312. package/contracts/types/ObjectType.sol +156 -0
  313. package/contracts/types/PayoutId.sol +54 -0
  314. package/contracts/types/Referral.sol +85 -0
  315. package/contracts/types/RiskId.sol +43 -0
  316. package/contracts/types/RoleId.sol +95 -0
  317. package/contracts/types/Seconds.sol +54 -0
  318. package/contracts/types/StateId.sol +105 -0
  319. package/contracts/types/Timestamp.sol +30 -6
  320. package/contracts/types/UFixed.sol +150 -30
  321. package/contracts/types/Version.sol +107 -0
  322. package/package.json +16 -6
  323. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  324. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  325. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  326. package/artifacts/contracts/components/IPool.sol/IPoolComponent.json +0 -179
  327. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  328. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -192
  329. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  330. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  331. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  332. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  333. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  334. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  335. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  336. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  337. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  338. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  339. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  340. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  341. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  342. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  343. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  344. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  345. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  346. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +0 -50
  347. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  348. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  349. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  350. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  351. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  352. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  353. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  354. package/artifacts/contracts/instance/access/Access.sol/AccessModule.json +0 -400
  355. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  356. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  357. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  358. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  359. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  360. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  361. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.json +0 -336
  362. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  363. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.json +0 -327
  364. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  365. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -147
  366. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  367. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  368. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +0 -179
  369. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  370. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -245
  371. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  372. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -94
  373. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  374. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.json +0 -24
  375. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  376. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  377. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.json +0 -231
  378. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  379. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.json +0 -231
  380. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  381. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  382. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.json +0 -149
  383. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  384. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  385. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  386. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  387. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  388. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  389. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  390. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -167
  391. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  392. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  393. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +0 -24
  394. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  395. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +0 -166
  396. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  397. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  398. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  399. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  400. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  401. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +0 -453
  402. package/contracts/components/IPool.sol +0 -9
  403. package/contracts/components/IProduct.sol +0 -9
  404. package/contracts/experiment/errors/Require.sol +0 -38
  405. package/contracts/experiment/errors/Revert.sol +0 -44
  406. package/contracts/experiment/inheritance/A.sol +0 -53
  407. package/contracts/experiment/inheritance/B.sol +0 -28
  408. package/contracts/experiment/inheritance/C.sol +0 -34
  409. package/contracts/experiment/inheritance/IA.sol +0 -13
  410. package/contracts/experiment/inheritance/IB.sol +0 -10
  411. package/contracts/experiment/inheritance/IC.sol +0 -12
  412. package/contracts/experiment/types/TypeA.sol +0 -47
  413. package/contracts/experiment/types/TypeB.sol +0 -29
  414. package/contracts/instance/access/Access.sol +0 -165
  415. package/contracts/instance/access/IAccess.sol +0 -63
  416. package/contracts/instance/component/ComponentModule.sol +0 -213
  417. package/contracts/instance/component/IComponent.sol +0 -73
  418. package/contracts/instance/policy/IPolicy.sol +0 -51
  419. package/contracts/instance/policy/PolicyModule.sol +0 -91
  420. package/contracts/instance/pool/IPoolModule.sol +0 -29
  421. package/contracts/instance/pool/PoolModule.sol +0 -73
  422. package/contracts/instance/product/IProductService.sol +0 -36
  423. package/contracts/instance/product/ProductService.sol +0 -112
  424. package/contracts/registry/IChainNft.sol +0 -21
@@ -0,0 +1,86 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {NftId} from "../../types/NftId.sol";
5
+ import {Fee} from "../../types/Fee.sol";
6
+ import {IPolicy} from "../module/IPolicy.sol";
7
+ import {IService} from "../../shared/IService.sol";
8
+ import {UFixed} from "../../types/UFixed.sol";
9
+ import {DistributorType} from "../../types/DistributorType.sol";
10
+ import {ReferralId} from "../../types/Referral.sol";
11
+ import {Timestamp} from "../../types/Timestamp.sol";
12
+
13
+
14
+ interface IDistributionService is IService {
15
+ error ErrorIDistributionServiceParentNftIdNotInstance(NftId nftId, NftId parentNftId);
16
+ error ErrorIDistributionServiceCallerNotDistributor(address caller);
17
+ error ErrorIDistributionServiceInvalidReferralId(ReferralId referralId);
18
+ error ErrorIDistributionServiceMaxReferralsExceeded(uint256 maxReferrals);
19
+ error ErrorIDistributionServiceDiscountTooLow(uint256 minDiscountPercentage, uint256 discountPercentage);
20
+ error ErrorIDistributionServiceDiscountTooHigh(uint256 maxDiscountPercentage, uint256 discountPercentage);
21
+ error ErrorIDistributionServiceExpiryTooLong(uint256 maxReferralLifetime, uint256 expiryAt);
22
+ error ErrorIDistributionServiceInvalidReferral(string code);
23
+ error ErrorIDistributionServiceExpirationInvalid(Timestamp expiryAt);
24
+ error ErrorIDistributionServiceCommissionTooHigh(uint256 commissionPercentage, uint256 maxCommissionPercentage);
25
+ error ErrorIDistributionServiceMinFeeTooHigh(uint256 minFee, uint256 limit);
26
+ error ErrorIDistributionServiceMaxDiscountTooHigh(uint256 maxDiscountPercentage, uint256 limit);
27
+
28
+ function setFees(
29
+ Fee memory minDistributionOwnerFee,
30
+ Fee memory distributionFee
31
+ ) external;
32
+
33
+ function createDistributorType(
34
+ string memory name,
35
+ UFixed minDiscountPercentage,
36
+ UFixed maxDiscountPercentage,
37
+ UFixed commissionPercentage,
38
+ uint32 maxReferralCount,
39
+ uint32 maxReferralLifetime,
40
+ bool allowSelfReferrals,
41
+ bool allowRenewals,
42
+ bytes memory data
43
+ )
44
+ external
45
+ returns (DistributorType distributorType);
46
+
47
+ function createDistributor(
48
+ address distributor,
49
+ DistributorType distributorType,
50
+ bytes memory data
51
+ ) external returns (NftId distributorNftId);
52
+
53
+ function updateDistributorType(
54
+ NftId distributorNftId,
55
+ DistributorType distributorType,
56
+ bytes memory data
57
+ ) external;
58
+
59
+ function createReferral(
60
+ NftId distributorNftId,
61
+ string memory code,
62
+ UFixed discountPercentage,
63
+ uint32 maxReferrals,
64
+ Timestamp expiryAt,
65
+ bytes memory data
66
+ )
67
+ external
68
+ returns (ReferralId referralId);
69
+
70
+ /// @dev callback from product service when selling a policy for a specific referralId
71
+ function processSale(
72
+ ReferralId referralId,
73
+ uint256 premiumAmount
74
+ ) external;
75
+
76
+ function calculateFeeAmount(
77
+ NftId distributionNftId,
78
+ ReferralId referralId,
79
+ IPolicy.Premium memory premium
80
+ ) external view returns (IPolicy.Premium memory finalPremium);
81
+
82
+ function referralIsValid(
83
+ NftId distributorNftId,
84
+ ReferralId referralId
85
+ ) external view returns (bool isValid);
86
+ }
@@ -0,0 +1,70 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRisk} from "../module/IRisk.sol";
5
+ import {IService} from "../../shared/IService.sol";
6
+
7
+ import {NftId} from "../../types/NftId.sol";
8
+ import {ReferralId} from "../../types/Referral.sol";
9
+ import {RiskId} from "../../types/RiskId.sol";
10
+ import {Seconds} from "../../types/Seconds.sol";
11
+ import {StateId} from "../../types/StateId.sol";
12
+ import {Timestamp} from "../../types/Timestamp.sol";
13
+ import {UFixed} from "../../types/UFixed.sol";
14
+ import {Fee} from "../../types/Fee.sol";
15
+
16
+ interface IPolicyService is IService {
17
+
18
+ error ErrorIPolicyServiceInsufficientAllowance(address customer, address tokenHandlerAddress, uint256 amount);
19
+ error ErrorIPolicyServicePremiumAlreadyPaid(NftId policyNftId, uint256 premiumPaidAmount);
20
+ error ErrorIPolicyServicePolicyNotActivated(NftId policyNftId);
21
+ error ErrorIPolicyServicePolicyAlreadyClosed(NftId policyNftId);
22
+ error ErrorIPolicyServicePolicyNotActive(NftId policyNftId, StateId state);
23
+ error ErrorIPolicyServicePremiumNotFullyPaid(NftId policyNftId, uint256 premiumAmount, uint256 premiumPaidAmount);
24
+ error ErrorIPolicyServiceOpenClaims(NftId policyNftId, uint16 openClaimsCount);
25
+ error ErrorIPolicyServicePolicyHasNotExpired(NftId policyNftId, Timestamp expiredAt);
26
+
27
+ /// @dev declines an application represented by {policyNftId}
28
+ /// an application can only be declined in applied state
29
+ /// only the related product may decline an application
30
+ function decline(NftId policyNftId) external;
31
+
32
+ /// @dev underwrites the policy represented by {policyNftId}
33
+ /// sets the policy state to underwritten
34
+ /// may set the policy state to activated and set the activation date
35
+ /// optionally collects premiums and activates the policy.
36
+ /// - premium payment is only attempted if requirePremiumPayment is set to true
37
+ /// - activation is only done if activateAt is a non-zero timestamp
38
+ /// an application can only be underwritten in applied state
39
+ /// only the related product may underwrite an application
40
+ function underwrite(
41
+ NftId policyNftId,
42
+ bool requirePremiumPayment,
43
+ Timestamp activateAt
44
+ ) external;
45
+
46
+ /// @dev collects the premium token for the specified policy
47
+ function collectPremium(NftId policyNftId, Timestamp activateAt) external;
48
+
49
+ /// @dev activates the specified policy and sets the activation date in the policy metadata
50
+ /// to activate a policy it needs to be in underwritten state
51
+ function activate(NftId policyNftId, Timestamp activateAt) external;
52
+
53
+ /// @dev expires the specified policy and sets the expiry date in the policy metadata
54
+ /// 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
55
+ /// a policy can only be closed when it has been expired. in addition, it must not have any open claims
56
+ /// this function can only be called by a product. the policy needs to match with the calling product
57
+ function expire(NftId policyNftId) external;
58
+
59
+ /// @dev closes the specified policy and sets the closed data in the policy metadata
60
+ /// a policy can only be closed when it has been expired. in addition, it must not have any open claims
61
+ /// this function can only be called by a product. the policy needs to match with the calling product
62
+ function close(NftId policyNftId) external;
63
+
64
+ // TODO move function to pool service
65
+ function calculateRequiredCollateral(
66
+ UFixed collateralizationLevel,
67
+ uint256 sumInsuredAmount
68
+ ) external pure returns(uint256 collateralAmount);
69
+
70
+ }
@@ -0,0 +1,20 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {NftId} from "../../types/NftId.sol";
5
+ import {Fee} from "../../types/Fee.sol";
6
+ import {StateId} from "../../types/StateId.sol";
7
+ import {IService} from "../../shared/IService.sol";
8
+ import {IBundle} from "../module/IBundle.sol";
9
+ import {IInstance} from "../../instance/IInstance.sol";
10
+
11
+ interface IPoolService is IService {
12
+
13
+ function register(address poolAddress) external returns(NftId);
14
+
15
+ function setFees(
16
+ Fee memory poolFee,
17
+ Fee memory stakingFee,
18
+ Fee memory performanceFee
19
+ ) external;
20
+ }
@@ -0,0 +1,40 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRisk} from "../module/IRisk.sol";
5
+ import {IService} from "../../shared/IService.sol";
6
+
7
+ import {NftId} from "../../types/NftId.sol";
8
+ import {ReferralId} from "../../types/Referral.sol";
9
+ import {RiskId} from "../../types/RiskId.sol";
10
+ import {StateId} from "../../types/StateId.sol";
11
+ import {Timestamp} from "../../types/Timestamp.sol";
12
+ import {UFixed} from "../../types/UFixed.sol";
13
+ import {Fee} from "../../types/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,404 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRegistry} from "../../registry/IRegistry.sol";
5
+ import {IProductComponent} from "../../components/IProductComponent.sol";
6
+ import {Product} from "../../components/Product.sol";
7
+ import {IPoolComponent} from "../../components/IPoolComponent.sol";
8
+ import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
9
+ import {IInstance} from "../IInstance.sol";
10
+ import {IPolicy} from "../module/IPolicy.sol";
11
+ import {IRisk} from "../module/IRisk.sol";
12
+ import {IBundle} from "../module/IBundle.sol";
13
+ import {IProductService} from "./IProductService.sol";
14
+ import {ITreasury} from "../module/ITreasury.sol";
15
+ import {ISetup} from "../module/ISetup.sol";
16
+
17
+ import {TokenHandler} from "../../shared/TokenHandler.sol";
18
+
19
+ import {IVersionable} from "../../shared/IVersionable.sol";
20
+ import {Versionable} from "../../shared/Versionable.sol";
21
+
22
+ import {Seconds} from "../../types/Seconds.sol";
23
+ import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
24
+ import {UFixed, UFixedLib} from "../../types/UFixed.sol";
25
+ import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
26
+ import {ObjectType, APPLICATION, INSTANCE, PRODUCT, POOL, POLICY, BUNDLE} from "../../types/ObjectType.sol";
27
+ import {APPLIED, UNDERWRITTEN, ACTIVE, KEEP_STATE, CLOSED} from "../../types/StateId.sol";
28
+ import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
29
+ import {Fee, FeeLib} from "../../types/Fee.sol";
30
+ import {ReferralId} from "../../types/Referral.sol";
31
+ import {RiskId} from "../../types/RiskId.sol";
32
+ import {StateId} from "../../types/StateId.sol";
33
+ import {Version, VersionLib} from "../../types/Version.sol";
34
+ //import {RoleId, PRODUCT_OWNER_ROLE} from "../../types/RoleId.sol";
35
+
36
+ import {IService} from "../../shared/IService.sol";
37
+ import {Service} from "../../shared/Service.sol";
38
+ import {ComponentService} from "../base/ComponentService.sol";
39
+ import {IApplicationService} from "./IApplicationService.sol";
40
+ import {IPolicyService} from "./IPolicyService.sol";
41
+ import {InstanceReader} from "../InstanceReader.sol";
42
+ import {IPoolService} from "./IPoolService.sol";
43
+ import {IBundleService} from "./IBundleService.sol";
44
+
45
+
46
+ contract PolicyService is
47
+ ComponentService,
48
+ IPolicyService
49
+ {
50
+ using NftIdLib for NftId;
51
+ using TimestampLib for Timestamp;
52
+
53
+ IPoolService internal _poolService;
54
+ IBundleService internal _bundleService;
55
+ IApplicationService internal _applicationService;
56
+
57
+ event LogProductServiceSender(address sender);
58
+
59
+ function _initialize(
60
+ address owner,
61
+ bytes memory data
62
+ )
63
+ internal
64
+ virtual override
65
+ initializer
66
+ {
67
+ address registryAddress;
68
+ address initialOwner;
69
+ (registryAddress, initialOwner) = abi.decode(data, (address, address));
70
+
71
+ initializeService(registryAddress, owner);
72
+
73
+ _poolService = IPoolService(getRegistry().getServiceAddress(POOL(), getMajorVersion()));
74
+ _bundleService = IBundleService(getRegistry().getServiceAddress(BUNDLE(), getMajorVersion()));
75
+ // FIXME: application service is currently deployed AFTER policy service
76
+ _applicationService = IApplicationService(getRegistry().getServiceAddress(APPLICATION(), getMajorVersion()));
77
+
78
+ registerInterface(type(IPolicyService).interfaceId);
79
+ }
80
+
81
+
82
+ function getDomain() public pure override(IService, Service) returns(ObjectType) {
83
+ return POLICY();
84
+ }
85
+
86
+
87
+ function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
88
+ IRegistry.ObjectInfo memory productInfo;
89
+ (productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
90
+ product = Product(productInfo.objectAddress);
91
+ }
92
+
93
+ function _getAndVerifyUnderwritingSetup(
94
+ IInstance instance,
95
+ InstanceReader instanceReader,
96
+ IPolicy.PolicyInfo memory policyInfo,
97
+ ISetup.ProductSetupInfo memory productSetupInfo
98
+ )
99
+ internal
100
+ view
101
+ returns (
102
+ NftId poolNftId,
103
+ NftId bundleNftId,
104
+ IBundle.BundleInfo memory bundleInfo,
105
+ uint256 collateralAmount
106
+ )
107
+ {
108
+ // check match between policy and bundle (via pool)
109
+ poolNftId = productSetupInfo.poolNftId;
110
+ bundleNftId = policyInfo.bundleNftId;
111
+ bundleInfo = instanceReader.getBundleInfo(bundleNftId);
112
+ require(bundleInfo.poolNftId == poolNftId, "POLICY_BUNDLE_MISMATCH");
113
+
114
+ // calculate required collateral
115
+ ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(poolNftId);
116
+
117
+ // obtain remaining return values
118
+ // TODO required collateral amount should be calculated by pool service, not policy service
119
+ collateralAmount = calculateRequiredCollateral(poolInfo.collateralizationLevel, policyInfo.sumInsuredAmount);
120
+ }
121
+
122
+
123
+ function decline(
124
+ NftId policyNftId
125
+ )
126
+ external
127
+ override
128
+ {
129
+ require(false, "ERROR:PRS-235:NOT_YET_IMPLEMENTED");
130
+ }
131
+
132
+
133
+ /// @dev underwites application which includes the locking of the required collateral from the pool.
134
+ function underwrite(
135
+ NftId applicationNftId, // = policyNftId
136
+ bool requirePremiumPayment,
137
+ Timestamp activateAt
138
+ )
139
+ external
140
+ virtual override
141
+ {
142
+ // check caller is registered product
143
+ IInstance instance;
144
+ InstanceReader instanceReader;
145
+ NftId productNftId;
146
+ {
147
+ IRegistry.ObjectInfo memory productInfo;
148
+ (productInfo, instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
149
+ instanceReader = instance.getInstanceReader();
150
+ productNftId = productInfo.nftId;
151
+ }
152
+
153
+ // check policy matches with calling product
154
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(applicationNftId);
155
+ require(policyInfo.productNftId == productNftId, "POLICY_PRODUCT_MISMATCH");
156
+
157
+ // check policy is in state applied
158
+ require(instanceReader.getPolicyState(applicationNftId) == APPLIED(), "ERROR:PRS-021:STATE_NOT_APPLIED");
159
+
160
+ (
161
+ NftId poolNftId,
162
+ NftId bundleNftId,
163
+ IBundle.BundleInfo memory bundleInfo,
164
+ uint256 collateralAmount
165
+ ) = _getAndVerifyUnderwritingSetup(
166
+ instance,
167
+ instanceReader,
168
+ policyInfo,
169
+ instanceReader.getProductSetupInfo(productNftId)
170
+ );
171
+
172
+ StateId newPolicyState = UNDERWRITTEN();
173
+
174
+ // optional activation of policy
175
+ if(activateAt > zeroTimestamp()) {
176
+ newPolicyState = ACTIVE();
177
+ policyInfo.activatedAt = activateAt;
178
+ policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
179
+ }
180
+
181
+ // lock bundle collateral
182
+ uint256 netPremiumAmount = 0; // > 0 if immediate premium payment
183
+
184
+ // optional collection of premium
185
+ if(requirePremiumPayment) {
186
+ netPremiumAmount = _processPremiumByTreasury(
187
+ instance,
188
+ productNftId,
189
+ applicationNftId,
190
+ policyInfo.premiumAmount);
191
+
192
+ policyInfo.premiumPaidAmount += policyInfo.premiumAmount;
193
+ }
194
+
195
+ // lock collateral and update bundle book keeping
196
+ // TODO introduct indirection via pool service?
197
+ // well pool would only need to be involved when a part of the collateral
198
+ // is provided by a "re insurance policy" of the pool
199
+ // but then again the policiy would likely best be attached to the bundle. really? why?
200
+ // retention level: fraction of sum insured that product will cover from pool funds directly
201
+ // eg retention level 30%, payouts up to 30% of the sum insured will be made from the product's pool directly
202
+ // for the remaining 70% the pool owns a policy that will cover claims that exceed the 30% of the sum insured
203
+ // open points:
204
+ // - do we need a link of a bundle to this policy or is it enough to know that the pool has an active policy?
205
+ // - when to buy such policies and for which amount? manual trigger or link to bundle creation and/or funding?
206
+ bundleInfo = _bundleService.lockCollateral(
207
+ instance,
208
+ applicationNftId,
209
+ bundleNftId,
210
+ collateralAmount,
211
+ netPremiumAmount);
212
+
213
+ instance.updatePolicy(applicationNftId, policyInfo, newPolicyState);
214
+
215
+ // also verify/confirm application by pool if necessary
216
+ if(instanceReader.getPoolSetupInfo(poolNftId).isVerifyingApplications) {
217
+ IPoolComponent pool = IPoolComponent(
218
+ getRegistry().getObjectInfo(poolNftId).objectAddress);
219
+
220
+ pool.verifyApplication(
221
+ applicationNftId,
222
+ policyInfo.applicationData,
223
+ bundleNftId,
224
+ bundleInfo.filter,
225
+ collateralAmount);
226
+ }
227
+
228
+ // TODO: add logging
229
+ }
230
+
231
+
232
+ function calculateRequiredCollateral(UFixed collateralizationLevel, uint256 sumInsuredAmount) public pure override returns(uint256 collateralAmount) {
233
+ UFixed sumInsuredUFixed = UFixedLib.toUFixed(sumInsuredAmount);
234
+ UFixed collateralUFixed = collateralizationLevel * sumInsuredUFixed;
235
+ return collateralUFixed.toInt();
236
+ }
237
+
238
+ function collectPremium(NftId policyNftId, Timestamp activateAt) external override {
239
+ // check caller is registered product
240
+ (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
241
+ InstanceReader instanceReader = instance.getInstanceReader();
242
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
243
+
244
+ if (policyInfo.premiumPaidAmount == policyInfo.premiumAmount) {
245
+ revert ErrorIPolicyServicePremiumAlreadyPaid(policyNftId, policyInfo.premiumPaidAmount);
246
+ }
247
+
248
+ uint256 unpaidPremiumAmount = policyInfo.premiumAmount - policyInfo.premiumPaidAmount;
249
+
250
+ uint256 netPremiumAmount = _processPremiumByTreasury(
251
+ instance,
252
+ productInfo.nftId,
253
+ policyNftId,
254
+ unpaidPremiumAmount);
255
+
256
+ policyInfo.premiumPaidAmount += unpaidPremiumAmount;
257
+
258
+ _bundleService.increaseBalance(instance, policyInfo.bundleNftId, netPremiumAmount);
259
+ instance.updatePolicy(policyNftId, policyInfo, KEEP_STATE());
260
+
261
+ if(activateAt.gtz() && policyInfo.activatedAt.eqz()) {
262
+ activate(policyNftId, activateAt);
263
+ }
264
+
265
+ // TODO: add logging
266
+ }
267
+
268
+ function activate(NftId policyNftId, Timestamp activateAt) public override {
269
+ // check caller is registered product
270
+ (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
271
+ InstanceReader instanceReader = instance.getInstanceReader();
272
+
273
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
274
+
275
+ require(
276
+ policyInfo.activatedAt.eqz(),
277
+ "ERROR:PRS-020:ALREADY_ACTIVATED");
278
+
279
+ policyInfo.activatedAt = activateAt;
280
+ policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
281
+
282
+ instance.updatePolicy(policyNftId, policyInfo, ACTIVE());
283
+
284
+ // TODO: add logging
285
+ }
286
+
287
+
288
+ function expire(
289
+ NftId policyNftId
290
+ )
291
+ external
292
+ override
293
+ // solhint-disable-next-line no-empty-blocks
294
+ {
295
+
296
+ }
297
+
298
+ function close(
299
+ NftId policyNftId
300
+ )
301
+ external
302
+ override
303
+ {
304
+ (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
305
+ InstanceReader instanceReader = instance.getInstanceReader();
306
+
307
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
308
+
309
+ if (policyInfo.activatedAt.eqz()) {
310
+ revert ErrorIPolicyServicePolicyNotActivated(policyNftId);
311
+ }
312
+
313
+ StateId state = instanceReader.getPolicyState(policyNftId);
314
+ if (state != ACTIVE()) {
315
+ revert ErrorIPolicyServicePolicyNotActive(policyNftId, state);
316
+ }
317
+
318
+ if (policyInfo.closedAt.gtz()) {
319
+ revert ErrorIPolicyServicePolicyAlreadyClosed(policyNftId);
320
+ }
321
+
322
+ if (policyInfo.premiumAmount != policyInfo.premiumPaidAmount) {
323
+ revert ErrorIPolicyServicePremiumNotFullyPaid(policyNftId, policyInfo.premiumAmount, policyInfo.premiumPaidAmount);
324
+ }
325
+
326
+ if (policyInfo.openClaimsCount > 0) {
327
+ revert ErrorIPolicyServiceOpenClaims(policyNftId, policyInfo.openClaimsCount);
328
+ }
329
+
330
+ if (TimestampLib.blockTimestamp().lte(policyInfo.expiredAt) && (policyInfo.payoutAmount < policyInfo.sumInsuredAmount)) {
331
+ revert ErrorIPolicyServicePolicyHasNotExpired(policyNftId, policyInfo.expiredAt);
332
+ }
333
+
334
+ policyInfo.closedAt = TimestampLib.blockTimestamp();
335
+
336
+ _bundleService.closePolicy(instance, policyNftId, policyInfo.bundleNftId, policyInfo.sumInsuredAmount);
337
+ instance.updatePolicy(policyNftId, policyInfo, CLOSED());
338
+ }
339
+
340
+ function _getPoolNftId(
341
+ IInstance instance,
342
+ NftId productNftId
343
+ )
344
+ internal
345
+ view
346
+ returns (NftId poolNftid)
347
+ {
348
+ InstanceReader instanceReader = instance.getInstanceReader();
349
+ ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
350
+ return productSetupInfo.poolNftId;
351
+ }
352
+
353
+
354
+ function _processPremiumByTreasury(
355
+ IInstance instance,
356
+ NftId productNftId,
357
+ NftId policyNftId,
358
+ uint256 premiumAmount
359
+ )
360
+ internal
361
+ returns (uint256 netPremiumAmount)
362
+ {
363
+ // process token transfer(s)
364
+ if(premiumAmount > 0) {
365
+ ISetup.ProductSetupInfo memory productSetupInfo = instance.getInstanceReader().getProductSetupInfo(productNftId);
366
+ IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
367
+ TokenHandler tokenHandler = productSetupInfo.tokenHandler;
368
+ address policyOwner = getRegistry().ownerOf(policyNftId);
369
+ ISetup.PoolSetupInfo memory poolSetupInfo = instance.getInstanceReader().getPoolSetupInfo(productSetupInfo.poolNftId);
370
+ address poolWallet = poolSetupInfo.wallet;
371
+ IPolicy.Premium memory premium = _applicationService.calculatePremium(
372
+ productNftId,
373
+ policyInfo.riskId,
374
+ policyInfo.sumInsuredAmount,
375
+ policyInfo.lifetime,
376
+ policyInfo.applicationData,
377
+ policyInfo.bundleNftId,
378
+ policyInfo.referralId
379
+ );
380
+
381
+ // if (FeeLib.feeIsZero(premium.productFeeAmount)) {
382
+ // tokenHandler.transfer(
383
+ // policyOwner,
384
+ // poolWallet,
385
+ // premiumAmount
386
+ // );
387
+ // } else {
388
+ // FIXME: this is wrong as netPremium is not netPremium here!!!
389
+ // (uint256 productFeeAmount, uint256 netAmount) = FeeLib.calculateFee(productSetupInfo.productFee, netPremiumAmount);
390
+ address productWallet = productSetupInfo.wallet;
391
+ if (tokenHandler.getToken().allowance(policyOwner, address(tokenHandler)) < premium.premiumAmount) {
392
+ revert ErrorIPolicyServiceInsufficientAllowance(policyOwner, address(tokenHandler), premium.premiumAmount);
393
+ }
394
+ tokenHandler.transfer(policyOwner, productWallet, premium.productFeeFixAmount + premium.productFeeVarAmount);
395
+ tokenHandler.transfer(policyOwner, poolWallet, premium.netPremiumAmount);
396
+ netPremiumAmount = premium.netPremiumAmount;
397
+ // TODO: also move distribution tokens to distribution wallet and call `Distribution.processSale` to update distribution balances
398
+ // }
399
+
400
+ }
401
+
402
+ // TODO: add logging
403
+ }
404
+ }
@@ -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 "../../types/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
+ }