@etherisc/gif-next 0.0.2-d96b9e1-825 → 0.0.2-da0f894-204

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 (471) hide show
  1. package/README.md +327 -8
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +774 -0
  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 +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +804 -131
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +455 -62
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +1202 -138
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +881 -87
  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 +1595 -1039
  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 +2378 -1208
  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 +1 -1
  41. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +45 -127
  42. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  43. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  44. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +55 -245
  45. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  46. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +6 -6
  47. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  48. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +254 -0
  49. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  50. package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
  51. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  52. package/artifacts/contracts/instance/module/{access/IAccess.sol/IAccess.json → IDistribution.sol/IDistribution.json} +2 -2
  53. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  54. package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
  55. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  56. package/artifacts/contracts/instance/module/{risk/IRisk.sol → IRisk.sol}/IRisk.json +1 -1
  57. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  58. package/artifacts/contracts/instance/{base/ModuleBase.sol/ModuleBase.json → module/ISetup.sol/ISetup.json} +2 -2
  59. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  60. package/artifacts/contracts/instance/module/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
  61. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  62. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +947 -0
  63. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  64. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +665 -0
  65. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  66. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1096 -0
  67. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  68. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +661 -0
  69. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  70. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +754 -0
  71. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  72. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +637 -0
  73. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  74. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1553 -0
  75. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  76. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +793 -0
  77. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  78. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +535 -0
  79. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  80. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +633 -0
  81. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  82. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +409 -0
  83. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  84. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +858 -0
  85. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  86. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +519 -0
  87. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  88. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +136 -165
  89. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  90. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +139 -232
  91. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  92. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1000 -0
  93. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  94. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +689 -0
  95. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  96. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +416 -160
  97. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  98. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +649 -0
  99. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  100. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +401 -297
  101. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  102. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +649 -0
  103. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  104. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +186 -12
  105. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  106. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +466 -34
  107. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  108. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +890 -0
  109. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  110. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  111. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  112. package/artifacts/contracts/registry/Registry.sol/Registry.json +470 -103
  113. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  114. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  115. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  116. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1177 -0
  117. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  118. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +670 -0
  119. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  120. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
  121. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  122. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +498 -0
  123. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  124. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  125. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  126. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  127. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  128. package/artifacts/contracts/{components/IBaseComponent.sol/IBaseComponent.json → shared/INftOwnable.sol/INftOwnable.json} +38 -74
  129. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  130. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +129 -0
  131. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  132. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +100 -33
  133. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  134. package/artifacts/contracts/{experiment/inheritance/IB.sol/IB.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +18 -20
  135. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  136. package/artifacts/contracts/{instance/base/ServiceBase.sol/ServiceBase.json → shared/IService.sol/IService.json} +121 -152
  137. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  138. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +16 -125
  139. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  140. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +251 -0
  141. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  142. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
  143. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  144. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +582 -0
  145. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  146. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +256 -25
  147. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  148. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
  149. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  150. package/artifacts/contracts/{instance/service/IComponentOwnerService.sol/IComponentOwnerService.json → shared/Service.sol/Service.json} +220 -159
  151. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  152. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  153. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  154. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  155. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  156. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +29 -115
  157. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  158. package/artifacts/contracts/test/TestFee.sol/TestFee.json +10 -10
  159. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  160. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +272 -26
  161. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  162. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +44 -10
  163. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  164. package/artifacts/contracts/test/TestService.sol/TestService.json +281 -139
  165. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  166. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
  167. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  168. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +12 -12
  169. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  170. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +38 -140
  171. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  172. package/artifacts/contracts/test/Usdc.sol/USDC.json +376 -0
  173. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  174. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +2 -2
  175. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  176. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  177. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  178. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +2 -2
  179. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  180. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
  181. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  182. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  183. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  184. package/artifacts/contracts/types/Fee.sol/FeeLib.json +52 -13
  185. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  186. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +31 -17
  187. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  188. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +4 -4
  189. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  190. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  191. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  192. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  193. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  194. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  195. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  196. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
  197. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  198. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  199. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  200. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  201. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  202. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
  203. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  204. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  205. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  206. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  207. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  208. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +38 -7
  209. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  210. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  211. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  212. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +479 -0
  213. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  214. package/artifacts/contracts/types/Version.sol/VersionLib.json +40 -2
  215. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  216. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
  217. package/contracts/components/Component.sol +221 -0
  218. package/contracts/components/Distribution.sol +293 -0
  219. package/contracts/components/IComponent.sol +68 -0
  220. package/contracts/components/IDistributionComponent.sol +79 -0
  221. package/contracts/components/IPoolComponent.sol +136 -42
  222. package/contracts/components/IProductComponent.sol +30 -9
  223. package/contracts/components/Pool.sol +310 -106
  224. package/contracts/components/Product.sol +214 -42
  225. package/contracts/instance/BundleManager.sol +125 -0
  226. package/contracts/instance/Cloneable.sol +46 -0
  227. package/contracts/instance/IInstance.sol +85 -45
  228. package/contracts/instance/IInstanceService.sol +59 -0
  229. package/contracts/instance/Instance.sol +276 -53
  230. package/contracts/instance/InstanceAccessManager.sol +297 -0
  231. package/contracts/instance/InstanceReader.sol +293 -0
  232. package/contracts/instance/InstanceService.sol +490 -0
  233. package/contracts/instance/InstanceServiceManager.sol +54 -0
  234. package/contracts/instance/ObjectManager.sol +84 -0
  235. package/contracts/instance/base/ComponentService.sol +134 -0
  236. package/contracts/instance/base/IKeyValueStore.sol +13 -13
  237. package/contracts/instance/base/ILifecycle.sol +3 -3
  238. package/contracts/instance/base/KeyValueStore.sol +61 -36
  239. package/contracts/instance/base/Lifecycle.sol +16 -11
  240. package/contracts/instance/module/IAccess.sol +47 -0
  241. package/contracts/instance/module/IBundle.sol +21 -0
  242. package/contracts/instance/module/IDistribution.sol +41 -0
  243. package/contracts/instance/module/IPolicy.sol +72 -0
  244. package/contracts/instance/module/IRisk.sol +11 -0
  245. package/contracts/instance/module/ISetup.sol +46 -0
  246. package/contracts/instance/module/ITreasury.sol +23 -0
  247. package/contracts/instance/service/ApplicationService.sol +346 -0
  248. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  249. package/contracts/instance/service/BundleService.sol +299 -0
  250. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  251. package/contracts/instance/service/ClaimService.sol +151 -0
  252. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  253. package/contracts/instance/service/DistributionService.sol +394 -0
  254. package/contracts/instance/service/DistributionServiceManager.sol +51 -0
  255. package/contracts/instance/service/IApplicationService.sol +81 -0
  256. package/contracts/instance/service/IBundleService.sol +55 -0
  257. package/contracts/instance/service/IClaimService.sol +61 -0
  258. package/contracts/instance/service/IDistributionService.sol +86 -0
  259. package/contracts/instance/service/IPolicyService.sol +70 -0
  260. package/contracts/instance/service/IPoolService.sol +8 -18
  261. package/contracts/instance/service/IProductService.sol +21 -39
  262. package/contracts/instance/service/PolicyService.sol +404 -0
  263. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  264. package/contracts/instance/service/PoolService.sol +78 -92
  265. package/contracts/instance/service/PoolServiceManager.sol +51 -0
  266. package/contracts/instance/service/ProductService.sol +168 -289
  267. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  268. package/contracts/registry/ChainNft.sol +79 -36
  269. package/contracts/registry/IRegistry.sol +66 -24
  270. package/contracts/registry/IRegistryService.sol +67 -0
  271. package/contracts/registry/ITransferInterceptor.sol +6 -0
  272. package/contracts/registry/Registry.sol +366 -283
  273. package/contracts/registry/RegistryAccessManager.sol +216 -0
  274. package/contracts/registry/RegistryService.sol +283 -0
  275. package/contracts/registry/RegistryServiceManager.sol +62 -0
  276. package/contracts/registry/ReleaseManager.sol +322 -0
  277. package/contracts/registry/TokenRegistry.sol +116 -0
  278. package/contracts/shared/ContractDeployerLib.sol +72 -0
  279. package/contracts/shared/ERC165.sol +14 -8
  280. package/contracts/shared/INftOwnable.sol +23 -0
  281. package/contracts/shared/IPolicyHolder.sol +26 -0
  282. package/contracts/shared/IRegisterable.sol +10 -19
  283. package/contracts/shared/IRegistryLinked.sol +12 -0
  284. package/contracts/shared/IService.sol +18 -0
  285. package/contracts/shared/IVersionable.sol +38 -37
  286. package/contracts/shared/NftOwnable.sol +120 -0
  287. package/contracts/shared/PolicyHolder.sol +81 -0
  288. package/contracts/shared/ProxyManager.sol +169 -0
  289. package/contracts/shared/Registerable.sol +54 -66
  290. package/contracts/shared/RegistryLinked.sol +48 -0
  291. package/contracts/shared/Service.sol +58 -0
  292. package/contracts/shared/TokenHandler.sol +27 -0
  293. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  294. package/contracts/shared/Versionable.sol +38 -68
  295. package/contracts/test/TestFee.sol +2 -2
  296. package/contracts/test/TestRegisterable.sol +5 -6
  297. package/contracts/test/TestRoleId.sol +2 -2
  298. package/contracts/test/TestService.sol +7 -14
  299. package/contracts/test/Usdc.sol +26 -0
  300. package/contracts/types/ClaimId.sol +52 -0
  301. package/contracts/types/DistributorType.sol +55 -0
  302. package/contracts/types/Fee.sol +10 -5
  303. package/contracts/types/Key32.sol +8 -3
  304. package/contracts/types/NftIdSet.sol +26 -24
  305. package/contracts/types/NumberId.sol +52 -0
  306. package/contracts/types/ObjectType.sol +55 -14
  307. package/contracts/types/PayoutId.sol +54 -0
  308. package/contracts/types/Referral.sol +85 -0
  309. package/contracts/types/RiskId.sol +43 -0
  310. package/contracts/types/RoleId.sol +70 -11
  311. package/contracts/types/Seconds.sol +54 -0
  312. package/contracts/types/StateId.sol +5 -1
  313. package/contracts/types/Timestamp.sol +16 -13
  314. package/contracts/types/UFixed.sol +144 -25
  315. package/contracts/types/Version.sol +13 -1
  316. package/package.json +9 -5
  317. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  318. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -174
  319. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  320. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  321. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  322. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  323. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  324. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  325. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  326. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  327. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  328. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  329. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  330. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  331. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  332. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  333. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  334. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  335. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  336. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  337. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  338. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  339. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  340. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  341. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  342. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  343. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  344. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  345. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  346. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  347. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  348. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  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/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
  354. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
  355. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  356. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +0 -300
  357. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  358. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -63
  359. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
  360. package/artifacts/contracts/instance/base/IService.sol/IService.json +0 -300
  361. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  362. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.json +0 -326
  363. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +0 -4
  364. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  365. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
  366. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
  367. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
  368. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  369. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
  370. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
  371. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -296
  372. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
  373. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
  374. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -296
  375. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.dbg.json +0 -4
  376. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.json +0 -10
  377. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.dbg.json +0 -4
  378. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.json +0 -10
  379. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.dbg.json +0 -4
  380. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.json +0 -10
  381. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  382. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +0 -188
  383. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
  384. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
  385. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  386. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +0 -188
  387. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  388. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  389. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -261
  390. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  391. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -261
  392. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  393. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.json +0 -10
  394. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  395. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -149
  396. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  397. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -149
  398. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
  399. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
  400. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -10
  401. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
  402. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -10
  403. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  404. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  405. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -533
  406. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  407. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
  408. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  409. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -533
  410. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  411. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -491
  412. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  413. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  414. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
  415. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
  416. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
  417. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
  418. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
  419. package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -387
  420. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
  421. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -393
  422. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  423. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +0 -453
  424. package/contracts/components/BaseComponent.sol +0 -88
  425. package/contracts/components/IBaseComponent.sol +0 -19
  426. package/contracts/experiment/errors/Require.sol +0 -38
  427. package/contracts/experiment/errors/Revert.sol +0 -44
  428. package/contracts/experiment/inheritance/A.sol +0 -53
  429. package/contracts/experiment/inheritance/B.sol +0 -28
  430. package/contracts/experiment/inheritance/C.sol +0 -34
  431. package/contracts/experiment/inheritance/IA.sol +0 -13
  432. package/contracts/experiment/inheritance/IB.sol +0 -10
  433. package/contracts/experiment/inheritance/IC.sol +0 -12
  434. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  435. package/contracts/experiment/statemachine/ISM.sol +0 -25
  436. package/contracts/experiment/statemachine/README.md +0 -112
  437. package/contracts/experiment/statemachine/SM.sol +0 -57
  438. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  439. package/contracts/experiment/types/TypeA.sol +0 -47
  440. package/contracts/experiment/types/TypeB.sol +0 -29
  441. package/contracts/instance/IInstanceLinked.sol +0 -8
  442. package/contracts/instance/base/ComponentServiceBase.sol +0 -42
  443. package/contracts/instance/base/IInstanceBase.sol +0 -14
  444. package/contracts/instance/base/IService.sol +0 -15
  445. package/contracts/instance/base/InstanceBase.sol +0 -80
  446. package/contracts/instance/base/ModuleBase.sol +0 -52
  447. package/contracts/instance/base/ServiceBase.sol +0 -37
  448. package/contracts/instance/module/access/Access.sol +0 -149
  449. package/contracts/instance/module/access/IAccess.sol +0 -53
  450. package/contracts/instance/module/bundle/BundleModule.sol +0 -136
  451. package/contracts/instance/module/bundle/IBundle.sol +0 -58
  452. package/contracts/instance/module/compensation/CompensationModule.sol +0 -8
  453. package/contracts/instance/module/compensation/ICompensation.sol +0 -10
  454. package/contracts/instance/module/component/ComponentModule.sol +0 -95
  455. package/contracts/instance/module/component/IComponent.sol +0 -53
  456. package/contracts/instance/module/policy/IPolicy.sol +0 -60
  457. package/contracts/instance/module/policy/PolicyModule.sol +0 -76
  458. package/contracts/instance/module/pool/IPoolModule.sol +0 -41
  459. package/contracts/instance/module/pool/PoolModule.sol +0 -87
  460. package/contracts/instance/module/risk/IRisk.sol +0 -10
  461. package/contracts/instance/module/risk/RiskModule.sol +0 -8
  462. package/contracts/instance/module/treasury/ITreasury.sol +0 -103
  463. package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
  464. package/contracts/instance/module/treasury/TreasuryModule.sol +0 -152
  465. package/contracts/instance/service/ComponentOwnerService.sol +0 -170
  466. package/contracts/instance/service/IComponentOwnerService.sol +0 -22
  467. package/contracts/registry/IChainNft.sol +0 -21
  468. package/contracts/registry/IRegistryLinked.sol +0 -8
  469. package/contracts/shared/IOwnable.sol +0 -6
  470. package/contracts/test/TestPool.sol +0 -22
  471. package/contracts/test/TestProduct.sol +0 -44
@@ -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
+ }
@@ -1,123 +1,109 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
+ import {Pool} from "../../components/Pool.sol";
4
5
  import {IRegistry} from "../../registry/IRegistry.sol";
