@etherisc/gif-next 0.0.2-743affe-003 → 0.0.2-771d9e9-515

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 (371) hide show
  1. package/README.md +108 -1
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  3. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +116 -2
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +204 -31
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +106 -3
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +0 -191
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +0 -225
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +0 -216
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +245 -65
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +314 -41
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +4 -0
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +66 -0
  20. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +4 -0
  21. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +24 -0
  22. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +4 -0
  23. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +42 -0
  24. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  36. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  39. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  40. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  41. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  42. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  43. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  44. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +4 -0
  45. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.json +101 -0
  46. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +4 -0
  47. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +1132 -0
  48. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +4 -0
  49. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +1082 -0
  50. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  51. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +325 -1744
  52. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  53. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +480 -0
  54. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  55. package/artifacts/contracts/instance/Instance.sol/Instance.json +2300 -1340
  56. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  57. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +917 -0
  58. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  59. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1388 -0
  60. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  61. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +891 -0
  62. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  63. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +492 -0
  64. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
  65. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +149 -2
  66. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  67. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  68. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +27 -158
  69. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  70. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  71. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +37 -245
  72. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  73. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
  74. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  75. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +211 -0
  76. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  77. package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
  78. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  79. package/artifacts/contracts/instance/module/{distribution/IDistribution.sol → IDistribution.sol}/IDistribution.json +1 -1
  80. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  81. package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
  82. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  83. package/artifacts/contracts/instance/module/{risk/IRisk.sol → IRisk.sol}/IRisk.json +1 -1
  84. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  85. package/artifacts/contracts/instance/{base/ModuleBase.sol/ModuleBase.json → module/ISetup.sol/ISetup.json} +2 -2
  86. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  87. package/artifacts/contracts/instance/module/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
  88. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +178 -41
  90. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  91. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +212 -22
  92. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  93. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +448 -0
  94. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +81 -4
  96. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +80 -3
  98. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +80 -3
  100. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  101. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +80 -3
  102. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  103. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +230 -24
  104. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  105. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +460 -0
  106. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  107. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +47 -2
  108. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  109. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +293 -111
  110. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  111. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +203 -18
  112. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  113. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  114. package/artifacts/contracts/registry/Registry.sol/Registry.json +262 -150
  115. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  116. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +416 -40
  117. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  118. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +525 -0
  119. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  120. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +410 -0
  121. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  122. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  123. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  124. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  125. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  126. package/artifacts/contracts/{instance/module/component/ComponentModule.sol/ComponentModule.json → shared/INftOwnable.sol/INftOwnable.json} +67 -57
  127. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  128. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +80 -3
  129. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  130. package/artifacts/contracts/{instance/base/ServiceBase.sol/ServiceBase.json → shared/IService.sol/IService.json} +76 -35
  131. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  132. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  133. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  134. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  135. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +121 -82
  136. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  137. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +120 -6
  138. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
  139. package/artifacts/contracts/{instance/base/IService.sol/IService.json → shared/RegisterableUpgradable.sol/RegisterableUpgradable.json} +137 -39
  140. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  141. package/artifacts/contracts/{instance/base/InstanceBase.sol/InstanceBase.json → shared/Service.sol/Service.json} +106 -94
  142. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  143. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  144. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  145. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  146. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  147. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  148. package/artifacts/contracts/test/TestFee.sol/TestFee.json +4 -4
  149. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  150. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +120 -6
  151. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  152. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +14 -14
  153. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  154. package/artifacts/contracts/test/TestService.sol/TestService.json +142 -14
  155. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  156. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
  157. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  158. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  159. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  160. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +18 -2
  161. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  162. package/artifacts/contracts/test/Usdc.sol/USDC.json +91 -53
  163. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  164. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  165. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  166. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  167. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  168. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  169. package/artifacts/contracts/types/Fee.sol/FeeLib.json +4 -4
  170. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  171. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +31 -17
  172. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  173. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  174. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  175. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  176. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  177. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  178. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  179. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  180. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  181. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  182. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  183. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  184. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  185. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +134 -8
  186. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  187. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  188. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  189. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +15 -2
  190. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  191. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  192. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  193. package/artifacts/contracts/types/UFixed.sol/{UFixedMathLib.json → UFixedLib.json} +3 -3
  194. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  195. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  196. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  197. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
  198. package/contracts/components/BaseComponent.sol +16 -4
  199. package/contracts/components/Distribution.sol +21 -16
  200. package/contracts/components/IBaseComponent.sol +9 -3
  201. package/contracts/components/IDistributionComponent.sol +3 -6
  202. package/contracts/components/IPoolComponent.sol +1 -4
  203. package/contracts/components/IProductComponent.sol +3 -7
  204. package/contracts/components/Pool.sol +24 -27
  205. package/contracts/components/Product.sol +44 -46
  206. package/contracts/experiment/cloning/Cloner.sol +47 -0
  207. package/contracts/instance/AccessManagedSimple.sol +115 -0
  208. package/contracts/instance/AccessManagerSimple.sol +692 -0
  209. package/contracts/instance/IAccessManagerSimple.sol +391 -0
  210. package/contracts/instance/IInstance.sol +32 -47
  211. package/contracts/instance/IInstanceService.sol +30 -0
  212. package/contracts/instance/Instance.sol +423 -65
  213. package/contracts/instance/InstanceAccessManager.sol +288 -0
  214. package/contracts/instance/InstanceReader.sol +306 -0
  215. package/contracts/instance/InstanceService.sol +182 -0
  216. package/contracts/instance/InstanceServiceManager.sol +56 -0
  217. package/contracts/instance/base/ComponentServiceBase.sol +77 -8
  218. package/contracts/instance/base/IKeyValueStore.sol +13 -14
  219. package/contracts/instance/base/ILifecycle.sol +3 -3
  220. package/contracts/instance/base/KeyValueStore.sol +49 -38
  221. package/contracts/instance/base/Lifecycle.sol +1 -1
  222. package/contracts/instance/module/IAccess.sol +38 -0
  223. package/contracts/instance/module/IBundle.sol +20 -0
  224. package/contracts/instance/module/IDistribution.sol +39 -0
  225. package/contracts/instance/module/IPolicy.sol +45 -0
  226. package/contracts/instance/module/IRisk.sol +11 -0
  227. package/contracts/instance/module/ISetup.sol +44 -0
  228. package/contracts/instance/module/ITreasury.sol +23 -0
  229. package/contracts/instance/service/ComponentOwnerService.sol +145 -100
  230. package/contracts/instance/service/DistributionService.sol +48 -15
  231. package/contracts/instance/service/DistributionServiceManager.sol +53 -0
  232. package/contracts/instance/service/IComponentOwnerService.sol +1 -1
  233. package/contracts/instance/service/IDistributionService.sol +1 -1
  234. package/contracts/instance/service/IPoolService.sol +1 -1
  235. package/contracts/instance/service/IProductService.sol +3 -3
  236. package/contracts/instance/service/PoolService.sol +96 -52
  237. package/contracts/instance/service/PoolServiceManager.sol +53 -0
  238. package/contracts/registry/ChainNft.sol +40 -25
  239. package/contracts/registry/IRegistry.sol +47 -28
  240. package/contracts/registry/IRegistryService.sol +16 -12
  241. package/contracts/registry/Registry.sol +174 -190
  242. package/contracts/registry/RegistryService.sol +172 -156
  243. package/contracts/registry/RegistryServiceManager.sol +80 -0
  244. package/contracts/registry/TokenRegistry.sol +111 -0
  245. package/contracts/shared/ContractDeployerLib.sol +72 -0
  246. package/contracts/shared/ERC165.sol +7 -3
  247. package/contracts/shared/INftOwnable.sol +22 -0
  248. package/contracts/shared/IRegisterable.sol +3 -8
  249. package/contracts/{instance/base → shared}/IService.sol +3 -3
  250. package/contracts/shared/NftOwnable.sol +136 -0
  251. package/contracts/shared/ProxyManager.sol +16 -37
  252. package/contracts/shared/Registerable.sol +15 -42
  253. package/contracts/shared/RegisterableUpgradable.sol +16 -0
  254. package/contracts/shared/Service.sol +55 -0
  255. package/contracts/shared/TokenHandler.sol +27 -0
  256. package/contracts/shared/UpgradableProxyWithAdmin.sol +2 -2
  257. package/contracts/shared/Versionable.sol +3 -3
  258. package/contracts/test/TestFee.sol +2 -2
  259. package/contracts/test/TestRoleId.sol +1 -1
  260. package/contracts/test/TestService.sol +3 -5
  261. package/contracts/types/DistributorType.sol +55 -0
  262. package/contracts/types/Fee.sol +3 -3
  263. package/contracts/types/Key32.sol +8 -3
  264. package/contracts/types/NumberId.sol +52 -0
  265. package/contracts/types/ObjectType.sol +35 -14
  266. package/contracts/types/Referral.sol +85 -0
  267. package/contracts/types/RoleId.sol +60 -9
  268. package/contracts/types/StateId.sol +5 -1
  269. package/contracts/types/Timestamp.sol +7 -3
  270. package/contracts/types/UFixed.sol +128 -12
  271. package/contracts/types/Version.sol +4 -1
  272. package/package.json +4 -3
  273. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
  274. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
  275. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
  276. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  277. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +0 -4
  278. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  279. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
  280. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
  281. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
  282. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.json +0 -10
  283. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  284. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
  285. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
  286. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -297
  287. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
  288. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
  289. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -297
  290. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  291. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
  292. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
  293. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  294. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +0 -117
  295. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +0 -4
  296. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +0 -10
  297. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +0 -4
  298. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +0 -4
  299. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.json +0 -10
  300. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  301. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  302. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -284
  303. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  304. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -284
  305. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  306. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.json +0 -10
  307. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  308. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -164
  309. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  310. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -164
  311. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
  312. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
  313. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -113
  314. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
  315. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -131
  316. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  317. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  318. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -638
  319. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  320. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
  321. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  322. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -638
  323. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +0 -4
  324. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +0 -964
  325. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  326. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -457
  327. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
  328. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
  329. package/artifacts/contracts/registry/RegistryInstaller.sol/RegistryInstaller.dbg.json +0 -4
  330. package/artifacts/contracts/registry/RegistryInstaller.sol/RegistryInstaller.json +0 -344
  331. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
  332. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
  333. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +0 -4
  334. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +0 -445
  335. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
  336. package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -602
  337. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
  338. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -632
  339. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +0 -4
  340. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +0 -99
  341. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  342. package/contracts/instance/IInstanceLinked.sol +0 -8
  343. package/contracts/instance/base/InstanceBase.sol +0 -89
  344. package/contracts/instance/base/ModuleBase.sol +0 -57
  345. package/contracts/instance/base/ServiceBase.sol +0 -43
  346. package/contracts/instance/module/access/Access.sol +0 -149
  347. package/contracts/instance/module/access/IAccess.sol +0 -53
  348. package/contracts/instance/module/bundle/BundleModule.sol +0 -134
  349. package/contracts/instance/module/bundle/IBundle.sol +0 -53
  350. package/contracts/instance/module/component/ComponentModule.sol +0 -71
  351. package/contracts/instance/module/component/IComponent.sol +0 -28
  352. package/contracts/instance/module/distribution/DistributionModule.sol +0 -17
  353. package/contracts/instance/module/distribution/IDistribution.sol +0 -10
  354. package/contracts/instance/module/policy/IPolicy.sol +0 -63
  355. package/contracts/instance/module/policy/PolicyModule.sol +0 -91
  356. package/contracts/instance/module/pool/IPoolModule.sol +0 -41
  357. package/contracts/instance/module/pool/PoolModule.sol +0 -95
  358. package/contracts/instance/module/risk/IRisk.sol +0 -26
  359. package/contracts/instance/module/risk/RiskModule.sol +0 -62
  360. package/contracts/instance/module/treasury/ITreasury.sol +0 -84
  361. package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
  362. package/contracts/instance/module/treasury/TreasuryModule.sol +0 -131
  363. package/contracts/instance/service/ProductService.sol +0 -509
  364. package/contracts/registry/IChainNft.sol +0 -22
  365. package/contracts/registry/IRegistryLinked.sol +0 -8
  366. package/contracts/registry/RegistryInstaller.sol +0 -100
  367. package/contracts/shared/IOwnable.sol +0 -6
  368. package/contracts/test/TestDistribution.sol +0 -22
  369. package/contracts/test/TestPool.sol +0 -27
  370. package/contracts/test/TestProduct.sol +0 -74
  371. package/contracts/types/ReferralId.sol +0 -48
