@etherisc/gif-next 0.0.2-b4fc06b-491 → 0.0.2-b51dcb9-674

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 (397) hide show
  1. package/README.md +71 -14
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +873 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +1030 -264
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/components/IComponent.sol/IComponent.json +636 -0
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +879 -31
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +897 -51
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +720 -16
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +890 -257
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +726 -282
  18. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  19. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +778 -0
  20. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  21. package/artifacts/contracts/instance/{AccessManagedSimple.sol/AccessManagedSimple.json → Cloneable.sol/Cloneable.json} +79 -3
  22. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  23. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +548 -246
  24. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  25. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +314 -178
  26. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  27. package/artifacts/contracts/instance/Instance.sol/Instance.json +446 -3025
  28. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  29. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +597 -179
  30. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +4 -0
  31. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +124 -0
  32. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  33. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +511 -225
  34. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  35. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +464 -240
  36. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +301 -77
  38. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
  39. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +2788 -0
  40. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  41. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +256 -0
  42. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  43. package/artifacts/contracts/{shared/RegisterableUpgradable.sol/RegisterableUpgradable.json → instance/base/ComponentService.sol/ComponentService.json} +311 -122
  44. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  45. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  46. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  47. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +40 -10
  48. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  49. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
  50. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  51. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +71 -45
  52. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  53. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  54. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
  55. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  56. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  57. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  58. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  59. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  60. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  61. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +918 -0
  62. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  63. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +648 -0
  64. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  65. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1288 -0
  66. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  67. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +696 -0
  68. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  69. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +1384 -0
  70. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  71. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +752 -0
  72. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  73. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1556 -0
  74. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  75. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +780 -0
  76. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  77. package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IApplicationService.sol/IApplicationService.json} +231 -204
  78. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  79. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +735 -0
  80. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  81. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +743 -0
  82. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  83. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +540 -146
  84. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  85. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +651 -0
  86. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +669 -153
  88. package/artifacts/contracts/instance/service/IPricingService.sol/IPricingService.dbg.json +4 -0
  89. package/artifacts/contracts/instance/{base/ComponentServiceBase.sol/ComponentServiceBase.json → service/IPricingService.sol/IPricingService.json} +245 -216
  90. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  91. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +88 -397
  92. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  93. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1281 -0
  94. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  95. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +740 -0
  96. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  97. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +1622 -0
  98. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  99. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +708 -0
  100. package/artifacts/contracts/instance/service/PricingService.sol/PricingService.dbg.json +4 -0
  101. package/artifacts/contracts/instance/service/PricingService.sol/PricingService.json +1004 -0
  102. package/artifacts/contracts/instance/service/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
  103. package/artifacts/contracts/instance/service/PricingServiceManager.sol/PricingServiceManager.json +688 -0
  104. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  105. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +864 -0
  106. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  107. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +640 -0
  108. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  109. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
  110. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  111. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +245 -216
  112. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  113. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +222 -236
  114. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  115. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
  116. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  117. package/artifacts/contracts/registry/Registry.sol/Registry.json +257 -310
  118. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  119. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  120. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  121. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +218 -329
  122. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  123. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +291 -142
  124. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  125. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +559 -0
  126. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  127. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +485 -0
  128. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  129. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  130. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  131. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  132. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  133. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  134. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +27 -29
  135. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  136. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +189 -0
  137. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  138. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +8 -34
  139. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  140. package/artifacts/contracts/{experiment/inheritance/IA.sol/ISharedA.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +15 -17
  141. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  142. package/artifacts/contracts/shared/IService.sol/IService.json +84 -178
  143. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  144. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
  145. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  146. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +107 -27
  147. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  148. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +302 -0
  149. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  150. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +283 -63
  151. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  152. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +116 -51
  153. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  154. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +71 -0
  155. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  156. package/artifacts/contracts/shared/Service.sol/Service.json +185 -165
  157. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  158. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +24 -6
  159. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  160. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  161. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  162. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
  163. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  164. package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
  165. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  166. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +116 -51
  167. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  168. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +6 -6
  169. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  170. package/artifacts/contracts/test/TestService.sol/TestService.json +204 -216
  171. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  172. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  173. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  174. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  175. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +8 -190
  176. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  177. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  178. package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +4 -0
  179. package/artifacts/contracts/types/Amount.sol/AmountLib.json +281 -0
  180. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  181. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  182. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  183. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  184. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +179 -0
  185. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  187. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  188. package/artifacts/contracts/types/Fee.sol/FeeLib.json +74 -19
  189. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  190. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  191. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  192. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
  193. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  194. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  195. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  196. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  197. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  198. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  199. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +209 -0
  200. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +23 -4
  202. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  203. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  204. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  205. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  206. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  207. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  208. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  209. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  210. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  211. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +38 -7
  212. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  213. package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
  214. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  215. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
  216. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  217. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  218. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  219. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  220. package/contracts/components/Component.sol +272 -0
  221. package/contracts/components/Distribution.sol +205 -86
  222. package/contracts/components/IComponent.sol +90 -0
  223. package/contracts/components/IDistributionComponent.sol +44 -16
  224. package/contracts/components/IPoolComponent.sol +90 -38
  225. package/contracts/components/IProductComponent.sol +15 -9
  226. package/contracts/components/Pool.sol +225 -182
  227. package/contracts/components/Product.sol +255 -177
  228. package/contracts/instance/BundleManager.sol +126 -0
  229. package/contracts/instance/Cloneable.sol +51 -0
  230. package/contracts/instance/IInstance.sol +62 -13
  231. package/contracts/instance/IInstanceService.sol +53 -10
  232. package/contracts/instance/Instance.sol +152 -365
  233. package/contracts/instance/InstanceAccessManager.sol +430 -177
  234. package/contracts/instance/InstanceAuthorizationsLib.sol +308 -0
  235. package/contracts/instance/InstanceReader.sol +116 -38
  236. package/contracts/instance/InstanceService.sol +254 -84
  237. package/contracts/instance/InstanceServiceManager.sol +11 -13
  238. package/contracts/instance/InstanceStore.sol +212 -0
  239. package/contracts/instance/ObjectManager.sol +82 -0
  240. package/contracts/instance/base/ComponentService.sol +148 -0
  241. package/contracts/instance/base/KeyValueStore.sol +13 -36
  242. package/contracts/instance/base/Lifecycle.sol +26 -6
  243. package/contracts/instance/module/IAccess.sol +36 -20
  244. package/contracts/instance/module/IBundle.sol +8 -4
  245. package/contracts/instance/module/IComponents.sol +41 -0
  246. package/contracts/instance/module/IDistribution.sol +3 -0
  247. package/contracts/instance/module/IPolicy.sol +43 -11
  248. package/contracts/instance/module/ISetup.sol +9 -19
  249. package/contracts/instance/service/ApplicationService.sol +186 -0
  250. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  251. package/contracts/instance/service/BundleService.sol +382 -0
  252. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  253. package/contracts/instance/service/ClaimService.sol +437 -0
  254. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  255. package/contracts/instance/service/DistributionService.sol +348 -0
  256. package/contracts/instance/service/DistributionServiceManager.sol +51 -0
  257. package/contracts/instance/service/IApplicationService.sol +62 -0
  258. package/contracts/instance/service/IBundleService.sol +118 -0
  259. package/contracts/instance/service/IClaimService.sol +90 -0
  260. package/contracts/instance/service/IDistributionService.sol +76 -1
  261. package/contracts/instance/service/IPolicyService.sol +80 -0
  262. package/contracts/instance/service/IPoolService.sol +94 -17
  263. package/contracts/instance/service/IPricingService.sol +37 -0
  264. package/contracts/instance/service/IProductService.sol +6 -73
  265. package/contracts/instance/service/PolicyService.sol +376 -0
  266. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  267. package/contracts/instance/service/PoolService.sol +403 -0
  268. package/contracts/instance/service/PoolServiceManager.sol +51 -0
  269. package/contracts/instance/service/PricingService.sol +275 -0
  270. package/contracts/instance/service/PricingServiceManager.sol +51 -0
  271. package/contracts/instance/service/ProductService.sol +210 -0
  272. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  273. package/contracts/registry/ChainNft.sol +9 -1
  274. package/contracts/registry/IRegistry.sol +42 -31
  275. package/contracts/registry/IRegistryService.sol +45 -14
  276. package/contracts/registry/ITransferInterceptor.sol +1 -0
  277. package/contracts/registry/Registry.sol +246 -247
  278. package/contracts/registry/RegistryAccessManager.sol +216 -0
  279. package/contracts/registry/RegistryService.sol +117 -275
  280. package/contracts/registry/RegistryServiceManager.sol +24 -26
  281. package/contracts/registry/ReleaseManager.sol +324 -0
  282. package/contracts/registry/TokenRegistry.sol +116 -0
  283. package/contracts/shared/AccessManagerUpgradeableInitializeable.sol +13 -0
  284. package/contracts/shared/ERC165.sol +14 -8
  285. package/contracts/shared/INftOwnable.sol +11 -10
  286. package/contracts/shared/IPolicyHolder.sol +40 -0
  287. package/contracts/shared/IRegisterable.sol +4 -6
  288. package/contracts/shared/IRegistryLinked.sol +11 -0
  289. package/contracts/shared/IService.sol +7 -4
  290. package/contracts/shared/IVersionable.sol +4 -47
  291. package/contracts/shared/NftOwnable.sol +65 -83
  292. package/contracts/shared/PolicyHolder.sol +94 -0
  293. package/contracts/shared/ProxyManager.sol +100 -25
  294. package/contracts/shared/Registerable.sol +24 -38
  295. package/contracts/shared/RegistryLinked.sol +43 -0
  296. package/contracts/shared/Service.sol +42 -24
  297. package/contracts/shared/TokenHandler.sol +14 -6
  298. package/contracts/shared/Versionable.sol +4 -92
  299. package/contracts/test/TestRegisterable.sol +1 -1
  300. package/contracts/test/TestService.sol +4 -3
  301. package/contracts/types/Amount.sol +109 -0
  302. package/contracts/types/Blocknumber.sol +1 -0
  303. package/contracts/types/ClaimId.sol +75 -0
  304. package/contracts/types/DistributorType.sol +2 -2
  305. package/contracts/types/Fee.sol +17 -8
  306. package/contracts/types/NftId.sol +8 -0
  307. package/contracts/types/NftIdSet.sol +26 -24
  308. package/contracts/types/ObjectType.sol +16 -7
  309. package/contracts/types/PayoutId.sol +82 -0
  310. package/contracts/types/Referral.sol +4 -0
  311. package/contracts/types/RoleId.sol +26 -11
  312. package/contracts/types/Seconds.sol +54 -0
  313. package/contracts/types/StateId.sol +11 -2
  314. package/contracts/types/Timestamp.sol +18 -13
  315. package/contracts/types/UFixed.sol +1 -0
  316. package/contracts/types/Version.sol +1 -0
  317. package/package.json +3 -3
  318. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  319. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -314
  320. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  321. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -267
  322. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  323. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  324. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  325. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  326. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  327. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  328. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  329. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  330. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  331. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  332. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  333. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  334. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  335. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  336. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  337. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  338. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  339. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  340. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  341. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  342. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  343. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  344. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +0 -50
  345. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  346. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  347. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  348. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  349. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  350. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  351. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  352. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  353. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  354. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  355. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  356. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  357. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  358. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  359. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  360. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  361. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
  362. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
  363. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1132
  364. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  365. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  366. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  367. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  368. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  369. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  370. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  371. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  372. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  373. package/contracts/components/BaseComponent.sol +0 -86
  374. package/contracts/components/IBaseComponent.sol +0 -24
  375. package/contracts/experiment/cloning/Cloner.sol +0 -47
  376. package/contracts/experiment/errors/Require.sol +0 -38
  377. package/contracts/experiment/errors/Revert.sol +0 -44
  378. package/contracts/experiment/inheritance/A.sol +0 -53
  379. package/contracts/experiment/inheritance/B.sol +0 -28
  380. package/contracts/experiment/inheritance/C.sol +0 -34
  381. package/contracts/experiment/inheritance/IA.sol +0 -13
  382. package/contracts/experiment/inheritance/IB.sol +0 -10
  383. package/contracts/experiment/inheritance/IC.sol +0 -12
  384. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  385. package/contracts/experiment/statemachine/ISM.sol +0 -25
  386. package/contracts/experiment/statemachine/SM.sol +0 -57
  387. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  388. package/contracts/experiment/types/TypeA.sol +0 -47
  389. package/contracts/experiment/types/TypeB.sol +0 -29
  390. package/contracts/instance/AccessManagedSimple.sol +0 -122
  391. package/contracts/instance/AccessManagerSimple.sol +0 -692
  392. package/contracts/instance/IAccessManagerSimple.sol +0 -391
  393. package/contracts/instance/base/ComponentServiceBase.sol +0 -49
  394. package/contracts/instance/base/IInstanceBase.sol +0 -23
  395. package/contracts/instance/service/ComponentOwnerService.sol +0 -317
  396. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  397. package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -1,307 +1,322 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IRegisterable} from "../shared/IRegisterable.sol";
