@etherisc/gif-next 0.0.2-b12de3e-067 → 0.0.2-b13fcec-949

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 (378) hide show
  1. package/README.md +73 -1
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +832 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +743 -168
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/components/{BaseComponent.sol/BaseComponent.json → IComponent.sol/IComponent.json} +152 -100
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +743 -26
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +737 -58
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +582 -9
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +675 -258
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +525 -223
  18. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +1 -1
  19. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +15 -15
  20. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  21. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +69 -79
  22. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  23. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +5 -0
  24. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  25. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1016 -393
  26. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +237 -166
  28. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  29. package/artifacts/contracts/instance/Instance.sol/Instance.json +906 -1206
  30. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  31. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +569 -198
  32. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  33. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +120 -263
  34. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  35. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +381 -427
  36. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +295 -154
  38. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  39. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +11 -40
  40. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  41. package/artifacts/contracts/instance/base/{ComponentServiceBase.sol/ComponentServiceBase.json → ComponentService.sol/ComponentService.json} +197 -166
  42. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  43. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  44. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  45. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +40 -10
  46. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  47. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
  48. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  49. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +69 -43
  50. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  51. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  52. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
  53. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  54. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  55. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  56. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  57. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  58. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  59. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +968 -0
  60. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  61. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +665 -0
  62. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
  63. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +450 -280
  64. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  65. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +302 -81
  66. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  67. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +754 -0
  68. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +637 -0
  70. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  71. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1250 -202
  72. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  73. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +450 -73
  74. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  75. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +556 -0
  76. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
  77. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +212 -251
  78. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  79. package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IClaimService.sol/IClaimService.json} +150 -207
  80. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +727 -160
  82. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  83. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +165 -289
  84. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +94 -165
  86. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +35 -187
  88. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +392 -355
  90. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  91. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +321 -96
  92. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +307 -201
  94. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +307 -78
  96. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +229 -220
  98. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +305 -76
  100. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  101. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
  102. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  103. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +244 -133
  104. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  105. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +158 -215
  106. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  107. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
  108. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  109. package/artifacts/contracts/registry/Registry.sol/Registry.json +257 -235
  110. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  111. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  112. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  113. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +202 -318
  114. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  115. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +298 -145
  116. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  117. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
  118. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  119. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +141 -53
  120. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  121. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  122. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  123. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  124. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +40 -29
  125. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  126. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +129 -0
  127. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  128. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +21 -34
  129. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  130. package/artifacts/contracts/{experiment/inheritance/IB.sol/IB.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +18 -20
  131. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  132. package/artifacts/contracts/shared/IService.sol/IService.json +31 -183
  133. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  134. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
  135. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  136. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +120 -27
  137. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  138. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
  139. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  140. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +294 -61
  141. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  142. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +129 -51
  143. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  144. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
  145. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  146. package/artifacts/contracts/shared/Service.sol/Service.json +127 -170
  147. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  148. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
  149. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  150. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  151. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  152. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
  153. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  154. package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
  155. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  156. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +129 -51
  157. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  158. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +6 -6
  159. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  160. package/artifacts/contracts/test/TestService.sol/TestService.json +148 -227
  161. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  162. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  163. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  164. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  165. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +8 -190
  166. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  167. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  168. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  169. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  170. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  172. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
  173. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  174. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  175. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  176. package/artifacts/contracts/types/Fee.sol/FeeLib.json +2 -2
  177. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  178. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  179. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  180. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
  181. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  182. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  183. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  184. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  185. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  186. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  187. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
  188. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  189. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +23 -4
  190. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  191. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  192. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  193. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  194. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  195. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  196. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  197. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  198. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  199. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +25 -7
  200. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
  202. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  203. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
  204. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  205. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  206. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  207. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  208. package/contracts/components/Component.sol +251 -0
  209. package/contracts/components/Distribution.sol +200 -83
  210. package/contracts/components/IComponent.sol +74 -0
  211. package/contracts/components/IDistributionComponent.sol +44 -17
  212. package/contracts/components/IPoolComponent.sol +88 -41
  213. package/contracts/components/IProductComponent.sol +10 -5
  214. package/contracts/components/Pool.sol +209 -181
  215. package/contracts/components/Product.sol +125 -124
  216. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +2 -12
  217. package/contracts/instance/BundleManager.sol +14 -16
  218. package/contracts/instance/Cloneable.sol +7 -2
  219. package/contracts/instance/IInstance.sol +52 -14
  220. package/contracts/instance/IInstanceService.sol +42 -4
  221. package/contracts/instance/Instance.sol +125 -262
  222. package/contracts/instance/InstanceAccessManager.sol +410 -176
  223. package/contracts/instance/InstanceReader.sol +9 -34
  224. package/contracts/instance/InstanceService.sol +334 -138
  225. package/contracts/instance/InstanceServiceManager.sol +6 -9
  226. package/contracts/instance/ObjectManager.sol +10 -29
  227. package/contracts/instance/base/ComponentService.sol +134 -0
  228. package/contracts/instance/base/KeyValueStore.sol +5 -2
  229. package/contracts/instance/base/Lifecycle.sol +11 -2
  230. package/contracts/instance/module/IAccess.sol +36 -20
  231. package/contracts/instance/module/IBundle.sol +2 -1
  232. package/contracts/instance/module/IComponents.sol +35 -0
  233. package/contracts/instance/module/IDistribution.sol +2 -0
  234. package/contracts/instance/module/IPolicy.sol +30 -3
  235. package/contracts/instance/module/ISetup.sol +7 -20
  236. package/contracts/instance/service/ApplicationService.sol +350 -0
  237. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  238. package/contracts/instance/service/BundleService.sol +114 -38
  239. package/contracts/instance/service/BundleServiceManager.sol +6 -9
  240. package/contracts/instance/service/ClaimService.sol +151 -0
  241. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  242. package/contracts/instance/service/DistributionService.sol +397 -48
  243. package/contracts/instance/service/DistributionServiceManager.sol +7 -10
  244. package/contracts/instance/service/IApplicationService.sol +82 -0
  245. package/contracts/instance/service/IBundleService.sol +31 -14
  246. package/contracts/instance/service/IClaimService.sol +61 -0
  247. package/contracts/instance/service/IDistributionService.sol +86 -0
  248. package/contracts/instance/service/IPolicyService.sol +34 -49
  249. package/contracts/instance/service/IPoolService.sol +17 -2
  250. package/contracts/instance/service/PolicyService.sol +207 -312
  251. package/contracts/instance/service/PolicyServiceManager.sol +2 -2
  252. package/contracts/instance/service/PoolService.sol +141 -45
  253. package/contracts/instance/service/PoolServiceManager.sol +6 -9
  254. package/contracts/instance/service/ProductService.sol +108 -40
  255. package/contracts/instance/service/ProductServiceManager.sol +2 -2
  256. package/contracts/registry/ChainNft.sol +9 -1
  257. package/contracts/registry/IRegistry.sol +39 -19
  258. package/contracts/registry/IRegistryService.sol +30 -13
  259. package/contracts/registry/ITransferInterceptor.sol +1 -0
  260. package/contracts/registry/Registry.sol +243 -224
  261. package/contracts/registry/RegistryAccessManager.sol +216 -0
  262. package/contracts/registry/RegistryService.sol +96 -171
  263. package/contracts/registry/RegistryServiceManager.sol +21 -39
  264. package/contracts/registry/ReleaseManager.sol +322 -0
  265. package/contracts/registry/TokenRegistry.sol +22 -17
  266. package/contracts/shared/ERC165.sol +14 -12
  267. package/contracts/shared/INftOwnable.sol +11 -10
  268. package/contracts/shared/IPolicyHolder.sol +26 -0
  269. package/contracts/shared/IRegisterable.sol +4 -6
  270. package/contracts/shared/IRegistryLinked.sol +12 -0
  271. package/contracts/shared/IService.sol +4 -1
  272. package/contracts/shared/IVersionable.sol +4 -47
  273. package/contracts/shared/NftOwnable.sol +66 -80
  274. package/contracts/shared/PolicyHolder.sol +81 -0
  275. package/contracts/shared/ProxyManager.sol +100 -25
  276. package/contracts/shared/Registerable.sol +16 -32
  277. package/contracts/shared/RegistryLinked.sol +48 -0
  278. package/contracts/shared/Service.sol +25 -22
  279. package/contracts/shared/TokenHandler.sol +11 -5
  280. package/contracts/shared/Versionable.sol +4 -92
  281. package/contracts/test/TestRegisterable.sol +1 -1
  282. package/contracts/test/TestService.sol +4 -3
  283. package/contracts/types/Blocknumber.sol +1 -0
  284. package/contracts/types/ClaimId.sol +52 -0
  285. package/contracts/types/DistributorType.sol +2 -2
  286. package/contracts/types/Fee.sol +1 -0
  287. package/contracts/types/NftId.sol +8 -0
  288. package/contracts/types/ObjectType.sol +10 -5
  289. package/contracts/types/PayoutId.sol +54 -0
  290. package/contracts/types/Referral.sol +4 -0
  291. package/contracts/types/RoleId.sol +26 -21
  292. package/contracts/types/Seconds.sol +54 -0
  293. package/contracts/types/StateId.sol +1 -0
  294. package/contracts/types/Timestamp.sol +13 -13
  295. package/contracts/types/UFixed.sol +1 -0
  296. package/contracts/types/Version.sol +1 -0
  297. package/package.json +3 -3
  298. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  299. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  300. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -368
  301. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  302. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  303. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  304. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  305. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  306. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  307. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  308. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  309. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  310. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  311. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  312. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  313. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  314. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  315. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  316. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  317. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  318. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  319. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  320. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  321. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  322. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  323. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  324. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  325. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  326. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  327. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  328. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  329. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  330. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  331. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  332. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  333. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  334. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  335. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  336. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  337. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  338. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  339. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  340. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  341. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  342. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  343. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +0 -448
  344. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  345. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +0 -763
  346. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  347. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  348. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  349. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  350. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  351. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  352. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  353. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +0 -442
  354. package/contracts/components/BaseComponent.sol +0 -132
  355. package/contracts/components/IBaseComponent.sol +0 -31
  356. package/contracts/experiment/cloning/Cloner.sol +0 -47
  357. package/contracts/experiment/errors/Require.sol +0 -38
  358. package/contracts/experiment/errors/Revert.sol +0 -44
  359. package/contracts/experiment/inheritance/A.sol +0 -53
  360. package/contracts/experiment/inheritance/B.sol +0 -28
  361. package/contracts/experiment/inheritance/C.sol +0 -34
  362. package/contracts/experiment/inheritance/IA.sol +0 -13
  363. package/contracts/experiment/inheritance/IB.sol +0 -10
  364. package/contracts/experiment/inheritance/IC.sol +0 -12
  365. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  366. package/contracts/experiment/statemachine/ISM.sol +0 -25
  367. package/contracts/experiment/statemachine/SM.sol +0 -57
  368. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  369. package/contracts/experiment/types/TypeA.sol +0 -47
  370. package/contracts/experiment/types/TypeB.sol +0 -29
  371. package/contracts/instance/IAccessManagerSimple.sol +0 -391
  372. package/contracts/instance/IInstanceBase.sol +0 -26
  373. package/contracts/instance/InstanceBase.sol +0 -41
  374. package/contracts/instance/base/ComponentServiceBase.sol +0 -72
  375. package/contracts/instance/base/IInstanceBase.sol +0 -23
  376. package/contracts/instance/service/ComponentOwnerService.sol +0 -317
  377. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  378. package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -16,7 +16,7 @@ contract PolicyServiceManager is ProxyManager {
16
16
  constructor(
17
17
  address registryAddress
18
18
  )
19
- ProxyManager()
19
+ ProxyManager(registryAddress)
20
20
  {
21
21
  PolicyService svc = new PolicyService();
22
22
  bytes memory data = abi.encode(registryAddress, address(this));
@@ -39,7 +39,7 @@ contract PolicyServiceManager is ProxyManager {
39
39
  // address(_productService));
40
40
 
41
41
  // implies that after this constructor call only upgrade functionality is available
42
- _isDeployed = true;
42
+ // _isDeployed = true;
43
43
  }
44
44
 
45
45
  //--- view functions ----------------------------------------------------//
@@ -6,41 +6,42 @@ import {IRegistry} from "../../registry/IRegistry.sol";
6
6
  import {IInstance} from "../../instance/IInstance.sol";
7
7
  import {IBundle} from "../../instance/module/IBundle.sol";
8
8
  import {TokenHandler} from "../../instance/module/ITreasury.sol";
9
- import {ISetup} from "../module/ISetup.sol";
9
+ import {IComponents} from "../module/IComponents.sol";
10
10
  import {IPolicy} from "../module/IPolicy.sol";
11
11
 
12
12
  import {IVersionable} from "../../shared/IVersionable.sol";
13
13
  import {Versionable} from "../../shared/Versionable.sol";
14
14
  import {INftOwnable} from "../../shared/INftOwnable.sol";
15
15
 
16
+ import {Fee, FeeLib} from "../../types/Fee.sol";
16
17
  import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
17
- import {POOL, BUNDLE} from "../../types/ObjectType.sol";
18
- import {POOL_OWNER_ROLE, RoleId} from "../../types/RoleId.sol";
18
+ import {ObjectType, POOL, BUNDLE} from "../../types/ObjectType.sol";
19
+ import {PUBLIC_ROLE, POOL_OWNER_ROLE, POLICY_SERVICE_ROLE, RoleId} from "../../types/RoleId.sol";
19
20
  import {Fee, FeeLib} from "../../types/Fee.sol";
20
21
  import {Version, VersionLib} from "../../types/Version.sol";
21
22
  import {KEEP_STATE, StateId} from "../../types/StateId.sol";
22
23
  import {TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
24
+ import {Version, VersionLib} from "../../types/Version.sol";
23
25
 
24
26
  import {IService} from "../../shared/IService.sol";
25
27
  import {Service} from "../../shared/Service.sol";
26
28
  import {BundleManager} from "../BundleManager.sol";
27
- import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
29
+ import {ComponentService} from "../base/ComponentService.sol";
28
30
  import {IPoolService} from "./IPoolService.sol";
29
31
  import {IRegistryService} from "../../registry/IRegistryService.sol";
30
32
  import {InstanceService} from "../InstanceService.sol";
31
33
  import {InstanceReader} from "../InstanceReader.sol";
32
- import {IBaseComponent} from "../../components/IBaseComponent.sol";
34
+ import {IComponent} from "../../components/IComponent.sol";
35
+ import {IPoolComponent} from "../../components/IPoolComponent.sol";
33
36
 
34
37
  string constant POOL_SERVICE_NAME = "PoolService";
35
38
 
36
39
  contract PoolService is
37
- ComponentServiceBase,
40
+ ComponentService,
38
41
  IPoolService
39
42
  {
40
43
  using NftIdLib for NftId;
41
44
 
42
- string public constant NAME = "PoolService";
43
-
44
45
  address internal _registryAddress;
45
46
 
46
47
  function _initialize(
@@ -56,69 +57,164 @@ contract PoolService is
56
57
  (registryAddress, initialOwner) = abi.decode(data, (address, address));
57
58
  // TODO while PoolService is not deployed in PoolServiceManager constructor
58
59
  // owner is PoolServiceManager deployer
59
- _initializeService(registryAddress, owner);
60
-
61
- _registerInterface(type(IPoolService).interfaceId);
60
+ initializeService(registryAddress, owner);
61
+ registerInterface(type(IPoolService).interfaceId);
62
62
  }
63
63
 
64
- function getName() public pure override(Service, IService) returns(string memory name) {
65
- return NAME;
64
+ function getDomain() public pure override(Service, IService) returns(ObjectType) {
65
+ return POOL();
66
66
  }
67
67
 
68
+ /*function register(address poolAddress)
69
+ external
70
+ returns(NftId poolNftId)
71
+ {
72
+ (
73
+ IComponent component,
74
+ address owner,
75
+ IInstance instance,
76
+ NftId instanceNftId
77
+ ) = _checkComponentForRegistration(
78
+ poolAddress,
79
+ POOL(),
80
+ POOL_OWNER_ROLE());
81
+
82
+ IPoolComponent pool = IPoolComponent(poolAddress);
83
+ IRegistry.ObjectInfo memory registryInfo = getRegistryService().registerPool(pool, owner);
84
+ pool.linkToRegisteredNftId();
85
+ poolNftId = registryInfo.nftId;
86
+
87
+ instance.createPoolSetup(poolNftId, pool.getSetupInfo());
88
+
89
+ bytes4[][] memory selectors = new bytes4[][](2);
90
+ selectors[0] = new bytes4[](1);
91
+ selectors[1] = new bytes4[](1);
92
+
93
+ selectors[0][0] = IPoolComponent.setFees.selector;
94
+ selectors[1][0] = IPoolComponent.verifyApplication.selector;
95
+
96
+ RoleId[] memory roles = new RoleId[](2);
97
+ roles[0] = POOL_OWNER_ROLE();
98
+ roles[1] = POLICY_SERVICE_ROLE();
99
+
100
+ getInstanceService().createGifTarget(
101
+ instanceNftId,
102
+ poolAddress,
103
+ pool.getName(),
104
+ selectors,
105
+ roles);
106
+ }*/
107
+
68
108
  function register(address poolAddress)
69
109
  external
70
110
  returns(NftId poolNftId)
71
111
  {
72
- address poolOwner = msg.sender;
73
- IBaseComponent pool = IBaseComponent(poolAddress);
112
+ (
113
+ IComponent component,
114
+ address owner,
115
+ IInstance instance,
116
+ NftId instanceNftId
117
+ ) = _checkComponentForRegistration(
118
+ poolAddress,
119
+ POOL(),
120
+ POOL_OWNER_ROLE());
121
+
122
+ IPoolComponent pool = IPoolComponent(poolAddress);
123
+ IRegistry.ObjectInfo memory registryInfo = getRegistryService().registerPool(pool, owner);
124
+ pool.linkToRegisteredNftId();
125
+ poolNftId = registryInfo.nftId;
126
+
127
+ // amend component info with pool specific token handler
128
+ IComponents.ComponentInfo memory componentInfo = pool.getComponentInfo();
129
+ componentInfo.tokenHandler = new TokenHandler(address(componentInfo.token));
130
+
131
+ // save amended component info with instance
132
+ instance.createPoolSetup(poolNftId, componentInfo);
133
+
134
+ bytes4[][] memory selectors = new bytes4[][](2);
135
+ selectors[0] = new bytes4[](1);
136
+ selectors[1] = new bytes4[](1);
137
+
138
+ selectors[0][0] = IPoolComponent.setFees.selector;
139
+ selectors[1][0] = IPoolComponent.verifyApplication.selector;
140
+
141
+ RoleId[] memory roles = new RoleId[](2);
142
+ roles[0] = POOL_OWNER_ROLE();
143
+ roles[1] = POLICY_SERVICE_ROLE();
144
+
145
+ getInstanceService().createGifTarget(
146
+ instanceNftId,
147
+ poolAddress,
148
+ pool.getName(),
149
+ selectors,
150
+ roles);
151
+ }
74
152
 
75
- IRegistry.ObjectInfo memory info;
76
- bytes memory data;
77
- (info, data) = getRegistryService().registerPool(pool, poolOwner);
78
153
 
79
- IInstance instance = _getInstance(info);
154
+ function setMaxCapitalAmount(uint256 maxCapitalAmount)
155
+ external
156
+ virtual
157
+ {
158
+ (IRegistry.ObjectInfo memory registryInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
159
+ InstanceReader instanceReader = instance.getInstanceReader();
160
+ NftId poolNftId = registryInfo.nftId;
80
161
 
81
- bool hasRole = getInstanceService().hasRole(
82
- poolOwner,
83
- POOL_OWNER_ROLE(),
84
- address(instance));
162
+ IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
163
+ IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
164
+ uint256 previousMaxCapitalAmount = poolInfo.maxCapitalAmount;
85
165
 
86
- if(!hasRole) {
87
- revert ExpectedRoleMissing(POOL_OWNER_ROLE(), poolOwner);
88
- }
166
+ poolInfo.maxCapitalAmount = maxCapitalAmount;
167
+ componentInfo.data = abi.encode(poolInfo);
168
+ instance.updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
89
169
 
90
- poolNftId = info.nftId;
91
- ISetup.PoolSetupInfo memory initialSetup = _decodeAndVerifyPoolSetup(data);
92
- instance.createPoolSetup(poolNftId, initialSetup);
170
+ emit LogPoolServiceMaxCapitalAmountUpdated(poolNftId, previousMaxCapitalAmount, maxCapitalAmount);
93
171
  }
94
172
 
95
- function _decodeAndVerifyPoolSetup(bytes memory data) internal returns(ISetup.PoolSetupInfo memory setup)
173
+ function setBundleOwnerRole(RoleId bundleOwnerRole)
174
+ external
175
+ virtual
96
176
  {
97
- setup = abi.decode(
98
- data,
99
- (ISetup.PoolSetupInfo)
100
- );
177
+ (IRegistry.ObjectInfo memory registryInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
178
+ InstanceReader instanceReader = instance.getInstanceReader();
179
+ NftId poolNftId = registryInfo.nftId;
180
+
181
+ IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
182
+ IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
183
+
184
+ // bundle owner role may only be set once per pool
185
+ if(poolInfo.bundleOwnerRole != PUBLIC_ROLE()) {
186
+ revert ErrorPoolServiceBundleOwnerRoleAlreadySet(poolNftId);
187
+ }
101
188
 
102
- // TODO add checks if applicable
189
+ poolInfo.bundleOwnerRole = bundleOwnerRole;
190
+ componentInfo.data = abi.encode(poolInfo);
191
+ instance.updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
192
+
193
+ emit LogPoolServiceBundleOwnerRoleSet(poolNftId, bundleOwnerRole);
103
194
  }
104
195
 
196
+
105
197
  function setFees(
106
198
  Fee memory poolFee,
107
199
  Fee memory stakingFee,
108
200
  Fee memory performanceFee
109
201
  )
110
202
  external
111
- override
203
+ virtual
112
204
  {
113
- (IRegistry.ObjectInfo memory poolInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
205
+ (IRegistry.ObjectInfo memory registryInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
114
206
  InstanceReader instanceReader = instance.getInstanceReader();
115
- NftId poolNftId = poolInfo.nftId;
116
-
117
- ISetup.PoolSetupInfo memory poolSetupInfo = instanceReader.getPoolSetupInfo(poolNftId);
118
- poolSetupInfo.poolFee = poolFee;
119
- poolSetupInfo.stakingFee = stakingFee;
120
- poolSetupInfo.performanceFee = performanceFee;
121
-
122
- instance.updatePoolSetup(poolNftId, poolSetupInfo, KEEP_STATE());
207
+ NftId poolNftId = registryInfo.nftId;
208
+
209
+ IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
210
+ IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
211
+
212
+ poolInfo.poolFee = poolFee;
213
+ poolInfo.stakingFee = stakingFee;
214
+ poolInfo.performanceFee = performanceFee;
215
+ componentInfo.data = abi.encode(poolInfo);
216
+ instance.updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
217
+
218
+ // TODO add logging
123
219
  }
124
220
  }
@@ -6,7 +6,7 @@ import {ProxyManager} from "../../shared/ProxyManager.sol";
6
6
  import {PoolService} from "./PoolService.sol";
7
7
  import {Registry} from "../../registry/Registry.sol";
8
8
  import {RegistryService} from "../../registry/RegistryService.sol";
9
- import {VersionLib} from "../../types/Version.sol";
9
+ import {REGISTRY} from "../../types/ObjectType.sol";
10
10
 
11
11
  contract PoolServiceManager is ProxyManager {
12
12
 
@@ -16,7 +16,7 @@ contract PoolServiceManager is ProxyManager {
16
16
  constructor(
17
17
  address registryAddress
18
18
  )
19
- ProxyManager()
19
+ ProxyManager(registryAddress)
20
20
  {
21
21
  PoolService poolSrv = new PoolService();
22
22
  bytes memory data = abi.encode(registryAddress, address(this));
@@ -26,10 +26,10 @@ contract PoolServiceManager is ProxyManager {
26
26
 
27
27
  _poolService = PoolService(address(versionable));
28
28
 
29
- Registry registry = Registry(registryAddress);
30
- address registryServiceAddress = registry.getServiceAddress("RegistryService", VersionLib.toVersion(3, 0, 0).toMajorPart());
31
- RegistryService registryService = RegistryService(registryServiceAddress);
32
- // TODO this must have a role or own nft to register service
29
+ // TODO `this` must have a role or own nft to register service
30
+ //Registry registry = Registry(registryAddress);
31
+ //address registryServiceAddress = registry.getServiceAddress(REGISTRY(), _poolService.getMajorVersion());
32
+ //RegistryService registryService = RegistryService(registryServiceAddress);
33
33
  //registryService.registerService(_poolService);
34
34
 
35
35
  // TODO no nft to link yet
@@ -37,9 +37,6 @@ contract PoolServiceManager is ProxyManager {
37
37
  //_linkToNftOwnable(
38
38
  // address(registryAddress),
39
39
  // address(_poolService));
40
-
41
- // implies that after this constructor call only upgrade functionality is available
42
- _isDeployed = true;
43
40
  }
44
41
 
45
42
  //--- view functions ----------------------------------------------------//
@@ -4,7 +4,7 @@ pragma solidity ^0.8.19;
4
4
  import {IRegistry} from "../../registry/IRegistry.sol";
5
5
  import {IProductComponent} from "../../components/IProductComponent.sol";
6
6
  import {Product} from "../../components/Product.sol";
7
- import {IBaseComponent} from "../../components/IBaseComponent.sol";
7
+ import {IComponent} from "../../components/IComponent.sol";
8
8
  import {IPoolComponent} from "../../components/IPoolComponent.sol";
9
9
  import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
10
10
  import {IInstance} from "../IInstance.sol";
@@ -23,7 +23,7 @@ import {Versionable} from "../../shared/Versionable.sol";
23
23
  import {Timestamp, zeroTimestamp} from "../../types/Timestamp.sol";
24
24
  import {UFixed, UFixedLib} from "../../types/UFixed.sol";
25
25
  import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
26
- import {ObjectType, INSTANCE, PRODUCT, POLICY} from "../../types/ObjectType.sol";
26
+ import {ObjectType, PRODUCT, POOL, POLICY} from "../../types/ObjectType.sol";
27
27
  import {APPLIED, UNDERWRITTEN, ACTIVE, KEEP_STATE} from "../../types/StateId.sol";
28
28
  import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
29
29
  import {Fee, FeeLib} from "../../types/Fee.sol";
@@ -35,20 +35,15 @@ import {RoleId, PRODUCT_OWNER_ROLE} from "../../types/RoleId.sol";
35
35
 
36
36
  import {IService} from "../../shared/IService.sol";
37
37
  import {Service} from "../../shared/Service.sol";
38
- import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
38
+ import {ComponentService} from "../base/ComponentService.sol";
39
39
  import {IProductService} from "./IProductService.sol";
40
40
  import {InstanceReader} from "../InstanceReader.sol";
41
41
  import {IPoolService} from "./PoolService.sol";
42
- import {POOL_SERVICE_NAME} from "./PoolService.sol";
43
-
44
- string constant PRODUCT_SERVICE_NAME = "ProductService";
45
42
 
46
43
  // TODO or name this ProtectionService to have Product be something more generic (loan, savings account, ...)
47
- contract ProductService is ComponentServiceBase, IProductService {
44
+ contract ProductService is ComponentService, IProductService {
48
45
  using NftIdLib for NftId;
49
46
 
50
- string public constant NAME = "ProductService";
51
-
52
47
  IPoolService internal _poolService;
53
48
 
54
49
  event LogProductServiceSender(address sender);
@@ -65,52 +60,125 @@ contract ProductService is ComponentServiceBase, IProductService {
65
60
  address initialOwner;
66
61
  (registryAddress, initialOwner) = abi.decode(data, (address, address));
67
62
 
68
- _initializeService(registryAddress, owner);
63
+ initializeService(registryAddress, owner);
69
64
 
70
- _poolService = IPoolService(_registry.getServiceAddress(POOL_SERVICE_NAME, getMajorVersion()));
65
+ _poolService = IPoolService(getRegistry().getServiceAddress(POOL(), getMajorVersion()));
71
66
 
72
- _registerInterface(type(IProductService).interfaceId);
67
+ registerInterface(type(IProductService).interfaceId);
73
68
  }
74
69
 
75
70
 
76
- function getName() public pure override(IService, Service) returns(string memory name) {
77
- return NAME;
78
- }
79
-
80
71
  function register(address productAddress)
81
72
  external
82
73
  returns(NftId productNftId)
83
74
  {
84
- address productOwner = msg.sender;
85
- IBaseComponent product = IBaseComponent(productAddress);
86
-
87
- IRegistry.ObjectInfo memory info;
88
- bytes memory data;
89
- (info, data) = getRegistryService().registerProduct(product, productOwner);
90
-
91
- IInstance instance = _getInstance(info);
92
- bool hasRole = getInstanceService().hasRole(
93
- productOwner,
94
- PRODUCT_OWNER_ROLE(),
95
- address(instance));
96
-
97
- if(!hasRole) {
98
- revert ExpectedRoleMissing(PRODUCT_OWNER_ROLE(), productOwner);
99
- }
100
-
101
- productNftId = info.nftId;
102
- ISetup.ProductSetupInfo memory initialSetup = _decodeAndVerifyProductSetup(data);
103
- instance.createProductSetup(productNftId, initialSetup);
75
+ (
76
+ IComponent component,
77
+ address owner,
78
+ IInstance instance,
79
+ NftId instanceNftId
80
+ ) = _checkComponentForRegistration(
81
+ productAddress,
82
+ PRODUCT(),
83
+ PRODUCT_OWNER_ROLE());
84
+
85
+ IProductComponent product = IProductComponent(productAddress);
86
+ IRegistry.ObjectInfo memory productInfo = getRegistryService().registerProduct(product, owner);
87
+ productNftId = productInfo.nftId;
88
+ _createProductSetup(
89
+ instance,
90
+ product,
91
+ productNftId);
92
+ }
93
+
94
+
95
+ function _createProductSetup(
96
+ IInstance instance,
97
+ IProductComponent product,
98
+ NftId productNftId
99
+ )
100
+ internal
101
+ returns (string memory name)
102
+ {
103
+ // wire distribution and pool components to product component
104
+ ISetup.ProductSetupInfo memory setup = product.getSetupInfo();
105
+ IComponent distribution = IComponent(getRegistry().getObjectInfo(setup.distributionNftId).objectAddress);
106
+ IComponent pool = IComponent(getRegistry().getObjectInfo(setup.poolNftId).objectAddress);
107
+
108
+ distribution.setProductNftId(productNftId);
109
+ pool.setProductNftId(productNftId);
110
+ product.setProductNftId(productNftId);
111
+ product.linkToRegisteredNftId();
112
+
113
+ // create product setup in instance
114
+ instance.createProductSetup(productNftId, product.getSetupInfo());
115
+
116
+ bytes4[][] memory selectors = new bytes4[][](1);
117
+ selectors[0] = new bytes4[](1);
118
+ selectors[0][0] = IProductComponent.setFees.selector;
119
+
120
+ RoleId[] memory roles = new RoleId[](1);
121
+ roles[0] = PRODUCT_OWNER_ROLE();
122
+
123
+ // create target for instane access manager
124
+ getInstanceService().createGifTarget(
125
+ getRegistry().getNftId(address(instance)),
126
+ address(product),
127
+ product.getName(),
128
+ selectors,
129
+ roles);
104
130
  }
105
131
 
106
- function _decodeAndVerifyProductSetup(bytes memory data) internal returns(ISetup.ProductSetupInfo memory setup)
132
+ function getDomain() public pure override(IService, Service) returns(ObjectType) {
133
+ return PRODUCT();
134
+ }
135
+
136
+
137
+ function _decodeAndVerifyProductData(bytes memory data)
138
+ internal
139
+ returns(string memory name, ISetup.ProductSetupInfo memory setup)
107
140
  {
108
- setup = abi.decode(
141
+ (name, setup) = abi.decode(
109
142
  data,
110
- (ISetup.ProductSetupInfo)
143
+ (string, ISetup.ProductSetupInfo)
111
144
  );
112
145
 
113
- // TODO add checks if applicable
146
+ // TODO add checks
147
+ // if(wallet == address(0)) {
148
+ // revert WalletIsZero();
149
+ // }
150
+
151
+ // IRegistry.ObjectInfo memory tokenInfo = getRegistry().getObjectInfo(address(info.token));
152
+
153
+ // if(tokenInfo.objectType != TOKEN()) {
154
+ // revert InvalidToken();
155
+ // }
156
+
157
+ // IRegistry.ObjectInfo memory poolInfo = getRegistry().getObjectInfo(info.poolNftId);
158
+
159
+ // if(poolInfo.objectType != POOL()) {
160
+ // revert InvalidPool();
161
+ // }
162
+
163
+ // if(poolInfo.parentNftId != instanceNftId) {
164
+ // revert InvalidPoolsInstance();
165
+ // }
166
+ // // TODO pool have the same token
167
+ // //ITreasury.PoolSetup memory poolSetup = instance.getPoolSetup(info.poolNftId);
168
+ // //require(tokenInfo.objectAddress == address(poolSetup.token), "ERROR:COS-018:PRODUCT_POOL_TOKEN_MISMATCH");
169
+ // // TODO pool is not linked
170
+
171
+ // IRegistry.ObjectInfo memory distributionInfo = getRegistry().getObjectInfo(info.distributionNftId);
172
+
173
+ // if(distributionInfo.objectType != DISTRIBUTION()) {
174
+ // revert InvalidDistribution();
175
+ // }
176
+
177
+ // if(distributionInfo.parentNftId != instanceNftId) {
178
+ // revert InvalidDistributionsInstance();
179
+ // }
180
+ // // TODO distribution have the same token
181
+ // // TODO distribution is not linked
114
182
  }
115
183
 
116
184
  function setFees(
@@ -16,7 +16,7 @@ contract ProductServiceManager is ProxyManager {
16
16
  constructor(
17
17
  address registryAddress
18
18
  )
19
- ProxyManager()
19
+ ProxyManager(registryAddress)
20
20
  {
21
21
  ProductService svc = new ProductService();
22
22
  bytes memory data = abi.encode(registryAddress, address(this));
@@ -39,7 +39,7 @@ contract ProductServiceManager is ProxyManager {
39
39
  // address(_productService));
40
40
 
41
41
  // implies that after this constructor call only upgrade functionality is available
42
- _isDeployed = true;
42
+ // _isDeployed = true;
43
43
  }
44
44
 
45
45
  //--- view functions ----------------------------------------------------//
@@ -59,7 +59,7 @@ contract ChainNft is ERC721Enumerable {
59
59
  }
60
60
 
61
61
  _chainIdMultiplier = 10 ** _chainIdDigits;
62
- _idNext = 4;
62
+ _idNext = 3;
63
63
  }
64
64
 
65
65
  /**
@@ -95,6 +95,10 @@ contract ChainNft is ERC721Enumerable {
95
95
 
96
96
  _totalMinted++;
97
97
  _safeMint(to, tokenId);
98
+
99
+ if(interceptor != address(0)) {
100
+ ITransferInterceptor(interceptor).nftMint(to, tokenId);
101
+ }
98
102
  }
99
103
 
100
104
 
@@ -195,6 +199,10 @@ contract ChainNft is ERC721Enumerable {
195
199
  _chainIdDigits;
196
200
  }
197
201
 
202
+ function getNextTokenId() external view returns (uint256) {
203
+ return calculateTokenId(_idNext);
204
+ }
205
+
198
206
  function _getNextTokenId() private returns (uint256 id) {
199
207
  id = calculateTokenId(_idNext);
200
208
  _idNext++;
@@ -3,29 +3,31 @@ pragma solidity ^0.8.20;
3
3
 
4
4
  import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
5
 
6
- import {ChainNft} from "./ChainNft.sol";
7
6
  import {NftId} from "../types/NftId.sol";
8
7
  import {ObjectType} from "../types/ObjectType.sol";
9
8
  import {VersionPart} from "../types/Version.sol";
9
+ import {Timestamp} from "../types/Timestamp.sol";
10
10
 
11
11
  interface IRegistry is IERC165 {
12
12
 
13
- event LogInitialMajorVersionSet(VersionPart majorVersion);
14
- event LogMajorVersionSet(VersionPart majorVersionMax);
15
- event LogRegistration(ObjectInfo info);
16
- event LogServiceNameRegistration(string serviceName, VersionPart majorVersion);
13
+ event LogRegistration(NftId nftId, NftId parentNftId, ObjectType objectType, bool isInterceptor, address objectAddress, address initialOwner);
14
+ event LogServiceRegistration(VersionPart majorVersion, ObjectType domain);
17
15
 
18
- // setMajorVersion()
19
- error NotOwner(address account);
20
- error MajorVersionMaxIncreaseInvalid(VersionPart newMajorVersionMax, VersionPart existingMaxMajorVersion);
16
+ // registerService()
17
+ error CallerNotReleaseManager();
18
+ error ServiceAlreadyRegistered(address service);
21
19
 
22
20
  // register()
23
- error NotRegistryService();
21
+ error CallerNotRegistryService();
22
+ error ServiceRegistration();
23
+
24
+ // registerWithCustomTypes()
25
+ error CoreTypeRegistration();
26
+
27
+ // _register()
24
28
  error ZeroParentAddress();
25
29
  error InvalidTypesCombination(ObjectType objectType, ObjectType parentType);
26
30
  error ContractAlreadyRegistered(address objectAddress);
27
- error InvalidServiceVersion(VersionPart majorVersion);
28
- error ServiceNameAlreadyRegistered(string name, VersionPart majorVersion);
29
31
 
30
32
  struct ObjectInfo {
31
33
  NftId nftId;
@@ -38,15 +40,29 @@ interface IRegistry is IERC165 {
38
40
  }// TODO delete nftId and initialOwner(if not used) from struct
39
41
  // TODO strong disagree, keep nftId there (lets keep get object info return object consistent)
40
42
 
41
- function setMajorVersion(VersionPart newMajorVersionMax) external;
43
+ struct ReleaseInfo {
44
+ ObjectType[] domains;
45
+ Timestamp createdAt;
46
+ //Timestamp updatedAt;
47
+ }
48
+
49
+ function registerService(
50
+ ObjectInfo memory serviceInfo,
51
+ VersionPart serviceVersion,
52
+ ObjectType serviceDomain
53
+ ) external returns(NftId nftId);
42
54
 
43
55
  function register(ObjectInfo memory info) external returns (NftId nftId);
44
56
 
45
- function getMajorVersionMin() external view returns (VersionPart);
57
+ function registerWithCustomType(ObjectInfo memory info) external returns (NftId nftId);
58
+
59
+ function getInitialVersion() external view returns (VersionPart);
46
60
 
47
- function getMajorVersionMax() external view returns (VersionPart);
61
+ function getNextVersion() external view returns (VersionPart);
48
62
 
49
- function getMajorVersion() external view returns (VersionPart);
63
+ function getLatestVersion() external view returns (VersionPart);
64
+
65
+ function getReleaseInfo(VersionPart version) external view returns (ReleaseInfo memory);
50
66
 
51
67
  function getObjectCount() external view returns (uint256);
52
68
 
@@ -68,14 +84,18 @@ interface IRegistry is IERC165 {
68
84
 
69
85
  function isRegisteredService(address contractAddress) external view returns (bool);
70
86
 
71
- function getServiceName(NftId nftId) external view returns (string memory name);
87
+ function isRegisteredComponent(address object) external view returns (bool);
88
+
89
+ function isValidRelease(VersionPart version) external view returns (bool);
72
90
 
73
91
  function getServiceAddress(
74
- string memory serviceName,
75
- VersionPart majorVersion
92
+ ObjectType serviceDomain,
93
+ VersionPart releaseVersion
76
94
  ) external view returns (address serviceAddress);
77
95
 
78
- function getChainNft() external view returns (ChainNft);
96
+ function getReleaseManagerAddress() external view returns (address);
97
+
98
+ function getChainNftAddress() external view returns (address);
79
99
 
80
100
  function getOwner() external view returns (address);
81
101
  }