@etherisc/gif-next 0.0.2-f7be756-963 → 0.0.2-f7c17b4-297

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 (463) hide show
  1. package/README.md +403 -8
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
  3. package/artifacts/contracts/components/Component.sol/Component.json +604 -35
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +1310 -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 +877 -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 +740 -0
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +1253 -130
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +978 -157
  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 +1791 -776
  24. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  25. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +498 -0
  26. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  27. package/artifacts/contracts/instance/Instance.sol/Instance.json +2497 -824
  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 +1391 -0
  32. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  33. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +1035 -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 +541 -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/{lifecycle/ILifecycle.sol/ILifecycleModule.json → base/ILifecycle.sol/ILifecycle.json} +10 -77
  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/{component/IComponent.sol/IComponent.json → module/IDistribution.sol/IDistribution.json} +2 -2
  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/module/ISetup.sol/ISetup.json +10 -0
  60. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  61. package/artifacts/contracts/instance/{treasury → module}/ITreasury.sol/ITreasury.json +1 -1
  62. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  63. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +858 -0
  64. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  65. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +657 -0
  66. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  67. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1085 -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 +743 -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 +935 -0
  76. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  77. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +677 -0
  78. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  79. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +462 -0
  80. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  81. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +622 -0
  82. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  83. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +398 -0
  84. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  85. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +480 -0
  86. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  87. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +572 -0
  88. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  89. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +336 -0
  90. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  91. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +373 -0
  92. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  93. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1109 -0
  94. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  95. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +717 -0
  96. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  97. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +716 -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 +766 -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 +578 -29
  108. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  109. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +879 -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 +651 -68
  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 +1166 -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 -66
  132. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  133. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +188 -0
  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/{components/IPool.sol/IPoolComponent.json → shared/IService.sol/IService.json} +120 -117
  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 +414 -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 +510 -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/ChainId.sol/ChainIdLib.dbg.json +1 -1
  178. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  179. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
  180. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  181. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  182. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  183. package/artifacts/contracts/types/Fee.sol/FeeLib.json +257 -0
  184. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  185. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +125 -0
  186. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  187. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
  188. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  189. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +33 -0
  190. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  191. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  192. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  193. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  194. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  195. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
  196. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  197. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  198. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  199. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  200. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  201. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
  202. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  203. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  204. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  205. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  206. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  207. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +97 -4
  208. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  209. package/artifacts/contracts/{experiment/types/TypeB.sol/TypeBLib.json → types/UFixed.sol/MathLib.json} +4 -4
  210. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  211. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +479 -0
  212. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  213. package/artifacts/contracts/types/Version.sol/VersionLib.json +177 -0
  214. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  215. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +49 -0
  216. package/contracts/components/Component.sol +195 -51
  217. package/contracts/components/Distribution.sol +308 -0
  218. package/contracts/components/IComponent.sol +68 -0
  219. package/contracts/components/IDistributionComponent.sol +100 -0
  220. package/contracts/components/IPoolComponent.sol +151 -0
  221. package/contracts/components/IProductComponent.sol +40 -0
  222. package/contracts/components/Pool.sol +356 -30
  223. package/contracts/components/Product.sol +252 -48
  224. package/contracts/instance/BundleManager.sol +125 -0
  225. package/contracts/instance/Cloneable.sol +46 -0
  226. package/contracts/instance/IInstance.sol +91 -24
  227. package/contracts/instance/IInstanceService.sol +59 -0
  228. package/contracts/instance/Instance.sol +270 -51
  229. package/contracts/instance/InstanceAccessManager.sol +297 -0
  230. package/contracts/instance/InstanceReader.sol +293 -0
  231. package/contracts/instance/InstanceService.sol +490 -0
  232. package/contracts/instance/InstanceServiceManager.sol +54 -0
  233. package/contracts/instance/ObjectManager.sol +84 -0
  234. package/contracts/instance/base/ComponentService.sol +134 -0
  235. package/contracts/instance/base/IKeyValueStore.sol +49 -0
  236. package/contracts/instance/base/ILifecycle.sol +30 -0
  237. package/contracts/instance/base/KeyValueStore.sol +172 -0
  238. package/contracts/instance/base/Lifecycle.sol +100 -0
  239. package/contracts/instance/module/IAccess.sol +47 -0
  240. package/contracts/instance/module/IBundle.sol +21 -0
  241. package/contracts/instance/module/IDistribution.sol +39 -0
  242. package/contracts/instance/module/IPolicy.sol +48 -0
  243. package/contracts/instance/module/IRisk.sol +11 -0
  244. package/contracts/instance/module/ISetup.sol +48 -0
  245. package/contracts/instance/module/ITreasury.sol +23 -0
  246. package/contracts/instance/service/ApplicationService.sol +269 -0
  247. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  248. package/contracts/instance/service/BundleService.sol +299 -0
  249. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  250. package/contracts/instance/service/ClaimService.sol +151 -0
  251. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  252. package/contracts/instance/service/DistributionService.sol +277 -0
  253. package/contracts/instance/service/DistributionServiceManager.sol +51 -0
  254. package/contracts/instance/service/IApplicationService.sol +83 -0
  255. package/contracts/instance/service/IBundleService.sol +55 -0
  256. package/contracts/instance/service/IClaimService.sol +61 -0
  257. package/contracts/instance/service/IDistributionService.sol +65 -0
  258. package/contracts/instance/service/IPolicyService.sol +90 -0
  259. package/contracts/instance/service/IPoolService.sol +20 -0
  260. package/contracts/instance/service/IProductService.sol +40 -0
  261. package/contracts/instance/service/PolicyService.sol +476 -0
  262. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  263. package/contracts/instance/service/PoolService.sol +109 -0
  264. package/contracts/instance/service/PoolServiceManager.sol +51 -0
  265. package/contracts/instance/service/ProductService.sol +233 -0
  266. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  267. package/contracts/registry/ChainNft.sol +129 -62
  268. package/contracts/registry/IRegistry.sol +73 -41
  269. package/contracts/registry/IRegistryService.sol +67 -0
  270. package/contracts/registry/ITransferInterceptor.sol +6 -0
  271. package/contracts/registry/Registry.sol +408 -126
  272. package/contracts/registry/RegistryAccessManager.sol +216 -0
  273. package/contracts/registry/RegistryService.sol +283 -0
  274. package/contracts/registry/RegistryServiceManager.sol +62 -0
  275. package/contracts/registry/ReleaseManager.sol +322 -0
  276. package/contracts/registry/TokenRegistry.sol +116 -0
  277. package/contracts/shared/ContractDeployerLib.sol +72 -0
  278. package/contracts/shared/ERC165.sol +27 -0
  279. package/contracts/shared/INftOwnable.sol +23 -0
  280. package/contracts/shared/IPolicyHolder.sol +26 -0
  281. package/contracts/shared/IRegisterable.sol +15 -0
  282. package/contracts/shared/IRegistryLinked.sol +12 -0
  283. package/contracts/shared/IService.sol +16 -0
  284. package/contracts/shared/IVersionable.sol +53 -0
  285. package/contracts/shared/NftOwnable.sol +120 -0
  286. package/contracts/shared/PolicyHolder.sol +81 -0
  287. package/contracts/shared/ProxyManager.sol +169 -0
  288. package/contracts/shared/Registerable.sol +74 -0
  289. package/contracts/shared/RegistryLinked.sol +48 -0
  290. package/contracts/shared/Service.sol +58 -0
  291. package/contracts/shared/TokenHandler.sol +27 -0
  292. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  293. package/contracts/shared/Versionable.sol +59 -0
  294. package/contracts/test/TestFee.sol +25 -0
  295. package/contracts/test/TestRegisterable.sol +18 -0
  296. package/contracts/test/TestRoleId.sol +14 -0
  297. package/contracts/test/TestService.sol +25 -0
  298. package/contracts/{mock/Dip.sol → test/TestToken.sol} +5 -5
  299. package/contracts/test/TestVersion.sol +44 -0
  300. package/contracts/test/TestVersionable.sol +17 -0
  301. package/contracts/{mock → test}/Usdc.sol +1 -1
  302. package/contracts/types/AddressSet.sol +58 -0
  303. package/contracts/types/ClaimId.sol +52 -0
  304. package/contracts/types/DistributorType.sol +55 -0
  305. package/contracts/types/Fee.sol +44 -20
  306. package/contracts/types/Key32.sol +50 -0
  307. package/contracts/types/NftId.sol +22 -1
  308. package/contracts/types/NftIdSet.sol +62 -0
  309. package/contracts/types/NumberId.sol +52 -0
  310. package/contracts/types/ObjectType.sol +64 -15
  311. package/contracts/types/PayoutId.sol +54 -0
  312. package/contracts/types/Referral.sol +85 -0
  313. package/contracts/types/RiskId.sol +43 -0
  314. package/contracts/types/RoleId.sol +95 -0
  315. package/contracts/types/Seconds.sol +54 -0
  316. package/contracts/types/StateId.sol +18 -4
  317. package/contracts/types/Timestamp.sol +30 -6
  318. package/contracts/types/UFixed.sol +138 -23
  319. package/contracts/types/Version.sol +107 -0
  320. package/package.json +11 -5
  321. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  322. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  323. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  324. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  325. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -74
  326. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  327. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  328. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  329. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  330. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  331. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  332. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  333. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  334. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  335. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  336. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  337. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  338. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  339. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  340. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  341. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  342. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  343. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +0 -50
  344. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  345. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  346. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  347. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  348. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  349. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  350. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  351. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  352. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  353. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  354. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  355. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  356. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  357. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  358. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  359. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  360. package/artifacts/contracts/instance/access/Access.sol/AccessModule.json +0 -400
  361. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  362. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  363. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  364. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  365. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  366. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  367. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.json +0 -336
  368. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  369. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.json +0 -299
  370. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  371. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -202
  372. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  373. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  374. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +0 -205
  375. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  376. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -217
  377. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  378. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -141
  379. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  380. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.json +0 -24
  381. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  382. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.json +0 -134
  383. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +0 -4
  384. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +0 -4
  385. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.json +0 -221
  386. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  387. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  388. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.json +0 -254
  389. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  390. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.json +0 -254
  391. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  392. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  393. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.json +0 -129
  394. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  395. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.json +0 -155
  396. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  397. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  398. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  399. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  400. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  401. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  402. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -196
  403. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  404. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  405. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.json +0 -490
  406. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  407. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.json +0 -45
  408. package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  409. package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.json +0 -490
  410. package/artifacts/contracts/mock/Dip.sol/DIP.dbg.json +0 -4
  411. package/artifacts/contracts/mock/Dip.sol/DIP.json +0 -338
  412. package/artifacts/contracts/mock/TestPool.sol/TestPool.dbg.json +0 -4
  413. package/artifacts/contracts/mock/TestPool.sol/TestPool.json +0 -294
  414. package/artifacts/contracts/mock/TestProduct.sol/TestProduct.dbg.json +0 -4
  415. package/artifacts/contracts/mock/TestProduct.sol/TestProduct.json +0 -384
  416. package/artifacts/contracts/mock/Usdc.sol/USDC.dbg.json +0 -4
  417. package/artifacts/contracts/mock/Usdc.sol/USDC.json +0 -338
  418. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  419. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  420. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +0 -24
  421. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  422. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +0 -166
  423. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  424. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  425. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  426. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  427. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  428. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +0 -479
  429. package/contracts/components/IPool.sol +0 -15
  430. package/contracts/components/IProduct.sol +0 -16
  431. package/contracts/experiment/errors/Require.sol +0 -38
  432. package/contracts/experiment/errors/Revert.sol +0 -44
  433. package/contracts/experiment/inheritance/A.sol +0 -53
  434. package/contracts/experiment/inheritance/B.sol +0 -28
  435. package/contracts/experiment/inheritance/C.sol +0 -34
  436. package/contracts/experiment/inheritance/IA.sol +0 -13
  437. package/contracts/experiment/inheritance/IB.sol +0 -10
  438. package/contracts/experiment/inheritance/IC.sol +0 -12
  439. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  440. package/contracts/experiment/statemachine/ISM.sol +0 -25
  441. package/contracts/experiment/statemachine/README.md +0 -112
  442. package/contracts/experiment/statemachine/SM.sol +0 -57
  443. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  444. package/contracts/experiment/types/TypeA.sol +0 -47
  445. package/contracts/experiment/types/TypeB.sol +0 -29
  446. package/contracts/instance/access/Access.sol +0 -165
  447. package/contracts/instance/access/IAccess.sol +0 -63
  448. package/contracts/instance/component/ComponentModule.sol +0 -274
  449. package/contracts/instance/component/IComponent.sol +0 -74
  450. package/contracts/instance/lifecycle/ILifecycle.sol +0 -47
  451. package/contracts/instance/lifecycle/LifecycleModule.sol +0 -88
  452. package/contracts/instance/policy/IPolicy.sol +0 -50
  453. package/contracts/instance/policy/PolicyModule.sol +0 -114
  454. package/contracts/instance/pool/IPoolModule.sol +0 -23
  455. package/contracts/instance/pool/PoolModule.sol +0 -81
  456. package/contracts/instance/product/IProductService.sol +0 -36
  457. package/contracts/instance/product/ProductService.sol +0 -136
  458. package/contracts/instance/treasury/ITreasury.sol +0 -91
  459. package/contracts/instance/treasury/TokenHandler.sol +0 -24
  460. package/contracts/instance/treasury/TreasuryModule.sol +0 -168
  461. package/contracts/mock/TestPool.sol +0 -16
  462. package/contracts/mock/TestProduct.sol +0 -39
  463. package/contracts/registry/IChainNft.sol +0 -21
