@etherisc/gif-next 0.0.2-fe34d97-357 → 0.0.2-fe88ad7-208

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 (410) hide show
  1. package/README.md +231 -27
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  3. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +331 -23
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +675 -0
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +246 -23
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +152 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +90 -171
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +55 -177
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +520 -133
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +540 -113
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +4 -0
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +66 -0
  20. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +4 -0
  21. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +24 -0
  22. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +4 -0
  23. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +42 -0
  24. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  36. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  39. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  40. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  41. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  42. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  43. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  44. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  45. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  46. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  47. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +788 -0
  48. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  49. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +185 -0
  50. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  51. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +946 -1214
  52. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  53. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +448 -0
  54. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  55. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +570 -0
  56. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  57. package/artifacts/contracts/instance/Instance.sol/Instance.json +1852 -1184
  58. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  59. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +1047 -0
  60. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  61. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +763 -0
  62. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  63. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1422 -0
  64. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  65. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +963 -0
  66. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  67. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +460 -0
  68. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +285 -0
  70. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
  71. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +280 -48
  72. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  73. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +33 -1
  74. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  75. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +27 -158
  76. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  77. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  78. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +37 -245
  79. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  80. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
  81. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  82. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +254 -0
  83. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  84. package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
  85. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  86. package/artifacts/contracts/instance/module/{access/IAccess.sol/IAccess.json → IDistribution.sol/IDistribution.json} +2 -2
  87. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  88. package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
  89. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  90. package/artifacts/contracts/instance/module/{risk/IRisk.sol → IRisk.sol}/IRisk.json +1 -1
  91. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  92. package/artifacts/contracts/instance/{base/ModuleBase.sol/ModuleBase.json → module/ISetup.sol/ISetup.json} +2 -2
  93. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  94. package/artifacts/contracts/instance/module/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
  95. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  96. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +945 -0
  97. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  98. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +432 -0
  99. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  100. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +380 -89
  101. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  102. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +693 -0
  103. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  104. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +420 -0
  105. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  106. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +669 -0
  107. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  108. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +185 -83
  109. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  110. package/artifacts/contracts/instance/{base/IService.sol/IService.json → service/IDistributionService.sol/IDistributionService.json} +206 -60
  111. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  112. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +664 -0
  113. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  114. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +200 -77
  115. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  116. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +184 -196
  117. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  118. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +993 -0
  119. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  120. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +464 -0
  121. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  122. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +345 -89
  123. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  124. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +420 -0
  125. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  126. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +300 -267
  127. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  128. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +420 -0
  129. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  130. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +186 -12
  131. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  132. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +376 -37
  133. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  134. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +976 -0
  135. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  136. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  137. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  138. package/artifacts/contracts/registry/Registry.sol/Registry.json +397 -115
  139. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  140. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  141. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  142. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1195 -0
  143. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  144. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +451 -0
  145. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  146. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +546 -0
  147. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  148. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +397 -0
  149. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  150. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  151. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  152. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  153. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  154. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +127 -0
  155. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  156. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +117 -37
  157. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  158. package/artifacts/contracts/{instance/base/InstanceBase.sol/InstanceBase.json → shared/IService.sol/IService.json} +172 -95
  159. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  160. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +55 -14
  161. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  162. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  163. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  164. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  165. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  166. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +190 -37
  167. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
  168. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +442 -0
  169. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  170. package/artifacts/contracts/{instance/base/ServiceBase.sol/ServiceBase.json → shared/Service.sol/Service.json} +224 -56
  171. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  172. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  173. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  174. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  175. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  176. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +78 -14
  177. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  178. package/artifacts/contracts/test/TestFee.sol/TestFee.json +4 -4
  179. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  180. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +204 -36
  181. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  182. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +14 -14
  183. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  184. package/artifacts/contracts/test/TestService.sol/TestService.json +289 -68
  185. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  186. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
  187. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  188. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  189. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  190. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +103 -23
  191. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  192. package/artifacts/contracts/test/Usdc.sol/USDC.json +91 -53
  193. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  194. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  195. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  196. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  197. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  198. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  199. package/artifacts/contracts/types/Fee.sol/FeeLib.json +52 -13
  200. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  201. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +31 -17
  202. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  203. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  204. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  205. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  206. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  207. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  208. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  209. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  210. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  211. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  212. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  213. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  214. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  215. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +134 -8
  216. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  217. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  218. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  219. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +15 -2
  220. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  221. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  222. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  223. package/artifacts/contracts/types/UFixed.sol/{UFixedMathLib.json → UFixedLib.json} +3 -3
  224. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  225. package/artifacts/contracts/types/Version.sol/VersionLib.json +40 -2
  226. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  227. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
  228. package/contracts/components/BaseComponent.sol +104 -39
  229. package/contracts/components/Distribution.sol +163 -0
  230. package/contracts/components/IBaseComponent.sol +18 -3
  231. package/contracts/components/IDistributionComponent.sol +44 -0
  232. package/contracts/components/IPoolComponent.sol +19 -10
  233. package/contracts/components/IProductComponent.sol +25 -9
  234. package/contracts/components/Pool.sol +126 -46
  235. package/contracts/components/Product.sol +172 -61
  236. package/contracts/experiment/cloning/Cloner.sol +47 -0
  237. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
  238. package/contracts/instance/BundleManager.sol +129 -0
  239. package/contracts/instance/Cloneable.sol +46 -0
  240. package/contracts/instance/IInstance.sol +55 -44
  241. package/contracts/instance/IInstanceBase.sol +26 -0
  242. package/contracts/instance/IInstanceService.sol +40 -0
  243. package/contracts/instance/Instance.sol +261 -56
  244. package/contracts/instance/InstanceAccessManager.sol +303 -0
  245. package/contracts/instance/InstanceBase.sol +41 -0
  246. package/contracts/instance/InstanceReader.sol +315 -0
  247. package/contracts/instance/InstanceService.sol +350 -0
  248. package/contracts/instance/InstanceServiceManager.sol +54 -0
  249. package/contracts/instance/ObjectManager.sol +101 -0
  250. package/contracts/instance/base/ComponentServiceBase.sol +57 -17
  251. package/contracts/instance/base/IInstanceBase.sol +6 -2
  252. package/contracts/instance/base/IKeyValueStore.sol +13 -14
  253. package/contracts/instance/base/ILifecycle.sol +3 -3
  254. package/contracts/instance/base/KeyValueStore.sol +49 -38
  255. package/contracts/instance/base/Lifecycle.sol +1 -1
  256. package/contracts/instance/module/IAccess.sol +48 -0
  257. package/contracts/instance/module/IBundle.sol +20 -0
  258. package/contracts/instance/module/IDistribution.sol +39 -0
  259. package/contracts/instance/module/IPolicy.sol +45 -0
  260. package/contracts/instance/module/IRisk.sol +11 -0
  261. package/contracts/instance/module/ISetup.sol +46 -0
  262. package/contracts/instance/module/ITreasury.sol +23 -0
  263. package/contracts/instance/service/BundleService.sol +260 -0
  264. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  265. package/contracts/instance/service/ComponentOwnerService.sol +238 -78
  266. package/contracts/instance/service/DistributionService.sol +113 -0
  267. package/contracts/instance/service/DistributionServiceManager.sol +51 -0
  268. package/contracts/instance/service/IBundleService.sol +45 -0
  269. package/contracts/instance/service/IComponentOwnerService.sol +1 -3
  270. package/contracts/instance/service/IDistributionService.sol +12 -0
  271. package/contracts/instance/service/IPolicyService.sol +87 -0
  272. package/contracts/instance/service/IPoolService.sol +8 -18
  273. package/contracts/instance/service/IProductService.sol +12 -50
  274. package/contracts/instance/service/PolicyService.sol +503 -0
  275. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  276. package/contracts/instance/service/PoolService.sol +87 -92
  277. package/contracts/instance/service/PoolServiceManager.sol +51 -0
  278. package/contracts/instance/service/ProductService.sol +103 -339
  279. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  280. package/contracts/registry/ChainNft.sol +79 -36
  281. package/contracts/registry/IRegistry.sol +58 -24
  282. package/contracts/registry/IRegistryService.sol +58 -0
  283. package/contracts/registry/ITransferInterceptor.sol +6 -0
  284. package/contracts/registry/Registry.sol +303 -288
  285. package/contracts/registry/RegistryAccessManager.sol +210 -0
  286. package/contracts/registry/RegistryService.sol +323 -0
  287. package/contracts/registry/RegistryServiceManager.sol +62 -0
  288. package/contracts/registry/ReleaseManager.sol +348 -0
  289. package/contracts/registry/TokenRegistry.sol +110 -0
  290. package/contracts/shared/ContractDeployerLib.sol +72 -0
  291. package/contracts/shared/ERC165.sol +6 -2
  292. package/contracts/shared/INftOwnable.sol +22 -0
  293. package/contracts/shared/IRegisterable.sol +8 -15
  294. package/contracts/shared/IService.sol +16 -0
  295. package/contracts/shared/IVersionable.sol +55 -11
  296. package/contracts/shared/NftOwnable.sol +134 -0
  297. package/contracts/shared/ProxyManager.sol +94 -0
  298. package/contracts/shared/Registerable.sol +63 -59
  299. package/contracts/shared/RegisterableUpgradable.sol +16 -0
  300. package/contracts/shared/Service.sol +58 -0
  301. package/contracts/shared/TokenHandler.sol +27 -0
  302. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  303. package/contracts/shared/Versionable.sol +113 -55
  304. package/contracts/test/TestFee.sol +2 -2
  305. package/contracts/test/TestRegisterable.sol +5 -6
  306. package/contracts/test/TestRoleId.sol +1 -1
  307. package/contracts/test/TestService.sol +7 -14
  308. package/contracts/types/DistributorType.sol +55 -0
  309. package/contracts/types/Fee.sol +10 -5
  310. package/contracts/types/Key32.sol +8 -3
  311. package/contracts/types/NftIdSet.sol +26 -24
  312. package/contracts/types/NumberId.sol +52 -0
  313. package/contracts/types/ObjectType.sol +32 -7
  314. package/contracts/types/Referral.sol +85 -0
  315. package/contracts/types/RoleId.sol +62 -10
  316. package/contracts/types/StateId.sol +5 -1
  317. package/contracts/types/Timestamp.sol +7 -3
  318. package/contracts/types/UFixed.sol +128 -12
  319. package/contracts/types/Version.sol +13 -1
  320. package/package.json +4 -3
  321. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
  322. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
  323. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
  324. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  325. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +0 -4
  326. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  327. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
  328. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
  329. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
  330. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  331. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
  332. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
  333. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -265
  334. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
  335. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
  336. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -265
  337. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.dbg.json +0 -4
  338. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.json +0 -10
  339. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.dbg.json +0 -4
  340. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.json +0 -10
  341. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.dbg.json +0 -4
  342. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.json +0 -10
  343. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  344. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +0 -136
  345. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
  346. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
  347. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  348. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +0 -136
  349. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  350. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  351. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -288
  352. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  353. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -288
  354. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  355. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.json +0 -10
  356. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  357. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -144
  358. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  359. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -144
  360. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
  361. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
  362. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -132
  363. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
  364. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -150
  365. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  366. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  367. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -531
  368. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  369. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
  370. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  371. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -531
  372. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  373. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -452
  374. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
  375. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
  376. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
  377. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
  378. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
  379. package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -455
  380. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
  381. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -479
  382. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  383. package/contracts/experiment/statemachine/README.md +0 -112
  384. package/contracts/instance/IInstanceLinked.sol +0 -8
  385. package/contracts/instance/base/IService.sol +0 -15
  386. package/contracts/instance/base/InstanceBase.sol +0 -84
  387. package/contracts/instance/base/ModuleBase.sol +0 -53
  388. package/contracts/instance/base/ServiceBase.sol +0 -37
  389. package/contracts/instance/module/access/Access.sol +0 -149
  390. package/contracts/instance/module/access/IAccess.sol +0 -53
  391. package/contracts/instance/module/bundle/BundleModule.sol +0 -135
  392. package/contracts/instance/module/bundle/IBundle.sol +0 -51
  393. package/contracts/instance/module/compensation/CompensationModule.sol +0 -17
  394. package/contracts/instance/module/compensation/ICompensation.sol +0 -10
  395. package/contracts/instance/module/component/ComponentModule.sol +0 -81
  396. package/contracts/instance/module/component/IComponent.sol +0 -29
  397. package/contracts/instance/module/policy/IPolicy.sol +0 -62
  398. package/contracts/instance/module/policy/PolicyModule.sol +0 -92
  399. package/contracts/instance/module/pool/IPoolModule.sol +0 -40
  400. package/contracts/instance/module/pool/PoolModule.sol +0 -90
  401. package/contracts/instance/module/risk/IRisk.sol +0 -27
  402. package/contracts/instance/module/risk/RiskModule.sol +0 -70
  403. package/contracts/instance/module/treasury/ITreasury.sol +0 -96
  404. package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
  405. package/contracts/instance/module/treasury/TreasuryModule.sol +0 -171
  406. package/contracts/registry/IChainNft.sol +0 -21
  407. package/contracts/registry/IRegistryLinked.sol +0 -8
  408. package/contracts/shared/IOwnable.sol +0 -6
  409. package/contracts/test/TestPool.sol +0 -24
  410. package/contracts/test/TestProduct.sol +0 -66
