@etherisc/gif-next 0.0.2-de220d6-949 → 0.0.2-e0ff180-567

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 (485) hide show
  1. package/README.md +243 -2
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +842 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +1329 -0
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/components/IComponent.sol/IComponent.json +605 -0
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +969 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +823 -115
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +608 -57
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +1132 -143
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +967 -105
  18. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  19. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  20. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  21. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +778 -0
  22. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  23. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +190 -0
  24. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  25. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1547 -1056
  26. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  27. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +633 -0
  28. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  29. package/artifacts/contracts/instance/Instance.sol/Instance.json +2287 -1204
  30. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  31. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +1330 -0
  32. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  33. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1289 -0
  34. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  35. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +1179 -0
  36. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  37. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +741 -0
  38. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  39. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +256 -0
  40. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  41. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +607 -0
  42. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  43. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +45 -127
  44. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  45. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  46. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +85 -245
  47. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  48. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
  49. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  50. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +237 -0
  51. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  52. package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
  53. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  54. package/artifacts/contracts/instance/module/{access/IAccess.sol/IAccess.json → IComponents.sol/IComponents.json} +2 -2
  55. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  56. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.json +10 -0
  57. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  58. package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
  59. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  60. package/artifacts/contracts/instance/module/{risk/IRisk.sol → IRisk.sol}/IRisk.json +1 -1
  61. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  62. package/artifacts/contracts/instance/{base/ModuleBase.sol/ModuleBase.json → module/ISetup.sol/ISetup.json} +2 -2
  63. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  64. package/artifacts/contracts/instance/module/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
  65. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  66. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +1039 -0
  67. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  68. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +673 -0
  69. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  70. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1231 -0
  71. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  72. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +721 -0
  73. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  74. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +817 -0
  75. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  76. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +641 -0
  77. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  78. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1798 -0
  79. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  80. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +805 -0
  81. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  82. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +622 -0
  83. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  84. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +659 -0
  85. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  86. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +475 -0
  87. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  88. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +1090 -0
  89. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  90. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +606 -0
  91. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  92. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +577 -109
  93. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  94. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +186 -213
  95. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  96. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1092 -0
  97. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  98. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +697 -0
  99. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  100. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +965 -199
  101. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  102. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +661 -0
  103. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  104. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +460 -293
  105. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  106. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +653 -0
  107. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  108. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +199 -12
  109. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  110. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +485 -34
  111. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  112. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +866 -0
  113. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  114. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +52 -0
  115. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  116. package/artifacts/contracts/registry/Registry.sol/Registry.json +487 -101
  117. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  118. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  119. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  120. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1158 -0
  121. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  122. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +670 -0
  123. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  124. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +559 -0
  125. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  126. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +498 -0
  127. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  128. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  129. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  130. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  131. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  132. package/artifacts/contracts/{components/IBaseComponent.sol/IBaseComponent.json → shared/INftOwnable.sol/INftOwnable.json} +38 -74
  133. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  134. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +129 -0
  135. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  136. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +100 -33
  137. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  138. package/artifacts/contracts/{experiment/inheritance/IB.sol/IB.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +18 -20
  139. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  140. package/artifacts/contracts/{instance/base/InstanceBase.sol/InstanceBase.json → shared/IService.sol/IService.json} +159 -150
  141. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  142. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +16 -125
  143. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  144. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +251 -0
  145. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  146. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
  147. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  148. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +582 -0
  149. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  150. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +256 -25
  151. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  152. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
  153. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  154. package/artifacts/contracts/{registry/IChainNft.sol/IChainNft.json → shared/Service.sol/Service.json} +261 -217
  155. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  156. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  157. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  158. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  159. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  160. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +29 -115
  161. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  162. package/artifacts/contracts/test/TestFee.sol/TestFee.json +4 -4
  163. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  164. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +272 -26
  165. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  166. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +14 -14
  167. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  168. package/artifacts/contracts/test/TestService.sol/TestService.json +347 -130
  169. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  170. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
  171. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  172. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  173. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  174. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +38 -140
  175. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  176. package/artifacts/contracts/test/Usdc.sol/USDC.json +91 -53
  177. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  178. package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +4 -0
  179. package/artifacts/contracts/types/Amount.sol/AmountLib.json +161 -0
  180. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  181. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  182. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  183. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  184. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
  185. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  186. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  187. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  188. package/artifacts/contracts/types/Fee.sol/FeeLib.json +84 -14
  189. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  190. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +31 -17
  191. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  192. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
  193. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  194. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  195. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  196. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  197. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  198. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  199. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  200. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
  201. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  202. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +142 -0
  203. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  204. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  205. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  206. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +134 -8
  207. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  208. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  209. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  210. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  211. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  212. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +38 -7
  213. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  214. package/artifacts/contracts/{experiment/types/TypeB.sol/TypeBLib.json → types/UFixed.sol/MathLib.json} +4 -4
  215. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  216. package/artifacts/contracts/types/UFixed.sol/{UFixedMathLib.json → UFixedLib.json} +3 -3
  217. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  218. package/artifacts/contracts/types/Version.sol/VersionLib.json +40 -2
  219. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  220. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
  221. package/contracts/components/Component.sol +253 -0
  222. package/contracts/components/Distribution.sol +280 -0
  223. package/contracts/components/IComponent.sol +76 -0
  224. package/contracts/components/IDistributionComponent.sol +71 -0
  225. package/contracts/components/IPoolComponent.sol +98 -42
  226. package/contracts/components/IProductComponent.sol +30 -9
  227. package/contracts/components/Pool.sol +238 -109
  228. package/contracts/components/Product.sol +218 -42
  229. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
  230. package/contracts/instance/BundleManager.sol +127 -0
  231. package/contracts/instance/Cloneable.sol +51 -0
  232. package/contracts/instance/IInstance.sol +87 -41
  233. package/contracts/instance/IInstanceService.sol +72 -0
  234. package/contracts/instance/Instance.sol +311 -52
  235. package/contracts/instance/InstanceAccessManager.sol +527 -0
  236. package/contracts/instance/InstanceReader.sol +291 -0
  237. package/contracts/instance/InstanceService.sol +495 -0
  238. package/contracts/instance/InstanceServiceManager.sol +54 -0
  239. package/contracts/instance/ObjectManager.sol +82 -0
  240. package/contracts/instance/base/ComponentService.sol +121 -0
  241. package/contracts/instance/base/IKeyValueStore.sol +13 -13
  242. package/contracts/instance/base/ILifecycle.sol +3 -3
  243. package/contracts/instance/base/KeyValueStore.sol +64 -40
  244. package/contracts/instance/base/Lifecycle.sol +27 -13
  245. package/contracts/instance/module/IAccess.sol +54 -0
  246. package/contracts/instance/module/IBundle.sol +23 -0
  247. package/contracts/instance/module/IComponents.sol +41 -0
  248. package/contracts/instance/module/IDistribution.sol +41 -0
  249. package/contracts/instance/module/IPolicy.sol +72 -0
  250. package/contracts/instance/module/IRisk.sol +11 -0
  251. package/contracts/instance/module/ISetup.sol +33 -0
  252. package/contracts/instance/module/ITreasury.sol +23 -0
  253. package/contracts/instance/service/ApplicationService.sol +350 -0
  254. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  255. package/contracts/instance/service/BundleService.sol +431 -0
  256. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  257. package/contracts/instance/service/ClaimService.sol +151 -0
  258. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  259. package/contracts/instance/service/DistributionService.sol +435 -0
  260. package/contracts/instance/service/DistributionServiceManager.sol +51 -0
  261. package/contracts/instance/service/IApplicationService.sol +82 -0
  262. package/contracts/instance/service/IBundleService.sol +93 -0
  263. package/contracts/instance/service/IClaimService.sol +61 -0
  264. package/contracts/instance/service/IDistributionService.sol +99 -0
  265. package/contracts/instance/service/IPolicyService.sol +72 -0
  266. package/contracts/instance/service/IPoolService.sol +81 -12
  267. package/contracts/instance/service/IProductService.sol +21 -39
  268. package/contracts/instance/service/PolicyService.sol +362 -0
  269. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  270. package/contracts/instance/service/PoolService.sol +249 -69
  271. package/contracts/instance/service/PoolServiceManager.sol +51 -0
  272. package/contracts/instance/service/ProductService.sol +147 -291
  273. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  274. package/contracts/registry/ChainNft.sol +87 -36
  275. package/contracts/registry/IRegistry.sol +68 -24
  276. package/contracts/registry/IRegistryService.sol +68 -0
  277. package/contracts/registry/ITransferInterceptor.sol +7 -0
  278. package/contracts/registry/Registry.sol +372 -286
  279. package/contracts/registry/RegistryAccessManager.sol +216 -0
  280. package/contracts/registry/RegistryService.sol +282 -0
  281. package/contracts/registry/RegistryServiceManager.sol +62 -0
  282. package/contracts/registry/ReleaseManager.sol +324 -0
  283. package/contracts/registry/TokenRegistry.sol +116 -0
  284. package/contracts/shared/ContractDeployerLib.sol +72 -0
  285. package/contracts/shared/ERC165.sol +14 -8
  286. package/contracts/shared/INftOwnable.sol +23 -0
  287. package/contracts/shared/IPolicyHolder.sol +26 -0
  288. package/contracts/shared/IRegisterable.sol +10 -19
  289. package/contracts/shared/IRegistryLinked.sol +12 -0
  290. package/contracts/shared/IService.sol +16 -0
  291. package/contracts/shared/IVersionable.sol +38 -37
  292. package/contracts/shared/NftOwnable.sol +120 -0
  293. package/contracts/shared/PolicyHolder.sol +81 -0
  294. package/contracts/shared/ProxyManager.sol +169 -0
  295. package/contracts/shared/Registerable.sol +54 -66
  296. package/contracts/shared/RegistryLinked.sol +48 -0
  297. package/contracts/shared/Service.sol +72 -0
  298. package/contracts/shared/TokenHandler.sol +33 -0
  299. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  300. package/contracts/shared/Versionable.sol +38 -68
  301. package/contracts/test/TestFee.sol +2 -2
  302. package/contracts/test/TestRegisterable.sol +5 -6
  303. package/contracts/test/TestRoleId.sol +1 -1
  304. package/contracts/test/TestService.sol +7 -14
  305. package/contracts/types/Amount.sol +60 -0
  306. package/contracts/types/Blocknumber.sol +1 -0
  307. package/contracts/types/ClaimId.sol +52 -0
  308. package/contracts/types/DistributorType.sol +55 -0
  309. package/contracts/types/Fee.sol +22 -9
  310. package/contracts/types/Key32.sol +8 -3
  311. package/contracts/types/NftId.sol +8 -0
  312. package/contracts/types/NftIdSet.sol +26 -24
  313. package/contracts/types/NumberId.sol +52 -0
  314. package/contracts/types/ObjectType.sol +56 -14
  315. package/contracts/types/PayoutId.sol +54 -0
  316. package/contracts/types/Referral.sol +89 -0
  317. package/contracts/types/RiskId.sol +43 -0
  318. package/contracts/types/RoleId.sol +69 -10
  319. package/contracts/types/Seconds.sol +54 -0
  320. package/contracts/types/StateId.sol +6 -1
  321. package/contracts/types/Timestamp.sol +17 -13
  322. package/contracts/types/UFixed.sol +129 -12
  323. package/contracts/types/Version.sol +14 -1
  324. package/package.json +6 -5
  325. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  326. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -174
  327. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  328. package/artifacts/contracts/experiment/errors/IncrementRevert.sol/IIncrementRevert.dbg.json +0 -4
  329. package/artifacts/contracts/experiment/errors/IncrementRevert.sol/IIncrementRevert.json +0 -27
  330. package/artifacts/contracts/experiment/errors/IncrementRevert.sol/IncrementRevert.dbg.json +0 -4
  331. package/artifacts/contracts/experiment/errors/IncrementRevert.sol/IncrementRevert.json +0 -83
  332. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  333. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  334. package/artifacts/contracts/experiment/errors/Revert.sol/IRevert.dbg.json +0 -4
  335. package/artifacts/contracts/experiment/errors/Revert.sol/IRevert.json +0 -75
  336. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  337. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -137
  338. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  339. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  340. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  341. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  342. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  343. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  344. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  345. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  346. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  347. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  348. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  349. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  350. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  351. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  352. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  353. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  354. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  355. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  356. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  357. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  358. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  359. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  360. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  361. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  362. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  363. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  364. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  365. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  366. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
  367. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
  368. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  369. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +0 -300
  370. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  371. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -63
  372. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
  373. package/artifacts/contracts/instance/base/IService.sol/IService.json +0 -300
  374. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  375. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +0 -4
  376. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  377. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.json +0 -300
  378. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
  379. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
  380. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
  381. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  382. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
  383. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
  384. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -296
  385. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
  386. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
  387. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -296
  388. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.dbg.json +0 -4
  389. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.json +0 -10
  390. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.dbg.json +0 -4
  391. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.json +0 -10
  392. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.dbg.json +0 -4
  393. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.json +0 -10
  394. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  395. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +0 -188
  396. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
  397. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
  398. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  399. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +0 -188
  400. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  401. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  402. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -271
  403. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  404. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -271
  405. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  406. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.json +0 -10
  407. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  408. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -149
  409. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  410. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -149
  411. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
  412. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
  413. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -10
  414. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
  415. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -10
  416. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  417. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  418. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -533
  419. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  420. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
  421. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  422. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -533
  423. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  424. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -523
  425. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  426. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +0 -364
  427. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  428. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
  429. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
  430. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
  431. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
  432. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
  433. package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -387
  434. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
  435. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -393
  436. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  437. package/contracts/components/BaseComponent.sol +0 -88
  438. package/contracts/components/IBaseComponent.sol +0 -19
  439. package/contracts/experiment/errors/IncrementRevert.sol +0 -43
  440. package/contracts/experiment/errors/Require.sol +0 -38
  441. package/contracts/experiment/errors/Revert.sol +0 -53
  442. package/contracts/experiment/inheritance/A.sol +0 -53
  443. package/contracts/experiment/inheritance/B.sol +0 -28
  444. package/contracts/experiment/inheritance/C.sol +0 -34
  445. package/contracts/experiment/inheritance/IA.sol +0 -13
  446. package/contracts/experiment/inheritance/IB.sol +0 -10
  447. package/contracts/experiment/inheritance/IC.sol +0 -12
  448. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  449. package/contracts/experiment/statemachine/ISM.sol +0 -25
  450. package/contracts/experiment/statemachine/README.md +0 -112
  451. package/contracts/experiment/statemachine/SM.sol +0 -57
  452. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  453. package/contracts/experiment/types/TypeA.sol +0 -47
  454. package/contracts/experiment/types/TypeB.sol +0 -29
  455. package/contracts/instance/IInstanceLinked.sol +0 -8
  456. package/contracts/instance/base/ComponentServiceBase.sol +0 -42
  457. package/contracts/instance/base/IInstanceBase.sol +0 -14
  458. package/contracts/instance/base/IService.sol +0 -15
  459. package/contracts/instance/base/InstanceBase.sol +0 -80
  460. package/contracts/instance/base/ModuleBase.sol +0 -52
  461. package/contracts/instance/base/ServiceBase.sol +0 -37
  462. package/contracts/instance/module/access/Access.sol +0 -149
  463. package/contracts/instance/module/access/IAccess.sol +0 -53
  464. package/contracts/instance/module/bundle/BundleModule.sol +0 -136
  465. package/contracts/instance/module/bundle/IBundle.sol +0 -58
  466. package/contracts/instance/module/compensation/CompensationModule.sol +0 -8
  467. package/contracts/instance/module/compensation/ICompensation.sol +0 -10
  468. package/contracts/instance/module/component/ComponentModule.sol +0 -95
  469. package/contracts/instance/module/component/IComponent.sol +0 -53
  470. package/contracts/instance/module/policy/IPolicy.sol +0 -61
  471. package/contracts/instance/module/policy/PolicyModule.sol +0 -77
  472. package/contracts/instance/module/pool/IPoolModule.sol +0 -41
  473. package/contracts/instance/module/pool/PoolModule.sol +0 -87
  474. package/contracts/instance/module/risk/IRisk.sol +0 -10
  475. package/contracts/instance/module/risk/RiskModule.sol +0 -8
  476. package/contracts/instance/module/treasury/ITreasury.sol +0 -103
  477. package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
  478. package/contracts/instance/module/treasury/TreasuryModule.sol +0 -152
  479. package/contracts/instance/service/ComponentOwnerService.sol +0 -170
  480. package/contracts/instance/service/IComponentOwnerService.sol +0 -22
  481. package/contracts/registry/IChainNft.sol +0 -21
  482. package/contracts/registry/IRegistryLinked.sol +0 -8
  483. package/contracts/shared/IOwnable.sol +0 -6
  484. package/contracts/test/TestPool.sol +0 -22
  485. package/contracts/test/TestProduct.sol +0 -44
@@ -0,0 +1,362 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRegistry} from "../../registry/IRegistry.sol";
5
+ import {Product} from "../../components/Product.sol";
6
+ import {IComponents} from "../module/IComponents.sol";
7
+ import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
8
+ import {IInstance} from "../IInstance.sol";
9
+ import {IPolicy} from "../module/IPolicy.sol";
10
+ import {IPoolComponent} from "../../components/IPoolComponent.sol";
11
+ import {IRisk} from "../module/IRisk.sol";
12
+ import {IBundle} from "../module/IBundle.sol";
13
+ import {ISetup} from "../module/ISetup.sol";
14
+
15
+ import {TokenHandler} from "../../shared/TokenHandler.sol";
16
+
17
+ import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
18
+ import {UFixed, UFixedLib} from "../../types/UFixed.sol";
19
+ import {ObjectType, APPLICATION, DISTRIBUTION, PRODUCT, POOL, POLICY, BUNDLE} from "../../types/ObjectType.sol";
20
+ import {APPLIED, UNDERWRITTEN, ACTIVE, KEEP_STATE, CLOSED} from "../../types/StateId.sol";
21
+ import {NftId, NftIdLib} from "../../types/NftId.sol";
22
+ import {StateId} from "../../types/StateId.sol";
23
+ import {VersionPart} from "../../types/Version.sol";
24
+
25
+ import {ComponentService} from "../base/ComponentService.sol";
26
+ import {IApplicationService} from "./IApplicationService.sol";
27
+ import {IBundleService} from "./IBundleService.sol";
28
+ import {IDistributionService} from "./IDistributionService.sol";
29
+ import {InstanceReader} from "../InstanceReader.sol";
30
+ import {IPolicyService} from "./IPolicyService.sol";
31
+ import {IPoolService} from "./IPoolService.sol";
32
+ import {IService} from "../../shared/IService.sol";
33
+ import {Service} from "../../shared/Service.sol";
34
+
35
+
36
+ contract PolicyService is
37
+ ComponentService,
38
+ IPolicyService
39
+ {
40
+ using NftIdLib for NftId;
41
+ using TimestampLib for Timestamp;
42
+
43
+ IPoolService internal _poolService;
44
+ IBundleService internal _bundleService;
45
+ IApplicationService internal _applicationService;
46
+ IDistributionService internal _distributionService;
47
+
48
+ event LogProductServiceSender(address sender);
49
+
50
+ function _initialize(
51
+ address owner,
52
+ bytes memory data
53
+ )
54
+ internal
55
+ virtual override
56
+ initializer
57
+ {
58
+ address registryAddress;
59
+ address initialOwner;
60
+ (registryAddress, initialOwner) = abi.decode(data, (address, address));
61
+
62
+ initializeService(registryAddress, address(0), owner);
63
+
64
+ VersionPart majorVersion = getVersion().toMajorPart();
65
+ _poolService = IPoolService(getRegistry().getServiceAddress(POOL(), majorVersion));
66
+ _bundleService = IBundleService(getRegistry().getServiceAddress(BUNDLE(), majorVersion));
67
+ _applicationService = IApplicationService(getRegistry().getServiceAddress(APPLICATION(), majorVersion));
68
+ _distributionService = IDistributionService(getRegistry().getServiceAddress(DISTRIBUTION(), majorVersion));
69
+
70
+ registerInterface(type(IPolicyService).interfaceId);
71
+ }
72
+
73
+
74
+ function getDomain() public pure override returns(ObjectType) {
75
+ return POLICY();
76
+ }
77
+
78
+
79
+ function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
80
+ IRegistry.ObjectInfo memory productInfo;
81
+ (, productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
82
+ product = Product(productInfo.objectAddress);
83
+ }
84
+
85
+ // function _getAndVerifyUnderwritingSetup(
86
+ // IInstance instance,
87
+ // InstanceReader instanceReader,
88
+ // IPolicy.PolicyInfo memory policyInfo,
89
+ // ISetup.ProductSetupInfo memory productSetupInfo
90
+ // )
91
+ // internal
92
+ // view
93
+ // returns (
94
+ // NftId poolNftId,
95
+ // IComponents.PoolInfo memory poolInfo,
96
+ // NftId bundleNftId,
97
+ // IBundle.BundleInfo memory bundleInfo
98
+ // )
99
+ // {
100
+ // // check match between policy and bundle (via pool)
101
+ // poolNftId = productSetupInfo.poolNftId;
102
+ // bundleNftId = policyInfo.bundleNftId;
103
+ // bundleInfo = instanceReader.getBundleInfo(bundleNftId);
104
+ // require(bundleInfo.poolNftId == poolNftId, "BUNDLE_POOL_MISMATCH");
105
+
106
+ // // calculate required collateral
107
+ // IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
108
+ // poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
109
+ // }
110
+
111
+
112
+ function decline(
113
+ NftId policyNftId
114
+ )
115
+ external
116
+ override
117
+ {
118
+ require(false, "ERROR:PRS-235:NOT_YET_IMPLEMENTED");
119
+ }
120
+
121
+
122
+ /// @dev underwites application which includes the locking of the required collateral from the pool.
123
+ function underwrite(
124
+ NftId applicationNftId, // = policyNftId
125
+ bool requirePremiumPayment,
126
+ Timestamp activateAt
127
+ )
128
+ external
129
+ virtual override
130
+ {
131
+ // check caller is registered product
132
+ (NftId productNftId,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
133
+ InstanceReader instanceReader = instance.getInstanceReader();
134
+
135
+ // check policy matches with calling product
136
+ IPolicy.PolicyInfo memory applicationInfo = instanceReader.getPolicyInfo(applicationNftId);
137
+ require(applicationInfo.productNftId == productNftId, "POLICY_PRODUCT_MISMATCH");
138
+
139
+ // check policy is in state applied
140
+ require(instanceReader.getPolicyState(applicationNftId) == APPLIED(), "ERROR:PRS-021:STATE_NOT_APPLIED");
141
+
142
+ StateId newPolicyState = UNDERWRITTEN();
143
+
144
+ // optional activation of policy
145
+ if(activateAt > zeroTimestamp()) {
146
+ newPolicyState = ACTIVE();
147
+ applicationInfo.activatedAt = activateAt;
148
+ applicationInfo.expiredAt = activateAt.addSeconds(applicationInfo.lifetime);
149
+ }
150
+
151
+ // lock bundle collateral
152
+ uint256 netPremiumAmount = 0; // > 0 if immediate premium payment
153
+
154
+ // optional collection of premium
155
+ if(requirePremiumPayment) {
156
+ netPremiumAmount = _processPremiumByTreasury(
157
+ instance,
158
+ applicationNftId,
159
+ applicationInfo.premiumAmount);
160
+
161
+ applicationInfo.premiumPaidAmount += applicationInfo.premiumAmount;
162
+ }
163
+
164
+ // store updated policy info
165
+ instance.updatePolicy(applicationNftId, applicationInfo, newPolicyState);
166
+
167
+ // lock collateral and update pool and bundle book keeping
168
+ // pool retention level: fraction of sum insured that product will cover from pool funds directly
169
+ // eg retention level 30%, payouts up to 30% of the sum insured will be made from the product's pool directly
170
+ // for the remaining 70% the pool owns a policy that will cover claims that exceed the 30% of the sum insured
171
+ // might also call pool component (for isVerifyingApplications pools)
172
+ _poolService.lockCollateral(
173
+ instance,
174
+ productNftId,
175
+ applicationNftId,
176
+ applicationInfo,
177
+ netPremiumAmount); // for pool book keeping (fee + additional capital)
178
+
179
+ // TODO: add logging
180
+ }
181
+
182
+
183
+ function calculateRequiredCollateral(UFixed collateralizationLevel, uint256 sumInsuredAmount) public pure override returns(uint256 collateralAmount) {
184
+ UFixed sumInsuredUFixed = UFixedLib.toUFixed(sumInsuredAmount);
185
+ UFixed collateralUFixed = collateralizationLevel * sumInsuredUFixed;
186
+ return collateralUFixed.toInt();
187
+ }
188
+
189
+ function collectPremium(NftId policyNftId, Timestamp activateAt) external override {
190
+ // check caller is registered product
191
+ (NftId productNftId,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
192
+ InstanceReader instanceReader = instance.getInstanceReader();
193
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
194
+
195
+ if (policyInfo.premiumPaidAmount == policyInfo.premiumAmount) {
196
+ revert ErrorIPolicyServicePremiumAlreadyPaid(policyNftId, policyInfo.premiumPaidAmount);
197
+ }
198
+
199
+ uint256 unpaidPremiumAmount = policyInfo.premiumAmount - policyInfo.premiumPaidAmount;
200
+
201
+ uint256 netPremiumAmount = _processPremiumByTreasury(
202
+ instance,
203
+ policyNftId,
204
+ unpaidPremiumAmount);
205
+
206
+ policyInfo.premiumPaidAmount += unpaidPremiumAmount;
207
+
208
+ _bundleService.increaseBalance(instance, policyInfo.bundleNftId, netPremiumAmount);
209
+ instance.updatePolicy(policyNftId, policyInfo, KEEP_STATE());
210
+
211
+ if(activateAt.gtz() && policyInfo.activatedAt.eqz()) {
212
+ activate(policyNftId, activateAt);
213
+ }
214
+
215
+ // TODO: add logging
216
+ }
217
+
218
+ function activate(NftId policyNftId, Timestamp activateAt) public override {
219
+ // check caller is registered product
220
+ (,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
221
+ InstanceReader instanceReader = instance.getInstanceReader();
222
+
223
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
224
+
225
+ require(
226
+ policyInfo.activatedAt.eqz(),
227
+ "ERROR:PRS-020:ALREADY_ACTIVATED");
228
+
229
+ policyInfo.activatedAt = activateAt;
230
+ policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
231
+
232
+ instance.updatePolicy(policyNftId, policyInfo, ACTIVE());
233
+
234
+ // TODO: add logging
235
+ }
236
+
237
+
238
+ function expire(
239
+ NftId policyNftId
240
+ )
241
+ external
242
+ override
243
+ // solhint-disable-next-line no-empty-blocks
244
+ {
245
+
246
+ }
247
+
248
+ function close(
249
+ NftId policyNftId
250
+ )
251
+ external
252
+ override
253
+ {
254
+ (,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
255
+ InstanceReader instanceReader = instance.getInstanceReader();
256
+
257
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
258
+
259
+ if (policyInfo.activatedAt.eqz()) {
260
+ revert ErrorIPolicyServicePolicyNotActivated(policyNftId);
261
+ }
262
+
263
+ StateId state = instanceReader.getPolicyState(policyNftId);
264
+ if (state != ACTIVE()) {
265
+ revert ErrorIPolicyServicePolicyNotActive(policyNftId, state);
266
+ }
267
+
268
+ if (policyInfo.closedAt.gtz()) {
269
+ revert ErrorIPolicyServicePolicyAlreadyClosed(policyNftId);
270
+ }
271
+
272
+ if (policyInfo.premiumAmount != policyInfo.premiumPaidAmount) {
273
+ revert ErrorIPolicyServicePremiumNotFullyPaid(policyNftId, policyInfo.premiumAmount, policyInfo.premiumPaidAmount);
274
+ }
275
+
276
+ if (policyInfo.openClaimsCount > 0) {
277
+ revert ErrorIPolicyServiceOpenClaims(policyNftId, policyInfo.openClaimsCount);
278
+ }
279
+
280
+ if (TimestampLib.blockTimestamp().lte(policyInfo.expiredAt) && (policyInfo.payoutAmount < policyInfo.sumInsuredAmount)) {
281
+ revert ErrorIPolicyServicePolicyHasNotExpired(policyNftId, policyInfo.expiredAt);
282
+ }
283
+
284
+ policyInfo.closedAt = TimestampLib.blockTimestamp();
285
+
286
+ _poolService.releaseCollateral(
287
+ instance,
288
+ policyNftId,
289
+ policyInfo);
290
+
291
+ instance.updatePolicy(policyNftId, policyInfo, CLOSED());
292
+ }
293
+
294
+ function _getPoolNftId(
295
+ IInstance instance,
296
+ NftId productNftId
297
+ )
298
+ internal
299
+ view
300
+ returns (NftId poolNftid)
301
+ {
302
+ InstanceReader instanceReader = instance.getInstanceReader();
303
+ ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
304
+ return productSetupInfo.poolNftId;
305
+ }
306
+
307
+
308
+ function _processPremiumByTreasury(
309
+ IInstance instance,
310
+ NftId policyNftId,
311
+ uint256 premiumAmount
312
+ )
313
+ internal
314
+ returns (uint256 netPremiumAmount)
315
+ {
316
+ // process token transfer(s)
317
+ if(premiumAmount > 0) {
318
+ NftId productNftId = getRegistry().getObjectInfo(policyNftId).parentNftId;
319
+ ISetup.ProductSetupInfo memory productSetupInfo = instance.getInstanceReader().getProductSetupInfo(productNftId);
320
+ IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
321
+ TokenHandler tokenHandler = productSetupInfo.tokenHandler;
322
+ address policyOwner = getRegistry().ownerOf(policyNftId);
323
+ address poolWallet = instance.getInstanceReader().getComponentInfo(productSetupInfo.poolNftId).wallet;
324
+ IPolicy.Premium memory premium = _applicationService.calculatePremium(
325
+ productNftId,
326
+ policyInfo.riskId,
327
+ policyInfo.sumInsuredAmount,
328
+ policyInfo.lifetime,
329
+ policyInfo.applicationData,
330
+ policyInfo.bundleNftId,
331
+ policyInfo.referralId
332
+ );
333
+
334
+ if (premium.premiumAmount != premiumAmount) {
335
+ revert ErrorIPolicyServicePremiumMismatch(policyNftId, premiumAmount, premium.premiumAmount);
336
+ }
337
+
338
+ // move product fee to product wallet
339
+ address productWallet = productSetupInfo.wallet;
340
+ if (tokenHandler.getToken().allowance(policyOwner, address(tokenHandler)) < premium.premiumAmount) {
341
+ revert ErrorIPolicyServiceInsufficientAllowance(policyOwner, address(tokenHandler), premium.premiumAmount);
342
+ }
343
+ tokenHandler.transfer(policyOwner, productWallet, premium.productFeeFixAmount + premium.productFeeVarAmount);
344
+
345
+ // move distribution fee to distribution wallet
346
+ ISetup.DistributionSetupInfo memory distributionSetupInfo = instance.getInstanceReader().getDistributionSetupInfo(productSetupInfo.distributionNftId);
347
+ address distributionWallet = distributionSetupInfo.wallet;
348
+ uint256 distributionFeeAmountToTransfer = premium.distributionFeeFixAmount + premium.distributionFeeVarAmount - premium.discountAmount;
349
+ tokenHandler.transfer(policyOwner, distributionWallet, distributionFeeAmountToTransfer);
350
+ _distributionService.processSale(productSetupInfo.distributionNftId, policyInfo.referralId, premium, distributionFeeAmountToTransfer);
351
+
352
+ // move netpremium to pool wallet
353
+ tokenHandler.transfer(policyOwner, poolWallet, premium.netPremiumAmount);
354
+
355
+ // TODO: move pool related tokens too
356
+ // TODO: move bundle related tokens too
357
+ netPremiumAmount = premium.netPremiumAmount;
358
+ }
359
+
360
+ // TODO: add logging
361
+ }
362
+ }
@@ -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
+ }