@etherisc/gif-next 0.0.2-9d3eab3-323 → 0.0.2-9dc4419-573

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 (381) hide show
  1. package/README.md +8 -13
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +842 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +753 -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} +233 -81
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +848 -31
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +846 -57
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +682 -9
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +695 -258
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +529 -217
  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 +1038 -395
  26. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +293 -156
  28. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  29. package/artifacts/contracts/instance/Instance.sol/Instance.json +921 -1201
  30. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  31. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +583 -193
  32. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  33. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +137 -270
  34. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  35. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +481 -368
  36. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +308 -127
  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} +246 -160
  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 +71 -45
  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 +1039 -0
  60. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  61. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +673 -0
  62. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
  63. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +594 -286
  64. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  65. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +360 -79
  66. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  67. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +817 -0
  68. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +641 -0
  70. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  71. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1359 -232
  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 +622 -0
  76. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
  77. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +256 -266
  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} +204 -195
  80. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +787 -143
  82. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  83. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +192 -250
  84. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +476 -131
  86. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +73 -159
  88. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +463 -342
  90. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  91. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +329 -96
  92. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +833 -301
  94. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +311 -78
  96. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +287 -202
  98. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +309 -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 +189 -6
  104. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  105. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +104 -214
  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 +202 -72
  110. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
  111. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +33 -23
  112. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  113. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +214 -251
  114. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  115. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +300 -81
  116. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  117. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +125 -113
  118. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  119. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +151 -50
  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 +73 -159
  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 +179 -151
  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 +197 -201
  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 +161 -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 +100 -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 +100 -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 +25 -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 +253 -0
  211. package/contracts/components/Distribution.sol +200 -83
  212. package/contracts/components/IComponent.sol +76 -0
  213. package/contracts/components/IDistributionComponent.sol +44 -17
  214. package/contracts/components/IPoolComponent.sol +88 -41
  215. package/contracts/components/IProductComponent.sol +10 -5
  216. package/contracts/components/Pool.sol +217 -185
  217. package/contracts/components/Product.sol +125 -124
  218. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +2 -12
  219. package/contracts/instance/BundleManager.sol +14 -16
  220. package/contracts/instance/Cloneable.sol +7 -2
  221. package/contracts/instance/IInstance.sol +52 -14
  222. package/contracts/instance/IInstanceService.sol +42 -4
  223. package/contracts/instance/Instance.sol +125 -262
  224. package/contracts/instance/InstanceAccessManager.sol +414 -175
  225. package/contracts/instance/InstanceReader.sol +10 -34
  226. package/contracts/instance/InstanceService.sol +333 -137
  227. package/contracts/instance/InstanceServiceManager.sol +6 -10
  228. package/contracts/instance/ObjectManager.sol +10 -29
  229. package/contracts/instance/base/ComponentService.sol +121 -0
  230. package/contracts/instance/base/KeyValueStore.sol +13 -5
  231. package/contracts/instance/base/Lifecycle.sol +11 -2
  232. package/contracts/instance/module/IAccess.sol +36 -20
  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 +30 -3
  237. package/contracts/instance/module/ISetup.sol +7 -20
  238. package/contracts/instance/service/ApplicationService.sol +350 -0
  239. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  240. package/contracts/instance/service/BundleService.sol +238 -67
  241. package/contracts/instance/service/BundleServiceManager.sol +6 -10
  242. package/contracts/instance/service/ClaimService.sol +151 -0
  243. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  244. package/contracts/instance/service/DistributionService.sol +366 -45
  245. package/contracts/instance/service/DistributionServiceManager.sol +7 -11
  246. package/contracts/instance/service/IApplicationService.sol +82 -0
  247. package/contracts/instance/service/IBundleService.sol +67 -19
  248. package/contracts/instance/service/IClaimService.sol +61 -0
  249. package/contracts/instance/service/IDistributionService.sol +87 -0
  250. package/contracts/instance/service/IPolicyService.sol +34 -49
  251. package/contracts/instance/service/IPoolService.sol +82 -3
  252. package/contracts/instance/service/PolicyService.sol +200 -341
  253. package/contracts/instance/service/PolicyServiceManager.sol +2 -2
  254. package/contracts/instance/service/PoolService.sol +222 -41
  255. package/contracts/instance/service/PoolServiceManager.sol +6 -10
  256. package/contracts/instance/service/ProductService.sol +92 -50
  257. package/contracts/instance/service/ProductServiceManager.sol +2 -2
  258. package/contracts/registry/ChainNft.sol +8 -0
  259. package/contracts/registry/IRegistry.sol +33 -9
  260. package/contracts/registry/IRegistryService.sol +23 -13
  261. package/contracts/registry/ITransferInterceptor.sol +1 -0
  262. package/contracts/registry/Registry.sol +168 -86
  263. package/contracts/registry/RegistryAccessManager.sol +58 -52
  264. package/contracts/registry/RegistryService.sol +93 -141
  265. package/contracts/registry/RegistryServiceManager.sol +15 -13
  266. package/contracts/registry/ReleaseManager.sol +140 -194
  267. package/contracts/registry/TokenRegistry.sol +21 -15
  268. package/contracts/shared/ERC165.sol +14 -12
  269. package/contracts/shared/INftOwnable.sol +11 -10
  270. package/contracts/shared/IPolicyHolder.sol +26 -0
  271. package/contracts/shared/IRegisterable.sol +4 -6
  272. package/contracts/shared/IRegistryLinked.sol +12 -0
  273. package/contracts/shared/IService.sol +4 -4
  274. package/contracts/shared/IVersionable.sol +4 -47
  275. package/contracts/shared/NftOwnable.sol +66 -80
  276. package/contracts/shared/PolicyHolder.sol +81 -0
  277. package/contracts/shared/ProxyManager.sol +100 -25
  278. package/contracts/shared/Registerable.sol +16 -32
  279. package/contracts/shared/RegistryLinked.sol +48 -0
  280. package/contracts/shared/Service.sol +36 -22
  281. package/contracts/shared/TokenHandler.sol +11 -5
  282. package/contracts/shared/Versionable.sol +4 -92
  283. package/contracts/test/TestRegisterable.sol +1 -1
  284. package/contracts/test/TestService.sol +1 -1
  285. package/contracts/types/Amount.sol +60 -0
  286. package/contracts/types/Blocknumber.sol +1 -0
  287. package/contracts/types/ClaimId.sol +52 -0
  288. package/contracts/types/DistributorType.sol +2 -2
  289. package/contracts/types/Fee.sol +13 -5
  290. package/contracts/types/NftId.sol +8 -0
  291. package/contracts/types/ObjectType.sol +10 -5
  292. package/contracts/types/PayoutId.sol +54 -0
  293. package/contracts/types/Referral.sol +4 -0
  294. package/contracts/types/RoleId.sol +25 -19
  295. package/contracts/types/Seconds.sol +54 -0
  296. package/contracts/types/StateId.sol +1 -0
  297. package/contracts/types/Timestamp.sol +13 -13
  298. package/contracts/types/UFixed.sol +1 -0
  299. package/contracts/types/Version.sol +1 -0
  300. package/package.json +3 -3
  301. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  302. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  303. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -368
  304. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  305. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  306. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  307. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  308. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  309. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  310. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  311. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  312. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  313. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  314. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  315. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  316. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  317. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  318. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  319. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  320. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  321. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  322. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  323. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  324. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  325. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  326. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  327. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  328. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  329. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  330. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  331. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  332. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  333. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  334. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  335. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  336. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  337. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  338. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  339. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  340. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  341. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  342. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  343. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  344. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  345. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  346. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +0 -448
  347. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  348. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +0 -763
  349. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  350. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  351. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  352. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  353. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -814
  354. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  355. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  356. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +0 -442
  357. package/contracts/components/BaseComponent.sol +0 -132
  358. package/contracts/components/IBaseComponent.sol +0 -31
  359. package/contracts/experiment/cloning/Cloner.sol +0 -47
  360. package/contracts/experiment/errors/Require.sol +0 -38
  361. package/contracts/experiment/errors/Revert.sol +0 -44
  362. package/contracts/experiment/inheritance/A.sol +0 -53
  363. package/contracts/experiment/inheritance/B.sol +0 -28
  364. package/contracts/experiment/inheritance/C.sol +0 -34
  365. package/contracts/experiment/inheritance/IA.sol +0 -13
  366. package/contracts/experiment/inheritance/IB.sol +0 -10
  367. package/contracts/experiment/inheritance/IC.sol +0 -12
  368. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  369. package/contracts/experiment/statemachine/ISM.sol +0 -25
  370. package/contracts/experiment/statemachine/SM.sol +0 -57
  371. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  372. package/contracts/experiment/types/TypeA.sol +0 -47
  373. package/contracts/experiment/types/TypeB.sol +0 -29
  374. package/contracts/instance/IAccessManagerSimple.sol +0 -391
  375. package/contracts/instance/IInstanceBase.sol +0 -26
  376. package/contracts/instance/InstanceBase.sol +0 -41
  377. package/contracts/instance/base/ComponentServiceBase.sol +0 -72
  378. package/contracts/instance/base/IInstanceBase.sol +0 -23
  379. package/contracts/instance/service/ComponentOwnerService.sol +0 -315
  380. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  381. package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -2,29 +2,26 @@
