@etherisc/gif-next 0.0.2-7b86057-523 → 0.0.2-7bdebe2-893

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (353) hide show
  1. package/README.md +8 -13
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
  3. package/artifacts/contracts/components/Component.sol/Component.json +315 -98
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +668 -141
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IComponent.sol/IComponent.json +241 -60
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +438 -86
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +489 -163
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +250 -137
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +626 -189
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +427 -178
  18. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  19. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  20. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  21. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +64 -50
  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 +1562 -814
  26. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +227 -213
  28. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  29. package/artifacts/contracts/instance/Instance.sol/Instance.json +1119 -785
  30. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  31. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +463 -167
  32. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  33. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +418 -230
  34. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  35. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +439 -379
  36. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +355 -104
  38. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  39. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +8 -13
  40. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +1 -1
  41. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +197 -169
  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 +58 -75
  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 +1092 -0
  60. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  61. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +672 -0
  62. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
  63. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +527 -338
  64. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  65. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +344 -93
  66. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  67. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +1400 -0
  68. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +760 -0
  70. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  71. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1282 -256
  72. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  73. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +430 -87
  74. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  75. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +619 -0
  76. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
  77. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +279 -264
  78. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  79. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +743 -0
  80. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +800 -159
  82. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  83. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +159 -274
  84. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +701 -118
  86. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +71 -160
  88. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +338 -412
  90. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  91. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +299 -128
  92. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +1062 -198
  94. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +384 -89
  96. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +231 -223
  98. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +298 -95
  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 +34 -2
  104. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  105. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +70 -193
  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 +47 -15
  110. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
  111. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +2 -2
  112. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  113. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +182 -232
  114. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  115. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +287 -94
  116. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  117. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +23 -11
  118. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  119. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +128 -37
  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 +27 -29
  125. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  126. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +189 -0
  127. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  128. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +8 -29
  129. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  130. package/artifacts/contracts/{experiment/inheritance/IA.sol/ISharedA.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +15 -17
  131. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  132. package/artifacts/contracts/shared/IService.sol/IService.json +71 -160
  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 +100 -33
  137. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  138. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +302 -0
  139. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  140. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +283 -76
  141. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  142. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +115 -58
  143. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  144. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +71 -0
  145. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  146. package/artifacts/contracts/shared/Service.sol/Service.json +172 -160
  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 +115 -58
  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 +190 -210
  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/Amount.sol/AmountLib.dbg.json +4 -0
  169. package/artifacts/contracts/types/Amount.sol/AmountLib.json +209 -0
  170. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  172. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  173. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  174. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +179 -0
  175. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  176. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  177. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  178. package/artifacts/contracts/types/Fee.sol/FeeLib.json +40 -9
  179. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  180. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  181. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  182. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
  183. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  184. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  185. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  187. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  188. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  189. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +209 -0
  190. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  191. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +23 -4
  192. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  193. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  194. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  195. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  196. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  197. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  198. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  199. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  200. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +38 -7
  202. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  203. package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
  204. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  205. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
  206. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  207. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  208. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  209. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  210. package/contracts/components/Component.sol +134 -78
  211. package/contracts/components/Distribution.sol +190 -57
  212. package/contracts/components/IComponent.sol +62 -15
  213. package/contracts/components/IDistributionComponent.sol +39 -15
  214. package/contracts/components/IPoolComponent.sol +84 -31
  215. package/contracts/components/IProductComponent.sol +3 -2
  216. package/contracts/components/Pool.sol +223 -148
  217. package/contracts/components/Product.sol +221 -115
  218. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
  219. package/contracts/instance/BundleManager.sol +10 -9
  220. package/contracts/instance/Cloneable.sol +7 -2
  221. package/contracts/instance/IInstance.sol +51 -19
  222. package/contracts/instance/IInstanceService.sol +33 -11
  223. package/contracts/instance/Instance.sol +143 -94
  224. package/contracts/instance/InstanceAccessManager.sol +389 -160
  225. package/contracts/instance/InstanceReader.sol +85 -12
  226. package/contracts/instance/InstanceService.sol +273 -224
  227. package/contracts/instance/InstanceServiceManager.sol +1 -1
  228. package/contracts/instance/ObjectManager.sol +6 -8
  229. package/contracts/instance/base/ComponentService.sol +28 -32
  230. package/contracts/instance/base/KeyValueStore.sol +13 -36
  231. package/contracts/instance/base/Lifecycle.sol +26 -6
  232. package/contracts/instance/module/IAccess.sol +22 -16
  233. package/contracts/instance/module/IBundle.sol +8 -5
  234. package/contracts/instance/module/IComponents.sol +41 -0
  235. package/contracts/instance/module/IDistribution.sol +2 -0
  236. package/contracts/instance/module/IPolicy.sol +41 -9
  237. package/contracts/instance/module/ISetup.sol +7 -20
  238. package/contracts/instance/service/ApplicationService.sol +356 -0
  239. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  240. package/contracts/instance/service/BundleService.sol +224 -132
  241. package/contracts/instance/service/BundleServiceManager.sol +1 -1
  242. package/contracts/instance/service/ClaimService.sol +444 -0
  243. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  244. package/contracts/instance/service/DistributionService.sol +344 -19
  245. package/contracts/instance/service/DistributionServiceManager.sol +1 -1
  246. package/contracts/instance/service/IApplicationService.sol +78 -0
  247. package/contracts/instance/service/IBundleService.sol +93 -22
  248. package/contracts/instance/service/IClaimService.sol +90 -0
  249. package/contracts/instance/service/IDistributionService.sol +87 -0
  250. package/contracts/instance/service/IPolicyService.sol +36 -50
  251. package/contracts/instance/service/IPoolService.sol +106 -3
  252. package/contracts/instance/service/PolicyService.sol +166 -346
  253. package/contracts/instance/service/PolicyServiceManager.sol +2 -2
  254. package/contracts/instance/service/PoolService.sol +312 -19
  255. package/contracts/instance/service/PoolServiceManager.sol +1 -1
  256. package/contracts/instance/service/ProductService.sol +35 -58
  257. package/contracts/instance/service/ProductServiceManager.sol +2 -2
  258. package/contracts/registry/ChainNft.sol +8 -0
  259. package/contracts/registry/IRegistry.sol +5 -2
  260. package/contracts/registry/IRegistryService.sol +12 -11
  261. package/contracts/registry/ITransferInterceptor.sol +1 -0
  262. package/contracts/registry/Registry.sol +43 -28
  263. package/contracts/registry/RegistryService.sol +70 -50
  264. package/contracts/registry/RegistryServiceManager.sol +13 -13
  265. package/contracts/registry/ReleaseManager.sol +32 -40
  266. package/contracts/registry/TokenRegistry.sol +16 -12
  267. package/contracts/shared/ERC165.sol +14 -12
  268. package/contracts/shared/INftOwnable.sol +11 -10
  269. package/contracts/shared/IPolicyHolder.sol +40 -0
  270. package/contracts/shared/IRegisterable.sol +3 -3
  271. package/contracts/shared/IRegistryLinked.sol +11 -0
  272. package/contracts/shared/IService.sol +6 -4
  273. package/contracts/shared/IVersionable.sol +4 -47
  274. package/contracts/shared/NftOwnable.sol +64 -85
  275. package/contracts/shared/PolicyHolder.sol +94 -0
  276. package/contracts/shared/ProxyManager.sol +100 -25
  277. package/contracts/shared/Registerable.sol +16 -27
  278. package/contracts/shared/RegistryLinked.sol +43 -0
  279. package/contracts/shared/Service.sol +32 -20
  280. package/contracts/shared/TokenHandler.sol +11 -5
  281. package/contracts/shared/Versionable.sol +4 -92
  282. package/contracts/test/TestRegisterable.sol +1 -1
  283. package/contracts/test/TestService.sol +1 -1
  284. package/contracts/types/Amount.sol +80 -0
  285. package/contracts/types/Blocknumber.sol +1 -0
  286. package/contracts/types/ClaimId.sol +75 -0
  287. package/contracts/types/DistributorType.sol +2 -2
  288. package/contracts/types/Fee.sol +13 -5
  289. package/contracts/types/NftId.sol +8 -0
  290. package/contracts/types/ObjectType.sol +11 -6
  291. package/contracts/types/PayoutId.sol +82 -0
  292. package/contracts/types/Referral.sol +4 -0
  293. package/contracts/types/RoleId.sol +16 -9
  294. package/contracts/types/Seconds.sol +54 -0
  295. package/contracts/types/StateId.sol +7 -2
  296. package/contracts/types/Timestamp.sol +18 -13
  297. package/contracts/types/UFixed.sol +1 -0
  298. package/contracts/types/Version.sol +1 -0
  299. package/package.json +3 -3
  300. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  301. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  302. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  303. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  304. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  305. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  306. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  307. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  308. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  309. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  310. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  311. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  312. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  313. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  314. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  315. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  316. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  317. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  318. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  319. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  320. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  321. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  322. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +0 -50
  323. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  324. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  325. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  326. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  327. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  328. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  329. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  330. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  331. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  332. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  333. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  334. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  335. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  336. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  337. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  338. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  339. package/contracts/experiment/cloning/Cloner.sol +0 -47
  340. package/contracts/experiment/errors/Require.sol +0 -38
  341. package/contracts/experiment/errors/Revert.sol +0 -44
  342. package/contracts/experiment/inheritance/A.sol +0 -53
  343. package/contracts/experiment/inheritance/B.sol +0 -28
  344. package/contracts/experiment/inheritance/C.sol +0 -34
  345. package/contracts/experiment/inheritance/IA.sol +0 -13
  346. package/contracts/experiment/inheritance/IB.sol +0 -10
  347. package/contracts/experiment/inheritance/IC.sol +0 -12
  348. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  349. package/contracts/experiment/statemachine/ISM.sol +0 -25
  350. package/contracts/experiment/statemachine/SM.sol +0 -57
  351. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  352. package/contracts/experiment/types/TypeA.sol +0 -47
  353. package/contracts/experiment/types/TypeB.sol +0 -29
@@ -1,7 +1,7 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
4
+ // import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
5
5
 
6
6
  import {NftId} from "../types/NftId.sol";
7
7
  import {ObjectType} from "../types/ObjectType.sol";
@@ -13,8 +13,7 @@ import {IRegisterable} from "../shared/IRegisterable.sol";
13
13
  import {IComponent} from "../components/IComponent.sol";
14
14
 
15
15
  interface IRegistryService is
16
- IService,
17
- IAccessManaged
16
+ IService
18
17
  {
19
18
  error SelfRegistration();
20
19
  error NotRegistryOwner();
@@ -35,18 +34,18 @@ interface IRegistryService is
35
34
  struct FunctionConfig
36
35
  {
37
36
  ObjectType serviceDomain;
38
- bytes4 selector;
37
+ bytes4[] selectors;
39
38
  }
40
39
 
41
- function getFunctionConfigs()
42
- external
43
- pure
44
- returns(
45
- FunctionConfig[] memory config
46
- );
40
+ function getFunctionConfigs()
41
+ external
42
+ pure
43
+ returns(
44
+ FunctionConfig[] memory config
45
+ );
47
46
 
48
47
  // TODO used by service -> add owner arg
49
- function registerInstance(IRegisterable instance, address owner)
48
+ function registerInstance(IRegisterable instance, address owner)
50
49
  external returns(IRegistry.ObjectInfo memory info);
51
50
 
52
51
  function registerProduct(IComponent product, address owner)
@@ -58,6 +57,8 @@ interface IRegistryService is
58
57
  function registerDistribution(IComponent distribution, address owner)
59
58
  external returns(IRegistry.ObjectInfo memory info);
60
59
 
60
+ function registerDistributor(IRegistry.ObjectInfo memory info) external returns(NftId nftId);
61
+
61
62
  function registerPolicy(IRegistry.ObjectInfo memory info) external returns(NftId nftId);
62
63
 
63
64
  function registerBundle(IRegistry.ObjectInfo memory info) external returns(NftId nftId);
@@ -2,5 +2,6 @@
2
2
  pragma solidity ^0.8.20;
3
3
 
4
4
  interface ITransferInterceptor {
5
+ function nftMint(address to, uint256 tokenId) external;
5
6
  function nftTransferFrom(address from, address to, uint256 tokenId) external;
6
7
  }
@@ -1,12 +1,11 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
+ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
4
5
 
5
6
  import {NftId, toNftId, zeroNftId} from "../types/NftId.sol";
6
7
  import {VersionPart} from "../types/Version.sol";
7
- import {ObjectType, PROTOCOL, REGISTRY, TOKEN, SERVICE, INSTANCE, STAKE, PRODUCT, DISTRIBUTION, ORACLE, POOL, POLICY, BUNDLE} from "../types/ObjectType.sol";
8
-
9
- import {ERC165} from "../shared/ERC165.sol";
8
+ import {ObjectType, PROTOCOL, REGISTRY, TOKEN, SERVICE, INSTANCE, STAKE, PRODUCT, DISTRIBUTION, DISTRIBUTOR, ORACLE, POOL, POLICY, BUNDLE} from "../types/ObjectType.sol";
10
9
 
11
10
  import {ChainNft} from "./ChainNft.sol";
12
11
  import {IRegistry} from "./IRegistry.sol";
@@ -23,7 +22,6 @@ import {ReleaseManager} from "./ReleaseManager.sol";
23
22
  // 4) state object by regular service (POLICY, BUNDLE, STAKE)
24
23
 
25
24
  contract Registry is
26
- ERC165,
27
25
  IRegistry
28
26
  {
29
27
  address public constant NFT_LOCK_ADDRESS = address(0x1);
@@ -75,8 +73,6 @@ contract Registry is
75
73
 
76
74
  // set object types and object parent relations
77
75
  _setupValidCoreTypesAndCombinations();
78
-
79
- _registerInterface(type(IRegistry).interfaceId);
80
76
  }
81
77
 
82
78
  function registerService(
@@ -153,7 +149,6 @@ contract Registry is
153
149
  }
154
150
 
155
151
  if(
156
-
157
152
  parentType == PROTOCOL() ||
158
153
  parentType == REGISTRY() ||
159
154
  parentType == SERVICE()
@@ -190,19 +185,23 @@ contract Registry is
190
185
  return _releaseManager.getReleaseInfo(version);
191
186
  }
192
187
 
193
- function getObjectCount() external view override returns (uint256) {
188
+ function getObjectCount() external view returns (uint256) {
194
189
  return _chainNft.totalSupply();
195
190
  }
196
191
 
192
+ function getReleaseManagerAddress() external view returns (address) {
193
+ return address(_releaseManager);
194
+ }
195
+
197
196
  function getNftId() external view returns (NftId nftId) {
198
197
  return _registryNftId;
199
198
  }
200
199
 
201
- function getNftId(address object) external view override returns (NftId id) {
200
+ function getNftId(address object) external view returns (NftId id) {
202
201
  return _nftIdByAddress[object];
203
202
  }
204
203
 
205
- function ownerOf(NftId nftId) public view override returns (address) {
204
+ function ownerOf(NftId nftId) public view returns (address) {
206
205
  return _chainNft.ownerOf(nftId.toInt());
207
206
  }
208
207
 
@@ -210,26 +209,31 @@ contract Registry is
210
209
  return _chainNft.ownerOf(_nftIdByAddress[contractAddress].toInt());
211
210
  }
212
211
 
213
- function getObjectInfo(NftId nftId) external view override returns (ObjectInfo memory) {
212
+ function getObjectInfo(NftId nftId) external view returns (ObjectInfo memory) {
214
213
  return _info[nftId];
215
214
  }
216
215
 
217
- function getObjectInfo(address object) external view override returns (ObjectInfo memory) {
216
+ function getObjectInfo(address object) external view returns (ObjectInfo memory) {
218
217
  return _info[_nftIdByAddress[object]];
219
218
  }
220
219
 
221
- function isRegistered(NftId nftId) public view override returns (bool) {
220
+ function isRegistered(NftId nftId) public view returns (bool) {
222
221
  return _info[nftId].objectType.gtz();
223
222
  }
224
223
 
225
- function isRegistered(address object) external view override returns (bool) {
224
+ function isRegistered(address object) external view returns (bool) {
226
225
  return _nftIdByAddress[object].gtz();
227
226
  }
228
227
 
229
- function isRegisteredService(address object) external view override returns (bool) {
228
+ function isRegisteredService(address object) external view returns (bool) {
230
229
  return _info[_nftIdByAddress[object]].objectType == SERVICE();
231
230
  }
232
231
 
232
+ function isRegisteredComponent(address object) external view returns (bool) {
233
+ NftId objectParentNftId = _info[_nftIdByAddress[object]].parentNftId;
234
+ return _info[objectParentNftId].objectType == INSTANCE();
235
+ }
236
+
233
237
  function isValidRelease(VersionPart version) external view returns (bool)
234
238
  {
235
239
  return _releaseManager.isValidRelease(version);
@@ -246,14 +250,24 @@ contract Registry is
246
250
  //}
247
251
  }
248
252
 
249
- function getChainNft() external view override returns (ChainNft) {
250
- return _chainNft;
253
+ function getChainNftAddress() external view override returns (address) {
254
+ return address(_chainNft);
251
255
  }
252
256
 
253
257
  function getOwner() public view returns (address owner) {
254
258
  return ownerOf(address(this));
255
259
  }
256
260
 
261
+ // IERC165
262
+
263
+ function supportsInterface(bytes4 interfaceId) external pure returns (bool) {
264
+ if(interfaceId == type(IERC165).interfaceId || interfaceId == type(IRegistry).interfaceId) {
265
+ return true;
266
+ }
267
+
268
+ return false;
269
+ }
270
+
257
271
  // Internals
258
272
 
259
273
  /// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
@@ -277,18 +291,9 @@ contract Registry is
277
291
  }
278
292
 
279
293
  address interceptor = _getInterceptor(info.isInterceptor, info.objectAddress, parentInfo.isInterceptor, parentAddress);
294
+ uint256 tokenId = _chainNft.getNextTokenId();
295
+ nftId = toNftId(tokenId);
280
296
 
281
- // TODO does external call
282
- // compute next nftId, do all checks and stores, mint() at most end...
283
- uint256 mintedTokenId = _chainNft.mint(
284
- info.initialOwner,
285
- interceptor,
286
- EMPTY_URI);
287
- nftId = toNftId(mintedTokenId);
288
-
289
- // TODO move nftId out of info struct
290
- // getters by nftId -> return struct without nftId
291
- // getters by address -> return nftId AND struct
292
297
  info.nftId = nftId;
293
298
  _info[nftId] = info;
294
299
 
@@ -304,6 +309,14 @@ contract Registry is
304
309
  }
305
310
 
306
311
  emit LogRegistration(nftId, parentNftId, objectType, info.isInterceptor, info.objectAddress, info.initialOwner);
312
+
313
+ // calls nft receiver(1) and interceptor(2)
314
+ uint256 mintedTokenId = _chainNft.mint(
315
+ info.initialOwner,
316
+ interceptor,
317
+ EMPTY_URI);
318
+ assert(mintedTokenId == tokenId);
319
+
307
320
  }
308
321
 
309
322
  /// @dev obtain interceptor address for this nft if applicable, address(0) otherwise
@@ -442,6 +455,8 @@ contract Registry is
442
455
  _coreContractCombinations[ORACLE()][INSTANCE()] = true;
443
456
  _coreContractCombinations[POOL()][INSTANCE()] = true;
444
457
 
458
+ _coreObjectCombinations[DISTRIBUTOR()][DISTRIBUTION()] = true;
459
+
445
460
  // product as parent, ONLY approved
446
461
  _coreObjectCombinations[POLICY()][PRODUCT()] = true;
447
462
 
@@ -2,7 +2,7 @@
2
2
  pragma solidity ^0.8.20;
3
3
 
4
4
  import {ERC165Checker} from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol";
5
- import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
5
+ // import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
6
6
 
7
7
  import {IRegistry} from "./IRegistry.sol";
8
8
  import {IInstance} from "../instance/IInstance.sol";
@@ -19,7 +19,7 @@ import {IRegisterable} from "../../contracts/shared/IRegisterable.sol";
19
19
  import {Registerable} from "../../contracts/shared/Registerable.sol";
20
20
 
21
21
  import {RoleId, PRODUCT_OWNER_ROLE, POOL_OWNER_ROLE, ORACLE_OWNER_ROLE} from "../../contracts/types/RoleId.sol";
22
- import {ObjectType, REGISTRY, SERVICE, PRODUCT, ORACLE, POOL, INSTANCE, DISTRIBUTION, POLICY, BUNDLE, STAKE} from "../../contracts/types/ObjectType.sol";
22
+ import {ObjectType, REGISTRY, SERVICE, PRODUCT, ORACLE, POOL, INSTANCE, DISTRIBUTION, DISTRIBUTOR, APPLICATION, POLICY, CLAIM, BUNDLE, STAKE} from "../../contracts/types/ObjectType.sol";
23
23
  import {StateId, ACTIVE, PAUSED} from "../../contracts/types/StateId.sol";
24
24
  import {NftId, NftIdLib, zeroNftId} from "../../contracts/types/NftId.sol";
25
25
  import {Fee, FeeLib} from "../../contracts/types/Fee.sol";
@@ -31,7 +31,6 @@ import {IRegistryService} from "./IRegistryService.sol";
31
31
  import {Registry} from "./Registry.sol";
32
32
 
33
33
  contract RegistryService is
34
- AccessManagedUpgradeable,
35
34
  Service,
36
35
  IRegistryService
37
36
  {
@@ -40,6 +39,32 @@ contract RegistryService is
40
39
  // TODO update to real hash when registry is stable
41
40
  bytes32 public constant REGISTRY_CREATION_CODE_HASH = bytes32(0);
42
41
 
42
+ // From IService
43
+ function getDomain() public pure override returns(ObjectType serviceDomain) {
44
+ return REGISTRY();
45
+ }
46
+
47
+ // from Versionable
48
+
49
+ /// @dev top level initializer
50
+ function _initialize(
51
+ address owner,
52
+ bytes memory data
53
+ )
54
+ internal
55
+ virtual override
56
+ initializer()
57
+ {
58
+ (
59
+ address registryAddress,
60
+ address initialAuthority
61
+ ) = abi.decode(data, (address, address));
62
+
63
+ initializeService(registryAddress, initialAuthority, owner);
64
+
65
+ registerInterface(type(IRegistryService).interfaceId);
66
+ }
67
+
43
68
  function registerInstance(IRegisterable instance, address owner)
44
69
  external
45
70
  restricted
@@ -52,7 +77,7 @@ contract RegistryService is
52
77
  }
53
78
 
54
79
  info = _getAndVerifyContractInfo(instance, INSTANCE(), owner);
55
- info.nftId = _registry.register(info);
80
+ info.nftId = getRegistry().register(info);
56
81
 
57
82
  instance.linkToRegisteredNftId(); // asume safe
58
83
  }
@@ -70,7 +95,7 @@ contract RegistryService is
70
95
  }
71
96
 
72
97
  info = _getAndVerifyContractInfo(product, PRODUCT(), owner);
73
- info.nftId = _registry.register(info);
98
+ info.nftId = getRegistry().register(info);
74
99
  }
75
100
 
76
101
  function registerPool(IComponent pool, address owner)
@@ -85,7 +110,7 @@ contract RegistryService is
85
110
  }
86
111
 
87
112
  info = _getAndVerifyContractInfo(pool, POOL(), owner);
88
- info.nftId = _registry.register(info);
113
+ info.nftId = getRegistry().register(info);
89
114
  }
90
115
 
91
116
  function registerDistribution(IComponent distribution, address owner)
@@ -100,7 +125,16 @@ contract RegistryService is
100
125
  }
101
126
 
102
127
  info = _getAndVerifyContractInfo(distribution, DISTRIBUTION(), owner);
103
- info.nftId = _registry.register(info);
128
+ info.nftId = getRegistry().register(info);
129
+ }
130
+
131
+ function registerDistributor(IRegistry.ObjectInfo memory info)
132
+ external
133
+ restricted
134
+ returns(NftId nftId)
135
+ {
136
+ _verifyObjectInfo(info, DISTRIBUTOR());
137
+ nftId = getRegistry().register(info);
104
138
  }
