@etherisc/gif-next 0.0.2-7b53731-014 → 0.0.2-7bf5f47-222

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 (425) hide show
  1. package/README.md +211 -27
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  3. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +331 -23
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +366 -96
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +246 -23
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +0 -188
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +15 -227
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +0 -213
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +419 -155
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +453 -122
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +4 -0
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +66 -0
  20. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +4 -0
  21. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +24 -0
  22. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +4 -0
  23. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +42 -0
  24. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  36. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  39. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  40. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  41. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  42. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  43. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  44. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  45. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  46. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  47. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +788 -0
  48. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  49. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +185 -0
  50. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  51. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +865 -1135
  52. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  53. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +448 -0
  54. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  55. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +570 -0
  56. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  57. package/artifacts/contracts/instance/Instance.sol/Instance.json +1825 -1175
  58. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  59. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +1047 -0
  60. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  61. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +763 -0
  62. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  63. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1422 -0
  64. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  65. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +963 -0
  66. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  67. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +460 -0
  68. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +285 -0
  70. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
  71. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +280 -48
  72. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  73. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +1 -1
  74. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  75. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +27 -158
  76. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  77. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  78. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +37 -245
  79. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  80. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
  81. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  82. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +254 -0
  83. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  84. package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
  85. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  86. package/artifacts/contracts/instance/module/{distribution/IDistribution.sol → IDistribution.sol}/IDistribution.json +1 -1
  87. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  88. package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
  89. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  90. package/artifacts/contracts/instance/module/{risk/IRisk.sol → IRisk.sol}/IRisk.json +1 -1
  91. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  92. package/artifacts/contracts/instance/{base/ModuleBase.sol/ModuleBase.json → module/ISetup.sol/ISetup.json} +2 -2
  93. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  94. package/artifacts/contracts/instance/module/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
  95. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  96. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +968 -0
  97. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  98. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +432 -0
  99. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  100. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +374 -91
  101. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  102. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +335 -62
  103. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  104. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +420 -0
  105. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  106. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +692 -0
  107. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  108. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +185 -83
  109. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  110. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +182 -61
  111. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  112. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +680 -0
  113. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  114. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +180 -121
  115. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  116. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +179 -273
  117. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  118. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1025 -0
  119. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  120. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +472 -0
  121. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  122. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +316 -132
  123. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  124. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +420 -0
  125. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  126. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +286 -367
  127. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  128. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +420 -0
  129. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  130. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +186 -12
  131. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  132. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +376 -37
  133. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  134. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +976 -0
  135. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  136. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  137. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  138. package/artifacts/contracts/registry/Registry.sol/Registry.json +397 -115
  139. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  140. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  141. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  142. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1195 -0
  143. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  144. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +451 -0
  145. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  146. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +546 -0
  147. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  148. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +397 -0
  149. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  150. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  151. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  152. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  153. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  154. package/artifacts/contracts/{instance/module/component/ComponentModule.sol/ComponentModule.json → shared/INftOwnable.sol/INftOwnable.json} +67 -57
  155. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  156. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +117 -37
  157. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  158. package/artifacts/contracts/{instance/base/InstanceBase.sol/InstanceBase.json → shared/IService.sol/IService.json} +168 -123
  159. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  160. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +55 -14
  161. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  162. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  163. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  164. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  165. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  166. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +190 -37
  167. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
  168. package/artifacts/contracts/{instance/base/IService.sol/IService.json → shared/RegisterableUpgradable.sol/RegisterableUpgradable.json} +215 -73
  169. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  170. package/artifacts/contracts/{instance/base/ServiceBase.sol/ServiceBase.json → shared/Service.sol/Service.json} +224 -56
  171. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  172. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  173. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  174. package/artifacts/contracts/shared/{Proxy.sol/ProxyWithProxyAdminGetter.json → UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json} +4 -4
  175. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  176. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +78 -14
  177. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  178. package/artifacts/contracts/test/TestFee.sol/TestFee.json +4 -4
  179. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  180. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +204 -36
  181. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  182. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +14 -14
  183. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  184. package/artifacts/contracts/test/TestService.sol/TestService.json +289 -68
  185. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  186. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
  187. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  188. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  189. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  190. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +103 -23
  191. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  192. package/artifacts/contracts/test/Usdc.sol/USDC.json +91 -53
  193. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  194. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  195. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  196. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  197. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  198. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  199. package/artifacts/contracts/types/Fee.sol/FeeLib.json +4 -4
  200. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  201. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +31 -17
  202. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  203. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  204. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  205. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  206. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  207. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  208. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  209. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  210. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  211. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  212. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  213. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  214. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  215. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +134 -8
  216. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  217. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  218. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  219. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +15 -2
  220. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  221. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  222. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  223. package/artifacts/contracts/types/UFixed.sol/{UFixedMathLib.json → UFixedLib.json} +3 -3
  224. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  225. package/artifacts/contracts/types/Version.sol/VersionLib.json +40 -2
  226. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  227. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
  228. package/contracts/components/BaseComponent.sol +104 -39
  229. package/contracts/components/Distribution.sol +51 -20
  230. package/contracts/components/IBaseComponent.sol +18 -3
  231. package/contracts/components/IDistributionComponent.sol +3 -6
  232. package/contracts/components/IPoolComponent.sol +7 -12
  233. package/contracts/components/IProductComponent.sol +4 -7
  234. package/contracts/components/Pool.sol +118 -82
  235. package/contracts/components/Product.sol +118 -53
  236. package/contracts/experiment/cloning/Cloner.sol +47 -0
  237. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
  238. package/contracts/instance/BundleManager.sol +129 -0
  239. package/contracts/instance/Cloneable.sol +46 -0
  240. package/contracts/instance/IInstance.sol +54 -45
  241. package/contracts/instance/IInstanceBase.sol +26 -0
  242. package/contracts/instance/IInstanceService.sol +40 -0
  243. package/contracts/instance/Instance.sol +260 -58
  244. package/contracts/instance/InstanceAccessManager.sol +303 -0
  245. package/contracts/instance/InstanceBase.sol +41 -0
  246. package/contracts/instance/InstanceReader.sol +315 -0
  247. package/contracts/instance/InstanceService.sol +350 -0
  248. package/contracts/instance/InstanceServiceManager.sol +54 -0
  249. package/contracts/instance/ObjectManager.sol +101 -0
  250. package/contracts/instance/base/ComponentServiceBase.sol +57 -17
  251. package/contracts/instance/base/IInstanceBase.sol +3 -2
  252. package/contracts/instance/base/IKeyValueStore.sol +13 -14
  253. package/contracts/instance/base/ILifecycle.sol +3 -3
  254. package/contracts/instance/base/KeyValueStore.sol +49 -38
  255. package/contracts/instance/base/Lifecycle.sol +1 -1
  256. package/contracts/instance/module/IAccess.sol +48 -0
  257. package/contracts/instance/module/IBundle.sol +20 -0
  258. package/contracts/instance/module/IDistribution.sol +39 -0
  259. package/contracts/instance/module/IPolicy.sol +45 -0
  260. package/contracts/instance/module/IRisk.sol +11 -0
  261. package/contracts/instance/module/ISetup.sol +46 -0
  262. package/contracts/instance/module/ITreasury.sol +23 -0
  263. package/contracts/instance/service/BundleService.sol +275 -0
  264. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  265. package/contracts/instance/service/ComponentOwnerService.sol +232 -74
  266. package/contracts/instance/service/DistributionService.sol +75 -21
  267. package/contracts/instance/service/DistributionServiceManager.sol +51 -0
  268. package/contracts/instance/service/IBundleService.sol +42 -0
  269. package/contracts/instance/service/IComponentOwnerService.sol +1 -3
  270. package/contracts/instance/service/IDistributionService.sol +1 -1
  271. package/contracts/instance/service/IPolicyService.sol +88 -0
  272. package/contracts/instance/service/IPoolService.sol +7 -24
  273. package/contracts/instance/service/IProductService.sol +9 -76
  274. package/contracts/instance/service/PolicyService.sol +505 -0
  275. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  276. package/contracts/instance/service/PoolService.sol +85 -110
  277. package/contracts/instance/service/PoolServiceManager.sol +51 -0
  278. package/contracts/instance/service/ProductService.sol +98 -437
  279. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  280. package/contracts/registry/ChainNft.sol +79 -36
  281. package/contracts/registry/IRegistry.sol +58 -24
  282. package/contracts/registry/IRegistryService.sol +58 -0
  283. package/contracts/registry/ITransferInterceptor.sol +6 -0
  284. package/contracts/registry/Registry.sol +303 -288
  285. package/contracts/registry/RegistryAccessManager.sol +210 -0
  286. package/contracts/registry/RegistryService.sol +323 -0
  287. package/contracts/registry/RegistryServiceManager.sol +62 -0
  288. package/contracts/registry/ReleaseManager.sol +348 -0
  289. package/contracts/registry/TokenRegistry.sol +110 -0
  290. package/contracts/shared/ContractDeployerLib.sol +72 -0
  291. package/contracts/shared/ERC165.sol +6 -2
  292. package/contracts/shared/INftOwnable.sol +22 -0
  293. package/contracts/shared/IRegisterable.sol +8 -15
  294. package/contracts/shared/IService.sol +16 -0
  295. package/contracts/shared/IVersionable.sol +55 -11
  296. package/contracts/shared/NftOwnable.sol +134 -0
  297. package/contracts/shared/ProxyManager.sol +94 -0
  298. package/contracts/shared/Registerable.sol +63 -59
  299. package/contracts/shared/RegisterableUpgradable.sol +16 -0
  300. package/contracts/shared/Service.sol +58 -0
  301. package/contracts/shared/TokenHandler.sol +27 -0
  302. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  303. package/contracts/shared/Versionable.sol +113 -55
  304. package/contracts/test/TestFee.sol +2 -2
  305. package/contracts/test/TestRegisterable.sol +5 -6
  306. package/contracts/test/TestRoleId.sol +1 -1
  307. package/contracts/test/TestService.sol +7 -14
  308. package/contracts/types/DistributorType.sol +55 -0
  309. package/contracts/types/Fee.sol +3 -3
  310. package/contracts/types/Key32.sol +8 -3
  311. package/contracts/types/NftIdSet.sol +26 -24
  312. package/contracts/types/NumberId.sol +52 -0
  313. package/contracts/types/ObjectType.sol +35 -14
  314. package/contracts/types/Referral.sol +85 -0
  315. package/contracts/types/RoleId.sol +61 -9
  316. package/contracts/types/StateId.sol +5 -1
  317. package/contracts/types/Timestamp.sol +7 -3
  318. package/contracts/types/UFixed.sol +128 -12
  319. package/contracts/types/Version.sol +13 -1
  320. package/package.json +4 -3
  321. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
  322. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
  323. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
  324. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  325. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +0 -4
  326. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  327. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
  328. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
  329. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
  330. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.json +0 -10
  331. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  332. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
  333. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
  334. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -297
  335. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
  336. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
  337. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -297
  338. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  339. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
  340. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
  341. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  342. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +0 -117
  343. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +0 -4
  344. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +0 -10
  345. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +0 -4
  346. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +0 -4
  347. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.json +0 -10
  348. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  349. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  350. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -284
  351. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  352. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -284
  353. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  354. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.json +0 -10
  355. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  356. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -144
  357. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  358. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -144
  359. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
  360. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
  361. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -113
  362. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
  363. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -131
  364. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  365. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  366. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -511
  367. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  368. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
  369. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  370. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -511
  371. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  372. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -452
  373. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
  374. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
  375. package/artifacts/contracts/registry/RegistryUpgradeable.sol/RegistryUpgradeable.dbg.json +0 -4
  376. package/artifacts/contracts/registry/RegistryUpgradeable.sol/RegistryUpgradeable.json +0 -495
  377. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
  378. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
  379. package/artifacts/contracts/shared/Proxy.sol/Proxy.dbg.json +0 -4
  380. package/artifacts/contracts/shared/Proxy.sol/Proxy.json +0 -178
  381. package/artifacts/contracts/shared/Proxy.sol/ProxyWithProxyAdminGetter.dbg.json +0 -4
  382. package/artifacts/contracts/shared/VersionableUpgradeable.sol/VersionableUpgradeable.dbg.json +0 -4
  383. package/artifacts/contracts/shared/VersionableUpgradeable.sol/VersionableUpgradeable.json +0 -187
  384. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +0 -4
  385. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +0 -405
  386. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
  387. package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -578
  388. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
  389. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -575
  390. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +0 -4
  391. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +0 -99
  392. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  393. package/contracts/experiment/statemachine/README.md +0 -112
  394. package/contracts/instance/IInstanceLinked.sol +0 -8
  395. package/contracts/instance/base/IService.sol +0 -15
  396. package/contracts/instance/base/InstanceBase.sol +0 -91
  397. package/contracts/instance/base/ModuleBase.sol +0 -57
  398. package/contracts/instance/base/ServiceBase.sol +0 -37
  399. package/contracts/instance/module/access/Access.sol +0 -149
  400. package/contracts/instance/module/access/IAccess.sol +0 -53
  401. package/contracts/instance/module/bundle/BundleModule.sol +0 -134
  402. package/contracts/instance/module/bundle/IBundle.sol +0 -53
  403. package/contracts/instance/module/component/ComponentModule.sol +0 -70
  404. package/contracts/instance/module/component/IComponent.sol +0 -28
  405. package/contracts/instance/module/distribution/DistributionModule.sol +0 -17
  406. package/contracts/instance/module/distribution/IDistribution.sol +0 -10
  407. package/contracts/instance/module/policy/IPolicy.sol +0 -63
  408. package/contracts/instance/module/policy/PolicyModule.sol +0 -91
  409. package/contracts/instance/module/pool/IPoolModule.sol +0 -40
  410. package/contracts/instance/module/pool/PoolModule.sol +0 -90
  411. package/contracts/instance/module/risk/IRisk.sol +0 -26
  412. package/contracts/instance/module/risk/RiskModule.sol +0 -62
  413. package/contracts/instance/module/treasury/ITreasury.sol +0 -82
  414. package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
  415. package/contracts/instance/module/treasury/TreasuryModule.sol +0 -138
  416. package/contracts/registry/IChainNft.sol +0 -21
  417. package/contracts/registry/IRegistryLinked.sol +0 -8
  418. package/contracts/registry/RegistryUpgradeable.sol +0 -416
  419. package/contracts/shared/IOwnable.sol +0 -6
  420. package/contracts/shared/Proxy.sol +0 -83
  421. package/contracts/shared/VersionableUpgradeable.sol +0 -108
  422. package/contracts/test/TestDistribution.sol +0 -21
  423. package/contracts/test/TestPool.sol +0 -25
  424. package/contracts/test/TestProduct.sol +0 -72
  425. package/contracts/types/ReferralId.sol +0 -48