@@ -2,17 +2,15 @@
2
2
  pragma solidity ^0.8.20;
3
3
 
4
4
  import {IRegisterable} from "../shared/IRegisterable.sol";
5
- import {IService} from "../instance/base/IService.sol";
5
+ import {IService} from "../shared/IService.sol";
6
6
 
7
- import {IChainNft} from "./IChainNft.sol";
8
7
  import {ChainNft} from "./ChainNft.sol";
9
8
  import {IRegistry} from "./IRegistry.sol";
10
9
  import {NftId, toNftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
11
- import {Version, VersionPart, VersionLib} from "../types/Version.sol";
10
+ import {Version, VersionPart, VersionLib, VersionPartLib} from "../types/Version.sol";
12
11
  import {ObjectType, PROTOCOL, REGISTRY, TOKEN, SERVICE, INSTANCE, STAKE, PRODUCT, DISTRIBUTION, ORACLE, POOL, POLICY, BUNDLE} from "../types/ObjectType.sol";
13
12
  import {ITransferInterceptor} from "./ITransferInterceptor.sol";
14
13
 
15
- import {IOwnable} from "../shared/IOwnable.sol";
16
14
  import {ERC165} from "../shared/ERC165.sol";
17
15
 
18
16
 
@@ -30,63 +28,40 @@ contract Registry is
30
28
  ERC165,
31
29
  IRegistry
32
30
  {
33
- // register
34
- error NotRegistryService();
35
- error ZeroParentAddress();
36
- error ContractAlreadyRegistered(address objectAddress);
37
- error InvalidServiceVersion(VersionPart majorVersion);
38
- error ServiceNameAlreadyRegistered(string name, VersionPart majorVersion);
39
-
40
- // approve
41
- error NotOwner();
42
- error NotRegisteredContract(NftId registrarNftId);
43
- error NotService(NftId registrarNftId);
44
- error InvalidTypesCombination(ObjectType objectType, ObjectType parentType);
45
-
46
- uint256 public constant MAJOR_VERSION_MIN = 3;
47
-
31
+ uint256 public constant GIF_MAJOR_VERSION_AT_DEPLOYMENT = 3;
32
+ address public constant NFT_LOCK_ADDRESS = address(0x1);
33
+ uint256 public constant REGISTRY_SERVICE_TOKEN_SEQUENCE_ID = 3;
48
34
  string public constant EMPTY_URI = "";
49
35
 
50
- address constant public NFT_LOCK_ADDRESS = address(0x1);
36
+ VersionPart internal _majorVersion;
51
37
 
52
- mapping(NftId nftId => ObjectInfo info) _info;
53
- mapping(address object => NftId nftId) _nftIdByAddress;
38
+ mapping(NftId nftId => ObjectInfo info) internal _info;
39
+ mapping(address object => NftId nftId) internal _nftIdByAddress;
54
40
 
55
41
  mapping(NftId registrator => mapping(
56
- ObjectType objectType => bool)) _isApproved;
42
+ ObjectType objectType => bool)) internal _isApproved;
57
43
 