105
139
 
106
140
  function registerPolicy(IRegistry.ObjectInfo memory info)
@@ -110,7 +144,7 @@ contract RegistryService is
110
144
  {
111
145
  _verifyObjectInfo(info, POLICY());
112
146
 
113
- nftId = _registry.register(info);
147
+ nftId = getRegistry().register(info);
114
148
  }
115
149
 
116
150
  function registerBundle(IRegistry.ObjectInfo memory info)
@@ -120,7 +154,7 @@ contract RegistryService is
120
154
  {
121
155
  _verifyObjectInfo(info, BUNDLE());
122
156
 
123
- nftId = _registry.register(info);
157
+ nftId = getRegistry().register(info);
124
158
  }
125
159
 
126
160
  function registerStake(IRegistry.ObjectInfo memory info)
@@ -130,35 +164,7 @@ contract RegistryService is
130
164
  {
131
165
  _verifyObjectInfo(info, STAKE());
132
166
 
133
- nftId = _registry.register(info);
134
- }
135
-
136
- // From IService
137
- function getDomain() public pure override(IService, Service) returns(ObjectType serviceDomain) {
138
- return REGISTRY();
139
- }
140
-
141
- // from Versionable
142
-
143
- /// @dev top level initializer
144
- function _initialize(
145
- address owner,
146
- bytes memory data
147
- )
148
- internal
149
- initializer
150
- virtual override
151
- {
152
- (
153
- address initialAuthority,
154
- address registry
155
- ) = abi.decode(data, (address, address));
156
-
157
- __AccessManaged_init(initialAuthority);
158
-
159
- _initializeService(address(registry), owner);
160
-
161
- _registerInterface(type(IRegistryService).interfaceId);
167
+ nftId = getRegistry().register(info);
162
168
  }
