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

Sign up to get free protection for your applications and to get access to all the features.
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
  }