@etherisc/gif-next 0.0.2-8d47fa1-080 → 0.0.2-90f8ffc-398

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 (407) hide show
  1. package/README.md +171 -2
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +656 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +479 -75
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/components/IComponent.sol/IComponent.json +455 -0
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +338 -33
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +372 -103
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +420 -45
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +507 -165
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +554 -107
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +4 -0
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +66 -0
  20. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +4 -0
  21. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +24 -0
  22. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +4 -0
  23. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +42 -0
  24. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  36. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  39. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  40. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  41. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  42. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  43. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  44. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  45. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +764 -0
  46. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  47. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +185 -0
  48. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  49. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +997 -1189
  50. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  51. package/artifacts/contracts/instance/{base/ServiceBase.sol/ServiceBase.json → IInstanceService.sol/IInstanceService.json} +247 -41
  52. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  53. package/artifacts/contracts/instance/Instance.sol/Instance.json +1783 -1303
  54. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  55. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +1034 -0
  56. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  57. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1381 -0
  58. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  59. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +1039 -0
  60. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  61. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +473 -0
  62. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  63. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +261 -0
  64. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  65. package/artifacts/contracts/instance/base/{ComponentServiceBase.sol/ComponentServiceBase.json → ComponentService.sol/ComponentService.json} +228 -18
  66. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  67. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +27 -158
  68. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  69. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  70. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +37 -245
  71. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  72. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
  73. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  74. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +254 -0
  75. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  76. package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
  77. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  78. package/artifacts/contracts/instance/module/{distribution/IDistribution.sol → IDistribution.sol}/IDistribution.json +1 -1
  79. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  80. package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
  81. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  82. package/artifacts/contracts/instance/module/{risk/IRisk.sol → IRisk.sol}/IRisk.json +1 -1
  83. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  84. package/artifacts/contracts/instance/{base/ModuleBase.sol/ModuleBase.json → module/ISetup.sol/ISetup.json} +2 -2
  85. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  86. package/artifacts/contracts/instance/module/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
  87. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  88. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1102 -0
  89. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  90. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +449 -0
  91. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  92. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +290 -44
  93. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  94. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +437 -0
  95. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  96. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +715 -0
  97. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  98. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +93 -21
  99. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  100. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +766 -0
  101. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  102. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +95 -85
  103. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  104. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +89 -232
  105. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  106. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1227 -0
  107. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  108. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +505 -0
  109. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  110. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +273 -116
  111. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  112. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +437 -0
  113. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  114. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +247 -355
  115. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  116. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +437 -0
  117. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  118. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +47 -2
  119. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  120. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +221 -68
  121. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  122. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +365 -52
  123. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  124. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  125. package/artifacts/contracts/registry/Registry.sol/Registry.json +200 -209
  126. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  127. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  128. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  129. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +423 -84
  130. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  131. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +464 -0
  132. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  133. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
  134. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  135. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +394 -0
  136. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  137. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  138. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  139. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  140. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  141. package/artifacts/contracts/{instance/module/component/IComponent.sol/IComponentModule.json → shared/INftOwnable.sol/INftOwnable.json} +67 -57
  142. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  143. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +80 -8
  144. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  145. package/artifacts/contracts/{instance/service/IComponentOwnerService.sol/IComponentOwnerService.json → shared/IService.sol/IService.json} +90 -63
  146. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  147. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  148. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +171 -0
  149. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  150. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +132 -80
  151. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  152. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +133 -11
  153. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  154. package/artifacts/contracts/{instance/base/InstanceBase.sol/InstanceBase.json → shared/Service.sol/Service.json} +113 -93
  155. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  156. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  157. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  158. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  159. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  160. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  161. package/artifacts/contracts/test/TestFee.sol/TestFee.json +4 -4
  162. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  163. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +133 -11
  164. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  165. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +14 -14
  166. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  167. package/artifacts/contracts/test/TestService.sol/TestService.json +168 -32
  168. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  169. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
  170. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  171. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  172. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  173. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +18 -2
  174. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  175. package/artifacts/contracts/test/Usdc.sol/USDC.json +91 -53
  176. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  177. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  178. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  179. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  180. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  181. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  182. package/artifacts/contracts/types/Fee.sol/FeeLib.json +4 -4
  183. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  184. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +31 -17
  185. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  187. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  188. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  189. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  190. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  191. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  192. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  193. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  194. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  195. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  196. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  197. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  198. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +134 -8
  199. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  200. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  201. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  202. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +15 -2
  203. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  204. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  205. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  206. package/artifacts/contracts/types/UFixed.sol/{UFixedMathLib.json → UFixedLib.json} +3 -3
  207. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  208. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  209. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  210. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
  211. package/contracts/components/Component.sol +216 -0
  212. package/contracts/components/Distribution.sol +51 -53
  213. package/contracts/components/IComponent.sol +43 -0
  214. package/contracts/components/IDistributionComponent.sol +6 -6
  215. package/contracts/components/IPoolComponent.sol +7 -16
  216. package/contracts/components/IProductComponent.sol +8 -8
  217. package/contracts/components/Pool.sol +67 -98
  218. package/contracts/components/Product.sol +87 -120
  219. package/contracts/experiment/cloning/Cloner.sol +47 -0
  220. package/contracts/instance/BundleManager.sol +125 -0
  221. package/contracts/instance/Cloneable.sol +46 -0
  222. package/contracts/instance/IInstance.sol +64 -46
  223. package/contracts/instance/IInstanceService.sol +41 -0
  224. package/contracts/instance/Instance.sol +251 -67
  225. package/contracts/instance/InstanceAccessManager.sol +298 -0
  226. package/contracts/instance/InstanceReader.sol +293 -0
  227. package/contracts/instance/InstanceService.sol +435 -0
  228. package/contracts/instance/InstanceServiceManager.sol +54 -0
  229. package/contracts/instance/ObjectManager.sol +84 -0
  230. package/contracts/instance/base/ComponentService.sol +134 -0
  231. package/contracts/instance/base/IKeyValueStore.sol +13 -14
  232. package/contracts/instance/base/ILifecycle.sol +3 -3
  233. package/contracts/instance/base/KeyValueStore.sol +49 -38
  234. package/contracts/instance/base/Lifecycle.sol +1 -1
  235. package/contracts/instance/module/IAccess.sol +48 -0
  236. package/contracts/instance/module/IBundle.sol +20 -0
  237. package/contracts/instance/module/IDistribution.sol +39 -0
  238. package/contracts/instance/module/IPolicy.sol +45 -0
  239. package/contracts/instance/module/IRisk.sol +11 -0
  240. package/contracts/instance/module/ISetup.sol +46 -0
  241. package/contracts/instance/module/ITreasury.sol +23 -0
  242. package/contracts/instance/service/BundleService.sol +293 -0
  243. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  244. package/contracts/instance/service/DistributionService.sol +72 -20
  245. package/contracts/instance/service/DistributionServiceManager.sol +51 -0
  246. package/contracts/instance/service/IBundleService.sol +44 -0
  247. package/contracts/instance/service/IDistributionService.sol +1 -1
  248. package/contracts/instance/service/IPolicyService.sol +94 -0
  249. package/contracts/instance/service/IPoolService.sol +7 -24
  250. package/contracts/instance/service/IProductService.sol +9 -76
  251. package/contracts/instance/service/PolicyService.sol +538 -0
  252. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  253. package/contracts/instance/service/PoolService.sol +77 -116
  254. package/contracts/instance/service/PoolServiceManager.sol +51 -0
  255. package/contracts/instance/service/ProductService.sol +157 -433
  256. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  257. package/contracts/registry/ChainNft.sol +41 -26
  258. package/contracts/registry/IRegistry.sol +54 -31
  259. package/contracts/registry/IRegistryService.sol +52 -16
  260. package/contracts/registry/Registry.sol +264 -317
  261. package/contracts/registry/RegistryAccessManager.sol +216 -0
  262. package/contracts/registry/RegistryService.sol +139 -260
  263. package/contracts/registry/RegistryServiceManager.sol +62 -0
  264. package/contracts/registry/ReleaseManager.sol +332 -0
  265. package/contracts/registry/TokenRegistry.sol +112 -0
  266. package/contracts/shared/ContractDeployerLib.sol +72 -0
  267. package/contracts/shared/ERC165.sol +7 -3
  268. package/contracts/shared/INftOwnable.sol +22 -0
  269. package/contracts/shared/IRegisterable.sol +4 -11
  270. package/contracts/shared/IService.sol +16 -0
  271. package/contracts/shared/NftOwnable.sol +139 -0
  272. package/contracts/shared/ProxyManager.sol +17 -38
  273. package/contracts/shared/Registerable.sol +23 -54
  274. package/contracts/shared/Service.sol +60 -0
  275. package/contracts/shared/TokenHandler.sol +27 -0
  276. package/contracts/shared/UpgradableProxyWithAdmin.sol +2 -2
  277. package/contracts/shared/Versionable.sol +3 -3
  278. package/contracts/test/TestFee.sol +2 -2
  279. package/contracts/test/TestRoleId.sol +1 -1
  280. package/contracts/test/TestService.sol +6 -7
  281. package/contracts/types/DistributorType.sol +55 -0
  282. package/contracts/types/Fee.sol +3 -3
  283. package/contracts/types/Key32.sol +8 -3
  284. package/contracts/types/NftIdSet.sol +26 -24
  285. package/contracts/types/NumberId.sol +52 -0
  286. package/contracts/types/ObjectType.sol +35 -14
  287. package/contracts/types/Referral.sol +85 -0
  288. package/contracts/types/RoleId.sol +61 -9
  289. package/contracts/types/StateId.sol +5 -1
  290. package/contracts/types/Timestamp.sol +7 -3
  291. package/contracts/types/UFixed.sol +128 -12
  292. package/contracts/types/Version.sol +4 -1
  293. package/package.json +4 -3
  294. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  295. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -213
  296. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  297. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -177
  298. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
  299. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
  300. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  301. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  302. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  303. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
  304. package/artifacts/contracts/instance/base/IService.sol/IService.json +0 -344
  305. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  306. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +0 -4
  307. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  308. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
  309. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
  310. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
  311. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.json +0 -10
  312. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  313. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
  314. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
  315. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -297
  316. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
  317. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
  318. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -297
  319. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  320. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +0 -117
  321. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
  322. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
  323. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  324. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +0 -4
  325. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +0 -10
  326. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +0 -4
  327. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +0 -4
  328. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.json +0 -10
  329. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  330. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  331. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -284
  332. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  333. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -284
  334. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  335. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.json +0 -10
  336. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  337. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -164
  338. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  339. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -164
  340. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
  341. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
  342. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -113
  343. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
  344. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -131
  345. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  346. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  347. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -638
  348. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  349. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
  350. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  351. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -638
  352. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  353. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -690
  354. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  355. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  356. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -457
  357. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
  358. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
  359. package/artifacts/contracts/registry/RegistryInstaller.sol/RegistryInstaller.dbg.json +0 -4
  360. package/artifacts/contracts/registry/RegistryInstaller.sol/RegistryInstaller.json +0 -344
  361. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
  362. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
  363. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +0 -4
  364. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +0 -445
  365. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
  366. package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -602
  367. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
  368. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -632
  369. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +0 -4
  370. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +0 -99
  371. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  372. package/contracts/components/BaseComponent.sol +0 -79
  373. package/contracts/components/IBaseComponent.sol +0 -19
  374. package/contracts/instance/IInstanceLinked.sol +0 -8
  375. package/contracts/instance/base/ComponentServiceBase.sol +0 -49
  376. package/contracts/instance/base/IInstanceBase.sol +0 -23
  377. package/contracts/instance/base/IService.sol +0 -15
  378. package/contracts/instance/base/InstanceBase.sol +0 -89
  379. package/contracts/instance/base/ModuleBase.sol +0 -57
  380. package/contracts/instance/base/ServiceBase.sol +0 -43
  381. package/contracts/instance/module/access/Access.sol +0 -149
  382. package/contracts/instance/module/access/IAccess.sol +0 -53
  383. package/contracts/instance/module/bundle/BundleModule.sol +0 -134
  384. package/contracts/instance/module/bundle/IBundle.sol +0 -53
  385. package/contracts/instance/module/component/ComponentModule.sol +0 -71
  386. package/contracts/instance/module/component/IComponent.sol +0 -28
  387. package/contracts/instance/module/distribution/DistributionModule.sol +0 -17
  388. package/contracts/instance/module/distribution/IDistribution.sol +0 -10
  389. package/contracts/instance/module/policy/IPolicy.sol +0 -63
  390. package/contracts/instance/module/policy/PolicyModule.sol +0 -91
  391. package/contracts/instance/module/pool/IPoolModule.sol +0 -41
  392. package/contracts/instance/module/pool/PoolModule.sol +0 -95
  393. package/contracts/instance/module/risk/IRisk.sol +0 -26
  394. package/contracts/instance/module/risk/RiskModule.sol +0 -62
  395. package/contracts/instance/module/treasury/ITreasury.sol +0 -84
  396. package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
  397. package/contracts/instance/module/treasury/TreasuryModule.sol +0 -131
  398. package/contracts/instance/service/ComponentOwnerService.sol +0 -272
  399. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  400. package/contracts/registry/IChainNft.sol +0 -22
  401. package/contracts/registry/IRegistryLinked.sol +0 -8
  402. package/contracts/registry/RegistryInstaller.sol +0 -100
  403. package/contracts/shared/IOwnable.sol +0 -6
  404. package/contracts/test/TestDistribution.sol +0 -22
  405. package/contracts/test/TestPool.sol +0 -27
  406. package/contracts/test/TestProduct.sol +0 -74
  407. package/contracts/types/ReferralId.sol +0 -48