@@ -3,507 +3,168 @@ pragma solidity ^0.8.19;
3
3
 
4
4
  import {IRegistry} from "../../registry/IRegistry.sol";
5
5
  import {IProductComponent} from "../../components/IProductComponent.sol";
6
+ import {Product} from "../../components/Product.sol";
7
+ import {IBaseComponent} from "../../components/IBaseComponent.sol";
6
8
  import {IPoolComponent} from "../../components/IPoolComponent.sol";
7
9
  import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
8
- import {IInstance} from "../../instance/IInstance.sol";
9
- import {IPolicy, IPolicyModule} from "../module/policy/IPolicy.sol";
10
- import {IPool} from "../module/pool/IPoolModule.sol";
11
- import {IRisk} from "../module/risk/IRisk.sol";
12
- import {IBundle} from "../module/bundle/IBundle.sol";
10
+ import {IInstance} from "../IInstance.sol";
11
+ import {IPolicy} from "../module/IPolicy.sol";
12
+ import {IRisk} from "../module/IRisk.sol";
13
+ import {IBundle} from "../module/IBundle.sol";
13
14
  import {IProductService} from "./IProductService.sol";
14
- import {ITreasury, ITreasuryModule, TokenHandler} from "../../instance/module/treasury/ITreasury.sol";
15
+ import {ITreasury} from "../module/ITreasury.sol";
16
+ import {ISetup} from "../module/ISetup.sol";
17
+
18
+ import {TokenHandler} from "../../shared/TokenHandler.sol";
15
19
 