58
44
  mapping(ObjectType objectType => mapping(
59
- ObjectType parentType => bool)) _isValidContractCombination;
45
+ ObjectType parentType => bool)) internal _isValidContractCombination;
60
46
 
61
47
  mapping(ObjectType objectType => mapping(
62
- ObjectType parentType => bool)) _isValidObjectCombination;
48
+ ObjectType parentType => bool)) internal _isValidObjectCombination;
49
+
50
+ mapping(address token => mapping(
51
+ VersionPart majorVersion => bool isActive)) internal _tokenIsActive;
63
52
 
64
- mapping(NftId nftId => string name) _string;
53
+ mapping(NftId nftId => string name) internal _string;
65
54
  mapping(bytes32 serviceNameHash => mapping(
66
- VersionPart majorVersion => address service)) _service;
67
-
68
- NftId _registryNftId;
69
- NftId _serviceNftId; // set in stone upon registry creation
70
- IChainNft _chainNft;
71
- ChainNft _chainNftInternal;
72
-
73
- /// @dev will own protocol, global registry, registry and registry service nfts minted during creation
74
- // TODO registry nft can be transfered while protocol, global registry and registry service nfts are not transferable
75
- // TODO get owner from one place -> nft contract
76
- address _protocolOwner;
77
-
78
- /*
79
- modifier onlyInitialOwner() {
80
- if(
81
- msg.sender != getOwner() ||
82
- msg.sender != _info[_registryNftId].initialOwner) {
83
- revert NotInitialOwner();
84
- }
85
- }*/
55
+ VersionPart majorVersion => address service)) internal _service;
56
+
57
+ NftId internal _registryNftId;
58
+ NftId internal _serviceNftId; // set in stone upon registry creation
59
+ ChainNft internal _chainNft;
60
+
86
61
 
