@etherisc/gif-next 0.0.2-e42b0ca-323 → 0.0.2-e4b632c-016

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