@etherisc/gif-next 0.0.2-e37834a-021 → 0.0.2-e38b7e6-931

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