@@ -1,24 +1,35 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
4
  import {NftId} from "../types/NftId.sol";
5
5
  import {Fee} from "../types/Fee.sol";
6
6
  import {UFixed} from "../types/UFixed.sol";
7
- import {IBaseComponent} from "./IBaseComponent.sol";
8
7
 
9
- interface IPoolComponent is IBaseComponent {
8
+ interface IPoolComponent {
10
9
 
11
10
  event LogUnderwrittenByPool(NftId policyNftId, uint256 collateralizationAmount, address pool);
12
11
 
12
+ function setFees(
13
+ Fee memory poolFee,
14
+ Fee memory stakingFee,
15
+ Fee memory performanceFee
16
+ ) external;
17
+
13
18
  /**
14
19
  * @dev creates a new bundle for this pool.
15
20
  */
16
21
  function createBundle(
22
+ Fee memory fee,
17
23
  uint256 initialAmount,
18
24
  uint256 lifetime,
19
25
  bytes memory filter
20
26
  ) external returns(NftId bundleNftId);
21
27
 
28
+ function setBundleFee(
29
+ NftId policyNftId,
30
+ Fee memory fee
31
+ ) external;
32
+
22
33
  /**
23
34
  * @dev this is a callback function that is called by the product service when underwriting a policy.
24
35
  * the pool has the option to check the details and object to underwriting by reverting.
@@ -32,6 +43,10 @@ interface IPoolComponent is IBaseComponent {
32
43
  uint256 collateralizationAmount
33
44
  ) external;
34
45
 
46
+ function lockBundle(NftId bundleNftId) external;
47
+
48
+ function unlockBundle(NftId bundleNftId) external;
49
+
35
50
  /**
36
51
  * @dev returns true iff the policy application data in policyData matches
37
52
  * with the bundle filter criteria encoded in bundleFilter.
@@ -44,14 +59,8 @@ interface IPoolComponent is IBaseComponent {
44
59
  view
45
60
  returns (bool isMatching);
46
61
 
47
- function isVerifying() external view returns (bool verifying);
62
+ function isConfirmingApplication() external view returns (bool isConfirmingApplication);
48
63
 
49
64
  function getCollateralizationLevel() external view returns (UFixed collateralizationLevel);
50
65
 
51
- function getStakingFee() external view returns (Fee memory stakingFee);
52
-
53
- function getPerformanceFee()
54
- external
55
- view
56
- returns (Fee memory performanceFee);
57
66
  }
@@ -1,19 +1,35 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
- import {NftId} from "../types/NftId.sol";
5
4
  import {Fee} from "../types/Fee.sol";
6
- import {IBaseComponent} from "./IBaseComponent.sol";
5
+ import {NftId} from "../types/NftId.sol";
6
+ import {ReferralId} from "../types/Referral.sol";
7
+ import {RiskId} from "../types/RiskId.sol";
8
+
9
+ interface IProductComponent {
7
10
 
8
- interface IProductComponent is IBaseComponent {
9
11
  function setFees(
10
- Fee memory policyFee,
12
+ Fee memory productFee,
11
13
  Fee memory processingFee
12
14
  ) external;
13
15
 
14
- function getPoolNftId() external view returns (NftId poolNftId);
15
-
16
- function getPolicyFee() external view returns (Fee memory policyFee);
16
+ function calculatePremium(
17
+ uint256 sumInsuredAmount,
18
+ RiskId riskId,
19
+ uint256 lifetime,
20
+ bytes memory applicationData,
21
+ ReferralId referralId,
22
+ NftId bundleNftId
23
+ ) external view returns (uint256 premiumAmount);
24
+
25
+ function calculateNetPremium(
26
+ uint256 sumInsuredAmount,
27
+ RiskId riskId,
28
+ uint256 lifetime,
29
+ bytes memory applicationData
30
+ ) external view returns (uint256 netPremiumAmount);
17
31
 
18
- function getProcessingFee() external view returns (Fee memory processingFee);
32
+
33
+ function getPoolNftId() external view returns (NftId poolNftId);
34
+ function getDistributionNftId() external view returns (NftId distributionNftId);
19
35
  }
@@ -1,29 +1,48 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
4
  import {ObjectType, POOL} from "../types/ObjectType.sol";
5
5
  import {IProductService} from "../instance/service/IProductService.sol";
6
6
  import {IPoolService} from "../instance/service/IPoolService.sol";
7
- import {NftId} from "../types/NftId.sol";
7
+ import {IBundleService} from "../instance/service/IBundleService.sol";
8
+ import {NftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
8
9
  import {Fee} from "../types/Fee.sol";
9
10
  import {UFixed} from "../types/UFixed.sol";
10
11
  import {IPoolComponent} from "./IPoolComponent.sol";
11
12
  import {BaseComponent} from "./BaseComponent.sol";
13
+ import {TokenHandler} from "../shared/TokenHandler.sol";
14
+ import {ISetup} from "../instance/module/ISetup.sol";
12
15
 
13
- contract Pool is BaseComponent, IPoolComponent {
16
+ import {IRegistry} from "../registry/IRegistry.sol";
14
17
 
15
- bool internal _isVerifying;
18
+ // import {IPool} from "../instance/module/pool/IPoolModule.sol";
19
+ import {ITreasury} from "../instance/module/ITreasury.sol";
20
+ import {ISetup} from "../instance/module/ISetup.sol";
21
+ import {InstanceReader} from "../instance/InstanceReader.sol";
22
+
23
+ import {IRegisterable} from "../shared/IRegisterable.sol";
24
+ import {Registerable} from "../shared/Registerable.sol";
25
+
26
+ abstract contract Pool is BaseComponent, IPoolComponent {
27
+ using NftIdLib for NftId;
28
+
29
+ bool internal _isConfirmingApplication;
16
30
  UFixed internal _collateralizationLevel;
17
31
 
32
+ Fee internal _initialPoolFee;
18
33
  Fee internal _initialStakingFee;
19
34
  Fee internal _initialPerformanceFee;
20
35
 
36
+ TokenHandler internal _tokenHandler;
37
+
21
38
  // may be used to interact with instance by derived contracts
22
39
  IPoolService internal _poolService;
23
40
 
24
41
  // only relevant to protect callback functions for "active" pools
25
42
  IProductService private _productService;
26
43
 
44
+ IBundleService private _bundleService;
45
+
27
46
  modifier onlyPoolService() {
28
47
  require(
29
48
  msg.sender == address(_poolService),
@@ -43,24 +62,34 @@ contract Pool is BaseComponent, IPoolComponent {
43
62
  NftId instanceNftId,
44
63
  // TODO refactor into tokenNftId
45
64
  address token,
46
- bool verifying,
65
+ bool isInterceptor,
66
+ bool isConfirmingApplication,
47
67
  UFixed collateralizationLevel,
68
+ Fee memory poolFee,
48
69
  Fee memory stakingFee,
49
- Fee memory performanceFee
70
+ Fee memory performanceFee,
71
+ address initialOwner
50
72
  )
51
- BaseComponent(registry, instanceNftId, token)
73
+ BaseComponent(registry, instanceNftId, token, POOL(), isInterceptor, initialOwner)
52
74
  {
53
- _isVerifying = verifying;
75
+ _isConfirmingApplication = isConfirmingApplication;
54
76
  // TODO add validation
55
77
  _collateralizationLevel = collateralizationLevel;
78
+ _initialPoolFee = poolFee;
56
79
  _initialStakingFee = stakingFee;
57
80
  _initialPerformanceFee = performanceFee;
58
81
 
82
+ _tokenHandler = new TokenHandler(token);
83
+
59
84
  _poolService = _instance.getPoolService();
60
85
  _productService = _instance.getProductService();
86
+ _bundleService = _instance.getBundleService();
87
+
88
+ _registerInterface(type(IPoolComponent).interfaceId);
61
89
  }
62
90
 
63
91
  function createBundle(
92
+ Fee memory fee,
64
93
  uint256 initialAmount,
65
94
  uint256 lifetime,
66
95
  bytes memory filter
@@ -70,8 +99,9 @@ contract Pool is BaseComponent, IPoolComponent {
70
99
  returns(NftId bundleNftId)
71
100
  {
72
101
  address owner = msg.sender;
73
- bundleNftId = _poolService.createBundle(
102
+ bundleNftId = _bundleService.createBundle(
74
103
  owner,
104
+ fee,
75
105
  initialAmount,
76
106
  lifetime,
77
107
  filter
@@ -114,14 +144,96 @@ contract Pool is BaseComponent, IPoolComponent {
114
144
  }
115
145
 
116
146
 
117
- function isVerifying() external view override returns (bool verifying) {
118
- return _isVerifying;
147
+ function isConfirmingApplication() external view override returns (bool isConfirmingApplication) {
148
+ return _isConfirmingApplication;
119
149
  }
120
150
 
121
151
  function getCollateralizationLevel() external view override returns (UFixed collateralizationLevel) {
122
152
  return _collateralizationLevel;
123
153
  }
124
154
 
155
+ function setFees(
156
+ Fee memory poolFee,
157
+ Fee memory stakingFee,
158
+ Fee memory performanceFee
159
+ )
160
+ external
161
+ onlyOwner
162
+ override
163
+ {
164
+ _poolService.setFees(poolFee, stakingFee, performanceFee);
165
+ }
166
+
167
+ function setBundleFee(
168
+ NftId bundleNftId,
169
+ Fee memory fee
170
+ )
171
+ external
172
+ override
173
+ // TODO add onlyBundleOwner
174
+ {
175
+ _bundleService.setBundleFee(bundleNftId, fee);
176
+ }
177
+
178
+ function lockBundle(
179
+ NftId bundleNftId
180
+ )
181
+ external
182
+ override
183
+ // TODO add onlyBundleOwner
184
+ {
185
+ _bundleService.lockBundle(bundleNftId);
186
+ }
187
+
188
+ function unlockBundle(
189
+ NftId bundleNftId
190
+ )
191
+ external
192
+ override
193
+ // TODO add onlyBundleOwner
194
+ {
195
+ _bundleService.unlockBundle(bundleNftId);
196
+ }
197
+
198
+ function getSetupInfo() public view returns (ISetup.PoolSetupInfo memory setupInfo) {
199
+ InstanceReader reader = _instance.getInstanceReader();
200
+ return reader.getPoolSetupInfo(getNftId());
201
+ }
202
+
203
+ // from IRegisterable
204
+
205
+ // TODO used only once, occupies space
206
+ // TODO do not use super
207
+ function getInitialInfo()
208
+ public
209
+ view
210
+ override (IRegisterable, Registerable)
211
+ returns (IRegistry.ObjectInfo memory, bytes memory)
212
+ {
213
+ (
214
+ IRegistry.ObjectInfo memory info,
215
+ ) = super.getInitialInfo();
216
+
217
+ return (
218
+ info,
219
+ abi.encode(
220
+ ISetup.PoolSetupInfo(
221
+ _productNftId,
222
+ _tokenHandler,
223
+ _collateralizationLevel,
224
+ _initialPoolFee,
225
+ _initialStakingFee,
226
+ _initialPerformanceFee,
227
+ false,
228
+ _isConfirmingApplication,
229
+ _wallet
230
+ )
231
+ )
232
+ );
233
+ }
234
+
235
+ // Internals
236
+
125
237
  function _underwrite(
126
238
  NftId policyNftId,
127
239
  bytes memory policyData,
@@ -140,6 +252,7 @@ contract Pool is BaseComponent, IPoolComponent {
140
252
 
141
253
  function _createBundle(
142
254
  address bundleOwner,
255
+ Fee memory fee,
143
256
  uint256 amount,
144
257
  uint256 lifetime,
145
258
  bytes calldata filter
@@ -147,45 +260,12 @@ contract Pool is BaseComponent, IPoolComponent {
147
260
  internal
148
261
  returns(NftId bundleNftId)
149
262
  {
150
- bundleNftId = _poolService.createBundle(
263
+ bundleNftId = _bundleService.createBundle(
151
264
  bundleOwner,
265
+ fee,
152
266
  amount,
153
267
  lifetime,
154
268
  filter
155
269
  );
156
270
  }
157
-
158
- // from pool component
159
- function getStakingFee()
160
- external
161
- view
162
- override
163
- returns (Fee memory stakingFee)
164
- {
165
- NftId productNftId = _instance.getProductNftId(getNftId());
166
- if (productNftId.gtz()) {
167
- return _instance.getTreasuryInfo(productNftId).stakingFee;
168
- } else {
169
- return _initialStakingFee;
170
- }
171
- }
172
-
173
- function getPerformanceFee()
174
- external
175
- view
176
- override
177
- returns (Fee memory performanceFee)
178
- {
179
- NftId productNftId = _instance.getProductNftId(getNftId());
180
- if (productNftId.gtz()) {
181
- return _instance.getTreasuryInfo(productNftId).performanceFee;
182
- } else {
183
- return _initialPerformanceFee;
184
- }
185
- }
186
-
187
- // from registerable
188
- function getType() public pure override returns (ObjectType) {
189
- return POOL();
190
- }
191
271
  }
@@ -1,37 +1,113 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
- import {IRisk} from "../instance/module/risk/IRisk.sol";
5
- import {ITreasury} from "../instance/module/treasury/ITreasury.sol";
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+
6
+ import {IRisk} from "../instance/module/IRisk.sol";
7
+ import {ITreasury} from "../instance/module/ITreasury.sol";
6
8
  import {IProductService} from "../instance/service/IProductService.sol";
9
+ import {IPolicyService} from "../instance/service/IPolicyService.sol";
7
10
  import {IProductComponent} from "./IProductComponent.sol";
8
- import {NftId} from "../types/NftId.sol";
11
+ import {NftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
9
12
  import {ObjectType, PRODUCT} from "../types/ObjectType.sol";
13
+ import {ReferralId} from "../types/Referral.sol";
10
14
  import {RiskId, RiskIdLib} from "../types/RiskId.sol";
11
15
  import {StateId} from "../types/StateId.sol";
12
16
  import {Timestamp} from "../types/Timestamp.sol";
13
- import {Fee} from "../types/Fee.sol";
17
+ import {Fee, FeeLib} from "../types/Fee.sol";
14
18
  import {BaseComponent} from "./BaseComponent.sol";
15
19
 
16
- contract Product is BaseComponent, IProductComponent {
20
+ import {IRegistry} from "../registry/IRegistry.sol";
21
+ import {IRegisterable} from "../shared/IRegisterable.sol";
22
+ import {Registerable} from "../shared/Registerable.sol";
23
+ import {TokenHandler} from "../shared/TokenHandler.sol";
24
+
25
+ import {InstanceReader} from "../instance/InstanceReader.sol";
26
+ import {ISetup} from "../instance/module/ISetup.sol";
27
+ import {Pool} from "../components/Pool.sol";
28
+ import {Distribution} from "../components/Distribution.sol";
29
+
30
+ import {zeroNftId} from "../types/NftId.sol";
31
+
32
+ abstract contract Product is BaseComponent, IProductComponent {
33
+ using NftIdLib for NftId;
34
+
17
35
  IProductService internal _productService;
18
- address internal _pool;
19
- Fee internal _initialPolicyFee;
36
+ IPolicyService internal _policyService;
37
+ Pool internal _pool;
38
+ Distribution internal _distribution;
39
+ Fee internal _initialProductFee;
20
40
  Fee internal _initialProcessingFee;
41
+ TokenHandler internal _tokenHandler;
42
+
43
+ NftId internal _poolNftId;
44
+ NftId internal _distributionNftId;
21
45
 
22
46
  constructor(
23
47
  address registry,
24
48
  NftId instanceNftid,
25
49
  address token,
50
+ bool isInterceptor,
26
51
  address pool,
27
- Fee memory policyFee,
28
- Fee memory processingFee
29
- ) BaseComponent(registry, instanceNftid, token) {
52
+ address distribution,
53
+ Fee memory productFee,
54
+ Fee memory processingFee,
55
+ address initialOwner
56
+ ) BaseComponent(registry, instanceNftid, token, PRODUCT(), isInterceptor, initialOwner) {
30
57
  // TODO add validation
31
58
  _productService = _instance.getProductService();
32
- _pool = pool;
33
- _initialPolicyFee = policyFee;
34
- _initialProcessingFee = processingFee;
59
+ _policyService = _instance.getPolicyService();
60
+ _pool = Pool(pool);
61
+ _distribution = Distribution(distribution);
62
+ _initialProductFee = productFee;
63
+ _initialProcessingFee = processingFee;
64
+
65
+ _tokenHandler = new TokenHandler(token);
66
+
67
+ _poolNftId = getRegistry().getNftId(address(_pool));
68
+ _distributionNftId = getRegistry().getNftId(address(_distribution));
69
+
70
+ _registerInterface(type(IProductComponent).interfaceId);
71
+ }
72
+
73
+
74
+ function calculatePremium(
75
+ uint256 sumInsuredAmount,
76
+ RiskId riskId,
77
+ uint256 lifetime,
78
+ bytes memory applicationData,
79
+ ReferralId referralId,
80
+ NftId bundleNftId
81
+ )
82
+ external
83
+ view
84
+ override
85
+ returns (uint256 premiumAmount)
86
+ {
87
+ (premiumAmount,,,,) = _policyService.calculatePremium(
88
+ riskId,
89
+ sumInsuredAmount,
90
+ lifetime,
91
+ applicationData,
92
+ bundleNftId,
93
+ referralId
94
+ );
95
+ }
96
+
97
+
98
+ function calculateNetPremium(
99
+ uint256 sumInsuredAmount,
100
+ RiskId riskId,
101
+ uint256 lifetime,
102
+ bytes memory applicationData
103
+ )
104
+ external
105
+ view
106
+ virtual override
107
+ returns (uint256 netPremiumAmount)
108
+ {
109
+ // default 10% of sum insured
110
+ return sumInsuredAmount / 10;
35
111
  }
36
112
 
37
113
  function _toRiskId(string memory riskName) internal pure returns (RiskId riskId) {
@@ -48,13 +124,13 @@ contract Product is BaseComponent, IProductComponent {
48
124
  );
49
125
  }
50
126
 
51
- function _setRiskInfo(
127
+ function _updateRisk(
52
128
  RiskId id,
53
- IRisk.RiskInfo memory info
129
+ bytes memory data
54
130
  ) internal {
55
- _productService.setRiskInfo(
131
+ _productService.updateRisk(
56
132
  id,
57
- info
133
+ data
58
134
  );
59
135
  }
60
136
 
@@ -69,28 +145,26 @@ contract Product is BaseComponent, IProductComponent {
69
145
  }
70
146
 
71
147
  function _getRiskInfo(RiskId id) internal view returns (IRisk.RiskInfo memory info) {
72
- return _instance.getRiskInfo(id);
73
- }
74
-
75
- function _getRiskState(RiskId id) internal view returns (StateId state) {
76
- return _instance.getRiskState(id);
148
+ return _instance.getInstanceReader().getRiskInfo(id);
77
149
  }
78
150
 
79
151
  function _createApplication(
80
152
  address applicationOwner,
81
153
  RiskId riskId,
82
154
  uint256 sumInsuredAmount,
83
- uint256 premiumAmount,
84
155
  uint256 lifetime,
85
- NftId bundleNftId
156
+ bytes memory applicationData,
157
+ NftId bundleNftId,
158
+ ReferralId referralId
86
159
  ) internal returns (NftId nftId) {
87
- nftId = _productService.createApplication(
160
+ nftId = _policyService.createApplication(
88
161
  applicationOwner,
89
162
  riskId,
90
163
  sumInsuredAmount,
91
- premiumAmount,
92
164
  lifetime,
93
- bundleNftId
165
+ applicationData,
166
+ bundleNftId,
167
+ referralId
94
168
  );
95
169
  }
96
170
 
@@ -101,7 +175,7 @@ contract Product is BaseComponent, IProductComponent {
101
175
  )
102
176
  internal
103
177
  {
104
- _productService.underwrite(
178
+ _policyService.underwrite(
105
179
  policyNftId,
106
180
  requirePremiumPayment,
107
181
  activateAt);
@@ -113,7 +187,7 @@ contract Product is BaseComponent, IProductComponent {
113
187
  )
114
188
  internal
115
189
  {
116
- _productService.collectPremium(
190
+ _policyService.collectPremium(
117
191
  policyNftId,
118
192
  activateAt);
119
193
  }
@@ -124,58 +198,95 @@ contract Product is BaseComponent, IProductComponent {
124
198
  )
125
199
  internal
126
200
  {
127
- _productService.activate(
201
+ _policyService.activate(
128
202
  policyNftId,
129
203
  activateAt);
130
204
  }
131
205
 
132
206
  function getPoolNftId() external view override returns (NftId poolNftId) {
133
- return _registry.getNftId(_pool);
207
+ return getRegistry().getNftId(address(_pool));
208
+ }
209
+
210
+ function getDistributionNftId() external view override returns (NftId distributionNftId) {
211
+ return getRegistry().getNftId(address(_distribution));
134
212
  }
135
213
 
136
214
  // from product component
137
215
  function setFees(
138
- Fee memory policyFee,
216
+ Fee memory productFee,
139
217
  Fee memory processingFee
140
218
  )
141
219
  external
142
220
  onlyOwner
143
221
  override
144
222
  {
145
- _productService.setFees(policyFee, processingFee);
223
+ _productService.setFees(productFee, processingFee);
146
224
  }
147
225
 
148
-
149
- function getPolicyFee()
150
- external
151
- view
152
- override
153
- returns (Fee memory policyFee)
154
- {
155
- NftId productNftId = getNftId();
156
- if (address(_instance.getTokenHandler(productNftId)) != address(0)) {
157
- return _instance.getTreasuryInfo(productNftId).policyFee;
158
- } else {
159
- return _initialPolicyFee;
160
- }
226
+ function getSetupInfo() public view returns (ISetup.ProductSetupInfo memory setupInfo) {
227
+ InstanceReader reader = _instance.getInstanceReader();
228
+ return reader.getProductSetupInfo(getNftId());
161
229
  }
162
230
 
163
- function getProcessingFee()
164
- external
165
- view
166
- override
167
- returns (Fee memory processingFee)
231
+ // from IRegisterable
232
+
233
+ function getInitialInfo()
234
+ public
235
+ view
236
+ override (IRegisterable, Registerable)
237
+ returns (IRegistry.ObjectInfo memory, bytes memory)
168
238
  {
169
- NftId productNftId = getNftId();
170
- if (address(_instance.getTokenHandler(productNftId)) != address(0)) {
171
- return _instance.getTreasuryInfo(productNftId).processingFee;
172
- } else {
173
- return _initialProcessingFee;
174
- }
175
- }
239
+ // from Registerable
240
+ (
241
+ IRegistry.ObjectInfo memory productInfo,
242
+ bytes memory data
243
+ ) = super.getInitialInfo();
244
+
245
+ // TODO read pool & distribution fees
246
+ // 1) from pool -> the only option -> pool must be registered first?
247
+ // 2) from instance -> all fees are set into instance at product registration which is ongoing here
248
+ // checks are done in registryProduct() where THIS function is called
249
+ //require(getRegistry().getObjectInfo(_poolNftId).objectType == POOL(), "POOL_NOT_REGISTERED");
250
+ //require(getRegistry().getObjectInfo(_distributionNftId).objectType == DISTRIBUTION(), "DISTRIBUTION_NOT_REGISTERED");
251
+
252
+ // from PoolComponent
253
+ (
254
+ ,
255
+ bytes memory poolData
256
+ ) = _pool.getInitialInfo();
257
+
258
+ (
259
+ ISetup.PoolSetupInfo memory poolSetupInfo
260
+ ) = abi.decode(poolData, (ISetup.PoolSetupInfo));
176
261
 
177
- // from registerable
178
- function getType() public pure override returns (ObjectType) {
179
- return PRODUCT();
262
+ // from DistributionComponent
263
+ (
264
+ ,
265
+ bytes memory distributionData
266
+ ) = _distribution.getInitialInfo();
267
+
268
+ (
269
+ ISetup.DistributionSetupInfo memory distributionSetupInfo
270
+ ) = abi.decode(distributionData, (ISetup.DistributionSetupInfo));
271
+
272
+ return (
273
+ productInfo,
274
+ abi.encode(
275
+ ISetup.ProductSetupInfo(
276
+ _token,
277
+ _tokenHandler,
278
+ _distributionNftId,
279
+ _poolNftId,
280
+ distributionSetupInfo.distributionFee,
281
+ _initialProductFee,
282
+ _initialProcessingFee,
283
+ poolSetupInfo.poolFee,
284
+ poolSetupInfo.stakingFee,
285
+ poolSetupInfo.performanceFee,
286
+ false,
287
+ _wallet
288
+ )
289
+ )
290
+ );
180
291
  }
181
292
  }