87
62
  modifier onlyOwner() {
88
63
  if(msg.sender != getOwner()) {
89
- revert NotOwner();
64
+ revert NotOwner(msg.sender);
90
65
  }
91
66
  _;
92
67
  }
@@ -99,36 +74,49 @@ contract Registry is
99
74
  _;
100
75
  }
101
76
 
102
- constructor(address protocolOwner, VersionPart majorVersion)
77
+ constructor(address registryOwner, VersionPart majorVersion)
103
78
  {
104
- require(protocolOwner > address(0), "Registry: protocol owner is 0");
105
- require(majorVersion.toInt() == MAJOR_VERSION_MIN, "Registry: initial major version of registry service is not MAJOR_VERSION_MIN");
79
+ require(registryOwner > address(0), "Registry: registry owner is 0");
106
80
 
107
- // TODO registry owner can change, while protocol is not?
108
- _protocolOwner = protocolOwner;
81
+ // major version at constructor time
82
+ _majorVersion = VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT);
83
+ emit LogInitialMajorVersionSet(_majorVersion);
109
84
 
110
85
  // deploy NFT
111
- _chainNftInternal = new ChainNft(address(this));// adds 10kb to deployment size
112
- _chainNft = IChainNft(_chainNftInternal);
86
+ _chainNft = new ChainNft(address(this));// adds 10kb to deployment size
113
87
 