16
20
  import {IVersionable} from "../../shared/IVersionable.sol";
17
21
  import {Versionable} from "../../shared/Versionable.sol";
18
22
 
19
23
  import {Timestamp, zeroTimestamp} from "../../types/Timestamp.sol";
20
- import {UFixed, UFixedMathLib} from "../../types/UFixed.sol";
24
+ import {UFixed, UFixedLib} from "../../types/UFixed.sol";
21
25
  import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
22
- import {ObjectType, INSTANCE, PRODUCT, POLICY} from "../../types/ObjectType.sol";
23
- import {APPLIED, UNDERWRITTEN, ACTIVE} from "../../types/StateId.sol";
24
- import {NftId, NftIdLib} from "../../types/NftId.sol";
26
+ import {ObjectType, PRODUCT, POOL, POLICY} from "../../types/ObjectType.sol";
27
+ import {APPLIED, UNDERWRITTEN, ACTIVE, KEEP_STATE} from "../../types/StateId.sol";
28
+ import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
25
29
  import {Fee, FeeLib} from "../../types/Fee.sol";
26
- import {ReferralId} from "../../types/ReferralId.sol";
30
+ import {ReferralId} from "../../types/Referral.sol";
27
31
  import {RiskId} from "../../types/RiskId.sol";
28
32
  import {StateId} from "../../types/StateId.sol";