@@ -0,0 +1,476 @@
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, 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 {IPolicyService} from "./IPolicyService.sol";
40
+ import {InstanceReader} from "../InstanceReader.sol";
41
+ import {IPoolService} from "./IPoolService.sol";
42
+ import {IBundleService} from "./IBundleService.sol";
43
+
44
+
45
+ contract PolicyService is
46
+ ComponentService,
47
+ IPolicyService
48
+ {
49
+ using NftIdLib for NftId;
50
+ using TimestampLib for Timestamp;
51
+
52
+ IPoolService internal _poolService;
53
+ IBundleService internal _bundleService;
54
+
55
+ event LogProductServiceSender(address sender);
56
+
57
+ function _initialize(
58
+ address owner,
59
+ bytes memory data
60
+ )
61
+ internal
62
+ virtual override
63
+ initializer
64
+ {
65
+ address registryAddress;
66
+ address initialOwner;
67
+ (registryAddress, initialOwner) = abi.decode(data, (address, address));
68
+
69
+ initializeService(registryAddress, owner);
70
+
71
+ _poolService = IPoolService(getRegistry().getServiceAddress(POOL(), getMajorVersion()));
72
+ _bundleService = IBundleService(getRegistry().getServiceAddress(BUNDLE(), getMajorVersion()));
73
+
74
+ registerInterface(type(IPolicyService).interfaceId);
75
+ }
76
+
77
+
78
+ function getDomain() public pure override(IService, Service) returns(ObjectType) {
79
+ return POLICY();
80
+ }
81
+
82
+
83
+ function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
84
+ IRegistry.ObjectInfo memory productInfo;
85
+ (productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
86
+ product = Product(productInfo.objectAddress);
87
+ }
88
+
89
+ // TODO: no access restrictions
90
+ function calculatePremium(
91
+ RiskId riskId,
92
+ uint256 sumInsuredAmount,
93
+ Seconds lifetime,
94
+ bytes memory applicationData,
95
+ NftId bundleNftId,
96
+ ReferralId referralId
97
+ )
98
+ public
99
+ view
100
+ virtual override
101
+ returns (
102
+ uint256 premiumAmount,
103
+ uint256 productFeeAmount,
104
+ uint256 poolFeeAmount,
105
+ uint256 bundleFeeAmount,
106
+ uint256 distributionFeeAmount
107
+ )
108
+ {
109
+ Product product = _getAndVerifyInstanceAndProduct();
110
+ uint256 netPremiumAmount = product.calculateNetPremium(
111
+ sumInsuredAmount,
112
+ riskId,
113
+ lifetime,
114
+ applicationData
115
+ );
116
+
117
+ (
118
+ productFeeAmount,
119
+ poolFeeAmount,
120
+ bundleFeeAmount,
121
+ distributionFeeAmount
122
+ ) = _calculateFeeAmounts(
123
+ netPremiumAmount,
124
+ product,
125
+ bundleNftId,
126
+ referralId
127
+ );
128
+
129
+ premiumAmount = netPremiumAmount + productFeeAmount;
130
+ premiumAmount += poolFeeAmount + bundleFeeAmount;
131
+ premiumAmount += distributionFeeAmount;
132
+ }
133
+
134
+ function _calculateFeeAmounts(
135
+ uint256 netPremiumAmount,
136
+ Product product,
137
+ NftId bundleNftId,
138
+ ReferralId referralId
139
+ )
140
+ internal
141
+ view
142
+ returns (
143
+ uint256 productFeeAmount,
144
+ uint256 poolFeeAmount,
145
+ uint256 bundleFeeAmount,
146
+ uint256 distributionFeeAmount
147
+ )
148
+ {
149
+ InstanceReader instanceReader;
150
+ {
151
+ IInstance instance = product.getInstance();
152
+ instanceReader = instance.getInstanceReader();
153
+ }
154
+
155
+ NftId poolNftId = product.getPoolNftId();
156
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
157
+ require(bundleInfo.poolNftId == poolNftId,"ERROR:PRS-035:BUNDLE_POOL_MISMATCH");
158
+
159
+ {
160
+ ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(product.getProductNftId());
161
+ (productFeeAmount,) = FeeLib.calculateFee(productSetupInfo.productFee, netPremiumAmount);
162
+ }
163
+ {
164
+ ISetup.PoolSetupInfo memory poolSetupInfo = instanceReader.getPoolSetupInfo(poolNftId);
165
+ (poolFeeAmount,) = FeeLib.calculateFee(poolSetupInfo.poolFee, netPremiumAmount);
166
+ }
167
+ {
168
+ NftId distributionNftId = product.getDistributionNftId();
169
+ ISetup.DistributionSetupInfo memory distributionSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
170
+ (distributionFeeAmount,) = FeeLib.calculateFee(distributionSetupInfo.distributionFee, netPremiumAmount);
171
+ }
172
+
173
+ (bundleFeeAmount,) = FeeLib.calculateFee(bundleInfo.fee, netPremiumAmount);
174
+ }
175
+
176
+ function _getAndVerifyUnderwritingSetup(
177
+ IInstance instance,
178
+ InstanceReader instanceReader,
179
+ IPolicy.PolicyInfo memory policyInfo,
180
+ ISetup.ProductSetupInfo memory productSetupInfo
181
+ )
182
+ internal
183
+ view
184
+ returns (
185
+ NftId poolNftId,
186
+ NftId bundleNftId,
187
+ IBundle.BundleInfo memory bundleInfo,
188
+ uint256 collateralAmount
189
+ )
190
+ {
191
+ // check match between policy and bundle (via pool)
192
+ poolNftId = productSetupInfo.poolNftId;
193
+ bundleNftId = policyInfo.bundleNftId;
194
+ bundleInfo = instanceReader.getBundleInfo(bundleNftId);
195
+ require(bundleInfo.poolNftId == poolNftId, "POLICY_BUNDLE_MISMATCH");
196
+
197
+ // calculate required collateral
198
+ ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(poolNftId);
199
+
200
+ // obtain remaining return values
201
+ // TODO required collateral amount should be calculated by pool service, not policy service
202
+ collateralAmount = calculateRequiredCollateral(poolInfo.collateralizationLevel, policyInfo.sumInsuredAmount);
203
+ }
204
+
205
+
206
+ function decline(
207
+ NftId policyNftId
208
+ )
209
+ external
210
+ override
211
+ {
212
+ require(false, "ERROR:PRS-235:NOT_YET_IMPLEMENTED");
213
+ }
214
+
215
+
216
+ /// @dev underwites application which includes the locking of the required collateral from the pool.
217
+ function underwrite(
218
+ NftId applicationNftId, // = policyNftId
219
+ bool requirePremiumPayment,
220
+ Timestamp activateAt
221
+ )
222
+ external
223
+ virtual override
224
+ {
225
+ // check caller is registered product
226
+ IInstance instance;
227
+ InstanceReader instanceReader;
228
+ NftId productNftId;
229
+ {
230
+ IRegistry.ObjectInfo memory productInfo;
231
+ (productInfo, instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
232
+ instanceReader = instance.getInstanceReader();
233
+ productNftId = productInfo.nftId;
234
+ }
235
+
236
+ // check policy matches with calling product
237
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(applicationNftId);
238
+ require(policyInfo.productNftId == productNftId, "POLICY_PRODUCT_MISMATCH");
239
+
240
+ // check policy is in state applied
241
+ require(instanceReader.getPolicyState(applicationNftId) == APPLIED(), "ERROR:PRS-021:STATE_NOT_APPLIED");
242
+
243
+ (
244
+ NftId poolNftId,
245
+ NftId bundleNftId,
246
+ IBundle.BundleInfo memory bundleInfo,
247
+ uint256 collateralAmount
248
+ ) = _getAndVerifyUnderwritingSetup(
249
+ instance,
250
+ instanceReader,
251
+ policyInfo,
252
+ instanceReader.getProductSetupInfo(productNftId)
253
+ );
254
+
255
+ StateId newPolicyState = UNDERWRITTEN();
256
+
257
+ // optional activation of policy
258
+ if(activateAt > zeroTimestamp()) {
259
+ newPolicyState = ACTIVE();
260
+ policyInfo.activatedAt = activateAt;
261
+ policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
262
+ }
263
+
264
+ // lock bundle collateral
265
+ uint256 netPremiumAmount = 0; // > 0 if immediate premium payment
266
+
267
+ // optional collection of premium
268
+ if(requirePremiumPayment) {
269
+ netPremiumAmount = _processPremiumByTreasury(
270
+ instance,
271
+ productNftId,
272
+ applicationNftId,
273
+ policyInfo.premiumAmount);
274
+
275
+ policyInfo.premiumPaidAmount += policyInfo.premiumAmount;
276
+ }
277
+
278
+ // lock collateral and update bundle book keeping
279
+ // TODO introduct indirection via pool service?
280
+ // well pool would only need to be involved when a part of the collateral
281
+ // is provided by a "re insurance policy" of the pool
282
+ // but then again the policiy would likely best be attached to the bundle. really? why?
283
+ // retention level: fraction of sum insured that product will cover from pool funds directly
284
+ // eg retention level 30%, payouts up to 30% of the sum insured will be made from the product's pool directly
285
+ // for the remaining 70% the pool owns a policy that will cover claims that exceed the 30% of the sum insured
286
+ // open points:
287
+ // - do we need a link of a bundle to this policy or is it enough to know that the pool has an active policy?
288
+ // - when to buy such policies and for which amount? manual trigger or link to bundle creation and/or funding?
289
+ bundleInfo = _bundleService.lockCollateral(
290
+ instance,
291
+ applicationNftId,
292
+ bundleNftId,
293
+ collateralAmount,
294
+ netPremiumAmount);
295
+
296
+ instance.updatePolicy(applicationNftId, policyInfo, newPolicyState);
297
+
298
+ // also verify/confirm application by pool if necessary
299
+ if(instanceReader.getPoolSetupInfo(poolNftId).isVerifyingApplications) {
300
+ IPoolComponent pool = IPoolComponent(
301
+ getRegistry().getObjectInfo(poolNftId).objectAddress);
302
+
303
+ pool.verifyApplication(
304
+ applicationNftId,
305
+ policyInfo.applicationData,
306
+ bundleNftId,
307
+ bundleInfo.filter,
308
+ collateralAmount);
309
+ }
310
+
311
+ // TODO: add logging
312
+ }
313
+
314
+
315
+ function calculateRequiredCollateral(UFixed collateralizationLevel, uint256 sumInsuredAmount) public pure override returns(uint256 collateralAmount) {
316
+ UFixed sumInsuredUFixed = UFixedLib.toUFixed(sumInsuredAmount);
317
+ UFixed collateralUFixed = collateralizationLevel * sumInsuredUFixed;
318
+ return collateralUFixed.toInt();
319
+ }
320
+
321
+ function collectPremium(NftId policyNftId, Timestamp activateAt) external override {
322
+ // check caller is registered product
323
+ (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
324
+ InstanceReader instanceReader = instance.getInstanceReader();
325
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
326
+
327
+ if (policyInfo.premiumPaidAmount == policyInfo.premiumAmount) {
328
+ revert ErrorIPolicyServicePremiumAlreadyPaid(policyNftId, policyInfo.premiumPaidAmount);
329
+ }
330
+
331
+ uint256 unpaidPremiumAmount = policyInfo.premiumAmount - policyInfo.premiumPaidAmount;
332
+
333
+ uint256 netPremiumAmount = _processPremiumByTreasury(
334
+ instance,
335
+ productInfo.nftId,
336
+ policyNftId,
337
+ unpaidPremiumAmount);
338
+
339
+ policyInfo.premiumPaidAmount += unpaidPremiumAmount;
340
+
341
+ _bundleService.increaseBalance(instance, policyInfo.bundleNftId, netPremiumAmount);
342
+ instance.updatePolicy(policyNftId, policyInfo, KEEP_STATE());
343
+
344
+ if(activateAt.gtz() && policyInfo.activatedAt.eqz()) {
345
+ activate(policyNftId, activateAt);
346
+ }
347
+
348
+ // TODO: add logging
349
+ }
350
+
351
+ function activate(NftId policyNftId, Timestamp activateAt) public override {
352
+ // check caller is registered product
353
+ (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
354
+ InstanceReader instanceReader = instance.getInstanceReader();
355
+
356
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
357
+
358
+ require(
359
+ policyInfo.activatedAt.eqz(),
360
+ "ERROR:PRS-020:ALREADY_ACTIVATED");
361
+
362
+ policyInfo.activatedAt = activateAt;
363
+ policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
364
+
365
+ instance.updatePolicy(policyNftId, policyInfo, ACTIVE());
366
+
367
+ // TODO: add logging
368
+ }
369
+
370
+
371
+ function expire(
372
+ NftId policyNftId
373
+ )
374
+ external
375
+ override
376
+ // solhint-disable-next-line no-empty-blocks
377
+ {
378
+
379
+ }
380
+
381
+ function close(
382
+ NftId policyNftId
383
+ )
384
+ external
385
+ override
386
+ {
387
+ (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
388
+ InstanceReader instanceReader = instance.getInstanceReader();
389
+
390
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
391
+
392
+ if (policyInfo.activatedAt.eqz()) {
393
+ revert ErrorIPolicyServicePolicyNotActivated(policyNftId);
394
+ }
395
+
396
+ StateId state = instanceReader.getPolicyState(policyNftId);
397
+ if (state != ACTIVE()) {
398
+ revert ErrorIPolicyServicePolicyNotActive(policyNftId, state);
399
+ }
400
+
401
+ if (policyInfo.closedAt.gtz()) {
402
+ revert ErrorIPolicyServicePolicyAlreadyClosed(policyNftId);
403
+ }
404
+
405
+ if (policyInfo.premiumAmount != policyInfo.premiumPaidAmount) {
406
+ revert ErrorIPolicyServicePremiumNotFullyPaid(policyNftId, policyInfo.premiumAmount, policyInfo.premiumPaidAmount);
407
+ }
408
+
409
+ if (policyInfo.openClaimsCount > 0) {
410
+ revert ErrorIPolicyServiceOpenClaims(policyNftId, policyInfo.openClaimsCount);
411
+ }
412
+
413
+ if (TimestampLib.blockTimestamp().lte(policyInfo.expiredAt) && (policyInfo.payoutAmount < policyInfo.sumInsuredAmount)) {
414
+ revert ErrorIPolicyServicePolicyHasNotExpired(policyNftId, policyInfo.expiredAt);
415
+ }
416
+
417
+ policyInfo.closedAt = TimestampLib.blockTimestamp();
418
+
419
+ _bundleService.closePolicy(instance, policyNftId, policyInfo.bundleNftId, policyInfo.sumInsuredAmount);
420
+ instance.updatePolicy(policyNftId, policyInfo, CLOSED());
421
+ }
422
+
423
+ function _getPoolNftId(
424
+ IInstance instance,
425
+ NftId productNftId
426
+ )
427
+ internal
428
+ view
429
+ returns (NftId poolNftid)
430
+ {
431
+ InstanceReader instanceReader = instance.getInstanceReader();
432
+ ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
433
+ return productSetupInfo.poolNftId;
434
+ }
435
+
436
+
437
+ function _processPremiumByTreasury(
438
+ IInstance instance,
439
+ NftId productNftId,
440
+ NftId policyNftId,
441
+ uint256 premiumAmount
442
+ )
443
+ internal
444
+ returns (uint256 netPremiumAmount)
445
+ {
446
+ // process token transfer(s)
447
+ if(premiumAmount > 0) {
448
+ ISetup.ProductSetupInfo memory productSetupInfo = instance.getInstanceReader().getProductSetupInfo(productNftId);
449
+ TokenHandler tokenHandler = productSetupInfo.tokenHandler;
450
+ address policyOwner = getRegistry().ownerOf(policyNftId);
451
+ ISetup.PoolSetupInfo memory poolSetupInfo = instance.getInstanceReader().getPoolSetupInfo(productSetupInfo.poolNftId);
452
+ address poolWallet = poolSetupInfo.wallet;
453
+ netPremiumAmount = premiumAmount;
454
+ Fee memory productFee = productSetupInfo.productFee;
455
+
456
+ if (FeeLib.feeIsZero(productFee)) {
457
+ tokenHandler.transfer(
458
+ policyOwner,
459
+ poolWallet,
460
+ premiumAmount
461
+ );
462
+ } else {
463
+ (uint256 productFeeAmount, uint256 netAmount) = FeeLib.calculateFee(productSetupInfo.productFee, netPremiumAmount);
464
+ address productWallet = productSetupInfo.wallet;
465
+ if (tokenHandler.getToken().allowance(policyOwner, address(tokenHandler)) < premiumAmount) {
466
+ revert ErrorIPolicyServiceInsufficientAllowance(policyOwner, address(tokenHandler), premiumAmount);
467
+ }
468
+ tokenHandler.transfer(policyOwner, productWallet, productFeeAmount);
469
+ tokenHandler.transfer(policyOwner, poolWallet, netAmount);
470
+ netPremiumAmount = netAmount;
471
+ }
472
+ }
473
+
474
+ // TODO: add logging
475
+ }
476
+ }
@@ -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
+ }
@@ -0,0 +1,109 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {Pool} from "../../components/Pool.sol";
5
+ import {IRegistry} from "../../registry/IRegistry.sol";
6
+ import {IInstance} from "../../instance/IInstance.sol";
7
+ import {IBundle} from "../../instance/module/IBundle.sol";
8
+ import {TokenHandler} from "../../instance/module/ITreasury.sol";
9
+ import {ISetup} from "../module/ISetup.sol";
10
+ import {IPolicy} from "../module/IPolicy.sol";
11
+
12
+ import {IVersionable} from "../../shared/IVersionable.sol";
13
+ import {Versionable} from "../../shared/Versionable.sol";
14
+ import {INftOwnable} from "../../shared/INftOwnable.sol";
15
+
16
+ import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
17
+ import {ObjectType, POOL, BUNDLE} from "../../types/ObjectType.sol";
18
+ import {POOL_OWNER_ROLE, RoleId} from "../../types/RoleId.sol";
19
+ import {Fee, FeeLib} from "../../types/Fee.sol";
20
+ import {Version, VersionLib} from "../../types/Version.sol";
21
+ import {KEEP_STATE, StateId} from "../../types/StateId.sol";
22
+ import {TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
23
+
24
+ import {IService} from "../../shared/IService.sol";
25
+ import {Service} from "../../shared/Service.sol";
26
+ import {BundleManager} from "../BundleManager.sol";
27
+ import {ComponentService} from "../base/ComponentService.sol";
28
+ import {IPoolService} from "./IPoolService.sol";
29
+ import {IRegistryService} from "../../registry/IRegistryService.sol";
30
+ import {InstanceService} from "../InstanceService.sol";
31
+ import {InstanceReader} from "../InstanceReader.sol";
32
+ import {IComponent} from "../../components/IComponent.sol";
33
+ import {IPoolComponent} from "../../components/IPoolComponent.sol";
34
+
35
+ string constant POOL_SERVICE_NAME = "PoolService";
36
+
37
+ contract PoolService is
38
+ ComponentService,
39
+ IPoolService
40
+ {
41
+ using NftIdLib for NftId;
42
+
43
+ address internal _registryAddress;
44
+
45
+ function _initialize(
46
+ address owner,
47
+ bytes memory data
48
+ )
49
+ internal
50
+ initializer
51
+ virtual override
52
+ {
53
+ address registryAddress;
54
+ address initialOwner;
55
+ (registryAddress, initialOwner) = abi.decode(data, (address, address));
56
+ // TODO while PoolService is not deployed in PoolServiceManager constructor
57
+ // owner is PoolServiceManager deployer
58
+ initializeService(registryAddress, owner);
59
+ registerInterface(type(IPoolService).interfaceId);
60
+ }
61
+
62
+ function getDomain() public pure override(Service, IService) returns(ObjectType) {
63
+ return POOL();
64
+ }
65
+
66
+ function register(address poolAddress)
67
+ external
68
+ returns(NftId poolNftId)
69
+ {
70
+ (
71
+ IComponent component,
72
+ address owner,
73
+ IInstance instance,
74
+ NftId instanceNftId
75
+ ) = _checkComponentForRegistration(
76
+ poolAddress,
77
+ POOL(),
78
+ POOL_OWNER_ROLE());
79
+
80
+ IPoolComponent pool = IPoolComponent(poolAddress);
81
+ IRegistry.ObjectInfo memory poolInfo = getRegistryService().registerPool(pool, owner);
82
+ pool.linkToRegisteredNftId();
83
+ poolNftId = poolInfo.nftId;
84
+
85
+ instance.createPoolSetup(poolNftId, pool.getSetupInfo());
86
+ getInstanceService().createGifTarget(instanceNftId, poolAddress, pool.getName());
87
+ getInstanceService().grantPoolDefaultPermissions(instanceNftId, poolAddress, pool.getName());
88
+ }
89
+
90
+ function setFees(
91
+ Fee memory poolFee,
92
+ Fee memory stakingFee,
93
+ Fee memory performanceFee
94
+ )
95
+ external
96
+ override
97
+ {
98
+ (IRegistry.ObjectInfo memory poolInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
99
+ InstanceReader instanceReader = instance.getInstanceReader();
100
+ NftId poolNftId = poolInfo.nftId;
101
+
102
+ ISetup.PoolSetupInfo memory poolSetupInfo = instanceReader.getPoolSetupInfo(poolNftId);
103
+ poolSetupInfo.poolFee = poolFee;
104
+ poolSetupInfo.stakingFee = stakingFee;
105
+ poolSetupInfo.performanceFee = performanceFee;
106
+
107
+ instance.updatePoolSetup(poolNftId, poolSetupInfo, KEEP_STATE());
108
+ }
109
+ }
@@ -0,0 +1,51 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IVersionable} from "../../shared/IVersionable.sol";
5
+ import {ProxyManager} from "../../shared/ProxyManager.sol";
6
+ import {PoolService} from "./PoolService.sol";
7
+ import {Registry} from "../../registry/Registry.sol";
8
+ import {RegistryService} from "../../registry/RegistryService.sol";
9
+ import {REGISTRY} from "../../types/ObjectType.sol";
10
+
11
+ contract PoolServiceManager is ProxyManager {
12
+
13
+ PoolService private _poolService;
14
+
15
+ /// @dev initializes proxy manager with pool service implementation
16
+ constructor(
17
+ address registryAddress
18
+ )
19
+ ProxyManager(registryAddress)
20
+ {
21
+ PoolService poolSrv = new PoolService();
22
+ bytes memory data = abi.encode(registryAddress, address(this));
23
+ IVersionable versionable = deploy(
24
+ address(poolSrv),
25
+ data);
26
+
27
+ _poolService = PoolService(address(versionable));
28
+
29
+ // TODO `this` must have a role or own nft to register service
30
+ //Registry registry = Registry(registryAddress);
31
+ //address registryServiceAddress = registry.getServiceAddress(REGISTRY(), _poolService.getMajorVersion());
32
+ //RegistryService registryService = RegistryService(registryServiceAddress);
33
+ //registryService.registerService(_poolService);
34
+
35
+ // TODO no nft to link yet
36
+ // link ownership of instance service manager ot nft owner of instance service
37
+ //_linkToNftOwnable(
38
+ // address(registryAddress),
39
+ // address(_poolService));
40
+ }
41
+
42
+ //--- view functions ----------------------------------------------------//
43
+ function getPoolService()
44
+ external
45
+ view
46
+ returns (PoolService poolService)
47
+ {
48
+ return _poolService;
49
+ }
50
+
51
+ }