5
- import {IService} from "../shared/IService.sol";
4
+ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
+
6
+ import {NftId, toNftId, zeroNftId} from "../types/NftId.sol";
7
+ import {VersionPart} from "../types/Version.sol";
8
+ import {ObjectType, PROTOCOL, REGISTRY, TOKEN, SERVICE, INSTANCE, STAKE, PRODUCT, DISTRIBUTION, DISTRIBUTOR, ORACLE, POOL, POLICY, BUNDLE} from "../types/ObjectType.sol";
6
9
 
7
10
  import {ChainNft} from "./ChainNft.sol";
8
11
  import {IRegistry} from "./IRegistry.sol";
9
- import {NftId, toNftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
10
- import {Version, VersionPart, VersionLib, VersionPartLib} from "../types/Version.sol";
11
- import {ObjectType, PROTOCOL, REGISTRY, TOKEN, SERVICE, INSTANCE, STAKE, PRODUCT, DISTRIBUTION, ORACLE, POOL, POLICY, BUNDLE} from "../types/ObjectType.sol";
12
- import {ITransferInterceptor} from "./ITransferInterceptor.sol";
13
-
14
- import {ERC165} from "../shared/ERC165.sol";
15
-
12
+ import {ReleaseManager} from "./ReleaseManager.sol";
16
13
 
17
14
  // IMPORTANT
18
15
  // Each NFT minted by registry is accosiated with:
19
16
  // 1) NFT owner
20
17
  // 2) registred contract OR object stored in registered (parent) contract
21
18
  // Four registration flows:
22
- // 1) non IRegisterable address by registryOwner (TOKEN)
23
- // 2) IRegisterable address by registryOwner (SERVICE)
24
- // 3) IRegisterable address by approved service (INSTANCE, COMPONENT)
25
- // 4) state object by approved service (POLICY, BUNDLE, STAKE)
19
+ // 1) IService address by release manager (SERVICE of domain SERVICE aka registry service aka release creation)
20
+ // 2) IService address by release manager (SERVICE of domain !SERVICE aka regular service)
21
+ // 3) IRegisterable address by regular service (INSTANCE, PRODUCT, POOL, DISTRIBUTION, ORACLE)
22
+ // 4) state object by regular service (POLICY, BUNDLE, STAKE)
26
23
 
27
24
  contract Registry is
28
- ERC165,
29
25
  IRegistry
30
26
  {
31
- uint256 public constant GIF_MAJOR_VERSION_AT_DEPLOYMENT = 3; // at registry deploymnet time
32
27
  address public constant NFT_LOCK_ADDRESS = address(0x1);
33
- uint256 public constant REGISTRY_SERVICE_TOKEN_SEQUENCE_ID = 3;
28
+ uint256 public constant REGISTRY_TOKEN_SEQUENCE_ID = 2;
34
29
  string public constant EMPTY_URI = "";
35
30
 
36
- VersionPart internal _majorVersion;
31
+ mapping(NftId nftId => ObjectInfo info) private _info;
32
+ mapping(address object => NftId nftId) private _nftIdByAddress;
37
33
 
38
- mapping(NftId nftId => ObjectInfo info) internal _info;
39
- mapping(address object => NftId nftId) internal _nftIdByAddress;
34
+ mapping(VersionPart version => mapping(ObjectType serviceDomain => address)) private _service;
40
35
 
41
- mapping(NftId registrator => mapping(
42
- ObjectType objectType => bool)) internal _isApproved;
36
+ mapping(ObjectType objectType => bool) private _coreTypes;
43
37
 
44
38
  mapping(ObjectType objectType => mapping(
45
- ObjectType parentType => bool)) internal _isValidContractCombination;
39
+ ObjectType parentType => bool)) private _coreContractCombinations;
46
40
 