114
88
  // initial registry setup
115
89
  _registerProtocol();
116
-
117
- _registerRegistry();
118
-
119
- _registerRegistryService();
90
+ _registerRegistry(registryOwner);
91
+ _registerRegistryService(registryOwner);
120
92
 
121
93
  // set object parent relations
122
94
  _setupValidObjectParentCombinations();
123
95
 
124
96
  _registerInterface(type(IRegistry).interfaceId);
125
- _registerInterface(type(IOwnable).interfaceId);
126
97
  }
127
98
 
128
- /// @dev registry protects only from tampering existing records and invalid types pairs
129
- // IMPORTANT: rare case when parentNftId is not registered and == next nftId -> technincally this is ZeroParentAddress error
130
- // to catch this check parent address before minting !!!!
99
+ // from IRegistry
100
+
101
+ /// @dev latest GIF release version
102
+ function setMajorVersion(VersionPart newMajorVersion)
103
+ external
104
+ onlyOwner
105
+ {
106
+ // ensure major version increments is one
107
+ uint256 oldMax = _majorVersion.toInt();
108
+ uint256 newMax = newMajorVersion.toInt();
109
+ if (newMax <= oldMax || newMax - oldMax != 1) {
110
+ revert MajorVersionMaxIncreaseInvalid(newMajorVersion, _majorVersion);
111
+ }
112
+
113
+ _majorVersion = newMajorVersion;
114
+ emit LogMajorVersionSet(_majorVersion);
115
+ }
116
+
117
+ /// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
131
118
  // TODO service registration means its approval for some type?
119
+ // TODO registration of precompile addresses
132
120
  function register(ObjectInfo memory info)
133
121
  external
134
122
  onlyRegistryService
@@ -150,6 +138,7 @@ contract Registry is
150
138
 
151
139
  address interceptor = _getInterceptor(info.isInterceptor, info.objectAddress, parentInfo.isInterceptor, parentAddress);
152
140
 
141
+ // TODO does external call
153
142
  uint256 mintedTokenId = _chainNft.mint(
154
143
  info.initialOwner,
155
144
  interceptor,
@@ -179,33 +168,8 @@ contract Registry is
179
168
  _nftIdByAddress[contractAddress] = nftId;
180
169
 
181
170
  // special case
182
- if(objectType == SERVICE())
183
- {
184
- (
185
- string memory serviceName,
186
- VersionPart majorVersion
187
- ) = abi.decode(info.data, (string, VersionPart));
188
- bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
189
-
190
- // TODO MUST guarantee consistency of registerable.getVersion() and majorVersion here
191
- // TODO update _serviceNftId when registryService with new major version is registered? -> it is fixed in current setup
192
- // TODO do not use names -> each object type is registered by corresponding service -> conflicting with approve()
193
- if(
194
- majorVersion.toInt() < MAJOR_VERSION_MIN ||
195
- (majorVersion.toInt() > MAJOR_VERSION_MIN &&
196
- _service[serviceNameHash][VersionLib.toVersionPart(majorVersion.toInt() - 1)] == address(0) )
197
- ) {
198
- revert InvalidServiceVersion(majorVersion);
199
- }
200
-
201
- if(_service[serviceNameHash][majorVersion] != address(0)) {
202
- revert ServiceNameAlreadyRegistered(serviceName, majorVersion);
203
- }
204
-
205
- _string[nftId] = serviceName;
206
- _service[serviceNameHash][majorVersion] = contractAddress;
207
-
208
- emit LogServiceNameRegistration(serviceName, majorVersion);
171
+ if(objectType == SERVICE()) {
172
+ _registerService(info);
209
173
  }
210
174
  }
211
175
  else
@@ -215,75 +179,70 @@ contract Registry is
215
179
  }
