@etherisc/gif-next 0.0.2-d2fd9d7-008 → 0.0.2-d30275e-758

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 (397) hide show
  1. package/README.md +28 -14
  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 +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +946 -219
  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 +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +848 -31
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +846 -57
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +682 -9
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +806 -243
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +632 -194
  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 +1 -1
  21. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +69 -66
  22. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  23. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +5 -0
  24. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  25. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +303 -1340
  26. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +337 -168
  28. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  29. package/artifacts/contracts/instance/Instance.sol/Instance.json +439 -3102
  30. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  31. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +609 -178
  32. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +4 -0
  33. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +124 -0
  34. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  35. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +251 -270
  36. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +457 -402
  38. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  39. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +292 -131
  40. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
  41. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +2663 -0
  42. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  43. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +11 -27
  44. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  45. package/artifacts/contracts/instance/base/{ComponentServiceBase.sol/ComponentServiceBase.json → ComponentService.sol/ComponentService.json} +277 -178
  46. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  47. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  48. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  49. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +40 -10
  50. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  51. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
  52. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  53. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +71 -45
  54. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  55. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  56. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
  57. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  58. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  59. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  60. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  61. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  62. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  63. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +902 -0
  64. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  65. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +649 -0
  66. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  67. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1326 -0
  68. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +725 -0
  70. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  71. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +1072 -0
  72. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  73. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +685 -0
  74. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  75. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1022 -223
  76. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  77. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +392 -79
  78. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  79. package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IApplicationService.sol/IApplicationService.json} +235 -200
  80. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  81. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +714 -0
  82. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  83. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +602 -0
  84. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +585 -160
  86. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  87. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +969 -0
  88. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +536 -304
  90. package/artifacts/contracts/instance/service/IPricingService.sol/IPricingService.dbg.json +4 -0
  91. package/artifacts/contracts/{shared/RegisterableUpgradable.sol/RegisterableUpgradable.json → instance/service/IPricingService.sol/IPricingService.json} +248 -172
  92. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +78 -388
  94. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  95. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1575 -0
  96. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  97. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +741 -0
  98. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +832 -400
  100. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  101. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +338 -93
  102. package/artifacts/contracts/instance/service/PricingService.sol/PricingService.dbg.json +4 -0
  103. package/artifacts/contracts/instance/service/PricingService.sol/PricingService.json +988 -0
  104. package/artifacts/contracts/instance/service/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
  105. package/artifacts/contracts/instance/service/PricingServiceManager.sol/PricingServiceManager.json +689 -0
  106. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  107. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +289 -564
  108. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  109. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +289 -124
  110. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  111. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
  112. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  113. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +244 -133
  114. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  115. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +149 -230
  116. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  117. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
  118. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  119. package/artifacts/contracts/registry/Registry.sol/Registry.json +257 -235
  120. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  121. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  122. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  123. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +200 -335
  124. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  125. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +298 -145
  126. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  127. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +559 -0
  128. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  129. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +141 -53
  130. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  131. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  132. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  133. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  134. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +40 -29
  135. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  136. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +129 -0
  137. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  138. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +21 -34
  139. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  140. package/artifacts/contracts/{experiment/inheritance/IB.sol/IB.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +18 -20
  141. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  142. package/artifacts/contracts/shared/IService.sol/IService.json +86 -172
  143. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  144. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
  145. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  146. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +120 -27
  147. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  148. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
  149. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  150. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +294 -61
  151. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  152. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +129 -51
  153. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  154. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
  155. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  156. package/artifacts/contracts/shared/Service.sol/Service.json +191 -163
  157. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  158. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
  159. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  160. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  161. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  162. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
  163. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  164. package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
  165. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  166. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +129 -51
  167. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  168. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +6 -6
  169. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  170. package/artifacts/contracts/test/TestService.sol/TestService.json +210 -214
  171. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  172. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  173. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  174. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  175. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +8 -190
  176. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  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 +209 -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 +179 -0
  185. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  187. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  188. package/artifacts/contracts/types/Fee.sol/FeeLib.json +40 -9
  189. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  190. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  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 +2 -2
  195. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  196. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  197. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  198. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  199. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +209 -0
  200. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +23 -4
  202. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  203. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  204. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  205. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  206. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  207. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  208. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  209. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  210. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  211. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +38 -7
  212. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  213. package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
  214. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  215. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
  216. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  217. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  218. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  219. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  220. package/contracts/components/Component.sol +253 -0
  221. package/contracts/components/Distribution.sol +204 -83
  222. package/contracts/components/IComponent.sol +76 -0
  223. package/contracts/components/IDistributionComponent.sol +44 -17
  224. package/contracts/components/IPoolComponent.sol +88 -41
  225. package/contracts/components/IProductComponent.sol +10 -5
  226. package/contracts/components/Pool.sol +217 -182
  227. package/contracts/components/Product.sol +248 -163
  228. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
  229. package/contracts/instance/BundleManager.sol +17 -20
  230. package/contracts/instance/Cloneable.sol +7 -2
  231. package/contracts/instance/IInstance.sol +57 -33
  232. package/contracts/instance/IInstanceService.sol +56 -9
  233. package/contracts/instance/Instance.sol +150 -367
  234. package/contracts/instance/InstanceAccessManager.sol +430 -177
  235. package/contracts/instance/InstanceAuthorizationsLib.sol +300 -0
  236. package/contracts/instance/InstanceReader.sol +44 -39
  237. package/contracts/instance/InstanceService.sol +243 -166
  238. package/contracts/instance/InstanceServiceManager.sol +6 -9
  239. package/contracts/instance/InstanceStore.sol +208 -0
  240. package/contracts/instance/ObjectManager.sol +11 -24
  241. package/contracts/instance/base/ComponentService.sol +148 -0
  242. package/contracts/instance/base/KeyValueStore.sol +13 -5
  243. package/contracts/instance/base/Lifecycle.sol +23 -6
  244. package/contracts/instance/module/IAccess.sol +36 -20
  245. package/contracts/instance/module/IBundle.sol +8 -5
  246. package/contracts/instance/module/IComponents.sol +41 -0
  247. package/contracts/instance/module/IDistribution.sol +2 -0
  248. package/contracts/instance/module/IPolicy.sol +41 -9
  249. package/contracts/instance/module/ISetup.sol +7 -20
  250. package/contracts/instance/service/ApplicationService.sol +185 -0
  251. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  252. package/contracts/instance/service/BundleService.sol +440 -0
  253. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  254. package/contracts/instance/service/ClaimService.sol +239 -0
  255. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  256. package/contracts/instance/service/DistributionService.sol +287 -33
  257. package/contracts/instance/service/DistributionServiceManager.sol +7 -10
  258. package/contracts/instance/service/IApplicationService.sol +61 -0
  259. package/contracts/instance/service/IBundleService.sol +102 -0
  260. package/contracts/instance/service/IClaimService.sol +92 -0
  261. package/contracts/instance/service/IDistributionService.sol +74 -1
  262. package/contracts/instance/service/IPolicyService.sol +139 -0
  263. package/contracts/instance/service/IPoolService.sol +76 -25
  264. package/contracts/instance/service/IPricingService.sol +36 -0
  265. package/contracts/instance/service/IProductService.sol +2 -72
  266. package/contracts/instance/service/PolicyService.sol +577 -0
  267. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  268. package/contracts/instance/service/PoolService.sol +232 -183
  269. package/contracts/instance/service/PoolServiceManager.sol +6 -9
  270. package/contracts/instance/service/PricingService.sol +275 -0
  271. package/contracts/instance/service/PricingServiceManager.sol +51 -0
  272. package/contracts/instance/service/ProductService.sol +109 -469
  273. package/contracts/instance/service/ProductServiceManager.sol +2 -2
  274. package/contracts/registry/ChainNft.sol +9 -1
  275. package/contracts/registry/IRegistry.sol +39 -19
  276. package/contracts/registry/IRegistryService.sol +31 -13
  277. package/contracts/registry/ITransferInterceptor.sol +1 -0
  278. package/contracts/registry/Registry.sol +243 -224
  279. package/contracts/registry/RegistryAccessManager.sol +216 -0
  280. package/contracts/registry/RegistryService.sol +101 -173
  281. package/contracts/registry/RegistryServiceManager.sol +21 -39
  282. package/contracts/registry/ReleaseManager.sol +324 -0
  283. package/contracts/registry/TokenRegistry.sol +22 -17
  284. package/contracts/shared/ERC165.sol +14 -12
  285. package/contracts/shared/INftOwnable.sol +11 -10
  286. package/contracts/shared/IPolicyHolder.sol +26 -0
  287. package/contracts/shared/IRegisterable.sol +4 -6
  288. package/contracts/shared/IRegistryLinked.sol +12 -0
  289. package/contracts/shared/IService.sol +5 -4
  290. package/contracts/shared/IVersionable.sol +4 -47
  291. package/contracts/shared/NftOwnable.sol +66 -80
  292. package/contracts/shared/PolicyHolder.sol +81 -0
  293. package/contracts/shared/ProxyManager.sol +100 -25
  294. package/contracts/shared/Registerable.sol +16 -32
  295. package/contracts/shared/RegistryLinked.sol +48 -0
  296. package/contracts/shared/Service.sol +41 -24
  297. package/contracts/shared/TokenHandler.sol +11 -5
  298. package/contracts/shared/Versionable.sol +4 -92
  299. package/contracts/test/TestRegisterable.sol +1 -1
  300. package/contracts/test/TestService.sol +4 -3
  301. package/contracts/types/Amount.sol +70 -0
  302. package/contracts/types/Blocknumber.sol +1 -0
  303. package/contracts/types/ClaimId.sol +75 -0
  304. package/contracts/types/DistributorType.sol +2 -2
  305. package/contracts/types/Fee.sol +13 -5
  306. package/contracts/types/NftId.sol +8 -0
  307. package/contracts/types/ObjectType.sol +16 -7
  308. package/contracts/types/PayoutId.sol +82 -0
  309. package/contracts/types/Referral.sol +4 -0
  310. package/contracts/types/RoleId.sol +26 -19
  311. package/contracts/types/Seconds.sol +54 -0
  312. package/contracts/types/StateId.sol +7 -2
  313. package/contracts/types/Timestamp.sol +18 -13
  314. package/contracts/types/UFixed.sol +1 -0
  315. package/contracts/types/Version.sol +1 -0
  316. package/package.json +3 -3
  317. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  318. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -327
  319. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  320. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -280
  321. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  322. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  323. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  324. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  325. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  326. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  327. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  328. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  329. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  330. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  331. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  332. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  333. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  334. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  335. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  336. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  337. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  338. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  339. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  340. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  341. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  342. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  343. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  344. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  345. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  346. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  347. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  348. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  349. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  350. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  351. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  352. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  353. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  354. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  355. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  356. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  357. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  358. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  359. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  360. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
  361. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.json +0 -101
  362. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
  363. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1132
  364. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  365. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  366. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  367. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  368. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  369. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  370. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  371. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  372. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  373. package/contracts/components/BaseComponent.sol +0 -91
  374. package/contracts/components/IBaseComponent.sol +0 -25
  375. package/contracts/experiment/cloning/Cloner.sol +0 -47
  376. package/contracts/experiment/errors/Require.sol +0 -38
  377. package/contracts/experiment/errors/Revert.sol +0 -44
  378. package/contracts/experiment/inheritance/A.sol +0 -53
  379. package/contracts/experiment/inheritance/B.sol +0 -28
  380. package/contracts/experiment/inheritance/C.sol +0 -34
  381. package/contracts/experiment/inheritance/IA.sol +0 -13
  382. package/contracts/experiment/inheritance/IB.sol +0 -10
  383. package/contracts/experiment/inheritance/IC.sol +0 -12
  384. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  385. package/contracts/experiment/statemachine/ISM.sol +0 -25
  386. package/contracts/experiment/statemachine/SM.sol +0 -57
  387. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  388. package/contracts/experiment/types/TypeA.sol +0 -47
  389. package/contracts/experiment/types/TypeB.sol +0 -29
  390. package/contracts/instance/AccessManagedSimple.sol +0 -115
  391. package/contracts/instance/AccessManagerSimple.sol +0 -692
  392. package/contracts/instance/IAccessManagerSimple.sol +0 -391
  393. package/contracts/instance/base/ComponentServiceBase.sol +0 -134
  394. package/contracts/instance/base/IInstanceBase.sol +0 -23
  395. package/contracts/instance/service/ComponentOwnerService.sol +0 -317
  396. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  397. package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -4,6 +4,7 @@ pragma solidity ^0.8.19;
4
4
  import {IRegistry} from "../../registry/IRegistry.sol";
5
5
  import {IProductComponent} from "../../components/IProductComponent.sol";
6
6
  import {Product} from "../../components/Product.sol";
7
+ import {IComponent} from "../../components/IComponent.sol";
7
8
  import {IPoolComponent} from "../../components/IPoolComponent.sol";
8
9
  import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
9
10
  import {IInstance} from "../IInstance.sol";
@@ -22,32 +23,27 @@ import {Versionable} from "../../shared/Versionable.sol";
22
23
  import {Timestamp, zeroTimestamp} from "../../types/Timestamp.sol";
23
24
  import {UFixed, UFixedLib} from "../../types/UFixed.sol";
24
25
  import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
25
- import {ObjectType, INSTANCE, PRODUCT, POLICY} from "../../types/ObjectType.sol";
26
- import {APPLIED, UNDERWRITTEN, ACTIVE, KEEP_STATE} from "../../types/StateId.sol";
26
+ import {ObjectType, PRODUCT, POOL, POLICY} from "../../types/ObjectType.sol";
27
+ import {APPLIED, ACTIVE, KEEP_STATE} from "../../types/StateId.sol";
27
28
  import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
28
29
  import {Fee, FeeLib} from "../../types/Fee.sol";
29
30
  import {ReferralId} from "../../types/Referral.sol";
30
31
  import {RiskId} from "../../types/RiskId.sol";
31
32
  import {StateId} from "../../types/StateId.sol";
32
33
  import {Version, VersionLib} from "../../types/Version.sol";
34
+ import {RoleId, PRODUCT_OWNER_ROLE} from "../../types/RoleId.sol";
33
35
 
34
36
  import {IService} from "../../shared/IService.sol";
35
37
  import {Service} from "../../shared/Service.sol";
36
- import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
38
+ import {ComponentService} from "../base/ComponentService.sol";
37
39
  import {IProductService} from "./IProductService.sol";
38
40
  import {InstanceReader} from "../InstanceReader.sol";
39
41
  import {IPoolService} from "./PoolService.sol";
40
- import {POOL_SERVICE_NAME} from "./PoolService.sol";
41
-
42
- string constant PRODUCT_SERVICE_NAME = "ProductService";
43
42
 
44
43
  // TODO or name this ProtectionService to have Product be something more generic (loan, savings account, ...)
45
- contract ProductService is ComponentServiceBase, IProductService {
44
+ contract ProductService is ComponentService, IProductService {
46
45
  using NftIdLib for NftId;
47
46
 
48
- string public constant NAME = "ProductService";
49
-
50
- address internal _registryAddress;
51
47
  IPoolService internal _poolService;
52
48
 
53
49
  event LogProductServiceSender(address sender);
@@ -60,28 +56,97 @@ contract ProductService is ComponentServiceBase, IProductService {
60
56
  initializer
61
57
  virtual override
62
58
  {
63
- address initialOwner = address(0);
64
- (_registryAddress, initialOwner) = abi.decode(data, (address, address));
59
+ address registryAddress;
60
+ address initialOwner;
61
+ (registryAddress, initialOwner) = abi.decode(data, (address, address));
65
62
 
66
- _initializeService(_registryAddress, owner);
63
+ initializeService(registryAddress, address(0), owner);
67
64
 
68
- _poolService = IPoolService(_registry.getServiceAddress(POOL_SERVICE_NAME, getMajorVersion()));
65
+ _poolService = IPoolService(getRegistry().getServiceAddress(POOL(), getVersion().toMajorPart()));
69
66
 
70
- _registerInterface(type(IService).interfaceId);
71
- _registerInterface(type(IProductService).interfaceId);
67
+ registerInterface(type(IProductService).interfaceId);
72
68
  }
73
69
 
74
70
 
75
- function getName() public pure override(IService, Service) returns(string memory name) {
76
- return NAME;
71
+ function register(address productAddress)
72
+ external
73
+ returns(NftId productNftId)
74
+ {
75
+ (
76
+ IComponent component,
77
+ address owner,
78
+ IInstance instance,
79
+ NftId instanceNftId
80
+ ) = _checkComponentForRegistration(
81
+ productAddress,
82
+ PRODUCT(),
83
+ PRODUCT_OWNER_ROLE());
84
+
85
+ IProductComponent product = IProductComponent(productAddress);
86
+ IRegistry.ObjectInfo memory productInfo = getRegistryService().registerProduct(product, owner);
87
+ productNftId = productInfo.nftId;
88
+ _createProductSetup(
89
+ instance,
90
+ product,
91
+ productNftId);
92
+ }
93
+
94
+
95
+ function _createProductSetup(
96
+ IInstance instance,
97
+ IProductComponent product,
98
+ NftId productNftId
99
+ )
100
+ internal
101
+ returns (string memory name)
102
+ {
103
+ // wire distribution and pool components to product component
104
+ ISetup.ProductSetupInfo memory setup = product.getSetupInfo();
105
+ IComponent distribution = IComponent(getRegistry().getObjectInfo(setup.distributionNftId).objectAddress);
106
+ IComponent pool = IComponent(getRegistry().getObjectInfo(setup.poolNftId).objectAddress);
107
+
108
+ distribution.setProductNftId(productNftId);
109
+ pool.setProductNftId(productNftId);
110
+ product.setProductNftId(productNftId);
111
+ product.linkToRegisteredNftId();
112
+
113
+ // create product setup in instance
114
+ instance.getInstanceStore().createProductSetup(productNftId, product.getSetupInfo());
115
+
116
+ bytes4[][] memory selectors = new bytes4[][](1);
117
+ selectors[0] = new bytes4[](1);
118
+ selectors[0][0] = IProductComponent.setFees.selector;
119
+
120
+ RoleId[] memory roles = new RoleId[](1);
121
+ roles[0] = PRODUCT_OWNER_ROLE();
122
+
123
+ // create target for instane access manager
124
+ getInstanceService().createGifTarget(
125
+ getRegistry().getNftId(address(instance)),
126
+ address(product),
127
+ product.getName(),
128
+ selectors,
129
+ roles);
77
130
  }
78
131
 
79
- function _finalizeComponentRegistration(NftId componentNftId, bytes memory initialObjData, IInstance instance) internal override {
80
- ISetup.ProductSetupInfo memory initialSetup = abi.decode(
81
- initialObjData,
82
- (ISetup.ProductSetupInfo)
132
+ function getDomain() public pure override returns(ObjectType) {
133
+ return PRODUCT();
134
+ }
135
+
136
+
137
+ function _decodeAndVerifyProductData(bytes memory data)
138
+ internal
139
+ returns(string memory name, ISetup.ProductSetupInfo memory setup)
140
+ {
141
+ (name, setup) = abi.decode(
142
+ data,
143
+ (string, ISetup.ProductSetupInfo)
83
144
  );
84
- instance.createProductSetup(componentNftId, initialSetup);
145
+
146
+ // TODO add checks
147
+ // if(wallet == address(0)) {
148
+ // revert WalletIsZero();
149
+ // }
85
150
  }
86
151
 
87
152
  function setFees(
@@ -89,27 +154,31 @@ contract ProductService is ComponentServiceBase, IProductService {
89
154
  Fee memory processingFee
90
155
  )
91
156
  external
92
- override
93
157
  {
94
- (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
158
+ // TODO check args
159
+
160
+ (NftId productNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
95
161
  InstanceReader instanceReader = instance.getInstanceReader();
96
- NftId productNftId = productInfo.nftId;
97
162
 
98
163
  ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
164
+
99
165
  productSetupInfo.productFee = productFee;
100
166
  productSetupInfo.processingFee = processingFee;
101
167
 
102
- instance.updateProductSetup(productNftId, productSetupInfo, KEEP_STATE());
168
+ instance.getInstanceStore().updateProductSetup(productNftId, productSetupInfo, KEEP_STATE());
103
169
  }
104
170
 
105
171
  function createRisk(
106
172
  RiskId riskId,
107
173
  bytes memory data
108
- ) external override {
109
- (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
110
- NftId productNftId = productInfo.nftId;
174
+ )
175
+ external
176
+ override
177
+ {
178
+ (NftId productNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
111
179
  IRisk.RiskInfo memory riskInfo = IRisk.RiskInfo(productNftId, data);
112
- instance.createRisk(
180
+
181
+ instance.getInstanceStore().createRisk(
113
182
  riskId,
114
183
  riskInfo
115
184
  );
@@ -118,453 +187,24 @@ contract ProductService is ComponentServiceBase, IProductService {
118
187
  function updateRisk(
119
188
  RiskId riskId,
120
189
  bytes memory data
121
- ) external {
122
- (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
190
+ )
191
+ external
192
+ {
193
+ (,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
123
194
  InstanceReader instanceReader = instance.getInstanceReader();
195
+
124
196
  IRisk.RiskInfo memory riskInfo = instanceReader.getRiskInfo(riskId);
125
197
  riskInfo.data = data;
126
- instance.updateRisk(riskId, riskInfo, KEEP_STATE());
198
+ instance.getInstanceStore().updateRisk(riskId, riskInfo, KEEP_STATE());
127
199
  }
128
200
 
129
201
  function updateRiskState(
130
202
  RiskId riskId,
131
203
  StateId state
132
- ) external {
133
- (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
134
- instance.updateRiskState(riskId, state);
135
- }
136
-
137
- function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
138
- IRegistry.ObjectInfo memory productInfo;
139
- (productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
140
- product = Product(productInfo.objectAddress);
141
- }
142
-
143
- function calculatePremium(
144
- RiskId riskId,
145
- uint256 sumInsuredAmount,
146
- uint256 lifetime,
147
- bytes memory applicationData,
148
- NftId bundleNftId,
149
- ReferralId referralId
150
- )
151
- public
152
- view
153
- override
154
- returns (
155
- uint256 premiumAmount,
156
- uint256 productFeeAmount,
157
- uint256 poolFeeAmount,
158
- uint256 bundleFeeAmount,
159
- uint256 distributionFeeAmount
160
- )
161
- {
162
- Product product = _getAndVerifyInstanceAndProduct();
163
- uint256 netPremiumAmount = product.calculateNetPremium(
164
- sumInsuredAmount,
165
- riskId,
166
- lifetime,
167
- applicationData
168
- );
169
-
170
- (
171
- productFeeAmount,
172
- poolFeeAmount,
173
- bundleFeeAmount,
174
- distributionFeeAmount
175
- ) = _calculateFeeAmounts(
176
- netPremiumAmount,
177
- product,
178
- bundleNftId,
179
- referralId
180
- );
181
-
182
- premiumAmount = netPremiumAmount + productFeeAmount;
183
- premiumAmount += poolFeeAmount + bundleFeeAmount;
184
- premiumAmount += distributionFeeAmount;
185
- }
186
-
187
- function _calculateFeeAmounts(
188
- uint256 netPremiumAmount,
189
- Product product,
190
- NftId bundleNftId,
191
- ReferralId referralId
192
- )
193
- internal
194
- view
195
- returns (
196
- uint256 productFeeAmount,
197
- uint256 poolFeeAmount,
198
- uint256 bundleFeeAmount,
199
- uint256 distributionFeeAmount
200
- )
201
- {
202
- InstanceReader instanceReader;
203
- {
204
- IInstance instance = product.getInstance();
205
- instanceReader = instance.getInstanceReader();
206
- }
207
-
208
- NftId poolNftId = product.getPoolNftId();
209
- IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
210
- require(bundleInfo.poolNftId == poolNftId,"ERROR:PRS-035:BUNDLE_POOL_MISMATCH");
211
-
212
- {
213
- ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(product.getProductNftId());
214
- (productFeeAmount,) = FeeLib.calculateFee(productSetupInfo.productFee, netPremiumAmount);
215
- }
216
- {
217
- ISetup.PoolSetupInfo memory poolSetupInfo = instanceReader.getPoolSetupInfo(poolNftId);
218
- (poolFeeAmount,) = FeeLib.calculateFee(poolSetupInfo.poolFee, netPremiumAmount);
219
- }
220
- {
221
- NftId distributionNftId = product.getDistributionNftId();
222
- ISetup.DistributionSetupInfo memory distributionSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
223
- (distributionFeeAmount,) = FeeLib.calculateFee(distributionSetupInfo.distributionFee, netPremiumAmount);
224
- }
225
-
226
- (bundleFeeAmount,) = FeeLib.calculateFee(bundleInfo.fee, netPremiumAmount);
227
- }
228
-
229
-
230
- function createApplication(
231
- address applicationOwner,
232
- RiskId riskId,
233
- uint256 sumInsuredAmount,
234
- uint256 lifetime,
235
- bytes memory applicationData,
236
- NftId bundleNftId,
237
- ReferralId referralId
238
- ) external override returns (NftId policyNftId) {
239
- (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
240
- // TODO add validations (see create bundle in pool service)
241
-
242
- policyNftId = getRegistryService().registerPolicy(
243
- IRegistry.ObjectInfo(
244
- zeroNftId(),
245
- productInfo.nftId,
246
- POLICY(),
247
- false, // intercepting property for policies is defined on product
248
- address(0),
249
- applicationOwner,
250
- ""
251
- )
252
- );
253
-
254
- (uint256 premiumAmount,,,,) = calculatePremium(
255
- riskId,
256
- sumInsuredAmount,
257
- lifetime,
258
- applicationData,
259
- bundleNftId,
260
- referralId
261
- );
262
-
263
- IPolicy.PolicyInfo memory policyInfo = IPolicy.PolicyInfo(
264
- productInfo.nftId,
265
- bundleNftId,
266
- referralId,
267
- riskId,
268
- sumInsuredAmount,
269
- premiumAmount,
270
- 0,
271
- lifetime,
272
- applicationData,
273
- "",
274
- 0,
275
- 0,
276
- 0,
277
- zeroTimestamp(),
278
- zeroTimestamp(),
279
- zeroTimestamp()
280
- );
281
-
282
- instance.createPolicy(policyNftId, policyInfo);
283
- instance.updatePolicyState(policyNftId, APPLIED());
284
-
285
- // TODO add logging
286
- }
287
-
288
- function _getAndVerifyUnderwritingSetup(
289
- IInstance instance,
290
- InstanceReader instanceReader,
291
- IPolicy.PolicyInfo memory policyInfo,
292
- ISetup.ProductSetupInfo memory productSetupInfo
293
- )
294
- internal
295
- view
296
- returns (
297
- NftId bundleNftId,
298
- IBundle.BundleInfo memory bundleInfo,
299
- uint256 collateralAmount
300
- )
301
- {
302
- // check match between policy and bundle (via pool)
303
- bundleNftId = policyInfo.bundleNftId;
304
- bundleInfo = instanceReader.getBundleInfo(bundleNftId);
305
- require(bundleInfo.poolNftId == productSetupInfo.poolNftId, "POLICY_BUNDLE_MISMATCH");
306
-
307
- // calculate required collateral
308
- NftId poolNftId = productSetupInfo.poolNftId;
309
- ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(poolNftId);
310
-
311
- // obtain remaining return values
312
- collateralAmount = calculateRequiredCollateral(poolInfo.collateralizationLevel, policyInfo.sumInsuredAmount);
313
- }
314
-
315
- function _lockCollateralInBundle(
316
- IInstance instance,
317
- NftId bundleNftId,
318
- IBundle.BundleInfo memory bundleInfo,
319
- NftId policyNftId,
320
- uint256 collateralAmount
321
- )
322
- internal
323
- returns (IBundle.BundleInfo memory)
324
- {
325
- bundleInfo.lockedAmount += collateralAmount;
326
- // TODO: track policy associated to bundle in bundlemanager (tbd) and how much is locked for it
327
- return bundleInfo;
328
- }
329
-
330
- function _underwriteByPool(
331
- NftId poolNftId,
332
- NftId policyNftId,
333
- IPolicy.PolicyInfo memory policyInfo,
334
- bytes memory bundleFilter,
335
- uint256 collateralAmount
336
- )
337
- internal
338
- {
339
- address poolAddress = getRegistry().getObjectInfo(poolNftId).objectAddress;
340
- IPoolComponent pool = IPoolComponent(poolAddress);
341
- pool.underwrite(
342
- policyNftId,
343
- policyInfo.applicationData,
344
- bundleFilter,
345
- collateralAmount);
346
- }
347
-
348
-
349
- function revoke(
350
- NftId policyNftId
351
204
  )
352
205
  external
353
- override
354
- {
355
- require(false, "ERROR:PRS-234:NOT_YET_IMPLEMENTED");
356
- }
357
-
358
-
359
- function underwrite(
360
- NftId policyNftId,
361
- bool requirePremiumPayment,
362
- Timestamp activateAt
363
- )
364
- external
365
- override
366
- {
367
- // check caller is registered product
368
- (
369
- IRegistry.ObjectInfo memory productInfo,
370
- IInstance instance
371
- ) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
372
- InstanceReader instanceReader = instance.getInstanceReader();
373
-
374
- // check match between policy and calling product
375
- NftId productNftId = productInfo.nftId;
376
- IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
377
- require(policyInfo.productNftId == productNftId, "POLICY_PRODUCT_MISMATCH");
378
- require(instanceReader.getPolicyState(policyNftId) == APPLIED(), "ERROR:PRS-021:STATE_NOT_APPLIED");
379
-
380
- NftId bundleNftId;
381
- IBundle.BundleInfo memory bundleInfo;
382
- uint256 collateralAmount;
383
- uint256 netPremiumAmount = 0; // > 0 if immediate premium payment
384
- {
385
- ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
386
- IBundle.BundleInfo memory bundleInfo;
387
-
388
- (
389
- bundleNftId,
390
- bundleInfo,
391
- collateralAmount
392
- ) = _getAndVerifyUnderwritingSetup(
393
- instance,
394
- instanceReader,
395
- policyInfo,
396
- productSetupInfo
397
- );
398
- }
399
-
400
-
401
- // lock bundle collateral
402
- bundleInfo = _lockCollateralInBundle(
403
- instance,
404
- bundleNftId,
405
- bundleInfo,
406
- policyNftId,
407
- collateralAmount);
408
-
409
- // lock bundle collateral
410
- bundleInfo = _lockCollateralInBundle(
411
- instance,
412
- bundleNftId,
413
- bundleInfo,
414
- policyNftId,
415
- collateralAmount);
416
- StateId newPolicyState = UNDERWRITTEN();
417
-
418
- // optional activation of policy
419
- if(activateAt > zeroTimestamp()) {
420
- newPolicyState = ACTIVE();
421
- policyInfo.activatedAt = activateAt;
422
- policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
423
- }
424
-
425
- // optional collection of premium
426
- if(requirePremiumPayment) {
427
- netPremiumAmount = _processPremiumByTreasury(
428
- instance,
429
- productInfo.nftId,
430
- policyNftId,
431
- policyInfo.premiumAmount);
432
-
433
- policyInfo.premiumPaidAmount += policyInfo.premiumAmount;
434
- }
435
-
436
- _poolService.underwritePolicy(instance, policyNftId, bundleNftId, collateralAmount, netPremiumAmount);
437
- instance.updatePolicy(policyNftId, policyInfo, newPolicyState);
438
-
439
- // involve pool if necessary
440
- {
441
- ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(bundleInfo.poolNftId);
442
-
443
- if(poolInfo.isConfirmingApplication) {
444
- _underwriteByPool(
445
- bundleInfo.poolNftId,
446
- policyNftId,
447
- policyInfo,
448
- bundleInfo.filter,
449
- collateralAmount
450
- );
451
- }
452
- }
453
-
454
- // TODO add logging
455
- }
456
-
457
- function calculateRequiredCollateral(UFixed collateralizationLevel, uint256 sumInsuredAmount) public pure override returns(uint256 collateralAmount) {
458
- UFixed sumInsuredUFixed = UFixedLib.toUFixed(sumInsuredAmount);
459
- UFixed collateralUFixed = collateralizationLevel * sumInsuredUFixed;
460
- return collateralUFixed.toInt();
461
- }
462
-
463
- function collectPremium(NftId policyNftId, Timestamp activateAt) external override {
464
- // check caller is registered product
465
- (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
466
- InstanceReader instanceReader = instance.getInstanceReader();
467
-
468
- // TODO: check if not paid
469
- // TODO: transfer premium
470
- // TODO: optionally activate
471
-
472
- // // perform actual token transfers (this code is probably not complete)
473
- // IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
474
-
475
- // uint256 premiumAmount = policyInfo.premiumAmount;
476
- // _processPremiumByTreasury(instance, productInfo.nftId, policyNftId, premiumAmount);
477
-
478
- // // policy level book keeping for premium paid
479
- // policyInfo.premiumPaidAmount += premiumAmount;
480
-
481
- // instance.updatePolicy(policyNftId, policyInfo, KEEP_STATE());
482
-
483
- // // optional activation of policy
484
- // if(activateAt > zeroTimestamp()) {
485
- // activate(policyNftId, activateAt);
486
- // }
487
-
488
- // TODO add logging
489
- }
490
-
491
- function activate(NftId policyNftId, Timestamp activateAt) public override {
492
- // check caller is registered product
493
- (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
494
- InstanceReader instanceReader = instance.getInstanceReader();
495
-
496
- IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
497
-
498
- require(
499
- policyInfo.activatedAt.eqz(),
500
- "ERROR:PRS-020:ALREADY_ACTIVATED");
501
-
502
- policyInfo.activatedAt = activateAt;
503
- policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
504
-
505
- instance.updatePolicy(policyNftId, policyInfo, ACTIVE());
506
-
507
- // TODO add logging
508
- }
509
-
510
- function close(
511
- NftId policyNftId
512
- ) external override // solhint-disable-next-line no-empty-blocks
513
- {
514
-
515
- }
516
-
517
- function _getPoolNftId(
518
- IInstance instance,
519
- NftId productNftId
520
- )
521
- internal
522
- view
523
- returns (NftId poolNftid)
524
- {
525
- InstanceReader instanceReader = instance.getInstanceReader();
526
- ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
527
- return productSetupInfo.poolNftId;
528
- }
529
-
530
-
531
- function _processPremiumByTreasury(
532
- IInstance instance,
533
- NftId productNftId,
534
- NftId policyNftId,
535
- uint256 premiumAmount
536
- )
537
- internal
538
- returns (uint256 netPremiumAmount)
539
206
  {
540
- // process token transfer(s)
541
- if(premiumAmount > 0) {
542
- ISetup.ProductSetupInfo memory productSetupInfo = instance.getInstanceReader().getProductSetupInfo(productNftId);
543
- TokenHandler tokenHandler = productSetupInfo.tokenHandler;
544
- address policyOwner = getRegistry().ownerOf(policyNftId);
545
- ISetup.PoolSetupInfo memory poolSetupInfo = instance.getInstanceReader().getPoolSetupInfo(productSetupInfo.poolNftId);
546
- address poolWallet = poolSetupInfo.wallet;
547
- netPremiumAmount = premiumAmount;
548
- Fee memory productFee = productSetupInfo.productFee;
549
-
550
- if (FeeLib.feeIsZero(productFee)) {
551
- tokenHandler.transfer(
552
- policyOwner,
553
- poolWallet,
554
- premiumAmount
555
- );
556
- } else {
557
- (uint256 productFeeAmount, uint256 netAmount) = FeeLib.calculateFee(productSetupInfo.productFee, netPremiumAmount);
558
- address productWallet = productSetupInfo.wallet;
559
- if (tokenHandler.getToken().allowance(policyOwner, address(tokenHandler)) < premiumAmount) {
560
- revert ErrorIProductServiceInsufficientAllowance(policyOwner, address(tokenHandler), premiumAmount);
561
- }
562
- tokenHandler.transfer(policyOwner, productWallet, productFeeAmount);
563
- tokenHandler.transfer(policyOwner, poolWallet, netAmount);
564
- netPremiumAmount = netAmount;
565
- }
566
- }
567
-
568
- // TODO add logging
207
+ (,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
208
+ instance.getInstanceStore().updateRiskState(riskId, state);
569
209
  }
570
- }
210
+ }
@@ -16,7 +16,7 @@ contract ProductServiceManager is ProxyManager {
16
16
  constructor(
17
17
  address registryAddress
18
18
  )
19
- ProxyManager()
19
+ ProxyManager(registryAddress)
20
20
  {
21
21
  ProductService svc = new ProductService();
22
22
  bytes memory data = abi.encode(registryAddress, address(this));
@@ -39,7 +39,7 @@ contract ProductServiceManager is ProxyManager {
39
39
  // address(_productService));
40
40
 
41
41
  // implies that after this constructor call only upgrade functionality is available
42
- _isDeployed = true;
42
+ // _isDeployed = true;
43
43
  }
44
44
 
45
45
  //--- view functions ----------------------------------------------------//