163
169
 
164
170
  // from IRegisterable
@@ -170,30 +176,44 @@ contract RegistryService is
170
176
  FunctionConfig[] memory config
171
177
  )
172
178
  {
173
- config = new FunctionConfig[](6);
179
+ config = new FunctionConfig[](8);
174
180
 
175
181
  // order of service registrations MUST be reverse to this array
176
182
  /*config[-1].serviceDomain = STAKE();
177
183
  config[-1].selector = RegistryService.registerStake.selector;*/
178
184
 
179
185
  config[0].serviceDomain = POLICY();
180
- config[0].selector = RegistryService.registerPolicy.selector;
186
+ config[0].selectors = new bytes4[](0);
187
+
188
+ config[1].serviceDomain = APPLICATION();
189
+ config[1].selectors = new bytes4[](1);
190
+ config[1].selectors[0] = RegistryService.registerPolicy.selector;
191
+
192
+ config[2].serviceDomain = CLAIM();
193
+ config[2].selectors = new bytes4[](0);
181
194
 
182
- config[1].serviceDomain = BUNDLE();
183
- config[1].selector = RegistryService.registerBundle.selector;
195
+ config[3].serviceDomain = PRODUCT();
196
+ config[3].selectors = new bytes4[](1);
197
+ config[3].selectors[0] = RegistryService.registerProduct.selector;
184
198
 
185
- config[2].serviceDomain = PRODUCT();
186
- config[2].selector = RegistryService.registerProduct.selector;
199
+ config[4].serviceDomain = POOL();
200
+ config[4].selectors = new bytes4[](1);
201
+ config[4].selectors[0] = RegistryService.registerPool.selector;
187
202
 
188
- config[3].serviceDomain = POOL();
189
- config[3].selector = RegistryService.registerPool.selector;
203
+ // registration of bundle service must preceed registration of pool service
204
+ config[5].serviceDomain = BUNDLE();
205
+ config[5].selectors = new bytes4[](1);
206
+ config[5].selectors[0] = RegistryService.registerBundle.selector;
190
207
 
191
- config[4].serviceDomain = DISTRIBUTION();
192
- config[4].selector = RegistryService.registerDistribution.selector;
208
+ config[6].serviceDomain = DISTRIBUTION();
209
+ config[6].selectors = new bytes4[](2);
210
+ config[6].selectors[0] = RegistryService.registerDistribution.selector;
211
+ config[6].selectors[1] = RegistryService.registerDistributor.selector;
193
212
 
194
213
  // registerInstance() have no restriction
195
- config[5].serviceDomain = INSTANCE();
196
- config[5].selector = RegistryService.registerInstance.selector;
214
+ config[7].serviceDomain = INSTANCE();
215
+ config[7].selectors = new bytes4[](1);
216
+ config[7].selectors[0] = RegistryService.registerInstance.selector;
197
217
  }
