@etherisc/gif-next 0.0.2-e875d61-189 → 0.0.2-e9148e0-933

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 (376) hide show
  1. package/README.md +179 -26
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  3. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +176 -23
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +618 -0
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +129 -23
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +152 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +74 -181
  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 +397 -70
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +444 -73
  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/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +4 -0
  45. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.json +101 -0
  46. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +4 -0
  47. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +1132 -0
  48. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +4 -0
  49. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +1082 -0
  50. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  51. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +462 -1400
  52. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  53. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +480 -0
  54. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  55. package/artifacts/contracts/instance/Instance.sol/Instance.json +2412 -1075
  56. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  57. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +917 -0
  58. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  59. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1388 -0
  60. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  61. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +931 -0
  62. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  63. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +508 -0
  64. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
  65. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +276 -36
  66. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  67. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +33 -1
  68. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  69. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +27 -158
  70. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  71. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  72. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +37 -245
  73. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  74. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +4 -4
  75. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  76. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +211 -0
  77. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  78. package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
  79. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  80. package/artifacts/contracts/instance/module/{access/IAccess.sol/IAccess.json → IDistribution.sol/IDistribution.json} +2 -2
  81. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  82. package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
  83. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  84. package/artifacts/contracts/instance/module/{risk/IRisk.sol → IRisk.sol}/IRisk.json +1 -1
  85. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  86. package/artifacts/contracts/instance/{base/ModuleBase.sol/ModuleBase.json → module/ISetup.sol/ISetup.json} +2 -2
  87. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  88. package/artifacts/contracts/instance/module/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
  89. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  90. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +381 -77
  91. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  92. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +716 -0
  93. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  94. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +444 -0
  95. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  96. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +177 -75
  97. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  98. package/artifacts/contracts/instance/{base/ServiceBase.sol/ServiceBase.json → service/IDistributionService.sol/IDistributionService.json} +204 -58
  99. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  100. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +235 -50
  101. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  102. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +325 -51
  103. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  104. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +421 -53
  105. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  106. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +448 -0
  107. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  108. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +479 -94
  109. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  110. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +448 -0
  111. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  112. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +186 -12
  113. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  114. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +358 -37
  115. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  116. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +947 -0
  117. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  118. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  119. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  120. package/artifacts/contracts/registry/Registry.sol/Registry.json +466 -129
  121. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  122. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1293 -0
  123. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  124. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +513 -0
  125. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  126. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +410 -0
  127. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  128. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  129. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  130. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  131. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  132. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +127 -0
  133. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  134. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +117 -37
  135. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  136. package/artifacts/contracts/{instance/base → shared}/IService.sol/IService.json +175 -54
  137. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  138. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +55 -14
  139. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  140. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  141. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  142. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  143. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  144. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +190 -37
  145. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
  146. package/artifacts/contracts/{instance/base/InstanceBase.sol/InstanceBase.json → shared/RegisterableUpgradable.sol/RegisterableUpgradable.json} +188 -90
  147. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  148. package/artifacts/contracts/shared/Service.sol/Service.json +468 -0
  149. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  150. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  151. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  152. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  153. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  154. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +78 -14
  155. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  156. package/artifacts/contracts/test/TestFee.sol/TestFee.json +4 -4
  157. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  158. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +204 -36
  159. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  160. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +14 -14
  161. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  162. package/artifacts/contracts/test/TestService.sol/TestService.json +283 -62
  163. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  164. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
  165. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  166. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  167. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  168. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +103 -23
  169. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  170. package/artifacts/contracts/test/Usdc.sol/USDC.json +91 -53
  171. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  172. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  173. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  174. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  175. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  176. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  177. package/artifacts/contracts/types/Fee.sol/FeeLib.json +52 -13
  178. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  179. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +31 -17
  180. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  181. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  182. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  183. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  184. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  185. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  186. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  187. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  188. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  189. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  190. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  191. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  192. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  193. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +134 -8
  194. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  195. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  196. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  197. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +15 -2
  198. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  199. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  200. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  201. package/artifacts/contracts/types/UFixed.sol/{UFixedMathLib.json → UFixedLib.json} +3 -3
  202. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  203. package/artifacts/contracts/types/Version.sol/VersionLib.json +40 -2
  204. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  205. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
  206. package/contracts/components/BaseComponent.sol +26 -29
  207. package/contracts/components/Distribution.sol +159 -0
  208. package/contracts/components/IBaseComponent.sol +9 -3
  209. package/contracts/components/IDistributionComponent.sol +44 -0
  210. package/contracts/components/IPoolComponent.sol +14 -9
  211. package/contracts/components/IProductComponent.sol +25 -9
  212. package/contracts/components/Pool.sol +89 -38
  213. package/contracts/components/Product.sol +196 -46
  214. package/contracts/experiment/cloning/Cloner.sol +47 -0
  215. package/contracts/instance/AccessManagedSimple.sol +115 -0
  216. package/contracts/instance/AccessManagerSimple.sol +692 -0
  217. package/contracts/instance/IAccessManagerSimple.sol +391 -0
  218. package/contracts/instance/IInstance.sol +34 -43
  219. package/contracts/instance/IInstanceService.sol +30 -0
  220. package/contracts/instance/Instance.sol +427 -55
  221. package/contracts/instance/InstanceAccessManager.sol +288 -0
  222. package/contracts/instance/InstanceReader.sol +306 -0
  223. package/contracts/instance/InstanceService.sol +192 -0
  224. package/contracts/instance/InstanceServiceManager.sol +57 -0
  225. package/contracts/instance/base/ComponentServiceBase.sol +92 -10
  226. package/contracts/instance/base/IInstanceBase.sol +6 -2
  227. package/contracts/instance/base/IKeyValueStore.sol +13 -14
  228. package/contracts/instance/base/ILifecycle.sol +3 -3
  229. package/contracts/instance/base/KeyValueStore.sol +49 -38
  230. package/contracts/instance/base/Lifecycle.sol +11 -3
  231. package/contracts/instance/module/IAccess.sol +38 -0
  232. package/contracts/instance/module/IBundle.sol +20 -0
  233. package/contracts/instance/module/IDistribution.sol +39 -0
  234. package/contracts/instance/module/IPolicy.sol +45 -0
  235. package/contracts/instance/module/IRisk.sol +11 -0
  236. package/contracts/instance/module/ISetup.sol +44 -0
  237. package/contracts/instance/module/ITreasury.sol +23 -0
  238. package/contracts/instance/service/ComponentOwnerService.sol +238 -76
  239. package/contracts/instance/service/DistributionService.sol +88 -0
  240. package/contracts/instance/service/DistributionServiceManager.sol +54 -0
  241. package/contracts/instance/service/IComponentOwnerService.sol +1 -3
  242. package/contracts/instance/service/IDistributionService.sol +12 -0
  243. package/contracts/instance/service/IPoolService.sol +8 -1
  244. package/contracts/instance/service/IProductService.sol +56 -7
  245. package/contracts/instance/service/PoolService.sol +117 -52
  246. package/contracts/instance/service/PoolServiceManager.sol +54 -0
  247. package/contracts/instance/service/ProductService.sol +351 -169
  248. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  249. package/contracts/registry/ChainNft.sol +80 -37
  250. package/contracts/registry/IRegistry.sol +47 -25
  251. package/contracts/registry/IRegistryService.sol +50 -0
  252. package/contracts/registry/ITransferInterceptor.sol +6 -0
  253. package/contracts/registry/Registry.sol +333 -270
  254. package/contracts/registry/RegistryService.sol +358 -0
  255. package/contracts/registry/RegistryServiceManager.sol +80 -0
  256. package/contracts/registry/TokenRegistry.sol +111 -0
  257. package/contracts/shared/ContractDeployerLib.sol +72 -0
  258. package/contracts/shared/ERC165.sol +6 -2
  259. package/contracts/shared/INftOwnable.sol +22 -0
  260. package/contracts/shared/IRegisterable.sol +8 -15
  261. package/contracts/{instance/base → shared}/IService.sol +3 -3
  262. package/contracts/shared/IVersionable.sol +55 -11
  263. package/contracts/shared/NftOwnable.sol +134 -0
  264. package/contracts/shared/ProxyManager.sol +94 -0
  265. package/contracts/shared/Registerable.sol +63 -59
  266. package/contracts/shared/RegisterableUpgradable.sol +16 -0
  267. package/contracts/shared/Service.sol +55 -0
  268. package/contracts/shared/TokenHandler.sol +27 -0
  269. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  270. package/contracts/shared/Versionable.sol +113 -55
  271. package/contracts/test/TestFee.sol +2 -2
  272. package/contracts/test/TestRegisterable.sol +5 -6
  273. package/contracts/test/TestRoleId.sol +1 -1
  274. package/contracts/test/TestService.sol +5 -13
  275. package/contracts/types/DistributorType.sol +55 -0
  276. package/contracts/types/Fee.sol +10 -5
  277. package/contracts/types/Key32.sol +8 -3
  278. package/contracts/types/NumberId.sol +52 -0
  279. package/contracts/types/ObjectType.sol +40 -11
  280. package/contracts/types/Referral.sol +85 -0
  281. package/contracts/types/RiskId.sol +43 -0
  282. package/contracts/types/RoleId.sol +62 -10
  283. package/contracts/types/StateId.sol +5 -1
  284. package/contracts/types/Timestamp.sol +7 -3
  285. package/contracts/types/UFixed.sol +128 -12
  286. package/contracts/types/Version.sol +13 -1
  287. package/package.json +4 -3
  288. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
  289. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
  290. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
  291. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  292. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +0 -4
  293. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  294. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
  295. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
  296. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
  297. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  298. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
  299. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
  300. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -265
  301. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
  302. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
  303. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -265
  304. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.dbg.json +0 -4
  305. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.json +0 -10
  306. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.dbg.json +0 -4
  307. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.json +0 -10
  308. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.dbg.json +0 -4
  309. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.json +0 -10
  310. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  311. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +0 -136
  312. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
  313. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
  314. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  315. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +0 -136
  316. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  317. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  318. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -273
  319. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  320. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -273
  321. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  322. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.json +0 -10
  323. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  324. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -144
  325. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  326. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -144
  327. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
  328. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
  329. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -10
  330. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
  331. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -10
  332. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  333. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  334. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -531
  335. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  336. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
  337. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  338. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -531
  339. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  340. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -452
  341. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
  342. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
  343. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
  344. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
  345. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
  346. package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -455
  347. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
  348. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -436
  349. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  350. package/contracts/experiment/statemachine/README.md +0 -112
  351. package/contracts/instance/IInstanceLinked.sol +0 -8
  352. package/contracts/instance/base/InstanceBase.sol +0 -84
  353. package/contracts/instance/base/ModuleBase.sol +0 -46
  354. package/contracts/instance/base/ServiceBase.sol +0 -37
  355. package/contracts/instance/module/access/Access.sol +0 -149
  356. package/contracts/instance/module/access/IAccess.sol +0 -53
  357. package/contracts/instance/module/bundle/BundleModule.sol +0 -135
  358. package/contracts/instance/module/bundle/IBundle.sol +0 -51
  359. package/contracts/instance/module/compensation/CompensationModule.sol +0 -17
  360. package/contracts/instance/module/compensation/ICompensation.sol +0 -10
  361. package/contracts/instance/module/component/ComponentModule.sol +0 -81
  362. package/contracts/instance/module/component/IComponent.sol +0 -29
  363. package/contracts/instance/module/policy/IPolicy.sol +0 -59
  364. package/contracts/instance/module/policy/PolicyModule.sol +0 -89
  365. package/contracts/instance/module/pool/IPoolModule.sol +0 -40
  366. package/contracts/instance/module/pool/PoolModule.sol +0 -90
  367. package/contracts/instance/module/risk/IRisk.sol +0 -10
  368. package/contracts/instance/module/risk/RiskModule.sol +0 -17
  369. package/contracts/instance/module/treasury/ITreasury.sol +0 -96
  370. package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
  371. package/contracts/instance/module/treasury/TreasuryModule.sol +0 -171
  372. package/contracts/registry/IChainNft.sol +0 -21
  373. package/contracts/registry/IRegistryLinked.sol +0 -8
  374. package/contracts/shared/IOwnable.sol +0 -6
  375. package/contracts/test/TestPool.sol +0 -24
  376. package/contracts/test/TestProduct.sol +0 -51