2
2
  pragma solidity ^0.8.20;
3
3
 
4
4
  import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
5
- import {AccessManager} from "@openzeppelin/contracts/access/manager/AccessManager.sol";
6
5
 
7
6
  import {NftId} from "../types/NftId.sol";
8
7
  import {RoleId} from "../types/RoleId.sol";
9
- import {ObjectType, zeroObjectType, SERVICE} from "../types/ObjectType.sol";
10
- import {VersionPart, VersionPartLib} from "../types/Version.sol";
8
+ import {ObjectType, ObjectTypeLib, zeroObjectType, REGISTRY, SERVICE} from "../types/ObjectType.sol";
9
+ import {Version, VersionLib, VersionPart, VersionPartLib} from "../types/Version.sol";
10
+ import {Timestamp, TimestampLib} from "../types/Timestamp.sol";
11
11
 
12
- import {IVersionable} from "../shared/IVersionable.sol";
13
12
  import {IService} from "../shared/IService.sol";
14
- import {ProxyManager} from "../shared/ProxyManager.sol";
15
13
 
16
14
  import {IRegistry} from "./IRegistry.sol";
17
15
  import {Registry} from "./Registry.sol";
18
16
  import {IRegistryService} from "./IRegistryService.sol";
19
- import {RegistryService} from "./RegistryService.sol";
20
- import {RegistryServiceManager} from "./RegistryServiceManager.sol";
21
17
  import {RegistryAccessManager} from "./RegistryAccessManager.sol";