5
6
  import {IInstance} from "../../instance/IInstance.sol";
6
- import {ITreasury, ITreasuryModule, TokenHandler} from "../../instance/module/treasury/ITreasury.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";
7
11
 
8
12
  import {IVersionable} from "../../shared/IVersionable.sol";
9
13
  import {Versionable} from "../../shared/Versionable.sol";
14
+ import {INftOwnable} from "../../shared/INftOwnable.sol";
10
15
 
11
- import {NftId, NftIdLib} from "../../types/NftId.sol";
12
- import {POOL, BUNDLE} from "../../types/ObjectType.sol";
13
- import {Fee} from "../../types/Fee.sol";
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";
14
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";
15
23
 
16
- import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
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";
17
28
  import {IPoolService} from "./IPoolService.sol";
18
-
19
-
20
- contract PoolService is ComponentServiceBase, IPoolService {
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
+ {
21
41
  using NftIdLib for NftId;
22
42
 
23
- string public constant NAME = "PoolService";
43
+ address internal _registryAddress;
24
44
 
25
- constructor(
26
- address registry,
27
- NftId registryNftId
28
- ) ComponentServiceBase(registry, registryNftId) // solhint-disable-next-line no-empty-blocks
45
+ function _initialize(
46
+ address owner,
47
+ bytes memory data
48
+ )
49
+ internal
50
+ initializer
51
+ virtual override
29
52
  {
30
- _registerInterface(type(IPoolService).interfaceId);
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);
31
60
  }
32
61
 
33
- function getVersion()
34
- public
35
- pure
36
- virtual override (IVersionable, Versionable)
37
- returns(Version)
38
- {
39
- return VersionLib.toVersion(3,0,0);
62
+ function getDomain() public pure override(Service, IService) returns(ObjectType) {
63
+ return POOL();
40
64
  }
41
65
 
42
- function getName() external pure override returns(string memory name) {
43
- return NAME;
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());
44
88
  }
45
89
 
46
90
  function setFees(
91
+ Fee memory poolFee,
47
92
  Fee memory stakingFee,
48
93
  Fee memory performanceFee
49
94
  )
50
95
  external
51
96
  override
52
97
  {
53
- (IRegistry.ObjectInfo memory info, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
54
- instance.setPoolFees(info.nftId, stakingFee, performanceFee);
55
- }
56
-
57
- function createBundle(
58
- address owner,
59
- uint256 stakingAmount,
60
- uint256 lifetime,
61
- bytes calldata filter
62
- )
63
- external
64
- override
65
- returns(NftId bundleNftId)
66
- {
67
- (IRegistry.ObjectInfo memory info, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
68
-
69
- // register bundle with registry
70
- NftId poolNftId = info.nftId;
71
- bundleNftId = _registry.registerObjectForInstance(
72
- poolNftId,
73
- BUNDLE(),
74
- owner,
75
- "");
76
-
77
- // create bundle info in instance
78
- instance.createBundleInfo(
79
- bundleNftId,
80
- poolNftId,
81
- stakingAmount,
82
- lifetime,
83
- filter);
84
-
85
- // add bundle to pool in instance
86
- instance.addBundleToPool(
87
- bundleNftId,
88
- poolNftId,
89
- stakingAmount);
90
-
91
- // collect capital
92
- _processStakingByTreasury(
93
- instance,
94
- poolNftId,
95
- bundleNftId,
96
- stakingAmount);
97
-
98
- // TODO add logging
99
- }
100
-
101
-
102
- function _processStakingByTreasury(
103
- IInstance instance,
104
- NftId poolNftId,
105
- NftId bundleNftId,
106
- uint256 stakingAmount
107
- )
108
- internal
109
- {
110
- // process token transfer(s)
111
- if(stakingAmount > 0) {
112
- TokenHandler tokenHandler = instance.getTokenHandler(poolNftId);
113
- address bundleOwner = _registry.getOwner(bundleNftId);
114
- address poolWallet = instance.getPoolSetup(poolNftId).wallet;
115
-
116
- tokenHandler.transfer(
117
- bundleOwner,
118
- poolWallet,
119
- stakingAmount
120
- );
121
- }
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());
122
108
  }
123
109
  }