198
218
 
199
219
  // Internal
@@ -22,32 +22,32 @@ contract RegistryServiceManager is
22
22
  /// @dev initializes proxy manager with registry service implementation and deploys registry
23
23
  constructor(
24
24
  address initialAuthority, // used by implementation
25
- address registry) // used by implementation
26
- ProxyManager()
25
+ address registryAddress) // used by implementation
26
+ ProxyManager(registryAddress)
27
27
  {
28
28
  require(initialAuthority > address(0), "RegistryServiceManager: initial authority is 0");
29
- require(registry > address(0), "RegistryServiceManager: registry is 0");
29
+ require(registryAddress > address(0), "RegistryServiceManager: registry is 0");
30
30
 
31
31
  // implementation's initializer func `data` argument
32
- bytes memory initializationData = abi.encode(
33
- initialAuthority,
34
- registry);
35
-
32
+ RegistryService srv = new RegistryService();
33
+ bytes memory data = abi.encode(registryAddress, initialAuthority);
36
34
  IVersionable versionable = deploy(
37
- address(new RegistryService()),
38
- initializationData);
35
+ address(srv),
36
+ data);
39
37
 
40
38
  _registryService = RegistryService(address(versionable));
39
+
40
+ // _linkToNftOwnable(address(_registryService));
41
41
  }