22
18
 
23
19
 
24
20
  contract ReleaseManager is AccessManaged
25
21
  {
26
- event LogReleaseCreation(VersionPart version, IService registryService);
27
- event LogServiceRegistration(VersionPart majorVersion, ObjectType serviceDomain);
22
+ using ObjectTypeLib for ObjectType;
23
+
24
+ event LogReleaseCreation(VersionPart version);
28
25
  event LogReleaseActivation(VersionPart version);
29
26
 
30
27
  // createNextRelease
@@ -33,210 +30,192 @@ contract ReleaseManager is AccessManaged
33
30
 
34
31
  // registerService
35
32
  error NotService();
36
- error ServiceNotInRelease(IService service, ObjectType serviceDomain);
37
- error ServiceAlreadyRegistered(address service);
38
33
 
39
34
  // activateNextRelease
40
- //error ReleaseNotCreated();
41
- //error ReleaseRegistrationNotFinished();
35
+ error ReleaseNotCreated();
36
+ error ReleaseRegistrationNotFinished();
42
37
 
43
38
  // _getAndVerifyContractInfo
44
39
  error UnexpectedRegisterableType(ObjectType expected, ObjectType found);
45
- error NotRegisterableOwner(address expectedOwner);
40
+ error NotRegisterableOwner(address notOwner);
46
41
  error SelfRegistration();
47
42
  error RegisterableOwnerIsRegistered();
48
43
 
49
- // _verifyServiceInfo
44
+ // _verifyService
50
45
  error UnexpectedServiceVersion(VersionPart expected, VersionPart found);
51
46
  error UnexpectedServiceDomain(ObjectType expected, ObjectType found);
52
47
 
53
48
  // _verifyAndStoreConfig
54
49
  error ConfigMissing();
55
- error ConfigServiceTypeInvalid();
56
- error ConfigSelectorMissing();
57
- error ConfigSelectorZero();
58
- error ConfigSelectorAlreadyExists(VersionPart serviceVersion, ObjectType serviceDomain);
59
-
60
- struct ReleaseInfo {
61
- ObjectType[] types; // service types in release
62
- }
50
+ error ConfigServiceDomainInvalid(uint configArrayIndex, ObjectType domain);
51
+ error ConfigSelectorZero(uint configArrayIndex);
52
+ error SelectorAlreadyExists(VersionPart releaseVersion, ObjectType serviceDomain);
63
53
 
64
- // unique role for some service function
65
- struct ConfigInfo {
66
- bytes4[] selector; // selector used by service
67
- RoleId roleId; // roleId granted to service
68
- }
69
54
 
70
55
  RegistryAccessManager private immutable _accessManager;
71
56
  IRegistry private immutable _registry;
72
57
 
73
- VersionPart _latest;// latest active version
74
- VersionPart immutable _initial;// first active version
75
-
76
- mapping(VersionPart version => ReleaseInfo info) _release;
58
+ VersionPart immutable _initial;// first active major version
59
+ VersionPart _latest;// latest active major version
60
+ VersionPart _next;// major version to create and activate
77
61
 
78
- mapping(VersionPart version => mapping(ObjectType serviceDomain => ConfigInfo)) _config;
62
+ mapping(VersionPart majorVersion => IRegistry.ReleaseInfo info) _release;
79
63
 
80
- mapping(VersionPart version => mapping(ObjectType serviceDomain => address)) _service;
64
+ mapping(VersionPart majorVersion => mapping(ObjectType serviceDomain => bytes4[])) _selectors; // registry service function selector assigned to domain
81
65
 
82
66
  uint _awaitingRegistration; // "services left to register" counter
83
67
 
84
- mapping(address => bool) _isActiveRegistryService;
68
+ mapping(address registryService => bool isActive) _active;
69
+
70
+ mapping(VersionPart majorVersion => bool isValid) _valid; // TODO refactor to use _active only
85
71
 
86
72
  constructor(
87
73
  RegistryAccessManager accessManager,
88
74
  VersionPart initialVersion)
89
75
  AccessManaged(accessManager.authority())
90
76
  {
77
+ require(initialVersion.toInt() > 0, "ReleaseManager: initial version is 0");
78
+
91
79
  _accessManager = accessManager;
92
80
 
93
81
  _initial = initialVersion;
82
+ _next = initialVersion;
94
83
 
95
- _registry = new Registry(address(this), initialVersion);
84
+ _registry = new Registry();
96
85
  }
97
86
 
98
- // TODO deploy proxy and initialize with given implementation instead of using given proxy?
99
- function createNextRelease(IRegistryService registryService)
87
+ /// @dev skips previous release if was not activated
88
+ function createNextRelease()
100
89
  external
101
90
  restricted // GIF_ADMIN_ROLE
102
- returns(NftId nftId)
103
91
  {
104
- if(!registryService.supportsInterface(type(IRegistryService).interfaceId)) {
105
- revert NotRegistryService();
106
- }
92
+ // allow to register new registry service for next version
93
+ VersionPartLib.toVersionPart(_next.toInt() + 1);
94
+ // disallow registration of regular services for next version while registry service is not registered
95
+ _awaitingRegistration = 0;
107
96
 
108
- if(registryService.authority() != _accessManager.authority()) {
109
- revert UnexpectedServiceAuthority(
110
- _accessManager.authority(),
111
- registryService.authority());
112
- }
97
+ emit LogReleaseCreation(_next);
98
+ }
113
99
 
114
- (
115
- IRegistry.ObjectInfo memory info,
116
- bytes memory data
117
- ) = _getAndVerifyContractInfo(registryService, SERVICE(), msg.sender);
100
+ function activateNextRelease()
101
+ external
102
+ restricted // GIF_ADMIN_ROLE
103
+ {
104
+ VersionPart version = _next;
105
+ address service = _registry.getServiceAddress(REGISTRY(), version);
118
106
 
119
- VersionPart nextVersion = getNextVersion();
120
- _verifyServiceInfo(info, nextVersion, SERVICE());
107
+ // release was created
108
+ if(service == address(0)) {
109
+ revert ReleaseNotCreated();
110
+ }
121
111
 
122
- _verifyAndStoreConfig(data);
112
+ // release fully deployed
113
+ if(_awaitingRegistration > 0) {
114
+ revert ReleaseRegistrationNotFinished();
115
+ }
123
116
 
124
- //setTargetClosed(newRegistryService, true);
117
+ //setTargetClosed(service, false);
125
118
 
126
- _registerService(address(registryService), nextVersion, SERVICE());
127
-
128
- nftId = _registry.registerService(info);
119
+ _latest = version;
129
120
 
130
- // external call
131
- registryService.linkToRegisteredNftId();
121
+ _active[service] = true;
122
+ _valid[version] = true;
132
123
 
133
- emit LogReleaseCreation(nextVersion, registryService);
124
+ emit LogReleaseActivation(version);
134
125
  }
135
126
 
136
- function registerService(IService service)
127
+ // TODO deploy proxy and initialize with given implementation instead of using given proxy?
128
+ // IMPORTANT: MUST never be possible to create with access/release manager, token registry
129
+ // callable once per release after release creation, can not register regular services while registry service is not registered
130
+ function registerRegistryService(IRegistryService service)
137
131
  external
138
132
  restricted // GIF_MANAGER_ROLE
139
133
  returns(NftId nftId)
140
134
  {
141
- if(!service.supportsInterface(type(IService).interfaceId)) {
142
- revert NotService();
143
- }
144
-
145
- (
146
- IRegistry.ObjectInfo memory info,
147
- //bytes memory data
148
- ) = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
149
-
150
- VersionPart nextVersion = getNextVersion();
151
- ObjectType serviceDomain = _verifyServiceInfo(info, nextVersion, zeroObjectType());
152
-
153
- bytes4[] memory selector = _config[nextVersion][serviceDomain].selector;
154
-
155
- // service type is in release
156
- if(selector.length == 0) {
157
- revert ServiceNotInRelease(service, serviceDomain);
135
+ if(!service.supportsInterface(type(IRegistryService).interfaceId)) {
136
+ revert NotRegistryService();
158
137
  }
159
138
 
160
- // setup and grant unique role
161
- address registryService = _registry.getServiceAddress(SERVICE(), nextVersion);
162
- RoleId roleId = _accessManager.setAndGrantUniqueRole(
163
- address(service),
164
- registryService,
165
- selector);
166
-
167
- _config[nextVersion][serviceDomain].roleId = roleId;
168
- _awaitingRegistration--;
169
-
170
- // activate release
171
- if(_awaitingRegistration == 0) {
172
- _latest = nextVersion;
173
- _isActiveRegistryService[registryService] = true;
174
-
175
- emit LogReleaseActivation(nextVersion);
139
+ // TODO unreliable! MUST guarantee the same authority -> how?
140
+ address serviceAuthority = service.authority();
141
+ if(serviceAuthority != authority()) {
142
+ revert UnexpectedServiceAuthority(
143
+ authority(),
144
+ serviceAuthority);
176
145
  }
177
146
 
178
- _registerService(address(service), nextVersion, serviceDomain);
147
+ IRegistry.ObjectInfo memory info = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
179
148
 
180
- nftId = _registry.registerService(info);
149
+ VersionPart majorVersion = _next;
150
+ ObjectType domain = REGISTRY();
151
+ _verifyService(service, majorVersion, domain);
152
+ _createRelease(service.getFunctionConfigs());
153
+
154
+ nftId = _registry.registerService(info, majorVersion, domain);
181
155
 
182
156
  // external call
183
- service.linkToRegisteredNftId();
157
+ service.linkToRegisteredNftId();
184
158
  }
185
159
 
186
- /*function activateNextRelease()
187
- external
188
- restricted // GIF_ADMIN_ROLE
160
+ // TODO adding service to release -> synchronized with proxy upgrades or simple addServiceToRelease(service, version, selector)?
161
+ // TODO removing service from release? -> set _active to false forever, but keep all other records?
162
+ function registerService(IService service)
163
+ external
164
+ restricted // GIF_MANAGER_ROLE
165
+ returns(NftId nftId)
189
166
  {
190
- VersionPart nextVersion = getNextVersion();
191
- address service = _service[nextVersion][SERVICE()];
192
-
193
- // release was created
194
- if(service == address(0)) {
195
- revert ReleaseNotCreated();
167
+ if(!service.supportsInterface(type(IService).interfaceId)) {
168
+ revert NotService();
196
169
  }
197
170
 
198
- // release fully deployed
199
- if(_awaitingRegistration > 0) {
200
- revert ReleaseRegistrationNotFinished();
171
+ IRegistry.ObjectInfo memory info = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
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);
175
+
176
+ // setup and grant unique role if service does registrations
177
+ bytes4[] memory selectors = _selectors[majorVersion][domain];
178
+ address registryService = _registry.getServiceAddress(REGISTRY(), majorVersion);
179
+ if(selectors.length > 0) {
180
+ _accessManager.setAndGrantUniqueRole(
181
+ address(service),
182
+ registryService,
183
+ selectors);
201
184
  }
185
+
186
+ _awaitingRegistration--;
202
187
 
203
- //setTargetClosed(newRegistryService, false);
204
-
205
- _latest = nextVersion;
206
- _isActiveRegistryService[service] = true;
188
+ nftId = _registry.registerService(info, majorVersion, domain);
207
189
 
208
- LogReleaseActivation(nextVersion);
209
- }*/
190
+ // external call
191
+ service.linkToRegisteredNftId();
192
+ }
210
193
 
211
194
  //--- view functions ----------------------------------------------------//
212
195
 
213
196
  function isActiveRegistryService(address service) external view returns(bool)
214
197
  {
215
- return _isActiveRegistryService[service];
198
+ return _active[service];
216
199
  }
217
200
 
218
- function getRegistry() external view returns(address)
201
+ function isValidRelease(VersionPart version) external view returns(bool)
219
202
  {
220
- return (address(_registry));
203
+ return _valid[version];
221
204
  }
222
205
 
223
- function getService(VersionPart serviceVersion, ObjectType serviceDomain) external view returns(address)
206
+ function getRegistry() external view returns(address)
224
207
  {
225
- return _service[serviceVersion][serviceDomain];
208
+ return (address(_registry));
226
209
  }
227
210
 
228
- function getReleaseInfo(VersionPart releaseVersion) external view returns(ReleaseInfo memory)
211
+ function getReleaseInfo(VersionPart version) external view returns(IRegistry.ReleaseInfo memory)
229
212
  {
230
- return _release[releaseVersion];
213
+ return _release[version];
231
214
  }
232
215
 
233
216
  function getNextVersion() public view returns(VersionPart)
234
217
  {
235
- uint256 latest = _latest.toInt();
236
-
237
- return latest == 0 ?
238
- _initial : // no active releases yet
239
- VersionPartLib.toVersionPart(latest + 1);
218
+ return _next;
240
219
  }
241
220
 
242
221
  function getLatestVersion() external view returns(VersionPart) {
@@ -249,31 +228,18 @@ contract ReleaseManager is AccessManaged
249
228
 
250
229
  //--- private functions ----------------------------------------------------//
251
230
 
252
- function _registerService(address service, VersionPart version, ObjectType serviceDomain)
253
- internal
254
- {
255
- if(_service[version][serviceDomain] > address(0)) {
256
- revert ServiceAlreadyRegistered(service);
257
- }
258
-
259
- _service[version][serviceDomain] = service;
260
-
261
- emit LogServiceRegistration(version, serviceDomain);
262
- }
263
-
264
231
  function _getAndVerifyContractInfo(
265
232
  IService service,
266
233
  ObjectType expectedType,
267
- address expectedOwner // assume alway valid, can not be 0
234
+ address expectedOwner // assume always valid, can not be 0
268
235
  )
269
236
  internal
270
- view
237
+ // view
271
238
  returns(
272
- IRegistry.ObjectInfo memory info,
273
- bytes memory data
239
+ IRegistry.ObjectInfo memory info
274
240
  )
275
241
  {
276
- (info, data) = service.getInitialInfo();
242
+ info = service.getInitialInfo();
277
243
  info.objectAddress = address(service);
278
244
  info.isInterceptor = false; // service is never interceptor, at least now
279
245
 
@@ -290,88 +256,68 @@ contract ReleaseManager is AccessManaged
290
256
  if(owner == address(service)) {
291
257
  revert SelfRegistration();
292
258
  }
293
-
294
- /*if(owner == address(0)) { // never 0
295
- revert();// RegisterableOwnerIsZero();
296
- }*/
297
259
 
298
260
  if(_registry.isRegistered(owner)) {
299
261
  revert RegisterableOwnerIsRegistered();
300
262
  }
301
-
302
- /*NftId parentNftId = info.parentNftId;
303
- IRegistry.ObjectInfo memory parentInfo = getRegistry().getObjectInfo(parentNftId);
304
-
305
- if(parentInfo.objectType != parentType) { // parent registration + type
306
- revert InvalidParent(parentNftId);
307
- }*/
308
-
309
- return(info, data);
310
263
  }
311
264
 
312
- function _verifyServiceInfo(
313
- IRegistry.ObjectInfo memory info,
265
+ function _verifyService(
266
+ IService service,
314
267
  VersionPart expectedVersion,
315
- ObjectType expectedType
268
+ ObjectType expectedDomain
316
269
  )
317
270
  internal
318
271
  view
319
272
  returns(ObjectType)
320
273
  {
321
- (
322
- ObjectType serviceDomain,
323
- VersionPart serviceVersion
324
- ) = abi.decode(info.data, (ObjectType, VersionPart));
325
-
326
- if(serviceVersion != expectedVersion) {
327
- revert UnexpectedServiceVersion(expectedVersion, serviceVersion);
274
+ Version version = service.getVersion();
275
+ VersionPart majorVersion = version.toMajorPart();
276
+ if(majorVersion != expectedVersion) {
277
+ revert UnexpectedServiceVersion(expectedVersion, majorVersion);
328
278
  }
329
279
 
330
- if(expectedType != zeroObjectType()) {
331
- if(serviceDomain != expectedType) {
332
- revert UnexpectedServiceDomain(expectedType, serviceDomain);
333
- }
280
+ if(service.getDomain() != expectedDomain) {
281
+ revert UnexpectedServiceDomain(expectedDomain, service.getDomain());
334
282
  }
335
283
 
336
- return serviceDomain;
284
+ return expectedDomain;
337
285
  }
338
286
 
339
- function _verifyAndStoreConfig(bytes memory configBytes)
287
+ // TODO check if registry supports types specified in the config array
288
+ function _createRelease(IRegistryService.FunctionConfig[] memory config)
340
289
  internal
341
290
  {
342
- VersionPart nextVersion = getNextVersion();
343
- IRegistryService.FunctionConfig[] memory config = abi.decode(configBytes, (IRegistryService.FunctionConfig[]));
291
+ VersionPart version = getNextVersion();
344
292
 
345
293
  if(config.length == 0) {
346
294
  revert ConfigMissing();
347
295
  }
348
296
  // always in release
349
- _release[nextVersion].types.push(SERVICE());
350
-
297
+ _release[version].domains.push(REGISTRY());
351
298
  for(uint idx = 0; idx < config.length; idx++)
352
299
  {
353
- ObjectType serviceDomain = config[idx].serviceDomain;
354
- bytes4[] memory selector = config[idx].selector;
355
-
356
- // not "registry service" type
357
- if(serviceDomain == SERVICE()) { revert ConfigServiceTypeInvalid(); }
300
+ ObjectType domain = config[idx].serviceDomain;
301
+ // not "registry service" / zero domain
302
+ if(
303
+ domain == REGISTRY() ||
304
+ domain.eqz()
305
+ ) { revert ConfigServiceDomainInvalid(idx, domain); }
358
306
 
359
- // at least one selector exists
360
- if(selector.length == 0) { revert ConfigSelectorMissing(); }
361
-
362
- // no zero selectors
363
- for(uint jdx = 0; jdx < selector.length; jdx++) {
364
- if(selector[jdx] == 0) { revert ConfigSelectorZero(); }
365
- }
307
+ bytes4[] memory selectors = config[idx].selectors;
366
308
 
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
367
310
  // no overwrite
368
- if(_config[nextVersion][serviceDomain].selector.length > 0) {
369
- revert ConfigSelectorAlreadyExists(nextVersion, serviceDomain);
311
+ if(_selectors[version][domain].length > 0) {
312
+ revert SelectorAlreadyExists(version, domain);
370
313
  }
371
314
 
372
- _config[nextVersion][serviceDomain].selector = selector;
373
- _release[nextVersion].types.push(serviceDomain);
315
+ _selectors[version][domain] = selectors;
316
+ _release[version].domains.push(domain);
374
317
  }
318
+ // TODO set when activated?
319
+ _release[version].createdAt = TimestampLib.blockTimestamp();
320
+ //_release[version].updatedAt = TimestampLib.blockTimestamp();
375
321
 
376
322
  _awaitingRegistration = config.length;
377
323
  }
@@ -6,8 +6,8 @@ import {ERC165Checker} from "@openzeppelin/contracts/utils/introspection/ERC165C
6
6
 
7
7
  import {IRegisterable} from "../shared/IRegisterable.sol";
8
8
  import {IRegistry} from "./IRegistry.sol";
9
- import {Version, VersionPart, VersionLib, VersionPartLib} from "../types/Version.sol";
10
- import {ObjectType, SERVICE} from "../types/ObjectType.sol";
9
+ import {VersionPart} from "../types/Version.sol";
10
+ import {REGISTRY} from "../types/ObjectType.sol";
11
11
  import {NftOwnable} from "../shared/NftOwnable.sol";
12
12
 
13
13
  /// @title contract to register token per GIF major release.
@@ -26,21 +26,32 @@ contract TokenRegistry is
26
26
  mapping(address token => bool registered) internal _registered;
27
27
  mapping(address token => mapping(VersionPart majorVersion => bool isActive)) internal _active;
28
28
 
29
- constructor()
30
- NftOwnable()
31
- { }
29
+ constructor(
30
+ address registry
31
+ )
32
+ {
33
+ initialize(registry);
34
+ }
35
+
36
+ function initialize(address registry)
37
+ public
38
+ initializer()
39
+ {
40
+ initializeNftOwnable(msg.sender, registry);
41
+ }
32
42
 
33
43
 
34
44
  /// @dev link ownership of token registry to nft owner of registry service
45
+ // TODO latter registry service will get new release, new address, new nft, TokenRegistry will not catch that -> use AccessManaged only for services
35
46
  function linkToNftOwnable(address registryAddress)
36
47
  external
37
48
  onlyOwner
38
49
  {
39
50
  IRegistry registry = IRegistry(registryAddress);
40
- // TODO use _latest instead of next version -> _latest is 0 before first release activation
41
- address registryServiceAddress = registry.getServiceAddress(SERVICE(), registry.getMajorVersionMax());
51
+ // TODO use _latest instead of _initial -> but _latest is 0 before first release activation
52
+ address registryServiceAddress = registry.getServiceAddress(REGISTRY(), registry.getNextVersion());
42
53
 
43
- _linkToNftOwnable(registryAddress, registryServiceAddress);
54
+ _linkToNftOwnable(registryServiceAddress);
44
55
  }
45
56
 
46
57
  /// @dev token state is informative, registry have no clue about used tokens
@@ -58,7 +69,7 @@ contract TokenRegistry is
58
69
  // verify valid major version
59
70
  // ensure major version increments is one
60
71
  uint256 version = majorVersion.toInt();
61
- if (version < _registry.getMajorVersionMin().toInt() || version > _registry.getMajorVersionMax().toInt()) {
72
+ if (!getRegistry().isValidRelease(majorVersion)) {
62
73
  revert TokenMajorVersionInvalid(majorVersion);
63
74
  }
64
75
 
@@ -91,12 +102,7 @@ contract TokenRegistry is
91
102
  revert NotContract(token);
92
103
  }
93
104
 
94
- // MUST not be GIF registerable
95
- if(ERC165Checker.supportsInterface(token, type(IRegisterable).interfaceId)) {
96
- revert NotToken(token);
97
- }
98
-
99
- // MUST have decimals > 0
105
+ // MUST have decimals > 0 (indicator that this is in fact an erc20 token)
100
106
  IERC20Metadata erc20 = IERC20Metadata(token);
101
107
  if(erc20.decimals() == 0) {
102
108
  revert TokenDecimalsZero();
@@ -2,24 +2,26 @@
2
2
  pragma solidity ^0.8.19;
3
3
 
4
4
  import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
+ import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
5
6
 
6
- contract ERC165 is IERC165 {
7
+ contract ERC165 is
8
+ Initializable,
9
+ IERC165
10
+ {
7
11
  mapping(bytes4 => bool) private _isSupported;
8
12
 
9
- constructor() {
10
- _initializeERC165();
11
- }
12
-
13
- function supportsInterface(bytes4 interfaceId) external view override returns (bool) {
14
- return _isSupported[interfaceId];
15
- }
16
-
17
- // @dev register support for ERC165 itself
18
- function _initializeERC165() internal {
13
+ // @dev initializes with support for ERC165
14
+ function initializeERC165() public onlyInitializing() {
19
15
  _isSupported[type(IERC165).interfaceId] = true;
20
16
  }
21
17
 
22
- function _registerInterface(bytes4 interfaceId) internal {
18
+ // @dev register support for provided interfaceId
19
+ // includes initialization for ERC165_ID if not yet done
20
+ function registerInterface(bytes4 interfaceId) public onlyInitializing() {
23
21
  _isSupported[interfaceId] = true;
24
22
  }
23
+
24
+ function supportsInterface(bytes4 interfaceId) external view override returns (bool) {
25
+ return _isSupported[interfaceId];
26
+ }
25
27
  }
@@ -1,22 +1,23 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IRegistry} from "../registry/IRegistry.sol";
4
+ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
+
6
+ import {IRegistryLinked} from "./IRegistryLinked.sol";
5
7
  import {NftId} from "../types/NftId.sol";
6
8
 
7
- interface INftOwnable {
8
- error ErrorNotOwner(address account);
9
+ interface INftOwnable is
10
+ IERC165,
11
+ IRegistryLinked
12
+ {
13
+ error ErrorNftOwnableInitialOwnerZero();
14
+ error ErrorNftOwnableNotOwner(address account);
9
15
 
10
- error ErrorAlreadyLinked(address registry, NftId nftId);
11
- error ErrorRegistryAlreadyInitialized(address registry);
12
- error ErrorRegistryNotInitialized();
13
- error ErrorRegistryAddressZero();
14
- error ErrorNotRegistry(address registryAddress);
15
- error ErrorContractNotRegistered(address contractAddress);
16
+ error ErrorNftOwnableAlreadyLinked(NftId nftId);
17
+ error ErrorNftOwnableContractNotRegistered(address contractAddress);
16
18
 
17
19
  function linkToRegisteredNftId() external;
18
20
 
19
- function getRegistry() external view returns (IRegistry);
20
21
  function getNftId() external view returns (NftId);
21
22
  function getOwner() external view returns (address);
22
23
  }