@etherisc/gif-next 0.0.2-299fe4a-464 → 0.0.2-2a0a7d0-893

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