42
42
 
43
- // from IRegisterable
43
+ // // from IRegisterable
44
44
 
45
- // IMPORTANT: registry here and in constructor MUST be the same
46
- function linkToNftOwnable(address registry)
45
+ // // IMPORTANT: registry here and in constructor MUST be the same
46
+ function linkOwnershipToServiceNft()
47
47
  public
48
48
  onlyOwner
49
49
  {
50
- _linkToNftOwnable(registry, address(_registryService));
50
+ _linkToNftOwnable(address(_registryService));
51
51
  }
52
52
 
53
53
  //--- view functions ----------------------------------------------------//
@@ -6,7 +6,7 @@ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManage
6
6
  import {NftId} from "../types/NftId.sol";
7
7
  import {RoleId} from "../types/RoleId.sol";
8
8
  import {ObjectType, ObjectTypeLib, zeroObjectType, REGISTRY, SERVICE} from "../types/ObjectType.sol";
9
- import {VersionPart, VersionPartLib} from "../types/Version.sol";
9
+ import {Version, VersionLib, VersionPart, VersionPartLib} from "../types/Version.sol";
10
10
  import {Timestamp, TimestampLib} from "../types/Timestamp.sol";
11
11
 
12
12
  import {IService} from "../shared/IService.sol";
@@ -41,7 +41,7 @@ contract ReleaseManager is AccessManaged
41
41
  error SelfRegistration();
