@etherisc/gif-next 0.0.2-6f2f76e-746 → 0.0.2-6f943ea-736

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