@@ -1,20 +1,34 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
4
  import {ObjectType, POOL} from "../types/ObjectType.sol";
5
5
  import {IProductService} from "../instance/service/IProductService.sol";
6
6
  import {IPoolService} from "../instance/service/IPoolService.sol";
7
- import {NftId} from "../types/NftId.sol";
7
+ import {NftId, zeroNftId, 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
11
  import {BaseComponent} from "./BaseComponent.sol";
12
+ import {TokenHandler} from "../shared/TokenHandler.sol";
13
+ import {ISetup} from "../instance/module/ISetup.sol";
14
+
15
+ import {IRegistry} from "../registry/IRegistry.sol";
16
+
17
+ // import {IPool} from "../instance/module/pool/IPoolModule.sol";
18
+ import {ITreasury} from "../instance/module/ITreasury.sol";
19
+ import {ISetup} from "../instance/module/ISetup.sol";
20
+ import {InstanceReader} from "../instance/InstanceReader.sol";
21
+
22
+ import {IRegisterable} from "../shared/IRegisterable.sol";
23
+ import {Registerable} from "../shared/Registerable.sol";
12
24
 
13
25
  contract Pool is BaseComponent, IPoolComponent {
26
+ using NftIdLib for NftId;
14
27
 
15
28
  bool internal _isVerifying;
16
29
  UFixed internal _collateralizationLevel;
17
30
 
31
+ Fee internal _initialPoolFee;
18
32
  Fee internal _initialStakingFee;
19
33
  Fee internal _initialPerformanceFee;
20
34
 
@@ -43,24 +57,31 @@ contract Pool is BaseComponent, IPoolComponent {
43
57
  NftId instanceNftId,
44
58
  // TODO refactor into tokenNftId
45
59
  address token,
60
+ bool isInterceptor,
46
61
  bool verifying,
47
62
  UFixed collateralizationLevel,
63
+ Fee memory poolFee,
48
64
  Fee memory stakingFee,
49
- Fee memory performanceFee
65
+ Fee memory performanceFee,
66
+ address initialOwner
50
67
  )
51
- BaseComponent(registry, instanceNftId, token)
68
+ BaseComponent(registry, instanceNftId, token, POOL(), isInterceptor, initialOwner)
52
69
  {
53
70
  _isVerifying = verifying;
54
71
  // TODO add validation
55
72
  _collateralizationLevel = collateralizationLevel;
73
+ _initialPoolFee = poolFee;
56
74
  _initialStakingFee = stakingFee;
57
75
  _initialPerformanceFee = performanceFee;
58
76
 
59
77
  _poolService = _instance.getPoolService();
60
78
  _productService = _instance.getProductService();
79
+
80
+ _registerInterface(type(IPoolComponent).interfaceId);
61
81
  }
62
82
 
63
83
  function createBundle(
84
+ Fee memory fee,
64
85
  uint256 initialAmount,
65
86
  uint256 lifetime,
66
87
  bytes memory filter
@@ -72,6 +93,7 @@ contract Pool is BaseComponent, IPoolComponent {
72
93
  address owner = msg.sender;
73
94
  bundleNftId = _poolService.createBundle(
74
95
  owner,
96
+ fee,
75
97
  initialAmount,
76
98
  lifetime,
77
99
  filter
@@ -122,6 +144,67 @@ contract Pool is BaseComponent, IPoolComponent {
122
144
  return _collateralizationLevel;
123
145
  }
124
146
 
147
+ function setFees(
148
+ Fee memory poolFee,
149
+ Fee memory stakingFee,
150
+ Fee memory performanceFee
151
+ )
152
+ external
153
+ onlyOwner
154
+ override
155
+ {
156
+ _poolService.setFees(poolFee, stakingFee, performanceFee);
157
+ }
158
+
159
+ function setBundleFee(
160
+ NftId bundleNftId,
161
+ Fee memory fee
162
+ )
163
+ external
164
+ override
165
+ // TODO add onlyBundleOwner
166
+ {
167
+ _poolService.setBundleFee(bundleNftId, fee);
168
+ }
169
+
170
+ function getSetupInfo() public view returns (ISetup.PoolSetupInfo memory setupInfo) {
171
+ InstanceReader reader = _instance.getInstanceReader();
172
+ return reader.getPoolSetupInfo(getNftId());
173
+ }
174
+
175
+ // from IRegisterable
176
+
177
+ // TODO used only once, occupies space
178
+ // TODO do not use super
179
+ function getInitialInfo()
180
+ public
181
+ view
182
+ override (IRegisterable, Registerable)
183
+ returns (IRegistry.ObjectInfo memory, bytes memory)
184
+ {
185
+ (
186
+ IRegistry.ObjectInfo memory info,
187
+ ) = super.getInitialInfo();
188
+
189
+ return (
190
+ info,
191
+ abi.encode(
192
+ ISetup.PoolSetupInfo(
193
+ _productNftId,
194
+ TokenHandler(address(_token)),
195
+ _collateralizationLevel,
196
+ _initialPoolFee,
197
+ _initialStakingFee,
198
+ _initialPerformanceFee,
199
+ _isVerifying,
200
+ _wallet
201
+ )
202
+ )
203
+ );
204
+ }
205
+
206
+ // Internals
207
+
125
208
  function _underwrite(
126
209
  NftId policyNftId,
127
210
  bytes memory policyData,
@@ -140,6 +223,7 @@ contract Pool is BaseComponent, IPoolComponent {
140
223
 
141
224
  function _createBundle(
142
225
  address bundleOwner,
226
+ Fee memory fee,
143
227
  uint256 amount,
144
228
  uint256 lifetime,
145
229
  bytes calldata filter
@@ -149,43 +233,10 @@ contract Pool is BaseComponent, IPoolComponent {
149
233
  {
150
234
  bundleNftId = _poolService.createBundle(
151
235
  bundleOwner,
236
+ fee,
152
237
  amount,
153
238
  lifetime,
154
239
  filter
155
240
  );
156
241
  }
157
-
158
- // from pool component
159
- function getStakingFee()
160
- external
161
- view
162
- override
163
- returns (Fee memory stakingFee)
164
- {
165
- NftId productNftId = _instance.getProductNftId(getNftId());
166
- if (productNftId.gtz()) {
167
- return _instance.getTreasuryInfo(productNftId).stakingFee;
168
- } else {
169
- return _initialStakingFee;
170
- }
171
- }
172
-
173
- function getPerformanceFee()
174
- external
175
- view
176
- override
177
- returns (Fee memory performanceFee)
178
- {
179
- NftId productNftId = _instance.getProductNftId(getNftId());
180
- if (productNftId.gtz()) {
181
- return _instance.getTreasuryInfo(productNftId).performanceFee;
182
- } else {
183
- return _initialPerformanceFee;
184
- }
185
- }
186
-
187
- // from registerable
188
- function getType() public pure override returns (ObjectType) {
189
- return POOL();
190
- }
191
242
  }
@@ -1,49 +1,164 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
- import {ITreasury} from "../instance/module/treasury/ITreasury.sol";
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+
6
+ import {IRisk} from "../instance/module/IRisk.sol";
7
+ import {ITreasury} from "../instance/module/ITreasury.sol";
5
8
  import {IProductService} from "../instance/service/IProductService.sol";
6
9
  import {IProductComponent} from "./IProductComponent.sol";
7
- import {NftId} from "../types/NftId.sol";
10
+ import {NftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
8
11
  import {ObjectType, PRODUCT} from "../types/ObjectType.sol";
12
+ import {ReferralId} from "../types/Referral.sol";
13
+ import {RiskId, RiskIdLib} from "../types/RiskId.sol";
14
+ import {StateId} from "../types/StateId.sol";
9
15
  import {Timestamp} from "../types/Timestamp.sol";
10
- import {Fee} from "../types/Fee.sol";
16
+ import {Fee, FeeLib} from "../types/Fee.sol";
11
17
  import {BaseComponent} from "./BaseComponent.sol";
12
18
 
19
+ import {IRegistry} from "../registry/IRegistry.sol";
20
+ import {IRegisterable} from "../shared/IRegisterable.sol";
21
+ import {Registerable} from "../shared/Registerable.sol";
22
+ import {TokenHandler} from "../shared/TokenHandler.sol";
23
+
24
+ import {InstanceReader} from "../instance/InstanceReader.sol";
25
+ import {ISetup} from "../instance/module/ISetup.sol";
26
+ import {Pool} from "../components/Pool.sol";
27
+ import {Distribution} from "../components/Distribution.sol";
28
+
29
+ import {zeroNftId} from "../types/NftId.sol";
30
+
13
31
  contract Product is BaseComponent, IProductComponent {
32
+ using NftIdLib for NftId;
33
+
14
34
  IProductService internal _productService;
15
- address internal _pool;
16
- Fee internal _initialPolicyFee;
35
+ Pool internal _pool;
36
+ Distribution internal _distribution;
37
+ Fee internal _initialProductFee;
17
38
  Fee internal _initialProcessingFee;
18
39
 
40
+ NftId internal _poolNftId;
41
+ NftId internal _distributionNftId;
42
+
19
43
  constructor(
20
44
  address registry,
21
45
  NftId instanceNftid,
22
46
  address token,
47
+ bool isInterceptor,
23
48
  address pool,
24
- Fee memory policyFee,
25
- Fee memory processingFee
26
- ) BaseComponent(registry, instanceNftid, token) {
49
+ address distribution,
50
+ Fee memory productFee,
51
+ Fee memory processingFee,
52
+ address initialOwner
53
+ ) BaseComponent(registry, instanceNftid, token, PRODUCT(), isInterceptor, initialOwner) {
27
54
  // TODO add validation
28
55
  _productService = _instance.getProductService();
29
- _pool = pool;
30
- _initialPolicyFee = policyFee;
31
- _initialProcessingFee = processingFee;
56
+ _pool = Pool(pool);
57
+ _distribution = Distribution(distribution);
58
+ _initialProductFee = productFee;
59
+ _initialProcessingFee = processingFee;
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
+ ReferralId referralId,
74
+ NftId bundleNftId
75
+ )
76
+ external
77
+ view
78
+ override
79
+ returns (uint256 premiumAmount)
80
+ {
81
+ (premiumAmount,,,,) = _productService.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 _setRiskInfo(
122
+ RiskId id,
123
+ IRisk.RiskInfo memory info
124
+ ) internal {
125
+ _productService.setRiskInfo(
126
+ id,
127
+ info
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);
32
143
  }
33
144
 
34
145
  function _createApplication(
35
146
  address applicationOwner,
147
+ RiskId riskId,
36
148
  uint256 sumInsuredAmount,
37
- uint256 premiumAmount,
38
149
  uint256 lifetime,
39
- NftId bundleNftId
150
+ bytes memory applicationData,
151
+ NftId bundleNftId,
152
+ ReferralId referralId
40
153
  ) internal returns (NftId nftId) {
41
154
  nftId = _productService.createApplication(
42
155
  applicationOwner,
156
+ riskId,
43
157
  sumInsuredAmount,
44
- premiumAmount,
45
158
  lifetime,
46
- bundleNftId
159
+ applicationData,
160
+ bundleNftId,
161
+ referralId
47
162
  );
48
163
  }
49
164
 
@@ -83,52 +198,87 @@ contract Product is BaseComponent, IProductComponent {
83
198
  }
84
199
 
85
200
  function getPoolNftId() external view override returns (NftId poolNftId) {
86
- return _registry.getNftId(_pool);
201
+ return getRegistry().getNftId(address(_pool));
202
+ }
203
+
204
+ function getDistributionNftId() external view override returns (NftId distributionNftId) {
205
+ return getRegistry().getNftId(address(_distribution));
87
206
  }
88
207
 
89
208
  // from product component
90
209
  function setFees(
91
- Fee memory policyFee,
210
+ Fee memory productFee,
92
211
  Fee memory processingFee
93
212
  )
94
213
  external
95
214
  onlyOwner
96
215
  override
97
216
  {
98
- _productService.setFees(policyFee, processingFee);
217
+ _productService.setFees(productFee, processingFee);
99
218
  }
100
219
 
101
-
102
- function getPolicyFee()
103
- external
104
- view
105
- override
106
- returns (Fee memory policyFee)
107
- {
108
- NftId productNftId = getNftId();
109
- if (address(_instance.getTokenHandler(productNftId)) != address(0)) {
110
- return _instance.getTreasuryInfo(productNftId).policyFee;
111
- } else {
112
- return _initialPolicyFee;
113
- }
220
+ function getSetupInfo() public view returns (ISetup.ProductSetupInfo memory setupInfo) {
221
+ InstanceReader reader = _instance.getInstanceReader();
222
+ return reader.getProductSetupInfo(getNftId());
114
223
  }
115
224
 
116
- function getProcessingFee()
117
- external
118
- view
119
- override
120
- returns (Fee memory processingFee)
225
+ // from IRegisterable
226
+
227
+ function getInitialInfo()
228
+ public
229
+ view
230
+ override (IRegisterable, Registerable)
231
+ returns (IRegistry.ObjectInfo memory, bytes memory)
121
232
  {
122
- NftId productNftId = getNftId();
123
- if (address(_instance.getTokenHandler(productNftId)) != address(0)) {
124
- return _instance.getTreasuryInfo(productNftId).processingFee;
125
- } else {
126
- return _initialProcessingFee;
127
- }
128
- }
233
+ // from Registerable
234
+ (
235
+ IRegistry.ObjectInfo memory productInfo,
236
+ bytes memory data
237
+ ) = super.getInitialInfo();
238
+
239
+ // TODO read pool & distribution fees
240
+ // 1) from pool -> the only option -> pool must be registered first?
241
+ // 2) from instance -> all fees are set into instance at product registration which is ongoing here
242
+ // checks are done in registryProduct() where THIS function is called
243
+ //require(getRegistry().getObjectInfo(_poolNftId).objectType == POOL(), "POOL_NOT_REGISTERED");
244
+ //require(getRegistry().getObjectInfo(_distributionNftId).objectType == DISTRIBUTION(), "DISTRIBUTION_NOT_REGISTERED");
245
+
246
+ // from PoolComponent
247
+ (
248
+ ,
249
+ bytes memory poolData
250
+ ) = _pool.getInitialInfo();
251
+
252
+ (
253
+ ISetup.PoolSetupInfo memory poolSetupInfo
254
+ ) = abi.decode(poolData, (ISetup.PoolSetupInfo));
129
255
 
130
- // from registerable
131
- function getType() public pure override returns (ObjectType) {
132
- return PRODUCT();
256
+ // from DistributionComponent
257
+ (
258
+ ,
259
+ bytes memory distributionData
260
+ ) = _distribution.getInitialInfo();
261
+
262
+ (
263
+ ISetup.DistributionSetupInfo memory distributionSetupInfo
264
+ ) = abi.decode(distributionData, (ISetup.DistributionSetupInfo));
265
+
266
+ return (
267
+ productInfo,
268
+ abi.encode(
269
+ ISetup.ProductSetupInfo(
270
+ _token,
271
+ TokenHandler(address(_token)),
272
+ _distributionNftId,
273
+ _poolNftId,
274
+ distributionSetupInfo.distributionFee,
275
+ _initialProductFee,
276
+ _initialProcessingFee,
277
+ poolSetupInfo.poolFee,
278
+ poolSetupInfo.stakingFee,
279
+ poolSetupInfo.performanceFee
280
+ )
281
+ )
282
+ );
133
283
  }
134
284
  }
@@ -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,115 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // OpenZeppelin Contracts (last updated v5.0.0) (access/manager/AccessManaged.sol)
3
+
4
+ pragma solidity ^0.8.20;
5
+
6
+ import {AuthorityUtils} from "@openzeppelin/contracts/access/manager/AuthorityUtils.sol";
7
+ import {Context} from "@openzeppelin/contracts/utils/Context.sol";
8
+ import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
9
+ import {IAuthority} from "@openzeppelin/contracts/access/manager/IAuthority.sol";
10
+
11
+ import {IAccessManagerSimple} from "./IAccessManagerSimple.sol";
12
+
13
+ /**
14
+ * @dev This contract module makes available a {restricted} modifier. Functions decorated with this modifier will be
15
+ * permissioned according to an "authority": a contract like {AccessManager} that follows the {IAuthority} interface,
16
+ * implementing a policy that allows certain callers to access certain functions.
17
+ *
18
+ * IMPORTANT: The `restricted` modifier should never be used on `internal` functions, judiciously used in `public`
19
+ * functions, and ideally only used in `external` functions. See {restricted}.
20
+ */
21
+ abstract contract AccessManagedSimple is Context, IAccessManaged {
22
+ bool private _initialized;
23
+ address private _authority;
24
+
25
+ bool private _consumingSchedule;
26
+
27
+ function initializeAccessManagedSimple(address initialAuthority) internal {
28
+ require(!_initialized, "AccessManaged: already initialized");
29
+ _setAuthority(initialAuthority);
30
+ _initialized = true;
31
+ }
32
+
33
+
34
+ /**
35
+ * @dev Restricts access to a function as defined by the connected Authority for this contract and the
36
+ * caller and selector of the function that entered the contract.
37
+ *
38
+ * [IMPORTANT]
39
+ * ====
40
+ * In general, this modifier should only be used on `external` functions. It is okay to use it on `public`
41
+ * functions that are used as external entry points and are not called internally. Unless you know what you're
42
+ * doing, it should never be used on `internal` functions. Failure to follow these rules can have critical security
43
+ * implications! This is because the permissions are determined by the function that entered the contract, i.e. the
44
+ * function at the bottom of the call stack, and not the function where the modifier is visible in the source code.
45
+ * ====
46
+ *
47
+ * [WARNING]
48
+ * ====
49
+ * Avoid adding this modifier to the https://docs.soliditylang.org/en/v0.8.20/contracts.html#receive-ether-function[`receive()`]
50
+ * function or the https://docs.soliditylang.org/en/v0.8.20/contracts.html#fallback-function[`fallback()`]. These
51
+ * functions are the only execution paths where a function selector cannot be unambiguosly determined from the calldata
52
+ * since the selector defaults to `0x00000000` in the `receive()` function and similarly in the `fallback()` function
53
+ * if no calldata is provided. (See {_checkCanCall}).
54
+ *
55
+ * The `receive()` function will always panic whereas the `fallback()` may panic depending on the calldata length.
56
+ * ====
57
+ */
58
+ modifier restricted() {
59
+ _checkCanCall(_msgSender(), _msgData());
60
+ _;
61
+ }
62
+
63
+ /// @inheritdoc IAccessManaged
64
+ function authority() public view virtual returns (address) {
65
+ return _authority;
66
+ }
67
+
68
+ /// @inheritdoc IAccessManaged
69
+ function setAuthority(address newAuthority) public virtual {
70
+ address caller = _msgSender();
71
+ if (caller != authority()) {
72
+ revert AccessManagedUnauthorized(caller);
73
+ }
74
+ if (newAuthority.code.length == 0) {
75
+ revert AccessManagedInvalidAuthority(newAuthority);
76
+ }
77
+ _setAuthority(newAuthority);
78
+ }
79
+
80
+ /// @inheritdoc IAccessManaged
81
+ function isConsumingScheduledOp() public view returns (bytes4) {
82
+ return _consumingSchedule ? this.isConsumingScheduledOp.selector : bytes4(0);
83
+ }
84
+
85
+ /**
86
+ * @dev Transfers control to a new authority. Internal function with no access restriction. Allows bypassing the
87
+ * permissions set by the current authority.
88
+ */
89
+ function _setAuthority(address newAuthority) internal virtual {
90
+ _authority = newAuthority;
91
+ emit AuthorityUpdated(newAuthority);
92
+ }
93
+
94
+ /**
95
+ * @dev Reverts if the caller is not allowed to call the function identified by a selector. Panics if the calldata
96
+ * is less than 4 bytes long.
97
+ */
98
+ function _checkCanCall(address caller, bytes calldata data) internal virtual {
99
+ (bool immediate, uint32 delay) = AuthorityUtils.canCallWithDelay(
100
+ authority(),
101
+ caller,
102
+ address(this),
103
+ bytes4(data[0:4])
104
+ );
105
+ if (!immediate) {
106
+ if (delay > 0) {
107
+ _consumingSchedule = true;
108
+ IAccessManagerSimple(authority()).consumeScheduledOp(caller, data);
109
+ _consumingSchedule = false;
110
+ } else {
111
+ revert AccessManagedUnauthorized(caller);
112
+ }
113
+ }
114
+ }
115
+ }