42
42
  error RegisterableOwnerIsRegistered();
43
43
 
44
- // _verifyServiceInfo
44
+ // _verifyService
45
45
  error UnexpectedServiceVersion(VersionPart expected, VersionPart found);
46
46
  error UnexpectedServiceDomain(ObjectType expected, ObjectType found);
47
47
 
@@ -55,19 +55,19 @@ contract ReleaseManager is AccessManaged
55
55
  RegistryAccessManager private immutable _accessManager;
56
56
  IRegistry private immutable _registry;
57
57
 
58
- VersionPart immutable _initial;// first active version
59
- VersionPart _latest;// latest active version
60
- VersionPart _next;// version to create and activate
58
+ VersionPart immutable _initial;// first active major version
59
+ VersionPart _latest;// latest active major version
60
+ VersionPart _next;// major version to create and activate
61
61
 
62
- mapping(VersionPart version => IRegistry.ReleaseInfo info) _release;
62
+ mapping(VersionPart majorVersion => IRegistry.ReleaseInfo info) _release;
63
63
 
64
- mapping(VersionPart version => mapping(ObjectType serviceDomain => bytes4)) _selector; // registry service function selector assigned to domain
64
+ mapping(VersionPart majorVersion => mapping(ObjectType serviceDomain => bytes4[])) _selectors; // registry service function selector assigned to domain
65
65
 