@@ -1,34 +1,36 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
- import {IERC20Metadata} from "@openzeppelin5/contracts/token/ERC20/extensions/IERC20Metadata.sol";
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
5
 
6
- import {IRisk} from "../instance/module/risk/IRisk.sol";
7
- import {ITreasury} from "../instance/module/treasury/ITreasury.sol";
8
- import {IProductService} from "../instance/service/IProductService.sol";
6
+ import {IRisk} from "../instance/module/IRisk.sol";
7
+ import {IPolicyService} from "../instance/service/IPolicyService.sol";
9
8
  import {IProductComponent} from "./IProductComponent.sol";
10
- import {NftId, zeroNftId} from "../types/NftId.sol";
11
- import {ObjectType, PRODUCT} from "../types/ObjectType.sol";
12
- import {ReferralId} from "../types/ReferralId.sol";
9
+ import {NftId, NftIdLib} from "../types/NftId.sol";
10
+ import {PRODUCT} from "../types/ObjectType.sol";
11
+ import {ReferralId} from "../types/Referral.sol";
13
12
  import {RiskId, RiskIdLib} from "../types/RiskId.sol";
14
13
  import {StateId} from "../types/StateId.sol";
15
14
  import {Timestamp} from "../types/Timestamp.sol";
16
- import {Fee, FeeLib} from "../types/Fee.sol";
17
- import {BaseComponent} from "./BaseComponent.sol";
15
+ import {Fee} from "../types/Fee.sol";
16
+ import {Component} from "./Component.sol";
18
17
 
