@etherisc/gif-next 0.0.2-e1e92ab-754 → 0.0.2-e1f23dc-329

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