66
66
  uint _awaitingRegistration; // "services left to register" counter
67
67
 
68
68
  mapping(address registryService => bool isActive) _active;
69
69
 
70
- mapping(VersionPart version => bool isValid) _valid; // TODO refactor to use _active only
70
+ mapping(VersionPart majorVersion => bool isValid) _valid; // TODO refactor to use _active only
71
71
 
72
72
  constructor(
73
73
  RegistryAccessManager accessManager,
@@ -146,16 +146,12 @@ contract ReleaseManager is AccessManaged
146
146
 
147
147
  IRegistry.ObjectInfo memory info = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
148
148
 
149
- VersionPart version = _next;
149
+ VersionPart majorVersion = _next;
150
150
  ObjectType domain = REGISTRY();
151
- _verifyServiceInfo(info, version, domain);
152
-
153
- // data: config bytes
151
+ _verifyService(service, majorVersion, domain);
154
152
  _createRelease(service.getFunctionConfigs());
155
-
156
- //setTargetClosed(service, true);
157
153
 
158
- nftId = _registry.registerService(info, version, domain);
154
+ nftId = _registry.registerService(info, majorVersion, domain);
159
155
 
160
156
  // external call
161
157
  service.linkToRegisteredNftId();
@@ -173,24 +169,23 @@ contract ReleaseManager is AccessManaged
173
169
  }