29
33
  import {Version, VersionLib} from "../../types/Version.sol";
34
+ import {RoleId, PRODUCT_OWNER_ROLE} from "../../types/RoleId.sol";
30
35
 
36
+ import {IService} from "../../shared/IService.sol";
37
+ import {Service} from "../../shared/Service.sol";
31
38
  import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
32
39
  import {IProductService} from "./IProductService.sol";
40
+ import {InstanceReader} from "../InstanceReader.sol";
41
+ import {IPoolService} from "./PoolService.sol";
33
42
 
34
43
  // TODO or name this ProtectionService to have Product be something more generic (loan, savings account, ...)
35
44
  contract ProductService is ComponentServiceBase, IProductService {
36
45
  using NftIdLib for NftId;
37
46
 
38
- string public constant NAME = "ProductService";
47
+ IPoolService internal _poolService;
39
48
 
40
49
  event LogProductServiceSender(address sender);
41
50
 
42
- constructor(
43
- address registry,
44
- NftId registryNftId
45
- ) ComponentServiceBase(registry, registryNftId) // solhint-disable-next-line no-empty-blocks
46
- {
47
- _registerInterface(type(IProductService).interfaceId);
48
- }
49
-
50
- function getVersion()
51
- public
52
- pure
53
- virtual override (IVersionable, Versionable)
54
- returns(Version)
55
- {
56
- return VersionLib.toVersion(3,0,0);
57
- }
58
-
59
- function getName() external pure override returns(string memory name) {
60
- return NAME;
61
- }
62
-
63
- function setFees(
64
- Fee memory productFee,
65
- Fee memory processingFee
51
+ function _initialize(
52
+ address owner,
53
+ bytes memory data
66
54
  )
67
- external
68
- override
55
+ internal
56
+ initializer
57
+ virtual override
69
58
  {
70
- (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
71
- NftId productNftId = productInfo.nftId;
72
- ITreasury.TreasuryInfo memory treasuryInfo = instance.getTreasuryInfo(productNftId);
73
- treasuryInfo.productFee = productFee;
74
- treasuryInfo.processingFee = processingFee;
75
- instance.setTreasuryInfo(productNftId, treasuryInfo);
76
- }
59
+ address registryAddress;
60
+ address initialOwner;
61
+ (registryAddress, initialOwner) = abi.decode(data, (address, address));
77
62
 
78
- function createRisk(
79
- RiskId riskId,
80
- bytes memory data
81
- ) external override {
82
- (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
83
- NftId productNftId = productInfo.nftId;
84
- instance.createRisk(
85
- riskId,
86
- productNftId,
87
- data
88
- );
89
- }
63
+ _initializeService(registryAddress, owner);
90
64
 
91
- function setRiskInfo(
92
- RiskId riskId,
93
- IRisk.RiskInfo memory info
94
- ) external {
95
- (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
96
- instance.setRiskInfo(
97
- riskId,
98
- info
99
- );
100
- }
65
+ _poolService = IPoolService(_registry.getServiceAddress(POOL(), getMajorVersion()));
101
66
 
102
- function updateRiskState(
103
- RiskId riskId,
104
- StateId state
105
- ) external {
106
- (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
107
- instance.updateRiskState(
108
- riskId,
109
- state
110
- );
111
- }
112
-
113
- function _getAndVerifyInstanceAndProduct() internal view returns (IProductComponent product) {
114
- IRegistry.ObjectInfo memory productInfo;
115
- (productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
116
- product = IProductComponent(productInfo.objectAddress);
67
+ _registerInterface(type(IProductService).interfaceId);
117
68
  }
118
69
 
119
- function calculatePremium(
120
- RiskId riskId,
121
- uint256 sumInsuredAmount,
122
- uint256 lifetime,
123
- bytes memory applicationData,
124
- NftId bundleNftId,
125
- ReferralId referralId
126
- )
127
- public
128
- view
129
- override
130
- returns (
131
- uint256 premiumAmount,
132
- uint256 productFeeAmount,
133
- uint256 poolFeeAmount,
134
- uint256 bundleFeeAmount,
135
- uint256 distributionFeeAmount
136
- )
137
- {
138
- IProductComponent product = _getAndVerifyInstanceAndProduct();
139
- uint256 netPremiumAmount = product.calculateNetPremium(
140
- sumInsuredAmount,
141
- riskId,
142
- lifetime,
143
- applicationData
144
- );
145
70
 
146
- (
147
- productFeeAmount,
148
- poolFeeAmount,
149
- bundleFeeAmount,
150
- distributionFeeAmount
151
- ) = _calculateFeeAmounts(
152
- netPremiumAmount,
153
- product,
154
- bundleNftId,
155
- referralId
156
- );
157
-
158
- premiumAmount = netPremiumAmount + productFeeAmount;
159
- premiumAmount += poolFeeAmount + bundleFeeAmount;
160
- premiumAmount += distributionFeeAmount;
71
+ function getDomain() public pure override(IService, Service) returns(ObjectType) {
72
+ return PRODUCT();
161
73
  }
162
74
 
163
- function _calculateFeeAmounts(
164
- uint256 netPremiumAmount,
165
- IProductComponent product,
166
- NftId bundleNftId,
167
- ReferralId referralId
168
- )
169
- internal
170
- view
171
- returns (
172
- uint256 productFeeAmount,
173
- uint256 poolFeeAmount,
174
- uint256 bundleFeeAmount,
175
- uint256 distributionFeeAmount
176
- )
75
+ function register(address productAddress)
76
+ external
77
+ returns(NftId productNftId)
177
78
  {
178
- IInstance instance = product.getInstance();
179
- ITreasury.TreasuryInfo memory treasuryInfo = instance.getTreasuryInfo(product.getNftId());
180
- IBundle.BundleInfo memory bundleInfo = instance.getBundleInfo(bundleNftId);
181
- require(bundleInfo.poolNftId == treasuryInfo.poolNftId,"ERROR:PRS-035:BUNDLE_POOL_MISMATCH");
182
-
183
- (productFeeAmount,) = FeeLib.calculateFee(treasuryInfo.productFee, netPremiumAmount);
184
- (poolFeeAmount,) = FeeLib.calculateFee(treasuryInfo.poolFee, netPremiumAmount);
185
- (bundleFeeAmount,) = FeeLib.calculateFee(bundleInfo.fee, netPremiumAmount);
186
-
187
- IRegistry.ObjectInfo memory distributionInfo = _registry.getObjectInfo(treasuryInfo.distributionNftId);
188
- IDistributionComponent distribution = IDistributionComponent(distributionInfo.objectAddress);
189
- distributionFeeAmount = distribution.calculateFeeAmount(referralId, netPremiumAmount);
190
- }
191
-
79
+ address productOwner = msg.sender;
80
+ IBaseComponent product = IBaseComponent(productAddress);
192
81
 
193
- function createApplication(
194
- address applicationOwner,
195
- RiskId riskId,
196
- uint256 sumInsuredAmount,
197
- uint256 lifetime,
198
- bytes memory applicationData,
199
- NftId bundleNftId,
200
- ReferralId referralId
201
- ) external override returns (NftId policyNftId) {
202
- (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
203
- // TODO add validations (see create bundle in pool service)
82
+ IRegistry.ObjectInfo memory info;
83
+ bytes memory data;
84
+ (info, data) = getRegistryService().registerProduct(product, productOwner);
204
85
 
205
- policyNftId = this.getRegistry().registerObjectForInstance(
206
- productInfo.nftId,
207
- POLICY(),
208
- applicationOwner,
209
- ""
210
- );
86
+ IInstance instance = _getInstance(info.parentNftId);
87
+ bool hasRole = getInstanceService().hasRole(
88
+ productOwner,
89
+ PRODUCT_OWNER_ROLE(),
90
+ address(instance));
211
91
 
212
- (uint256 premiumAmount,,,,) = calculatePremium(
213
- riskId,
214
- sumInsuredAmount,
215
- lifetime,
216
- applicationData,
217
- bundleNftId,
218
- referralId
219
- );
92
+ if(!hasRole) {
93
+ revert ExpectedRoleMissing(PRODUCT_OWNER_ROLE(), productOwner);
94
+ }
220
95
 
221
- instance.createPolicyInfo(
222
- policyNftId,
223
- productInfo.nftId,
224
- referralId,
225
- riskId,
226
- sumInsuredAmount,
227
- premiumAmount,
228
- lifetime,
229
- bundleNftId
230
- );
96
+ productNftId = info.nftId;
97
+ ISetup.ProductSetupInfo memory initialSetup = _decodeAndVerifyProductSetup(data);
98
+ instance.createProductSetup(productNftId, initialSetup);
231
99
 
232
- // TODO add logging
100
+ getInstanceService().createTarget(_getInstanceNftId(info), productAddress, product.getName());
233
101
  }
234
102
 
235
- function _getAndVerifyUnderwritingSetup(
236
- IInstance instance,
237
- IPolicy.PolicyInfo memory policyInfo
238
- )
239
- internal
240
- view
241
- returns (
242
- ITreasury.TreasuryInfo memory treasuryInfo,
243
- NftId bundleNftId,
244
- IBundle.BundleInfo memory bundleInfo,
245
- uint256 collateralAmount
246
- )
103
+ function _decodeAndVerifyProductSetup(bytes memory data) internal returns(ISetup.ProductSetupInfo memory setup)
247
104
  {
248
- // check match between policy and bundle (via pool)
249
- treasuryInfo = instance.getTreasuryInfo(policyInfo.productNftId);
250
- bundleNftId = policyInfo.bundleNftId;
251
- bundleInfo = instance.getBundleInfo(bundleNftId);
252
- require(bundleInfo.poolNftId == treasuryInfo.poolNftId, "POLICY_BUNDLE_MISMATCH");
253
-
254
- // calculate required collateral
255
- NftId poolNftId = treasuryInfo.poolNftId;
256
- IPool.PoolInfo memory poolInfo = instance.getPoolInfo(poolNftId);
105
+ setup = abi.decode(
106
+ data,
107
+ (ISetup.ProductSetupInfo)
108
+ );
257
109
 
258
- // obtain remaining return values
259
- collateralAmount = calculateRequiredCollateral(poolInfo.collateralizationLevel, policyInfo.sumInsuredAmount);
110
+ // TODO add checks if applicable
260
111
  }
261
112
 
262
- function _lockCollateralInBundle(
263
- IInstance instance,
264
- NftId bundleNftId,
265
- IBundle.BundleInfo memory bundleInfo,
266
- NftId policyNftId,
267
- uint256 collateralAmount
268
- )
269
- internal
270
- returns (IBundle.BundleInfo memory)
271
- {
272
- bundleInfo.lockedAmount += collateralAmount;
273
- instance.collateralizePolicy(bundleNftId, policyNftId, collateralAmount);
274
- return bundleInfo;
275
- }
276
-
277
- function _underwriteByPool(
278
- ITreasury.TreasuryInfo memory treasuryInfo,
279
- NftId policyNftId,
280
- IPolicy.PolicyInfo memory policyInfo,
281
- bytes memory bundleFilter,
282
- uint256 collateralAmount
283
- )
284
- internal
285
- {
286
- address poolAddress = _registry.getObjectInfo(treasuryInfo.poolNftId).objectAddress;
287
- IPoolComponent pool = IPoolComponent(poolAddress);
288
- pool.underwrite(
289
- policyNftId,
290
- policyInfo.applicationData,
291
- bundleFilter,
292
- collateralAmount);
293
- }
294
-
295
-
296
- function revoke(
297
- NftId policyNftId
113
+ function setFees(
114
+ Fee memory productFee,
115
+ Fee memory processingFee
298
116
  )
299
117
  external
300
- override
301
118
  {
302
- require(false, "ERROR:PRS-234:NOT_YET_IMPLEMENTED");
303
- }
304
-
119
+ // TODO check args
305
120
 
306
- function underwrite(
307
- NftId policyNftId,
308
- bool requirePremiumPayment,
309
- Timestamp activateAt
310
- )
311
- external
312
- override
313
- {
314
- // check caller is registered product
315
121
  (
316
122
  IRegistry.ObjectInfo memory productInfo,
317
123
  IInstance instance
318
124
  ) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
319
125
 
320
- // check match between policy and calling product
126
+ InstanceReader instanceReader = instance.getInstanceReader();
321
127
  NftId productNftId = productInfo.nftId;
322
- IPolicy.PolicyInfo memory policyInfo = instance.getPolicyInfo(policyNftId);
323
- require(policyInfo.productNftId == productNftId, "POLICY_PRODUCT_MISMATCH");
324
- require(instance.getState(policyNftId.toKey32(POLICY())) == APPLIED(), "ERROR:PRS-021:STATE_NOT_APPLIED");
128
+ ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
325
129
 
326
- ITreasury.TreasuryInfo memory treasuryInfo;
327
- NftId bundleNftId;
328
- IBundle.BundleInfo memory bundleInfo;
329
- uint256 collateralAmount;
130
+ productSetupInfo.productFee = productFee;
131
+ productSetupInfo.processingFee = processingFee;
132
+
133
+ instance.updateProductSetup(productNftId, productSetupInfo, KEEP_STATE());
134
+ }
330
135
 
136
+ function createRisk(
137
+ RiskId riskId,
138
+ bytes memory data
139
+ ) external override {
331
140
  (
332
- treasuryInfo,
333
- bundleNftId,
334
- bundleInfo,
335
- collateralAmount
336
- ) = _getAndVerifyUnderwritingSetup(
337
- instance,
338
- policyInfo
141
+ IRegistry.ObjectInfo memory productInfo,
142
+ IInstance instance
143
+ ) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
144
+ NftId productNftId = productInfo.nftId;
145
+ IRisk.RiskInfo memory riskInfo = IRisk.RiskInfo(productNftId, data);
146
+ instance.createRisk(
147
+ riskId,
148
+ riskInfo
339
149
  );
340
-
341
- // lock bundle collateral
342
- bundleInfo = _lockCollateralInBundle(
343
- instance,
344
- bundleNftId,
345
- bundleInfo,
346
- policyNftId,
347
- collateralAmount);
348
-
349
- // set policy state to underwritten
350
- instance.updatePolicyState(policyNftId, UNDERWRITTEN());
351
-
352
- // optional activation of policy
353
- if(activateAt > zeroTimestamp()) {
354
- policyInfo.activatedAt = activateAt;
355
- policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
356
-
357
- instance.updatePolicyState(policyNftId, ACTIVE());
358
- }
359
-
360
- // optional collection of premium
361
- if(requirePremiumPayment) {
362
- uint256 netPremiumAmount = _processPremiumByTreasury(
363
- instance,
364
- productInfo.nftId,
365
- treasuryInfo,
366
- policyNftId,
367
- policyInfo.premiumAmount);
368
-
369
- policyInfo.premiumPaidAmount += policyInfo.premiumAmount;
370
- bundleInfo.balanceAmount += netPremiumAmount;
371
- }
372
-
373
- instance.setPolicyInfo(policyNftId, policyInfo);
374
- instance.setBundleInfo(bundleNftId, bundleInfo);
375
-
376
- // involve pool if necessary
377
- {
378
- NftId poolNftId = treasuryInfo.poolNftId;
379
- IPool.PoolInfo memory poolInfo = instance.getPoolInfo(poolNftId);
380
-
381
- if(poolInfo.isVerifying) {
382
- _underwriteByPool(
383
- treasuryInfo,
384
- policyNftId,
385
- policyInfo,
386
- bundleInfo.filter,
387
- collateralAmount
388
- );
389
- }
390
- }
391
-
392
- // TODO add logging
393
- }
394
-
395
- function calculateRequiredCollateral(UFixed collateralizationLevel, uint256 sumInsuredAmount) public pure override returns(uint256 collateralAmount) {
396
- UFixed sumInsuredUFixed = UFixedMathLib.toUFixed(sumInsuredAmount);
397
- UFixed collateralUFixed = collateralizationLevel * sumInsuredUFixed;
398
- return collateralUFixed.toInt();
399
- }
400
-
401
- function collectPremium(NftId policyNftId, Timestamp activateAt) external override {
402
- // check caller is registered product
403
- (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
404
-
405
- // perform actual token transfers
406
- IPolicy.PolicyInfo memory policyInfo = instance.getPolicyInfo(policyNftId);
407
- ITreasury.TreasuryInfo memory treasuryInfo = instance.getTreasuryInfo(productInfo.nftId);
408
-
409
- uint256 premiumAmount = policyInfo.premiumAmount;
410
- _processPremiumByTreasury(instance, productInfo.nftId, treasuryInfo, policyNftId, premiumAmount);
411
-
412
- // policy level book keeping for premium paid
413
- policyInfo.premiumPaidAmount += premiumAmount;
414
-
415
- // optional activation of policy
416
- if(activateAt > zeroTimestamp()) {
417
- require(
418
- policyInfo.activatedAt.eqz(),
419
- "ERROR:PRS-030:ALREADY_ACTIVATED");
420
-
421
- policyInfo.activatedAt = activateAt;
422
- policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
423
-
424
- instance.updatePolicyState(policyNftId, ACTIVE());
425
- }
426
-
427
- instance.setPolicyInfo(policyNftId, policyInfo);
428
-
429
- // TODO add logging
430
150
  }
431
151
 
432
- function activate(NftId policyNftId, Timestamp activateAt) external override {
433
- // check caller is registered product
152
+ function updateRisk(
153
+ RiskId riskId,
154
+ bytes memory data
155
+ ) external {
434
156
  (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
435
-
436
- IPolicy.PolicyInfo memory policyInfo = instance.getPolicyInfo(policyNftId);
437
-
438
- require(
439
- policyInfo.activatedAt.eqz(),
440
- "ERROR:PRS-020:ALREADY_ACTIVATED");
441
-
442
- policyInfo.activatedAt = activateAt;
443
- policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
444
-
445
- instance.setPolicyInfo(policyNftId, policyInfo);
446
- instance.updatePolicyState(policyNftId, ACTIVE());
447
-
448
- // TODO add logging
449
- }
450
-
451
- function close(
452
- NftId policyNftId
453
- ) external override // solhint-disable-next-line no-empty-blocks
454
- {
455
-
456
- }
457
-
458
- function _getPoolNftId(
459
- IInstance instance,
460
- NftId productNftId
461
- )
462
- internal
463
- view
464
- returns (NftId poolNftid)
465
- {
466
- return instance.getTreasuryInfo(productNftId).poolNftId;
157
+ InstanceReader instanceReader = instance.getInstanceReader();
158
+ IRisk.RiskInfo memory riskInfo = instanceReader.getRiskInfo(riskId);
159
+ riskInfo.data = data;
160
+ instance.updateRisk(riskId, riskInfo, KEEP_STATE());
467
161
  }
468
162
 
469
-
470
- function _processPremiumByTreasury(
471
- IInstance instance,
472
- NftId productNftId,
473
- ITreasury.TreasuryInfo memory treasuryInfo,
474
- NftId policyNftId,
475
- uint256 premiumAmount
476
- )
477
- internal
478
- returns (uint256 netPremiumAmount)
479
- {
480
- // process token transfer(s)
481
- if(premiumAmount > 0) {
482
- TokenHandler tokenHandler = instance.getTokenHandler(productNftId);
483
- address policyOwner = _registry.getOwner(policyNftId);
484
- address poolWallet = instance.getComponentWallet(treasuryInfo.poolNftId);
485
- netPremiumAmount = premiumAmount;
486
- Fee memory productFee = treasuryInfo.productFee;
487
-
488
- if (FeeLib.feeIsZero(productFee)) {
489
- tokenHandler.transfer(
490
- policyOwner,
491
- poolWallet,
492
- premiumAmount
493
- );
494
- } else {
495
- (uint256 feeAmount, uint256 netAmount) = instance.calculateFeeAmount(
496
- premiumAmount,
497
- productFee
498
- );
499
-
500
- address productWallet = instance.getComponentWallet(productNftId);
501
- tokenHandler.transfer(policyOwner, productWallet, feeAmount);
502
- tokenHandler.transfer(policyOwner, poolWallet, netAmount);
503
- netPremiumAmount = netAmount;
504
- }
505
- }
506
-
507
- // TODO add logging
163
+ function updateRiskState(
164
+ RiskId riskId,
165
+ StateId state
166
+ ) external {
167
+ (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
168
+ instance.updateRiskState(riskId, state);
508
169
  }
509
170
  }
@@ -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 {ProductService} from "./ProductService.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 ProductServiceManager is ProxyManager {
12
+
13
+ ProductService private _productService;
14
+
15
+ /// @dev initializes proxy manager with product service implementation
16
+ constructor(
17
+ address registryAddress
18
+ )
19
+ ProxyManager()
20
+ {
21
+ ProductService svc = new ProductService();
22
+ bytes memory data = abi.encode(registryAddress, address(this));
23
+ IVersionable versionable = deploy(
24
+ address(svc),
25
+ data);
26
+
27
+ _productService = ProductService(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 getProductService()
47
+ external
48
+ view
49
+ returns (ProductService productService)
50
+ {
51
+ return _productService;
52
+ }
53
+
54
+ }