19
- import {IRegistry} from "../registry/IRegistry.sol";
20
- import {IRegisterable} from "../shared/IRegisterable.sol";
21
- import {Registerable} from "../shared/Registerable.sol";
18
+ import {TokenHandler} from "../shared/TokenHandler.sol";
22
19
 
23
- import {IPool} from "../instance/module/pool/IPoolModule.sol";
24
- import {IPoolComponent} from "../components/IPoolComponent.sol";
20
+ import {InstanceReader} from "../instance/InstanceReader.sol";
21
+ import {ISetup} from "../instance/module/ISetup.sol";
22
+ import {Pool} from "../components/Pool.sol";
23
+ import {Distribution} from "../components/Distribution.sol";
25
24
 
26
- contract Product is BaseComponent, IProductComponent {
27
- IProductService internal _productService;
28
- IPoolComponent internal _pool;
29
- address internal _distribution;
25
+ abstract contract Product is Component, IProductComponent {
26
+ using NftIdLib for NftId;
27
+
28
+ IPolicyService internal _policyService;
29
+ Pool internal _pool;
30
+ Distribution internal _distribution;
30
31
  Fee internal _initialProductFee;
31
32
  Fee internal _initialProcessingFee;
33
+ TokenHandler internal _tokenHandler;
32
34
 
33
35
  NftId internal _poolNftId;
34
36
  NftId internal _distributionNftId;
@@ -36,23 +38,36 @@ contract Product is BaseComponent, IProductComponent {
36
38
  constructor(
37
39
  address registry,
38
40
  NftId instanceNftid,
41
+ string memory name,
39
42
  address token,
40
43
  bool isInterceptor,
41
44
  address pool,
42
45
  address distribution,
43
46
  Fee memory productFee,
44
47
  Fee memory processingFee,
45
- address initialOwner
46
- ) BaseComponent(registry, instanceNftid, token, PRODUCT(), isInterceptor, initialOwner) {
48
+ address initialOwner,
49
+ bytes memory data
50
+ ) Component (
51
+ registry,
52
+ instanceNftid,
53
+ name,
54
+ token,
55
+ PRODUCT(),
56
+ isInterceptor,
57
+ initialOwner,
58
+ data
59
+ ) {
47
60
  // TODO add validation
48
- _productService = _instance.getProductService();
49
- _pool = IPoolComponent(pool);
50
- _distribution = distribution;
61
+ _policyService = getInstance().getPolicyService();
62
+ _pool = Pool(pool);
63
+ _distribution = Distribution(distribution);
51
64
  _initialProductFee = productFee;
52
65
  _initialProcessingFee = processingFee;
53
66
 
67
+ _tokenHandler = new TokenHandler(token);
68
+
54
69
  _poolNftId = getRegistry().getNftId(address(_pool));
55
- _distributionNftId = getRegistry().getNftId(_distribution);
70
+ _distributionNftId = getRegistry().getNftId(address(_distribution));
56
71
 
57
72
  _registerInterface(type(IProductComponent).interfaceId);
58
73
  }
@@ -63,15 +78,15 @@ contract Product is BaseComponent, IProductComponent {
63
78
  RiskId riskId,
64
79
  uint256 lifetime,
65
80
  bytes memory applicationData,
66
- ReferralId referralId,
67
- NftId bundleNftId
81
+ NftId bundleNftId,
82
+ ReferralId referralId
68
83
  )
69
84
  external
70
85
  view
71
86
  override
72
87
  returns (uint256 premiumAmount)
73
88
  {
74
- (premiumAmount,,,,) = _productService.calculatePremium(
89
+ (premiumAmount,,,,) = _policyService.calculatePremium(
75
90
  riskId,
76
91
  sumInsuredAmount,
77
92
  lifetime,
@@ -105,19 +120,19 @@ contract Product is BaseComponent, IProductComponent {
105
120
  RiskId id,
106
121
  bytes memory data
107
122
  ) internal {
108
- _productService.createRisk(
123
+ getProductService().createRisk(
109
124
  id,
110
125
  data
111
126
  );
112
127
  }
113
128
 
114
- function _setRiskInfo(
129
+ function _updateRisk(
115
130
  RiskId id,
116
- IRisk.RiskInfo memory info
131
+ bytes memory data
117
132
  ) internal {
118
- _productService.setRiskInfo(
133
+ getProductService().updateRisk(
119
134
  id,
120
- info
135
+ data
121
136
  );
122
137
  }
123
138
 
@@ -125,14 +140,14 @@ contract Product is BaseComponent, IProductComponent {
125
140
  RiskId id,
126
141
  StateId state
127
142
  ) internal {
128
- _productService.updateRiskState(
143
+ getProductService().updateRiskState(
129
144
  id,
130
145
  state
131
146
  );
132
147
  }
133
148
 
134
149
  function _getRiskInfo(RiskId id) internal view returns (IRisk.RiskInfo memory info) {
135
- return _instance.getRiskInfo(id);
150
+ return getInstance().getInstanceReader().getRiskInfo(id);
136
151
  }
137
152
 
138
153
  function _createApplication(
@@ -144,7 +159,7 @@ contract Product is BaseComponent, IProductComponent {
144
159
  NftId bundleNftId,
145
160
  ReferralId referralId
146
161
  ) internal returns (NftId nftId) {
147
- nftId = _productService.createApplication(
162
+ nftId = _policyService.createApplication(
148
163
  applicationOwner,
149
164
  riskId,
150
165
  sumInsuredAmount,
@@ -162,7 +177,7 @@ contract Product is BaseComponent, IProductComponent {
162
177
  )
163
178
  internal
164
179
  {
165
- _productService.underwrite(
180
+ _policyService.underwrite(
166
181
  policyNftId,
167
182
  requirePremiumPayment,
168
183
  activateAt);
@@ -174,7 +189,7 @@ contract Product is BaseComponent, IProductComponent {
174
189
  )
175
190
  internal
176
191
  {
177
- _productService.collectPremium(
192
+ _policyService.collectPremium(
178
193
  policyNftId,
179
194
  activateAt);
180
195
  }
@@ -185,17 +200,25 @@ contract Product is BaseComponent, IProductComponent {
185
200
  )
186
201
  internal
187
202
  {
188
- _productService.activate(
203
+ _policyService.activate(
189
204
  policyNftId,
190
205
  activateAt);
191
206
  }
192
207
 
208
+ function _close(
209
+ NftId policyNftId
210
+ )
211
+ internal
212
+ {
213
+ _policyService.close(policyNftId);
214
+ }
215
+
193
216
  function getPoolNftId() external view override returns (NftId poolNftId) {
194
217
  return getRegistry().getNftId(address(_pool));
195
218
  }
196
219
 
197
220
  function getDistributionNftId() external view override returns (NftId distributionNftId) {
198
- return getRegistry().getNftId(_distribution);
221
+ return getRegistry().getNftId(address(_distribution));
199
222
  }
200
223
 
201
224
  // from product component
@@ -205,95 +228,39 @@ contract Product is BaseComponent, IProductComponent {
205
228
  )
206
229
  external
207
230
  onlyOwner
231
+ restricted()
208
232
  override
209
233
  {
210
- _productService.setFees(productFee, processingFee);
234
+ getProductService().setFees(productFee, processingFee);
211
235
  }
212
236
 
213
- // TODO delete, call instance intead
214
- function getProductFee()
215
- external
216
- view
217
- override
218
- returns (Fee memory productFee)
219
- {
220
- NftId productNftId = getNftId();
221
- if (_instance.hasTreasuryInfo(productNftId)) {
222
- return _instance.getTreasuryInfo(productNftId).productFee;
223
- } else {
224
- return _initialProductFee;
225
- }
226
- }
237
+ function getSetupInfo() public view returns (ISetup.ProductSetupInfo memory setupInfo) {
238
+ InstanceReader reader = getInstance().getInstanceReader();
239
+ setupInfo = reader.getProductSetupInfo(getNftId());
227
240
 
228
- function getProcessingFee()
229
- external
230
- view
231
- override
232
- returns (Fee memory processingFee)
233
- {
234
- NftId productNftId = getNftId();
235
- if (_instance.hasTreasuryInfo(productNftId)) {
236
- return _instance.getTreasuryInfo(productNftId).processingFee;
237
- } else {
238
- return _initialProcessingFee;
241
+ // fallback to initial setup info (wallet is always != address(0))
242
+ if(setupInfo.wallet == address(0)) {
243
+ setupInfo = _getInitialSetupInfo();
239
244
  }
240
245
  }
241
246
 
242
- // from IRegisterable
243
-
244
- // TODO used only once, occupies space
245
- function getInitialInfo()
246
- public
247
- view
248
- override (IRegisterable, Registerable)
249
- returns (IRegistry.ObjectInfo memory, bytes memory)
250
- {
251
- // from Registerable
252
- (
253
- IRegistry.ObjectInfo memory productInfo,
254
- bytes memory data
255
- ) = super.getInitialInfo();
256
-
257
- // TODO read pool & distribution fees
258
- // 1) from pool -> the only option -> pool must be registered first?
259
- // 2) from instance -> all fees are set into instance at product registration which is ongoing here
260
- // checks are done in registryProduct() where THIS function is called
261
- //require(getRegistry().getObjectInfo(_poolNftId).objectType == POOL(), "POOL_NOT_REGISTERED");
262
- //require(getRegistry().getObjectInfo(_distributionNftId).objectType == DISTRIBUTION(), "DISTRIBUTION_NOT_REGISTERED");
263
-
264
- // from PoolComponent
265
- (
266
- IRegistry.ObjectInfo memory poolInfo,
267
- bytes memory poolData
268
- ) = _pool.getInitialInfo();
269
-
270
- (
271
- /*IPool.PoolInfo memory info*/,
272
- /*address wallet*/,
273
- /*IERC20Metadata token*/,
274
- Fee memory initialPoolFee,
275
- Fee memory initialStakingFee,
276
- Fee memory initialPerformanceFee
277
- ) = abi.decode(poolData, (IPool.PoolInfo, address, IERC20Metadata, Fee, Fee, Fee));
278
-
279
- // TODO from DistributionComponent
280
-
281
- return (
282
- productInfo,
283
- abi.encode(
284
- ITreasury.TreasuryInfo(
285
- _poolNftId,
286
- _distributionNftId,
287
- _token,
288
- _initialProductFee,
289
- _initialProcessingFee,
290
- initialPoolFee,
291
- initialStakingFee,
292
- initialPerformanceFee,
293
- FeeLib.zeroFee()//_instance.getDistributionFee(_distributionNftId)
294
- ),
295
- _wallet
296
- )
247
+ function _getInitialSetupInfo() internal view returns (ISetup.ProductSetupInfo memory setupInfo) {
248
+ ISetup.DistributionSetupInfo memory distributionSetupInfo = _distribution.getSetupInfo();
249
+ ISetup.PoolSetupInfo memory poolSetupInfo = _pool.getSetupInfo();
250
+
251
+ return ISetup.ProductSetupInfo(
252
+ getToken(),
253
+ _tokenHandler,
254
+ _distributionNftId,
255
+ _poolNftId,
256
+ distributionSetupInfo.distributionFee,
257
+ _initialProductFee,
258
+ _initialProcessingFee,
259
+ poolSetupInfo.poolFee,
260
+ poolSetupInfo.stakingFee,
261
+ poolSetupInfo.performanceFee,
262
+ false,
263
+ getWallet()
297
264
  );
298
265
  }
299
266
  }
@@ -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
+
@@ -0,0 +1,125 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IInstance} from "./IInstance.sol";
5
+ import {INSTANCE} from "../types/ObjectType.sol";
6
+ import {InstanceReader} from "./InstanceReader.sol";
7
+ import {IPolicy} from "../instance/module/IPolicy.sol";
8
+ import {IRegistry} from "../registry/IRegistry.sol";
9
+ import {LibNftIdSet} from "../types/NftIdSet.sol";
10
+ import {NftId} from "../types/NftId.sol";
11
+ import {TimestampLib} from "../types/Timestamp.sol";
12
+
13
+ import {ObjectManager} from "./ObjectManager.sol";
14
+
15
+ contract BundleManager is
16
+ ObjectManager
17
+ {
18
+
19
+ event LogBundleManagerPolicyLinked(NftId bundleNftId, NftId policyNftId);
20
+ event LogBundleManagerPolicyUnlinked(NftId bundleNftId, NftId policyNftId);
21
+
22
+ event LogBundleManagerBundleAdded(NftId poolNftId, NftId bundleNftId);
23
+ event LogBundleManagerBundleUnlocked(NftId poolNftId, NftId bundleNftId);
24
+ event LogBundleManagerBundleLocked(NftId poolNftId, NftId bundleNftId);
25
+
26
+ error ErrorBundleManagerErrorPolicyAlreadyActivated(NftId policyNftId);
27
+ error ErrorBundleManagerErrorBundleLocked(NftId bundleNftId, NftId policyNftId);
28
+ error ErrorBundleManagerPolicyWithOpenClaims(NftId policyNftId, uint256 openClaimsCount);
29
+ error ErrorBundleManagerPolicyNotCloseable(NftId policyNftId);
30
+ error ErrorBundleManagerBundleUnknown(NftId bundleNftId);
31
+ error ErrorBundleManagerBundleNotRegistered(NftId bundleNftId);
32
+
33
+ mapping(NftId bundleNftId => LibNftIdSet.Set policies) internal _activePolicies;
34
+
35
+ /// @dev links a policy with its bundle
36
+ // to link a policy it MUST NOT yet have been activated
37
+ // the bundle MUST be unlocked (active) for linking (underwriting) and registered with this instance
38
+ function linkPolicy(NftId policyNftId) external restricted() {
39
+ NftId bundleNftId = _instance.getInstanceReader().getPolicyInfo(policyNftId).bundleNftId;
40
+ // decision will likely depend on the decision what to check here and what in the service
41
+ NftId poolNftId = _instance.getInstanceReader().getBundleInfo(bundleNftId).poolNftId;
42
+
43
+ // ensure bundle is unlocked (in active set) and registered with this instance
44
+ if (!_isActive(poolNftId, bundleNftId)) {
45
+ revert ErrorBundleManagerErrorBundleLocked(bundleNftId, policyNftId);
46
+ }
47
+
48
+ LibNftIdSet.add(_activePolicies[bundleNftId], policyNftId);
49
+ emit LogBundleManagerPolicyLinked(bundleNftId, policyNftId);
50
+ }
51
+
52
+
53
+ /// @dev unlinks a policy from its bundle
54
+ // to unlink a policy it must closable, ie. meet one of the following criterias
55
+ // - the policy MUST be past its expiry period and it MUST NOT have any open claims
56
+ // - the policy's payoutAmount MUST be equal to its sumInsuredAmount and MUST NOT have any open claims
57
+ function unlinkPolicy(NftId policyNftId) external restricted() {
58
+ IPolicy.PolicyInfo memory policyInfo = _instance.getInstanceReader().getPolicyInfo(policyNftId);
59
+
60
+ NftId bundleNftId = policyInfo.bundleNftId;
61
+ // decision will likely depend on the decision what to check here and what in the service
62
+ NftId poolNftId = _instance.getInstanceReader().getBundleInfo(bundleNftId).poolNftId;
63
+
64
+ // ensure bundle is registered with this instance
65
+ if (!_contains(poolNftId, bundleNftId)) {
66
+ revert ErrorBundleManagerBundleUnknown(bundleNftId);
67
+ }
68
+
69
+ LibNftIdSet.remove(_activePolicies[bundleNftId], policyNftId);
70
+ emit LogBundleManagerPolicyUnlinked(policyInfo.bundleNftId, policyNftId);
71
+ }
72
+
73
+
74
+ /// @dev add a new bundle to a riskpool registerd with this instance
75
+ // the corresponding pool is fetched via instance reader
76
+ function add(NftId bundleNftId) external restricted() {
77
+ NftId poolNftId = _instance.getInstanceReader().getBundleInfo(bundleNftId).poolNftId;
78
+
79
+ // ensure pool is registered with instance
80
+ if(poolNftId.eqz()) {
81
+ revert ErrorBundleManagerBundleNotRegistered(bundleNftId);
82
+ }
83
+
84
+ _add(poolNftId, bundleNftId);
85
+ emit LogBundleManagerBundleAdded(poolNftId, bundleNftId);
86
+ }
87
+
88
+ /// @dev unlocked (active) bundles are available to underwrite new policies
89
+ function unlock(NftId bundleNftId) external restricted() {
90
+ NftId poolNftId = _instance.getInstanceReader().getBundleInfo(bundleNftId).poolNftId;
91
+ _activate(poolNftId, bundleNftId);
92
+ emit LogBundleManagerBundleUnlocked(poolNftId, bundleNftId);
93
+ }
94
+
95
+ /// @dev locked (deactivated) bundles may not underwrite any new policies
96
+ function lock(NftId bundleNftId) external restricted() {
97
+ NftId poolNftId = _instance.getInstanceReader().getBundleInfo(bundleNftId).poolNftId;
98
+ _deactivate(poolNftId, bundleNftId);
99
+ emit LogBundleManagerBundleLocked(poolNftId, bundleNftId);
100
+ }
101
+
102
+ function bundles(NftId poolNftId) external view returns(uint256) {
103
+ return _objects(poolNftId);
104
+ }
105
+
106
+ function getBundleNftId(NftId poolNftId, uint256 idx) external view returns(NftId bundleNftId) {
107
+ return _getObject(poolNftId, idx);
108
+ }
109
+
110
+ function activeBundles(NftId poolNftId) external view returns(uint256) {
111
+ return _activeObjs(poolNftId);
112
+ }
113
+
114
+ function getActiveBundleNftId(NftId poolNftId, uint256 idx) external view returns(NftId bundleNftId) {
115
+ return _getActiveObject(poolNftId, idx);
116
+ }
117
+
118
+ function activePolicies(NftId bundleNftId) external view returns(uint256) {
119
+ return LibNftIdSet.size(_activePolicies[bundleNftId]);
120
+ }
121
+
122
+ function getActivePolicy(NftId bundleNftId, uint256 idx) external view returns(NftId policyNftId) {
123
+ return LibNftIdSet.getElementAt(_activePolicies[bundleNftId], idx);
124
+ }
125
+ }
@@ -0,0 +1,46 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
5
+ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
6
+
7
+ import {IRegistry} from "../registry/IRegistry.sol";
8
+
9
+ abstract contract Cloneable is
10
+ AccessManagedUpgradeable
11
+ {
12
+ event CloneableInitialized(address authority, address registry);
13
+
14
+ error CloneableRegistryInvalid(address registry);
15
+
16
+ IRegistry internal _registry;
17
+
18
+ constructor() {
19
+ _registry = IRegistry(address(0));
20
+ }
21
+
22
+ /// @dev call to initialize MUST be made in the same transaction as cloning of the contract
23
+ function initialize(
24
+ address authority,
25
+ address registry
26
+ )
27
+ public
28
+ initializer
29
+ {
30
+ // check/handle access managed
31
+ __AccessManaged_init(authority);
32
+
33
+ // check/handle registry
34
+ if (registry.code.length == 0) {
35
+ revert CloneableRegistryInvalid(registry);
36
+ }
37
+
38
+ _registry = IRegistry(registry);
39
+
40
+ emit CloneableInitialized(authority, registry);
41
+ }
42
+
43
+ function getRegistry() external view returns (IRegistry) {
44
+ return _registry;
45
+ }
46
+ }
@@ -1,54 +1,72 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
- import {IERC165} from "@openzeppelin5/contracts/utils/introspection/IERC165.sol";
4
+ import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
5
+
6
+ import {NftId} from "../types/NftId.sol";
7
+ import {StateId} from "../types/StateId.sol";
8
+ import {RiskId} from "../types/RiskId.sol";
5
9
 
6
- import {IVersionable} from "../shared/IVersionable.sol";
7
10
  import {IRegisterable} from "../shared/IRegisterable.sol";
8
- import {IOwnable} from "../shared/IOwnable.sol";
9
- import {RoleId} from "../types/RoleId.sol";
10
-
11
- import {IAccessModule} from "./module/access/IAccess.sol";
12
- import {IBundleModule} from "./module/bundle/IBundle.sol";
13
- import {IDistributionModule} from "./module/distribution/IDistribution.sol";
14
- import {IComponentModule} from "./module/component/IComponent.sol";
15
- import {IPolicyModule} from "./module/policy/IPolicy.sol";
16
- import {IPoolModule} from "./module/pool/IPoolModule.sol";
17
- import {IRiskModule} from "./module/risk/IRisk.sol";
18
- import {ITreasuryModule} from "./module/treasury/ITreasury.sol";
19
11
 
20
- import {IKeyValueStore} from "./base/IKeyValueStore.sol";
21
- import {IRegistry} from "../registry/IRegistryLinked.sol";
12
+ import {InstanceAccessManager} from "./InstanceAccessManager.sol";
13
+ import {BundleManager} from "./BundleManager.sol";
14
+ import {InstanceReader} from "./InstanceReader.sol";
22
15
 
23
- import {IComponentOwnerService} from "./service/IComponentOwnerService.sol";
16
+ import {IBundle} from "./module/IBundle.sol";
17
+ import {IBundleService} from "./service/IBundleService.sol";
24
18
  import {IDistributionService} from "./service/IDistributionService.sol";
25
- import {IProductService} from "./service/IProductService.sol";
19
+ import {InstanceAccessManager} from "./InstanceAccessManager.sol";
20
+ import {IKeyValueStore} from "./base/IKeyValueStore.sol";
21
+ import {IPolicy} from "./module/IPolicy.sol";
22
+ import {IPolicyService} from "./service/IPolicyService.sol";
26
23
  import {IPoolService} from "./service/IPoolService.sol";
27
- import {IInstanceBase} from "./base/IInstanceBase.sol";
28
-
29
- // solhint-disable-next-line no-empty-blocks
30
- interface IInstance is
31
- IERC165,
32
- IVersionable,
33
- IRegisterable,
34
- IAccessModule,
35
- IPolicyModule,
36
- IPoolModule,
37
- IRiskModule,
38
- IBundleModule,
39
- IComponentModule,
40
- ITreasuryModule,
41
- IDistributionModule,
42
- IInstanceBase
43
- {
44
- function getRegistry() external view override (IPolicyModule, IRegisterable) returns (IRegistry registry);
45
- function getOwner() external view override (IOwnable, IAccessModule) returns(address owner);
46
-
47
- function getKeyValueStore() external view override (IInstanceBase) returns (IKeyValueStore keyValueStore);
48
-
49
- function getComponentOwnerService() external view override (IInstanceBase, IComponentModule, IPoolModule, ITreasuryModule) returns(IComponentOwnerService);
50
- function getDistributionService() external view override returns(IDistributionService);
51
- function getProductService() external view override (IInstanceBase, IBundleModule, IPolicyModule) returns(IProductService);
52
- function getPoolService() external view override (IInstanceBase, IBundleModule, IPoolModule) returns(IPoolService);
53
-
54
- }
24
+ import {IProductService} from "./service/IProductService.sol";
25
+ import {IPolicyService} from "./service/IPolicyService.sol";
26
+ import {IBundleService} from "./service/IBundleService.sol";
27
+ import {IRisk} from "./module/IRisk.sol";
28
+ import {ISetup} from "./module/ISetup.sol";
29
+ import {NftId} from "../types/NftId.sol";
30
+ import {RiskId} from "../types/RiskId.sol";
31
+ import {StateId} from "../types/StateId.sol";
32
+ import {VersionPart} from "../types/Version.sol";
33
+
34
+
35
+
36
+
37
+ interface IInstance is IRegisterable, IKeyValueStore, IAccessManaged {
38
+
39
+ function getDistributionService() external view returns (IDistributionService);
40
+ function getProductService() external view returns (IProductService);
41
+ function getPoolService() external view returns (IPoolService);
42
+ function getPolicyService() external view returns (IPolicyService);
43
+ function getBundleService() external view returns (IBundleService);
44
+
45
+ function createDistributionSetup(NftId distributionNftId, ISetup.DistributionSetupInfo memory setup) external;
46
+ function updateDistributionSetup(NftId distributionNftId, ISetup.DistributionSetupInfo memory setup, StateId newState) external;
47
+ function updateDistributionSetupState(NftId distributionNftId, StateId newState) external;
48
+
49
+ function createPoolSetup(NftId poolNftId, ISetup.PoolSetupInfo memory setup) external;
50
+ function updatePoolSetup(NftId poolNftId, ISetup.PoolSetupInfo memory setup, StateId newState) external;
51
+ function updatePoolSetupState(NftId poolNftId, StateId newState) external;
52
+
53
+ function createBundle(NftId bundleNftId, IBundle.BundleInfo memory bundle) external;
54
+ function updateBundle(NftId bundleNftId, IBundle.BundleInfo memory bundle, StateId newState) external;
55
+ function updateBundleState(NftId bundleNftId, StateId newState) external;
56
+
57
+ function createProductSetup(NftId productNftId, ISetup.ProductSetupInfo memory setup) external;
58
+ function updateProductSetup(NftId productNftId, ISetup.ProductSetupInfo memory setup, StateId newState) external;
59
+ function updateProductSetupState(NftId productNftId, StateId newState) external;
60
+
61
+ function createRisk(RiskId riskId, IRisk.RiskInfo memory risk) external;
62
+ function updateRisk(RiskId riskId, IRisk.RiskInfo memory risk, StateId newState) external;
63
+ function updateRiskState(RiskId riskId, StateId newState) external;
64
+
65
+ function createPolicy(NftId policyNftId, IPolicy.PolicyInfo memory policy) external;
66
+ function updatePolicy(NftId policyNftId, IPolicy.PolicyInfo memory policy, StateId newState) external;
67
+ function updatePolicyState(NftId policyNftId, StateId newState) external;
68
+
69
+ function getMajorVersion() external pure returns (VersionPart majorVersion);
70
+ function getInstanceReader() external view returns (InstanceReader);
71
+ function getBundleManager() external view returns (BundleManager);
72
+ }