174
170
 
175
171
  IRegistry.ObjectInfo memory info = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
176
- VersionPart version = getNextVersion();
177
- ObjectType domain = _release[version].domains[_awaitingRegistration];// reversed registration order of services specified in RegistryService config
178
- _verifyServiceInfo(info, version, domain);
172
+ VersionPart majorVersion = getNextVersion();
173
+ ObjectType domain = _release[majorVersion].domains[_awaitingRegistration];// reversed registration order of services specified in RegistryService config
174
+ _verifyService(service, majorVersion, domain);
179
175
 
180
176
  // setup and grant unique role if service does registrations
181
- bytes4[] memory selector = new bytes4[](1);
182
- selector[0] = _selector[version][domain];
183
- address registryService = _registry.getServiceAddress(REGISTRY(), version);
184
- if(selector[0] != 0) {
177
+ bytes4[] memory selectors = _selectors[majorVersion][domain];
178
+ address registryService = _registry.getServiceAddress(REGISTRY(), majorVersion);
179
+ if(selectors.length > 0) {
185
180
  _accessManager.setAndGrantUniqueRole(
186
181
  address(service),
187
182
  registryService,
188
- selector);
183
+ selectors);
189
184
  }
190
185
 
191
186
  _awaitingRegistration--;
192
187
 
193
- nftId = _registry.registerService(info, version, domain);
188
+ nftId = _registry.registerService(info, majorVersion, domain);
194
189
 
195
190
  // external call
196
191
  service.linkToRegisteredNftId();
@@ -267,8 +262,8 @@ contract ReleaseManager is AccessManaged
267
262
  }
268
263
  }
269
264
 
270
- function _verifyServiceInfo(
271
- IRegistry.ObjectInfo memory info,
265
+ function _verifyService(
266
+ IService service,
272
267
  VersionPart expectedVersion,
273
268
  ObjectType expectedDomain
274
269
  )
@@ -276,20 +271,17 @@ contract ReleaseManager is AccessManaged
276
271
  view
277
272
  returns(ObjectType)
278
273
  {
279
- (
280
- ObjectType domain,
281
- VersionPart version
282
- ) = abi.decode(info.data, (ObjectType, VersionPart));
283
-
284
- if(version != expectedVersion) {
285
- revert UnexpectedServiceVersion(expectedVersion, version);
274
+ Version version = service.getVersion();
275
+ VersionPart majorVersion = version.toMajorPart();
276
+ if(majorVersion != expectedVersion) {
277
+ revert UnexpectedServiceVersion(expectedVersion, majorVersion);
286
278
  }
287
279
 
288
- if(domain != expectedDomain) {
289
- revert UnexpectedServiceDomain(expectedDomain, domain);
280
+ if(service.getDomain() != expectedDomain) {
281
+ revert UnexpectedServiceDomain(expectedDomain, service.getDomain());
290
282
  }
291
283
 
292
- return domain;
284
+ return expectedDomain;
293
285
  }
294
286
 
295
287
  // TODO check if registry supports types specified in the config array
@@ -306,21 +298,21 @@ contract ReleaseManager is AccessManaged
306
298
  for(uint idx = 0; idx < config.length; idx++)
307
299
  {
308
300
  ObjectType domain = config[idx].serviceDomain;
309
- bytes4 selector = config[idx].selector;
310
-
311
301
  // not "registry service" / zero domain
312
302
  if(
313
303
  domain == REGISTRY() ||
314
304
  domain.eqz()
315
305
  ) { revert ConfigServiceDomainInvalid(idx, domain); }
316
306
 
307
+ bytes4[] memory selectors = config[idx].selectors;
308
+
317
309
  // TODO can be zero -> e.g. duplicate domain, first with zero selector, second with non zero selector -> need to check _release[version].domains.contains(domain) instead
318
310
  // no overwrite
319
- if(_selector[version][domain] > 0) {
311
+ if(_selectors[version][domain].length > 0) {
320
312
  revert SelectorAlreadyExists(version, domain);
321
313
  }
322
314
 
323
- _selector[version][domain] = selector;
315
+ _selectors[version][domain] = selectors;
324
316
  _release[version].domains.push(domain);
325
317
  }
326
318
  // TODO set when activated?