47
41
  mapping(ObjectType objectType => mapping(
48
- ObjectType parentType => bool)) internal _isValidObjectCombination;
49
-
50
- mapping(address token => mapping(
51
- VersionPart majorVersion => bool isActive)) internal _tokenIsActive;
52
-
53
- mapping(NftId nftId => string name) internal _string;
54
- mapping(bytes32 serviceNameHash => mapping(
55
- VersionPart majorVersion => address service)) internal _service;
42
+ ObjectType parentType => bool)) private _coreObjectCombinations;
56
43
 
57
- NftId internal _registryNftId;
58
- NftId internal _serviceNftId; // set in stone upon registry creation
59
- ChainNft internal _chainNft;
44
+ NftId private _registryNftId;
45
+ ChainNft private _chainNft;
60
46
 
47
+ ReleaseManager private _releaseManager;
61
48
 
62
- modifier onlyOwner() {
63
- if(msg.sender != getOwner()) {
64
- revert NotOwner(msg.sender);
49
+ modifier onlyRegistryService() {
50
+ if(!_releaseManager.isActiveRegistryService(msg.sender)) {
51
+ revert CallerNotRegistryService();
65
52
  }
66
53
  _;
67
54
  }
68
55
 
69
- modifier onlyRegistryService() {
70
-
71
- if(msg.sender != _info[_serviceNftId].objectAddress) {
72
- revert NotRegistryService();
56
+ modifier onlyReleaseManager() {
57
+ if(msg.sender != address(_releaseManager)) {
58
+ revert CallerNotReleaseManager();
73
59
  }
74
60
  _;
75
61
  }
76
62
 
77
- constructor(address registryOwner, VersionPart majorVersion)
63
+ constructor()
78
64
  {
79
- require(registryOwner > address(0), "Registry: registry owner is 0");
80
-
81
- // major version at constructor time
82
- _majorVersion = VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT);
83
- emit LogInitialMajorVersionSet(_majorVersion);
65
+ _releaseManager = ReleaseManager(msg.sender);
84
66
 
85
67
  // deploy NFT
86
- _chainNft = new ChainNft(address(this));// adds 10kb to deployment size
68
+ _chainNft = new ChainNft(address(this));
87
69
 
88
70
  // initial registry setup
89
71
  _registerProtocol();
90
- _registerRegistry(registryOwner);
91
- _registerRegistryService(registryOwner);
72
+ _registerRegistry();
92
73
 
93
- // set object parent relations
94
- _setupValidObjectParentCombinations();
95
-
96
- _registerInterface(type(IRegistry).interfaceId);
74
+ // set object types and object parent relations
75
+ _setupValidCoreTypesAndCombinations();
97
76
  }
98
77
 
99
- // from IRegistry
100
-
101
- function setMajorVersion(VersionPart newMajorVersion)
78
+ function registerService(
79
+ ObjectInfo memory info,
80
+ VersionPart version,
81
+ ObjectType domain
82
+ )
102
83
  external
103
- onlyOwner
84
+ onlyReleaseManager
85
+ returns(NftId nftId)
104
86
  {
105
- // ensure major version increments is one
106
- uint256 oldMax = _majorVersion.toInt();
107
- uint256 newMax = newMajorVersion.toInt();
108
- if (newMax <= oldMax || newMax - oldMax != 1) {
109
- revert MajorVersionMaxIncreaseInvalid(newMajorVersion, _majorVersion);
87
+ /* must be guaranteed by release manager
88
+ if(info.objectType != SERVICE()) {
89
+ revert();
110
90
  }
91
+ if(info.parentType != REGISTRY()) {
92
+ revert();
93
+ }
94
+ info.initialOwner == NFT_LOCK_ADDRESS <- if services are access managed
95
+ */
96
+
97
+ if(_service[version][domain] > address(0)) {
98
+ revert ServiceAlreadyRegistered(info.objectAddress);
99
+ }
100
+
101
+ _service[version][domain] = info.objectAddress; // nftId;
111
102
 
112
- _majorVersion = newMajorVersion;
113
- emit LogMajorVersionSet(_majorVersion);
103
+ nftId = _register(info);
104
+
105
+ emit LogServiceRegistration(version, domain);
114
106
  }
115
107
 
116
- /// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
117
- // TODO service registration means its approval for some type?
118
- // TODO registration of precompile addresses
119
108
  function register(ObjectInfo memory info)
120
109
  external
121
110
  onlyRegistryService
122
111
  returns(NftId nftId)
123
112
  {
124
113
  ObjectType objectType = info.objectType;
125
- NftId parentNftId = info.parentNftId;
126
- ObjectInfo memory parentInfo = _info[parentNftId];
127
- ObjectType parentType = parentInfo.objectType; // see function header
128
- address parentAddress = parentInfo.objectAddress;
114
+ ObjectType parentType = _info[info.parentNftId].objectType;
129
115
 
130
- // parent is contract -> need to check? -> check before minting
131
- // special case: global registry nft as parent when not on mainnet -> global registry address is 0
132
- // special case: when parentNftId == _chainNft.mint(), check for zero parent address before mint
133
- // special case: when parentNftId == _chainNft.mint() && objectAddress == initialOwner
134
- if(parentAddress == address(0)) {
135
- revert ZeroParentAddress();
116
+ // TODO do not need it here -> SERVICE is no longer part of _coreContractCombinations
117
+ // no service registrations
118
+ if(objectType == SERVICE()) {
119
+ revert ServiceRegistration();
136
120
  }
137
121
 
138
- address interceptor = _getInterceptor(info.isInterceptor, info.objectAddress, parentInfo.isInterceptor, parentAddress);
139
-
140
- // TODO does external call
141
- uint256 mintedTokenId = _chainNft.mint(
142
- info.initialOwner,
143
- interceptor,
144
- EMPTY_URI);
145
- nftId = toNftId(mintedTokenId);
146
-
147
- // TODO move nftId out of info struct
148
- // getters by nftId -> return struct without nftId
149
- // getters by address -> return nftId AND struct
150
- info.nftId = nftId;
151
- _info[nftId] = info;
152
-
153
- if(info.objectAddress > address(0))
122
+ // only valid core types combinations
123
+ if(info.objectAddress == address(0))
154
124
  {
155
- // TODO if need to add types latter -> at least call this check from registry service
156
- // parent is registered + object-parent types are valid
157
- if(_isValidContractCombination[objectType][parentType] == false) {
125
+ if(_coreObjectCombinations[objectType][parentType] == false) {
158
126
  revert InvalidTypesCombination(objectType, parentType);
159
127
  }
160
-
161
- address contractAddress = info.objectAddress;
162
-
163
- if(_nftIdByAddress[contractAddress].gtz()) {
164
- revert ContractAlreadyRegistered(contractAddress);
165
- }
166
-
167
- _nftIdByAddress[contractAddress] = nftId;
168
-
169
- // special case
170
- if(objectType == SERVICE()) {
171
- _registerService(info);
172
- }
173
128
  }
174
129
  else
175
130
  {
176
- if(_isValidObjectCombination[objectType][parentType] == false) {
131
+ if(_coreContractCombinations[objectType][parentType] == false) {
177
132
  revert InvalidTypesCombination(objectType, parentType);
178
133
  }
179
134
  }
180
135
 
181
- emit LogRegistration(info);
136
+ nftId = _register(info);
182
137
  }
183
138
 
184
- function setTokenActive(address token, VersionPart majorVersion, bool active)
139
+ function registerWithCustomType(ObjectInfo memory info)
185
140
  external
186
- onlyOwner
141
+ onlyRegistryService
142
+ returns(NftId nftId)
187
143
  {
188
- // verify that token is registered
189
- ObjectInfo memory info = _info[_nftIdByAddress[token]];
190
- if (info.nftId.eqz()) {
191
- revert TokenNotRegistered(token);
192
- }
144
+ ObjectType objectType = info.objectType;
145
+ ObjectType parentType = _info[info.parentNftId].objectType;
193
146
 
194
- // verify provided address is a registered token
195
- if (info.objectType != TOKEN()) {
196
- revert NotToken(token);
147
+ if(_coreTypes[objectType]) {
148
+ revert CoreTypeRegistration();
197
149
  }
198
150
 
199
- // verify valid major version
200
- // ensure major version increments is one
201
- uint256 version = majorVersion.toInt();
202
- uint256 versionNow = _majorVersion.toInt();
203
- if (version < GIF_MAJOR_VERSION_AT_DEPLOYMENT || version > versionNow) {
204
- revert TokenMajorVersionInvalid(majorVersion);
151
+ if(
152
+ parentType == PROTOCOL() ||
153
+ parentType == REGISTRY() ||
154
+ parentType == SERVICE()
155
+ ) {
156
+ revert InvalidTypesCombination(objectType, parentType);
205
157
  }
206
158
 
207
- _tokenIsActive[token][majorVersion] = active;
159
+ _register(info);
160
+ }
161
+
162
+
163
+ /// @dev earliest GIF major version
164
+ function getInitialVersion() external view returns (VersionPart) {
165
+ return _releaseManager.getInitialVersion();
166
+ }
167
+
168
+ // TODO make distinction between active an not yet active version
169
+ // need to be thought trough, not yet clear if necessary
170
+ // need to answer question: what is the latest version during the upgrade process?
171
+ // likely setting up a new gif version does not fit into a single tx
172
+ // in this case we might want to have a period where the latest version is
173
+ // in the process of being set up while the latest active version is 1 major release smaller
174
+ /// @dev latest GIF major version (might not yet be active)
175
+ function getNextVersion() external view returns (VersionPart) {
176
+ return _releaseManager.getNextVersion();
177
+ }
208
178
 
209
- emit LogTokenStateSet(token, majorVersion, active);
179
+ /// @dev latest active GIF release version
180
+ function getLatestVersion() external view returns (VersionPart) {
181
+ return _releaseManager.getLatestVersion();
210
182
  }
211
183
 
212
- /// @dev latest GIF release version
213
- function getMajorVersion() external view returns (VersionPart) {
214
- return _majorVersion;
184
+ function getReleaseInfo(VersionPart version) external view returns (ReleaseInfo memory) {
185
+ return _releaseManager.getReleaseInfo(version);
215
186
  }
216
187
 
217
- function getObjectCount() external view override returns (uint256) {
188
+ function getObjectCount() external view returns (uint256) {
218
189
  return _chainNft.totalSupply();
219
190
  }
220
191
 
192
+ function getReleaseManagerAddress() external view returns (address) {
193
+ return address(_releaseManager);
194
+ }
195
+
221
196
  function getNftId() external view returns (NftId nftId) {
222
197
  return _registryNftId;
223
198
  }
224
199
 
225
- function getNftId(address object) external view override returns (NftId id) {
200
+ function getNftId(address object) external view returns (NftId id) {
226
201
  return _nftIdByAddress[object];
227
202
  }
228
203
 
229
- function ownerOf(NftId nftId) public view override returns (address) {
204
+ function ownerOf(NftId nftId) public view returns (address) {
230
205
  return _chainNft.ownerOf(nftId.toInt());
231
206
  }
232
207
 
233
208
  function ownerOf(address contractAddress) public view returns (address) {
234
-
235
209
  return _chainNft.ownerOf(_nftIdByAddress[contractAddress].toInt());
236
210
  }
237
211
 
238
- function getObjectInfo(NftId nftId) external view override returns (ObjectInfo memory) {
212
+ function getObjectInfo(NftId nftId) external view returns (ObjectInfo memory) {
239
213
  return _info[nftId];
240
214
  }
241
215
 
242
- function getObjectInfo(address object) external view override returns (ObjectInfo memory) {
243
-
216
+ function getObjectInfo(address object) external view returns (ObjectInfo memory) {
244
217
  return _info[_nftIdByAddress[object]];
245
218
  }
246
219
 
247
- function isRegistered(NftId nftId) public view override returns (bool) {
220
+ function isRegistered(NftId nftId) public view returns (bool) {
248
221
  return _info[nftId].objectType.gtz();
249
222
  }
250
223
 
251
- function isRegistered(address object) external view override returns (bool) {
224
+ function isRegistered(address object) external view returns (bool) {
252
225
  return _nftIdByAddress[object].gtz();
253
226
  }
254
227
 
255
- function isTokenActive(address token, VersionPart majorVersion) external view returns (bool) {
256
- return _tokenIsActive[token][majorVersion];
228
+ function isRegisteredService(address object) external view returns (bool) {
229
+ return _info[_nftIdByAddress[object]].objectType == SERVICE();
257
230
  }
258
231
 
259
- function getServiceName(NftId nftId) external view returns (string memory) {
260
- return _string[nftId];
232
+ function isRegisteredComponent(address object) external view returns (bool) {
233
+ NftId objectParentNftId = _info[_nftIdByAddress[object]].parentNftId;
234
+ return _info[objectParentNftId].objectType == INSTANCE();
235
+ }
236
+
237
+ function isValidRelease(VersionPart version) external view returns (bool)
238
+ {
239
+ return _releaseManager.isValidRelease(version);
261
240
  }
262
241
 
263
- // special case to retrive a gif service
264
242
  function getServiceAddress(
265
- string memory serviceName,
266
- VersionPart majorVersion
267
- ) external view returns (address)
243
+ ObjectType serviceDomain,
244
+ VersionPart releaseVersion
245
+ ) external view returns (address service)
268
246
  {
269
- bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
270
- return _service[serviceNameHash][majorVersion];
247
+ // TODO how can I get service address while release is not validated/activated ?!! -> user will check validity of release on its own
248
+ //if(_releaseManager.isValidRelease(releaseVersion)) {
249
+ service = _service[releaseVersion][serviceDomain];
250
+ //}
271
251
  }
272
252
 
273
- function getChainNft() external view override returns (ChainNft) {
274
- return _chainNft;
253
+ function getChainNftAddress() external view override returns (address) {
254
+ return address(_chainNft);
275
255
  }
276
256
 
277
257
  function getOwner() public view returns (address owner) {
278
258
  return ownerOf(address(this));
279
259
  }
280
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
+
281
271
  // Internals
282
272
 
283
- function _registerService(ObjectInfo memory info)
273
+ /// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
274
+ // TODO registration of precompile addresses
275
+ function _register(ObjectInfo memory info)
284
276
  internal
277
+ returns(NftId nftId)
285
278
  {
286
- (
287
- string memory serviceName,
288
- VersionPart majorVersion
289
- ) = abi.decode(info.data, (string, VersionPart));
290
- bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
291
-
292
- // ensures consistency of service.getVersion() and majorVersion here
293
- if(majorVersion != _majorVersion) {
294
- revert InvalidServiceVersion(majorVersion);
279
+ ObjectType objectType = info.objectType;
280
+ NftId parentNftId = info.parentNftId;
281
+ ObjectInfo memory parentInfo = _info[parentNftId];
282
+ ObjectType parentType = parentInfo.objectType; // see function header
283
+ address parentAddress = parentInfo.objectAddress;
284
+
285
+ // parent is contract -> need to check? -> check before minting
286
+ // special case: global registry nft as parent when not on mainnet -> global registry address is 0
287
+ // special case: when parentNftId == _chainNft.mint(), check for zero parent address before mint
288
+ // special case: when parentNftId == _chainNft.mint() && objectAddress == initialOwner
289
+ if(parentAddress == address(0)) {
290
+ revert ZeroParentAddress();
295
291
  }
296
-
297
- if(_service[serviceNameHash][majorVersion] != address(0)) {
298
- revert ServiceNameAlreadyRegistered(serviceName, majorVersion);
292
+
293
+ address interceptor = _getInterceptor(info.isInterceptor, info.objectAddress, parentInfo.isInterceptor, parentAddress);
294
+ uint256 tokenId = _chainNft.getNextTokenId();
295
+ nftId = toNftId(tokenId);
296
+
297
+ info.nftId = nftId;
298
+ _info[nftId] = info;
299
+
300
+ if(info.objectAddress > address(0))
301
+ {
302
+ address contractAddress = info.objectAddress;
303
+
304
+ if(_nftIdByAddress[contractAddress].gtz()) {
305
+ revert ContractAlreadyRegistered(contractAddress);
306
+ }
307
+
308
+ _nftIdByAddress[contractAddress] = nftId;
299
309
  }
300
310
 
301
- _string[info.nftId] = serviceName;
302
- _service[serviceNameHash][majorVersion] = info.objectAddress;
311
+ emit LogRegistration(nftId, parentNftId, objectType, info.isInterceptor, info.objectAddress, info.initialOwner);
303
312
 
304
- emit LogServiceNameRegistration(serviceName, majorVersion);
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
+
305
320
  }
306
321
 
307
322
  /// @dev obtain interceptor address for this nft if applicable, address(0) otherwise
@@ -334,32 +349,31 @@ contract Registry is
334
349
 
335
350
  /// @dev protocol registration used to anchor the dip ecosystem relations
336
351
  function _registerProtocol()
337
- internal
352
+ private
338
353
  {
339
354
  uint256 protocolId = _chainNft.PROTOCOL_NFT_ID();
340
355
  NftId protocolNftId = toNftId(protocolId);
341
356
 
342
- _chainNft.mint(NFT_LOCK_ADDRESS, protocolId);
357
+ _info[protocolNftId] = ObjectInfo({
358
+ nftId: protocolNftId,
359
+ parentNftId: zeroNftId(),
360
+ objectType: PROTOCOL(),
361
+ isInterceptor: false,
362
+ objectAddress: address(0),
363
+ initialOwner: NFT_LOCK_ADDRESS,
364
+ data: ""
365
+ });
343
366
 
344
- _info[protocolNftId] = ObjectInfo(
345
- protocolNftId,
346
- zeroNftId(), // parent
347
- PROTOCOL(),
348
- false, // isInterceptor
349
- address(0), // objectAddress
350
- NFT_LOCK_ADDRESS,// initialOwner
351
- ""
352
- );
367
+ _chainNft.mint(NFT_LOCK_ADDRESS, protocolId);
353
368
  }
354
369
 
355
370
  /// @dev registry registration
356
371
  /// might also register the global registry when not on mainnet
357
- function _registerRegistry(address registryOwner)
358
- internal
372
+ function _registerRegistry()
373
+ private
359
374
  {
360
- uint256 registryId = _chainNft.calculateTokenId(2);
375
+ uint256 registryId = _chainNft.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID);
361
376
  NftId registryNftId = toNftId(registryId);
362
-
363
377
  NftId parentNftId;
364
378
 
365
379
  if(registryId != _chainNft.GLOBAL_REGISTRY_ID())
@@ -372,68 +386,39 @@ contract Registry is
372
386
  parentNftId = toNftId(_chainNft.PROTOCOL_NFT_ID());
373
387
  }
374
388
 
375
- _chainNft.mint(registryOwner, registryId);
376
-
377
- _info[registryNftId] = ObjectInfo(
378
- registryNftId,
379
- parentNftId,
380
- REGISTRY(),
381
- false, // isInterceptor
382
- address(this),
383
- registryOwner,
384
- ""
385
- );
389
+ _info[registryNftId] = ObjectInfo({
390
+ nftId: registryNftId,
391
+ parentNftId: parentNftId,
392
+ objectType: REGISTRY(),
393
+ isInterceptor: false,
394
+ objectAddress: address(this),
395
+ initialOwner: NFT_LOCK_ADDRESS,
396
+ data: ""
397
+ });
386
398
  _nftIdByAddress[address(this)] = registryNftId;
387
399
  _registryNftId = registryNftId;
388
- }
389
400
 
401
+ _chainNft.mint(NFT_LOCK_ADDRESS, registryId);
402
+ }
390
403
 
391
404
  /// @dev global registry registration for non mainnet registries
392
405
  function _registerGlobalRegistry()
393
- internal
406
+ private
394
407
  {
395
408
  uint256 globalRegistryId = _chainNft.GLOBAL_REGISTRY_ID();
396
-
397
- _chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
398
-
399
409
  NftId globalRegistryNftId = toNftId(globalRegistryId);
400
410
 
401
- _info[globalRegistryNftId] = ObjectInfo(
402
- globalRegistryNftId,
403
- toNftId(_chainNft.PROTOCOL_NFT_ID()), // parent
404
- REGISTRY(),
405
- false, // isInterceptor
406
- address(0), // objectAddress
407
- NFT_LOCK_ADDRESS, // initialOwner
408
- "" // data
409
- );
410
- }
411
-
412
- function _registerRegistryService(address registryOwner)
413
- internal
414
- {
415
- uint256 serviceId = _chainNft.calculateTokenId(REGISTRY_SERVICE_TOKEN_SEQUENCE_ID);
416
- NftId serviceNftId = toNftId(serviceId);
417
-
418
- _chainNft.mint(registryOwner, serviceId);
419
-
420
- _info[serviceNftId] = ObjectInfo(
421
- serviceNftId,
422
- _registryNftId,
423
- SERVICE(),
424
- false, // isInterceptor
425
- msg.sender, // service deploys registry
426
- registryOwner, // initialOwner,
427
- ""
428
- );
429
-
430
- _nftIdByAddress[msg.sender] = serviceNftId;
411
+ _info[globalRegistryNftId] = ObjectInfo({
412
+ nftId: globalRegistryNftId,
413
+ parentNftId: toNftId(_chainNft.PROTOCOL_NFT_ID()),
414
+ objectType: REGISTRY(),
415
+ isInterceptor: false,
416
+ objectAddress: address(0),
417
+ initialOwner: NFT_LOCK_ADDRESS,
418
+ data: ""
419
+ });
431
420
 
432
- string memory serviceName = "RegistryService";
433
- bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
434
- _service[serviceNameHash][VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT)] = msg.sender;
435
- _string[serviceNftId] = serviceName;
436
- _serviceNftId = serviceNftId;
421
+ _chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
437
422
  }
438
423
 
439
424
  /// @dev defines which object - parent types relations are allowed to register
@@ -442,27 +427,41 @@ contract Registry is
442
427
  // 2) DO NOT use object type (e.g. POLCY, BUNDLE, STAKE) as parent type
443
428
  // 3) DO NOT use REGISTRY as object type
444
429
  // 2) DO NOT use PROTOCOL and "zeroObjectType"
445
- function _setupValidObjectParentCombinations()
446
- internal
430
+ function _setupValidCoreTypesAndCombinations()
431
+ private
447
432
  {
433
+ _coreTypes[REGISTRY()] = true;
434
+ _coreTypes[SERVICE()] = true;
435
+ _coreTypes[TOKEN()] = true;
436
+ _coreTypes[INSTANCE()] = true;
437
+ _coreTypes[PRODUCT()] = true;
438
+ _coreTypes[POOL()] = true;
439
+ _coreTypes[DISTRIBUTION()] = true;
440
+ _coreTypes[POLICY()] = true;
441
+ _coreTypes[BUNDLE()] = true;
442
+ _coreTypes[STAKE()] = true;
443
+
448
444
  // registry as parent, ONLY registry owner
449
- _isValidContractCombination[TOKEN()][REGISTRY()] = true;
450
- _isValidContractCombination[SERVICE()][REGISTRY()] = true;
445
+ //_coreContractCombinations[REGISTRY()][REGISTRY()] = true; // only for global regstry
446
+ _coreContractCombinations[TOKEN()][REGISTRY()] = true;
447
+ //_coreContractCombinations[SERVICE()][REGISTRY()] = true;// do not need it here -> registerService() registers exactly this combination
451
448
 
452
449
  // registry as parent, ONLY approved
453
- _isValidContractCombination[INSTANCE()][REGISTRY()] = true;
450
+ _coreContractCombinations[INSTANCE()][REGISTRY()] = true;
454
451
 
455
452
  // instance as parent, ONLY approved
456
- _isValidContractCombination[PRODUCT()][INSTANCE()] = true;
457
- _isValidContractCombination[DISTRIBUTION()][INSTANCE()] = true;
458
- _isValidContractCombination[ORACLE()][INSTANCE()] = true;
459
- _isValidContractCombination[POOL()][INSTANCE()] = true;
453
+ _coreContractCombinations[PRODUCT()][INSTANCE()] = true;
454
+ _coreContractCombinations[DISTRIBUTION()][INSTANCE()] = true;
455
+ _coreContractCombinations[ORACLE()][INSTANCE()] = true;
456
+ _coreContractCombinations[POOL()][INSTANCE()] = true;
457
+
458
+ _coreObjectCombinations[DISTRIBUTOR()][DISTRIBUTION()] = true;
460
459
 
461
460
  // product as parent, ONLY approved
462
- _isValidObjectCombination[POLICY()][PRODUCT()] = true;
461
+ _coreObjectCombinations[POLICY()][PRODUCT()] = true;
463
462
 
464
463
  // pool as parent, ONLY approved
465
- _isValidObjectCombination[BUNDLE()][POOL()] = true;
466
- _isValidObjectCombination[STAKE()][POOL()] = true;
464
+ _coreObjectCombinations[BUNDLE()][POOL()] = true;
465
+ _coreObjectCombinations[STAKE()][POOL()] = true;
467
466
  }
468
467
  }