@etherisc/gif-next 0.0.2-a196164-289 → 0.0.2-a25e4b8-781

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