216
180
  }
217
181
 
218
- emit LogRegistration(nftId, info.parentNftId, info.objectType, info.objectAddress, info.initialOwner);
219
- }
220
-
221
- function registerFrom(
222
- address from,
223
- ObjectInfo memory info
224
- ) external returns (NftId nftId)
225
- {
226
- revert();
182
+ emit LogRegistration(info);
227
183
  }
228
-
229
184
 
230
- /// @dev
231
- // msg.sender - registry owner
232
- // CAN approve only registered service contract
233
- // CAN approve any combination specified in _isValidCombination
234
- // CAN NOT approve itself
235
- // TODO in case where exists exactly one registered service per objectType (and major version):
236
- // - registration and approve is a single operation, no need for separate approve() function
237
- // - then approve can be used to adding new valid object-parent combinations???
238
- function approve(
239
- NftId serviceNftId,
240
- ObjectType objectType,
241
- ObjectType parentType
242
- )
243
- public
244
- onlyOwner()
185
+ /// @dev token state is informative, registry have no clue about used tokens
186
+ // component owner is responsible for token selection and operations
187
+ // service MUST deny registration of component with inactive token
188
+ function setTokenActive(address token, VersionPart majorVersion, bool active)
189
+ external
190
+ onlyOwner
245
191
  {
246
- address serviceAddress = _info[serviceNftId].objectAddress;
247
-
248
- if(_nftIdByAddress[serviceAddress].eqz()) {
249
- revert NotRegisteredContract(serviceNftId);
192
+ // verify that token is registered
193
+ ObjectInfo memory info = _info[_nftIdByAddress[token]];
194
+ if (info.nftId.eqz()) {
195
+ revert TokenNotRegistered(token);
250
196
  }
251
197
 
252
- if(_info[serviceNftId].objectType != SERVICE()) {
253
- revert NotService(serviceNftId);
198
+ // verify provided address is a registered token
199
+ if (info.objectType != TOKEN()) {
200
+ revert NotToken(token);
254
201
  }
255
202
 
256
- if(
257
- _isValidContractCombination[objectType][parentType] == false &&
258
- _isValidObjectCombination[objectType][parentType] == false) {
259
- revert InvalidTypesCombination(objectType, parentType);
203
+ // verify valid major version
204
+ // ensure major version increments is one
205
+ uint256 version = majorVersion.toInt();
206
+ uint256 versionNow = _majorVersion.toInt();
207
+ if (version < GIF_MAJOR_VERSION_AT_DEPLOYMENT || version > versionNow) {
208
+ revert TokenMajorVersionInvalid(majorVersion);
260
209
  }
261
210
 
262
- _isApproved[serviceNftId][objectType] = true;
211
+ _tokenIsActive[token][majorVersion] = active;
263
212
 
264
- emit LogApproval(serviceNftId, objectType);
213
+ emit LogTokenStateSet(token, majorVersion, active);
265
214
  }
266
215
 
267
- /// @dev returns false for registry owner nft
268
- // TODO allowance by address?
269
- // TODO checked by registry service -> but registry owner can upgrade registry service not to check allowance....
270
- function allowance(
271
- NftId nftId,
272
- ObjectType object
273
- )
274
- public
275
- view
276
- returns (bool)
277
- {
278
- return _isApproved[nftId][object];
216
+ /// @dev earliest GIF major version
217
+ function getMajorVersionMin() external view returns (VersionPart) {
218
+ return VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT);
279
219
  }
280
220
 
281
- // from IRegistry
221
+ // TODO make distinction between active an not yet active version
222
+ // need to be thought trough, not yet clear if necessary
223
+ // need to answer question: what is the latest version during the upgrade process?
224
+ // likely setting up a new gif version does not fit into a single tx
225
+ // in this case we might want to have a period where the latest version is
226
+ // in the process of being set up while the latest active version is 1 major release smaller
227
+ /// @dev latest GIF major version (might not yet be active)
228
+ function getMajorVersionMax() external view returns (VersionPart) {
229
+ return _majorVersion;
230
+ }
231
+
232
+ /// @dev latest active GIF release version
233
+ function getMajorVersion() external view returns (VersionPart) {
234
+ return _majorVersion;
235
+ }
236
+
237
+
282
238
  function getObjectCount() external view override returns (uint256) {
283
-
284
239
  return _chainNft.totalSupply();
285
240
  }
286
241
 
242
+ function getNftId() external view returns (NftId nftId) {
243
+ return _registryNftId;
244
+ }
245
+
287
246
  function getNftId(address object) external view override returns (NftId id) {
288
247
  return _nftIdByAddress[object];
289
248
  }
@@ -314,6 +273,10 @@ contract Registry is
314
273
  return _nftIdByAddress[object].gtz();
315
274
  }
316
275
 
276
+ function isTokenActive(address token, VersionPart majorVersion) external view returns (bool) {
277
+ return _tokenIsActive[token][majorVersion];
278
+ }
279
+
317
280
  function getServiceName(NftId nftId) external view returns (string memory) {
318
281
  return _string[nftId];
319
282
  }
@@ -328,29 +291,76 @@ contract Registry is
328
291
  return _service[serviceNameHash][majorVersion];
329
292
  }
330
293
 
331
- function getProtocolOwner() external view override returns (address) {
332
- return _protocolOwner;
333
- }
334
-
335
- function getChainNft() external view override returns (IChainNft) {
294
+ function getChainNft() external view override returns (ChainNft) {
336
295
  return _chainNft;
337
296
  }
338
297
 
339
- // from IOwnable
340
298
  function getOwner() public view returns (address owner) {
341
299
  return ownerOf(address(this));
342
300
  }
343
301
 
344
- // Internals, called only in constructor
302
+ // Internals
303
+
304
+ function _registerService(ObjectInfo memory info)
305
+ internal
306
+ {
307
+ (
308
+ string memory serviceName,
309
+ VersionPart majorVersion
310
+ ) = abi.decode(info.data, (string, VersionPart));
311
+ bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
312
+
313
+ // ensures consistency of service.getVersion() and majorVersion here
314
+ if(majorVersion != _majorVersion) {
315
+ revert InvalidServiceVersion(majorVersion);
316
+ }
317
+
318
+ if(_service[serviceNameHash][majorVersion] != address(0)) {
319
+ revert ServiceNameAlreadyRegistered(serviceName, majorVersion);
320
+ }
321
+
322
+ _string[info.nftId] = serviceName;
323
+ _service[serviceNameHash][majorVersion] = info.objectAddress;
324
+
325
+ emit LogServiceNameRegistration(serviceName, majorVersion);
326
+ }
327
+
328
+ /// @dev obtain interceptor address for this nft if applicable, address(0) otherwise
329
+ function _getInterceptor(
330
+ bool isInterceptor,
331
+ address objectAddress,
332
+ bool parentIsInterceptor,
333
+ address parentObjectAddress
334
+ )
335
+ internal
336
+ view
337
+ returns (address interceptor)
338
+ {
339
+ if (objectAddress == address(0)) {
340
+ if (parentIsInterceptor) {
341
+ return parentObjectAddress;
342
+ } else {
343
+ return address(0);
344
+ }
345
+ }
346
+
347
+ if (isInterceptor) {
348
+ return objectAddress;
349
+ }
350
+
351
+ return address(0);
352
+ }
353
+
354
+ // Internals called only in constructor
345
355
 
346
356
  /// @dev protocol registration used to anchor the dip ecosystem relations
347
357
  function _registerProtocol()
348
358
  internal
349
359
  {
350
- uint256 protocolId = _chainNftInternal.PROTOCOL_NFT_ID();
360
+ uint256 protocolId = _chainNft.PROTOCOL_NFT_ID();
351
361
  NftId protocolNftId = toNftId(protocolId);
352
362
 
353
- _chainNftInternal.mint(NFT_LOCK_ADDRESS, protocolId);
363
+ _chainNft.mint(NFT_LOCK_ADDRESS, protocolId);
354
364
 
355
365
  _info[protocolNftId] = ObjectInfo(
356
366
  protocolNftId,
@@ -365,25 +375,25 @@ contract Registry is
365
375
 
366
376
  /// @dev registry registration
367
377
  /// might also register the global registry when not on mainnet
368
- function _registerRegistry()
378
+ function _registerRegistry(address registryOwner)
369
379
  internal
370
380
  {
371
- uint256 registryId = _chainNftInternal.calculateTokenId(2);
381
+ uint256 registryId = _chainNft.calculateTokenId(2);
372
382
  NftId registryNftId = toNftId(registryId);
373
383
 
374
384
  NftId parentNftId;
375
385
 
376
- if(registryId != _chainNftInternal.GLOBAL_REGISTRY_ID())
386
+ if(registryId != _chainNft.GLOBAL_REGISTRY_ID())
377
387
  {// we're not the global registry
378
388
  _registerGlobalRegistry();
379
- parentNftId = toNftId(_chainNftInternal.GLOBAL_REGISTRY_ID());
389
+ parentNftId = toNftId(_chainNft.GLOBAL_REGISTRY_ID());
380
390
  }
381
391
  else
382
392
  {// we are global registry
383
- parentNftId = toNftId(_chainNftInternal.PROTOCOL_NFT_ID());
393
+ parentNftId = toNftId(_chainNft.PROTOCOL_NFT_ID());
384
394
  }
385
395
 
386
- _chainNftInternal.mint(_protocolOwner, registryId);
396
+ _chainNft.mint(registryOwner, registryId);
387
397
 
388
398
  _info[registryNftId] = ObjectInfo(
389
399
  registryNftId,
@@ -391,7 +401,7 @@ contract Registry is
391
401
  REGISTRY(),
392
402
  false, // isInterceptor
393
403
  address(this),
394
- _protocolOwner,
404
+ registryOwner,
395
405
  ""
396
406
  );
397
407
  _nftIdByAddress[address(this)] = registryNftId;
@@ -403,15 +413,15 @@ contract Registry is
403
413
  function _registerGlobalRegistry()
404
414
  internal
405
415
  {
406
- uint256 globalRegistryId = _chainNftInternal.GLOBAL_REGISTRY_ID();
416
+ uint256 globalRegistryId = _chainNft.GLOBAL_REGISTRY_ID();
407
417
 
408
- _chainNftInternal.mint(NFT_LOCK_ADDRESS, globalRegistryId);
418
+ _chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
409
419
 
410
420
  NftId globalRegistryNftId = toNftId(globalRegistryId);
411
421
 
412
422
  _info[globalRegistryNftId] = ObjectInfo(
413
423
  globalRegistryNftId,
414
- toNftId(_chainNftInternal.PROTOCOL_NFT_ID()), // parent
424
+ toNftId(_chainNft.PROTOCOL_NFT_ID()), // parent
415
425
  REGISTRY(),
416
426
  false, // isInterceptor
417
427
  address(0), // objectAddress
@@ -420,13 +430,13 @@ contract Registry is
420
430
  );
421
431
  }
422
432
 
423
- function _registerRegistryService()
433
+ function _registerRegistryService(address registryOwner)
424
434
  internal
425
435
  {
426
- uint256 serviceId = _chainNftInternal.calculateTokenId(3);
436
+ uint256 serviceId = _chainNft.calculateTokenId(REGISTRY_SERVICE_TOKEN_SEQUENCE_ID);
427
437
  NftId serviceNftId = toNftId(serviceId);
428
438
 
429
- _chainNftInternal.mint(NFT_LOCK_ADDRESS, serviceId);
439
+ _chainNft.mint(registryOwner, serviceId);
430
440
 
431
441
  _info[serviceNftId] = ObjectInfo(
432
442
  serviceNftId,
@@ -434,7 +444,7 @@ contract Registry is
434
444
  SERVICE(),
435
445
  false, // isInterceptor
436
446
  msg.sender, // service deploys registry
437
- NFT_LOCK_ADDRESS, // initialOwner,
447
+ registryOwner, // initialOwner,
438
448
  ""
439
449
  );
440
450
 
@@ -442,37 +452,11 @@ contract Registry is
442
452
 
443
453
  string memory serviceName = "RegistryService";
444
454
  bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
445
- _service[serviceNameHash][VersionLib.toVersionPart(MAJOR_VERSION_MIN)] = msg.sender;
455
+ _service[serviceNameHash][VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT)] = msg.sender;
446
456
  _string[serviceNftId] = serviceName;
447
457
  _serviceNftId = serviceNftId;
448
458
  }
449
459
 
450
- /// @dev obtain interceptor address for this nft if applicable, address(0) otherwise
451
- function _getInterceptor(
452
- bool isInterceptor,
453
- address objectAddress,
454
- bool parentIsInterceptor,
455
- address parentObjectAddress
456
- )
457
- internal
458
- view
459
- returns (address interceptor)
460
- {
461
- if (objectAddress == address(0)) {
462
- if (parentIsInterceptor) {
463
- return parentObjectAddress;
464
- } else {
465
- return address(0);
466
- }
467
- }
468
-
469
- if (isInterceptor) {
470
- return objectAddress;
471
- }
472
-
473
- return address(0);
474
- }
475
-
476
460
  /// @dev defines which object - parent types relations are allowed to register
477
461
  // IMPORTANT:
478
462
  // 1) EACH object type MUST have only one parent type across ALL mappings