@etherisc/gif-next 0.0.2-d250c72 → 0.0.2-d3207d2-901

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 (388) hide show
  1. package/README.md +301 -7
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +4 -0
  3. package/artifacts/contracts/{instance/component/ComponentModule.sol/ComponentModule.json → components/BaseComponent.sol/BaseComponent.json} +156 -156
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +618 -0
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +4 -0
  7. package/artifacts/contracts/{instance/component/IComponent.sol/IComponentModule.json → components/IBaseComponent.sol/IBaseComponent.json} +139 -104
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +152 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +249 -0
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +157 -0
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +606 -37
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +590 -46
  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/Require.sol/Require.json +2 -2
  26. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +2 -2
  28. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +2 -2
  30. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +2 -2
  32. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  36. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +4 -0
  39. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +59 -0
  40. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +4 -0
  41. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +124 -0
  42. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +4 -0
  43. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +74 -0
  44. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +4 -0
  45. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +124 -0
  46. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +4 -0
  47. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +207 -0
  48. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  49. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +2 -2
  50. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  51. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +2 -2
  52. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +4 -0
  53. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.json +101 -0
  54. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +4 -0
  55. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +1132 -0
  56. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +4 -0
  57. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +1082 -0
  58. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  59. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +502 -641
  60. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  61. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +480 -0
  62. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  63. package/artifacts/contracts/instance/Instance.sol/Instance.json +3043 -571
  64. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  65. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +917 -0
  66. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  67. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1388 -0
  68. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  69. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +891 -0
  70. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  71. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +488 -0
  72. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  73. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +540 -0
  74. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  75. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +113 -0
  76. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  77. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +429 -0
  78. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  79. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.json +115 -0
  80. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  81. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +502 -0
  82. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  83. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  84. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  85. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +211 -0
  86. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  87. package/artifacts/contracts/instance/{access/IAccess.sol/IAccess.json → module/IBundle.sol/IBundle.json} +2 -2
  88. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  89. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.json +10 -0
  90. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  91. package/artifacts/contracts/instance/{policy → module}/IPolicy.sol/IPolicy.json +1 -1
  92. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  93. package/artifacts/contracts/instance/{pool/IPoolModule.sol/IPool.json → module/IRisk.sol/IRisk.json} +2 -2
  94. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  95. package/artifacts/contracts/instance/{component/IComponent.sol/IComponent.json → module/ISetup.sol/ISetup.json} +2 -2
  96. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  97. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.json +10 -0
  98. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
  99. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +827 -0
  100. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  101. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +716 -0
  102. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  103. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +444 -0
  104. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +4 -0
  105. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +466 -0
  106. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  107. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +446 -0
  108. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  109. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +561 -0
  110. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  111. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +751 -0
  112. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  113. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +839 -0
  114. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  115. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +448 -0
  116. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  117. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +239 -2
  118. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  119. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +415 -68
  120. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  121. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +947 -0
  122. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  123. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  124. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  125. package/artifacts/contracts/registry/Registry.sol/Registry.json +543 -81
  126. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  127. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1293 -0
  128. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  129. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +513 -0
  130. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  131. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +410 -0
  132. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  133. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  134. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  135. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
  136. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  137. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +127 -0
  138. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  139. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +201 -0
  140. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  141. package/artifacts/contracts/shared/IService.sol/IService.json +421 -0
  142. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  143. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +205 -0
  144. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  145. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  146. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  147. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  148. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  149. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +274 -0
  150. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
  151. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +442 -0
  152. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  153. package/artifacts/contracts/shared/Service.sol/Service.json +468 -0
  154. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  155. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  156. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  157. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  158. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  159. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +228 -0
  160. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  161. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
  162. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  163. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +305 -0
  164. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  165. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
  166. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  167. package/artifacts/contracts/test/TestService.sol/TestService.json +600 -0
  168. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  169. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +376 -0
  170. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  171. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
  172. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  173. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +286 -0
  174. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  175. package/artifacts/contracts/test/Usdc.sol/USDC.json +376 -0
  176. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  177. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  178. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  179. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +174 -0
  180. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  181. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +2 -2
  182. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  183. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  184. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  185. package/artifacts/contracts/types/Fee.sol/FeeLib.json +257 -0
  186. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  187. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +125 -0
  188. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  189. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
  190. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  191. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +10 -0
  192. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  193. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  194. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  195. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +92 -0
  196. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  197. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  198. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  199. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  200. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  201. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
  202. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +4 -0
  203. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +92 -0
  204. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +4 -0
  205. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +249 -0
  206. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  207. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  208. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  209. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +479 -0
  210. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  211. package/artifacts/contracts/types/Version.sol/VersionLib.json +177 -0
  212. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  213. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +49 -0
  214. package/contracts/components/BaseComponent.sol +91 -0
  215. package/contracts/components/Distribution.sol +160 -0
  216. package/contracts/components/IBaseComponent.sol +25 -0
  217. package/contracts/components/IDistributionComponent.sol +44 -0
  218. package/contracts/components/IPoolComponent.sol +62 -0
  219. package/contracts/components/IProductComponent.sol +35 -0
  220. package/contracts/components/Pool.sol +232 -18
  221. package/contracts/components/Product.sol +267 -36
  222. package/contracts/experiment/cloning/Cloner.sol +47 -0
  223. package/contracts/experiment/errors/Require.sol +10 -5
  224. package/contracts/experiment/errors/Revert.sol +13 -8
  225. package/contracts/experiment/inheritance/A.sol +8 -11
  226. package/contracts/experiment/inheritance/B.sol +10 -5
  227. package/contracts/experiment/inheritance/C.sol +11 -5
  228. package/contracts/experiment/inheritance/IA.sol +2 -7
  229. package/contracts/experiment/inheritance/IB.sol +3 -2
  230. package/contracts/experiment/inheritance/IC.sol +4 -3
  231. package/contracts/experiment/statemachine/Dummy.sol +27 -0
  232. package/contracts/experiment/statemachine/ISM.sol +25 -0
  233. package/contracts/experiment/statemachine/SM.sol +57 -0
  234. package/contracts/experiment/statemachine/SimpleStateMachine.sol +31 -0
  235. package/contracts/experiment/types/TypeA.sol +14 -9
  236. package/contracts/experiment/types/TypeB.sol +14 -9
  237. package/contracts/instance/AccessManagedSimple.sol +115 -0
  238. package/contracts/instance/AccessManagerSimple.sol +692 -0
  239. package/contracts/instance/IAccessManagerSimple.sol +391 -0
  240. package/contracts/instance/IInstance.sol +34 -15
  241. package/contracts/instance/IInstanceService.sol +30 -0
  242. package/contracts/instance/Instance.sol +423 -44
  243. package/contracts/instance/InstanceAccessManager.sol +288 -0
  244. package/contracts/instance/InstanceReader.sol +306 -0
  245. package/contracts/instance/InstanceService.sol +183 -0
  246. package/contracts/instance/InstanceServiceManager.sol +57 -0
  247. package/contracts/instance/base/ComponentServiceBase.sol +124 -0
  248. package/contracts/instance/base/IInstanceBase.sol +23 -0
  249. package/contracts/instance/base/IKeyValueStore.sol +49 -0
  250. package/contracts/instance/base/ILifecycle.sol +30 -0
  251. package/contracts/instance/base/KeyValueStore.sol +172 -0
  252. package/contracts/instance/base/Lifecycle.sol +100 -0
  253. package/contracts/instance/module/IAccess.sol +38 -0
  254. package/contracts/instance/module/IBundle.sol +20 -0
  255. package/contracts/instance/module/IDistribution.sol +39 -0
  256. package/contracts/instance/module/IPolicy.sol +45 -0
  257. package/contracts/instance/module/IRisk.sol +11 -0
  258. package/contracts/instance/module/ISetup.sol +44 -0
  259. package/contracts/instance/module/ITreasury.sol +23 -0
  260. package/contracts/instance/service/ComponentOwnerService.sol +317 -0
  261. package/contracts/instance/service/DistributionService.sol +88 -0
  262. package/contracts/instance/service/DistributionServiceManager.sol +54 -0
  263. package/contracts/instance/service/IComponentOwnerService.sol +20 -0
  264. package/contracts/instance/service/IDistributionService.sol +12 -0
  265. package/contracts/instance/service/IPoolService.sol +37 -0
  266. package/contracts/instance/service/IProductService.sol +107 -0
  267. package/contracts/instance/service/PoolService.sol +194 -0
  268. package/contracts/instance/service/PoolServiceManager.sol +54 -0
  269. package/contracts/registry/ChainNft.sol +138 -109
  270. package/contracts/registry/IRegistry.sol +66 -57
  271. package/contracts/registry/IRegistryService.sol +50 -0
  272. package/contracts/registry/ITransferInterceptor.sol +6 -0
  273. package/contracts/registry/Registry.sol +383 -121
  274. package/contracts/registry/RegistryService.sol +358 -0
  275. package/contracts/registry/RegistryServiceManager.sol +80 -0
  276. package/contracts/registry/TokenRegistry.sol +111 -0
  277. package/contracts/shared/ContractDeployerLib.sol +72 -0
  278. package/contracts/shared/ERC165.sol +25 -0
  279. package/contracts/shared/INftOwnable.sol +22 -0
  280. package/contracts/shared/IRegisterable.sol +17 -0
  281. package/contracts/shared/IService.sol +15 -0
  282. package/contracts/shared/IVersionable.sol +96 -0
  283. package/contracts/shared/NftOwnable.sol +134 -0
  284. package/contracts/shared/ProxyManager.sol +94 -0
  285. package/contracts/shared/Registerable.sol +90 -0
  286. package/contracts/shared/RegisterableUpgradable.sol +16 -0
  287. package/contracts/shared/Service.sol +55 -0
  288. package/contracts/shared/TokenHandler.sol +27 -0
  289. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  290. package/contracts/shared/Versionable.sol +147 -0
  291. package/contracts/test/TestFee.sol +25 -0
  292. package/contracts/test/TestRegisterable.sol +18 -0
  293. package/contracts/test/TestRoleId.sol +14 -0
  294. package/contracts/test/TestService.sol +24 -0
  295. package/contracts/test/TestToken.sol +26 -0
  296. package/contracts/test/TestVersion.sol +44 -0
  297. package/contracts/test/TestVersionable.sol +17 -0
  298. package/contracts/test/Usdc.sol +26 -0
  299. package/contracts/types/AddressSet.sol +58 -0
  300. package/contracts/types/Blocknumber.sol +118 -0
  301. package/contracts/types/ChainId.sol +24 -10
  302. package/contracts/types/DistributorType.sol +55 -0
  303. package/contracts/types/Fee.sol +56 -0
  304. package/contracts/types/Key32.sol +50 -0
  305. package/contracts/types/NftId.sol +48 -11
  306. package/contracts/types/NftIdSet.sol +60 -0
  307. package/contracts/types/NumberId.sol +52 -0
  308. package/contracts/types/ObjectType.sol +152 -0
  309. package/contracts/types/Referral.sol +85 -0
  310. package/contracts/types/RiskId.sol +43 -0
  311. package/contracts/types/RoleId.sol +89 -0
  312. package/contracts/types/StateId.sol +105 -0
  313. package/contracts/types/Timestamp.sol +127 -0
  314. package/contracts/types/UFixed.sol +325 -0
  315. package/contracts/types/Version.sol +107 -0
  316. package/package.json +21 -6
  317. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  318. package/artifacts/contracts/components/Component.sol/Component.json +0 -179
  319. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  320. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  321. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  322. package/artifacts/contracts/components/IPool.sol/IPoolComponent.json +0 -179
  323. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  324. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -192
  325. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  326. package/artifacts/contracts/instance/access/Access.sol/AccessModule.json +0 -400
  327. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  328. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  329. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  330. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  331. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  332. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  333. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.json +0 -336
  334. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  335. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  336. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -147
  337. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  338. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  339. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +0 -179
  340. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  341. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  342. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -94
  343. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  344. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.json +0 -24
  345. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  346. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  347. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.json +0 -231
  348. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  349. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.json +0 -231
  350. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  351. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  352. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.json +0 -149
  353. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  354. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.json +0 -162
  355. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  356. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  357. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  358. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.json +0 -114
  359. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  360. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  361. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  362. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -167
  363. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  364. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -452
  365. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  366. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +0 -24
  367. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  368. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +0 -166
  369. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  370. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  371. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  372. package/artifacts/contracts/registry/Registry.sol/Registerable.json +0 -166
  373. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  374. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  375. package/contracts/components/Component.sol +0 -62
  376. package/contracts/components/IPool.sol +0 -9
  377. package/contracts/components/IProduct.sol +0 -12
  378. package/contracts/instance/access/Access.sol +0 -218
  379. package/contracts/instance/access/IAccess.sol +0 -83
  380. package/contracts/instance/component/ComponentModule.sol +0 -248
  381. package/contracts/instance/component/IComponent.sol +0 -95
  382. package/contracts/instance/policy/IPolicy.sol +0 -66
  383. package/contracts/instance/policy/PolicyModule.sol +0 -107
  384. package/contracts/instance/pool/IPoolModule.sol +0 -41
  385. package/contracts/instance/pool/PoolModule.sol +0 -86
  386. package/contracts/instance/product/IProductService.sol +0 -46
  387. package/contracts/instance/product/ProductService.sol +0 -108
  388. package/contracts/registry/IChainNft.sol +0 -18
@@ -1,182 +1,444 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IRegisterable} from "../shared/IRegisterable.sol";
5
+ import {IService} from "../shared/IService.sol";
6
+
7
+ import {ChainNft} from "./ChainNft.sol";
8
+ 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
+
16
+
17
+ // IMPORTANT
18
+ // Each NFT minted by registry is accosiated with:
19
+ // 1) NFT owner
20
+ // 2) registred contract OR object stored in registered (parent) contract
21
+ // 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)
26
+
27
+ contract Registry is
28
+ ERC165,
29
+ IRegistry
30
+ {
31
+ uint256 public constant GIF_MAJOR_VERSION_AT_DEPLOYMENT = 3;
32
+ address public constant NFT_LOCK_ADDRESS = address(0x1);
33
+ uint256 public constant REGISTRY_TOKEN_SEQUENCE_ID = 2;
34
+ uint256 public constant REGISTRY_SERVICE_TOKEN_SEQUENCE_ID = 3;
35
+ string public constant EMPTY_URI = "";
36
+
37
+ VersionPart internal _majorVersion;
38
+
39
+ mapping(NftId nftId => ObjectInfo info) internal _info;
40
+ mapping(address object => NftId nftId) internal _nftIdByAddress;
41
+
42
+ mapping(ObjectType objectType => mapping(
43
+ ObjectType parentType => bool)) internal _isValidContractCombination;
44
+
45
+ mapping(ObjectType objectType => mapping(
46
+ ObjectType parentType => bool)) internal _isValidObjectCombination;
47
+
48
+ mapping(NftId nftId => string name) internal _string;
49
+ mapping(bytes32 serviceNameHash => mapping(
50
+ VersionPart majorVersion => address service)) internal _service;
3
51
 
4
- import {IChainNft} from "./IChainNft.sol";
5
- import {IRegistry, IRegistryLinked, IRegisterable} from "./IRegistry.sol";
6
- import {NftId, toNftId} from "../types/NftId.sol";
7
- import {NftIdLib} from "../types/NftId.sol";
52
+ NftId internal _registryNftId;
53
+ NftId internal _serviceNftId; // set in stone upon registry creation
54
+ ChainNft internal _chainNft;
8
55
 
9
- contract RegistryLinked is IRegistryLinked {
10
56
 
11
- IRegistry internal _registry;
12
-
13
- constructor(address registry) {
14
- _registry = IRegistry(registry);
57
+ modifier onlyOwner() {
58
+ if(msg.sender != getOwner()) {
59
+ revert NotOwner(msg.sender);
60
+ }
61
+ _;
15
62
  }
16
63
 
17
- function getRegistry() external view override returns(IRegistry registry) {
18
- return _registry;
64
+ modifier onlyRegistryService() {
65
+ if(msg.sender != _info[_serviceNftId].objectAddress) {
66
+ revert NotRegistryService();
67
+ }
68
+ _;
19
69
  }
20
70
 
21
- }
71
+ constructor(address registryOwner, VersionPart majorVersion)
72
+ {
73
+ require(registryOwner > address(0), "Registry: registry owner is 0");
22
74
 
75
+ // major version at constructor time
76
+ _majorVersion = VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT);
77
+ emit LogInitialMajorVersionSet(_majorVersion);
23
78
 
24
- abstract contract Registerable is
25
- RegistryLinked,
26
- IRegisterable
27
- {
28
- using NftIdLib for NftId;
79
+ // deploy NFT
80
+ _chainNft = new ChainNft(address(this));// adds 10kb to deployment size
29
81
 
30
- address private _initialOwner;
31
-
32
- constructor(address registry)
33
- RegistryLinked(registry)
34
- {
35
- _initialOwner = msg.sender;
82
+ // initial registry setup
83
+ _registerProtocol();
84
+ _registerRegistry(registryOwner);
85
+ _registerRegistryService(registryOwner);
86
+
87
+ // set object parent relations
88
+ _setupValidObjectParentCombinations();
89
+
90
+ _registerInterface(type(IRegistry).interfaceId);
36
91
  }
37
92
 
38
- // getType, getData and register need to be implemented by concrete contract
93
+ // from IRegistry
94
+
95
+ /// @dev latest GIF release version
96
+ function setMajorVersion(VersionPart newMajorVersion)
97
+ external
98
+ onlyOwner
99
+ {
100
+ // ensure major version increments is one
101
+ uint256 oldMax = _majorVersion.toInt();
102
+ uint256 newMax = newMajorVersion.toInt();
103
+ if (newMax <= oldMax || newMax - oldMax != 1) {
104
+ revert MajorVersionMaxIncreaseInvalid(newMajorVersion, _majorVersion);
105
+ }
39
106
 
40
- function isRegisterable() external pure override returns(bool) {
41
- return true;
107
+ _majorVersion = newMajorVersion;
108
+ emit LogMajorVersionSet(_majorVersion);
42
109
  }
43
110
 
44
- function getInitialOwner() public view override returns(address deployer) {
45
- return _initialOwner;
111
+ /// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
112
+ // TODO service registration means its approval for some type?
113
+ // TODO registration of precompile addresses
114
+ function register(ObjectInfo memory info)
115
+ external
116
+ onlyRegistryService
117
+ returns(NftId nftId)
118
+ {
119
+ ObjectType objectType = info.objectType;
120
+ NftId parentNftId = info.parentNftId;
121
+ ObjectInfo memory parentInfo = _info[parentNftId];
122
+ ObjectType parentType = parentInfo.objectType; // see function header
123
+ address parentAddress = parentInfo.objectAddress;
124
+
125
+ // parent is contract -> need to check? -> check before minting
126
+ // special case: global registry nft as parent when not on mainnet -> global registry address is 0
127
+ // special case: when parentNftId == _chainNft.mint(), check for zero parent address before mint
128
+ // special case: when parentNftId == _chainNft.mint() && objectAddress == initialOwner
129
+ if(parentAddress == address(0)) {
130
+ revert ZeroParentAddress();
131
+ }
132
+
133
+ address interceptor = _getInterceptor(info.isInterceptor, info.objectAddress, parentInfo.isInterceptor, parentAddress);
134
+
135
+ // TODO does external call
136
+ uint256 mintedTokenId = _chainNft.mint(
137
+ info.initialOwner,
138
+ interceptor,
139
+ EMPTY_URI);
140
+ nftId = toNftId(mintedTokenId);
141
+
142
+ // TODO move nftId out of info struct
143
+ // getters by nftId -> return struct without nftId
144
+ // getters by address -> return nftId AND struct
145
+ info.nftId = nftId;
146
+ _info[nftId] = info;
147
+
148
+ if(info.objectAddress > address(0))
149
+ {
150
+ // TODO if need to add types latter -> at least call this check from registry service
151
+ // parent is registered + object-parent types are valid
152
+ if(_isValidContractCombination[objectType][parentType] == false) {
153
+ revert InvalidTypesCombination(objectType, parentType);
154
+ }
155
+
156
+ address contractAddress = info.objectAddress;
157
+
158
+ if(_nftIdByAddress[contractAddress].gtz()) {
159
+ revert ContractAlreadyRegistered(contractAddress);
160
+ }
161
+
162
+ _nftIdByAddress[contractAddress] = nftId;
163
+
164
+ // special case
165
+ if(objectType == SERVICE()) {
166
+ _registerService(info);
167
+ }
168
+ }
169
+ else
170
+ {
171
+ if(_isValidObjectCombination[objectType][parentType] == false) {
172
+ revert InvalidTypesCombination(objectType, parentType);
173
+ }
174
+ }
175
+
176
+ emit LogRegistration(info);
177
+ }
178
+ /// @dev earliest GIF major version
179
+ function getMajorVersionMin() external view returns (VersionPart) {
180
+ return VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT);
46
181
  }
47
182
 
48
- function isRegistered() public view override returns(bool) {
49
- NftId nftId = _registry.getNftId(address(this));
50
- return nftId.gtz();
183
+ // TODO make distinction between active an not yet active version
184
+ // need to be thought trough, not yet clear if necessary
185
+ // need to answer question: what is the latest version during the upgrade process?
186
+ // likely setting up a new gif version does not fit into a single tx
187
+ // in this case we might want to have a period where the latest version is
188
+ // in the process of being set up while the latest active version is 1 major release smaller
189
+ /// @dev latest GIF major version (might not yet be active)
190
+ function getMajorVersionMax() external view returns (VersionPart) {
191
+ return _majorVersion;
51
192
  }
52
193
 
53
- function getNftId() public view override returns(NftId nftId) {
54
- return _registry.getNftId(address(this));
194
+ /// @dev latest active GIF release version
195
+ function getMajorVersion() external view returns (VersionPart) {
196
+ return _majorVersion;
55
197
  }
56
198
 
57
- function getOwner() public view override returns(address owner) {
58
- NftId id = _registry.getNftId(address(this));
59
- owner = _registry.getOwner(id);
60
- return owner != address(0) ? owner : _initialOwner;
199
+ function getObjectCount() external view override returns (uint256) {
200
+ return _chainNft.totalSupply();
61
201
  }
62
202
 
63
- }
203
+ function getNftId() external view returns (NftId nftId) {
204
+ return _registryNftId;
205
+ }
64
206
 
65
- contract Registry is IRegistry {
66
- using NftIdLib for NftId;
67
- string public constant EMPTY_URI = "";
207
+ function getNftId(address object) external view override returns (NftId id) {
208
+ return _nftIdByAddress[object];
209
+ }
68
210
 
69
- mapping(NftId nftId => RegistryInfo info) private _info;
70
- mapping(NftId nftId => address owner) private _owner;
71
- mapping(address object => NftId nftId) private _nftIdByAddress;
211
+ function ownerOf(NftId nftId) public view override returns (address) {
212
+ return _chainNft.ownerOf(nftId.toInt());
213
+ }
72
214
 
73
- IChainNft private _chainNft;
215
+ function ownerOf(address contractAddress) public view returns (address) {
216
+ return _chainNft.ownerOf(_nftIdByAddress[contractAddress].toInt());
217
+ }
74
218
 
75
- function initialize(address chainNft) external {
76
- require(address(_chainNft) == address(0), "ERROR:REG-001:ALREADY_INITIALIZED");
77
- _chainNft = IChainNft(chainNft);
219
+ function getObjectInfo(NftId nftId) external view override returns (ObjectInfo memory) {
220
+ return _info[nftId];
78
221
  }
79
222
 
80
- function TOKEN() public pure override returns(uint256) { return 30; }
81
- function INSTANCE() public pure override returns(uint256) { return 40; }
82
- function PRODUCT() public pure override returns(uint256) { return 50; }
83
- function ORACLE() public pure override returns(uint256) { return 60; }
84
- function POOL() public pure override returns(uint256) { return 70; }
85
- function POLICY() public pure override returns(uint256) { return 80; }
86
- function BUNDLE() public pure override returns(uint256) { return 90; }
223
+ function getObjectInfo(address object) external view override returns (ObjectInfo memory) {
224
+ return _info[_nftIdByAddress[object]];
225
+ }
87
226
 
88
- function register(address objectAddress) external override returns(NftId nftId) {
89
- require(_nftIdByAddress[objectAddress].eqz(), "ERROR:REG-002:ALREADY_REGISTERED");
227
+ function isRegistered(NftId nftId) public view override returns (bool) {
228
+ return _info[nftId].objectType.gtz();
229
+ }
90
230
 
91
- IRegisterable registerable = IRegisterable(objectAddress);
92
- require(registerable.isRegisterable(), "ERROR:REG-003:NOT_REGISTERABLE");
231
+ function isRegistered(address object) external view override returns (bool) {
232
+ return _nftIdByAddress[object].gtz();
233
+ }
93
234
 
94
- // check parent exists (for objects not instances)
95
- if(registerable.getType() != INSTANCE()) {
96
- RegistryInfo memory parentInfo = _info[registerable.getParentNftId()];
97
- require(parentInfo.nftId.gtz(), "ERROR:REG-004:PARENT_NOT_FOUND");
98
- // check validity of parent relation, valid relations are
99
- // policy -> product, bundle -> pool, product -> instance, pool -> instance
100
- }
235
+ function getServiceName(NftId nftId) external view returns (string memory) {
236
+ return _string[nftId];
237
+ }
101
238
 
102
- uint256 mintedTokenId = _chainNft.mint(
103
- registerable.getInitialOwner(),
104
- EMPTY_URI);
105
- nftId = toNftId(mintedTokenId);
106
-
107
- RegistryInfo memory info = RegistryInfo(
108
- nftId,
109
- registerable.getParentNftId(),
110
- registerable.getType(),
111
- objectAddress,
112
- registerable.getInitialOwner()
113
- );
239
+ // special case to retrive a gif service
240
+ function getServiceAddress(
241
+ string memory serviceName,
242
+ VersionPart majorVersion
243
+ ) external view returns (address)
244
+ {
245
+ bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
246
+ return _service[serviceNameHash][majorVersion];
247
+ }
114
248
 
115
- _info[nftId] = info;
116
- _nftIdByAddress[objectAddress] = nftId;
249
+ function getChainNft() external view override returns (ChainNft) {
250
+ return _chainNft;
251
+ }
117
252
 
118
- // add logging
253
+ function getOwner() public view returns (address owner) {
254
+ return ownerOf(address(this));
119
255
  }
120
256
 
257
+ // Internals
121
258
 
122
- function registerObjectForInstance(
123
- NftId parentNftId,
124
- uint256 objectType,
125
- address initialOwner
126
- )
127
- external
128
- override
129
- // TODO add onlyRegisteredInstance
130
- returns(NftId nftId)
259
+ function _registerService(ObjectInfo memory info)
260
+ internal
131
261
  {
132
- // TODO add more validation
133
- require(
134
- objectType == POLICY() || objectType == BUNDLE(),
135
- "ERROR:REG-005:TYPE_INVALID");
262
+ (
263
+ string memory serviceName,
264
+ VersionPart majorVersion
265
+ ) = abi.decode(info.data, (string, VersionPart));
266
+ bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
267
+
268
+ // ensures consistency of service.getVersion() and majorVersion here
269
+ if(majorVersion != _majorVersion) {
270
+ revert InvalidServiceVersion(majorVersion);
271
+ }
272
+
273
+ if(_service[serviceNameHash][majorVersion] != address(0)) {
274
+ revert ServiceNameAlreadyRegistered(serviceName, majorVersion);
275
+ }
136
276
 
137
- uint256 mintedTokenId = _chainNft.mint(
138
- initialOwner,
139
- EMPTY_URI);
140
- nftId = toNftId(mintedTokenId);
277
+ _string[info.nftId] = serviceName;
278
+ _service[serviceNameHash][majorVersion] = info.objectAddress;
141
279
 
142
- RegistryInfo memory info = RegistryInfo(
143
- nftId,
144
- parentNftId,
145
- objectType,
146
- address(0),
147
- initialOwner
148
- );
280
+ emit LogServiceNameRegistration(serviceName, majorVersion);
281
+ }
149
282
 
150
- _info[nftId] = info;
283
+ /// @dev obtain interceptor address for this nft if applicable, address(0) otherwise
284
+ function _getInterceptor(
285
+ bool isInterceptor,
286
+ address objectAddress,
287
+ bool parentIsInterceptor,
288
+ address parentObjectAddress
289
+ )
290
+ internal
291
+ view
292
+ returns (address interceptor)
293
+ {
294
+ if (objectAddress == address(0)) {
295
+ if (parentIsInterceptor) {
296
+ return parentObjectAddress;
297
+ } else {
298
+ return address(0);
299
+ }
300
+ }
301
+
302
+ if (isInterceptor) {
303
+ return objectAddress;
304
+ }
151
305
 
152
- // add logging
306
+ return address(0);
153
307
  }
154
308
 
309
+ // Internals called only in constructor
155
310
 
156
- function getObjectCount() external view override returns(uint256) {
157
- return _chainNft.totalSupply();
311
+ /// @dev protocol registration used to anchor the dip ecosystem relations
312
+ function _registerProtocol()
313
+ internal
314
+ {
315
+ uint256 protocolId = _chainNft.PROTOCOL_NFT_ID();
316
+ NftId protocolNftId = toNftId(protocolId);
317
+
318
+ _chainNft.mint(NFT_LOCK_ADDRESS, protocolId);
319
+
320
+ _info[protocolNftId] = ObjectInfo(
321
+ protocolNftId,
322
+ zeroNftId(), // parent
323
+ PROTOCOL(),
324
+ false, // isInterceptor
325
+ address(0), // objectAddress
326
+ NFT_LOCK_ADDRESS,// initialOwner
327
+ ""
328
+ );
158
329
  }
159
330
 
331
+ /// @dev registry registration
332
+ /// might also register the global registry when not on mainnet
333
+ function _registerRegistry(address registryOwner)
334
+ internal
335
+ {
336
+ uint256 registryId = _chainNft.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID);
337
+ NftId registryNftId = toNftId(registryId);
160
338
 
161
- function getNftId(address object) external view override returns(NftId id) {
162
- return _nftIdByAddress[object];
163
- }
339
+ NftId parentNftId;
164
340
 
341
+ if(registryId != _chainNft.GLOBAL_REGISTRY_ID())
342
+ {// we're not the global registry
343
+ _registerGlobalRegistry();
344
+ parentNftId = toNftId(_chainNft.GLOBAL_REGISTRY_ID());
345
+ }
346
+ else
347
+ {// we are global registry
348
+ parentNftId = toNftId(_chainNft.PROTOCOL_NFT_ID());
349
+ }
165
350
 
166
- function isRegistered(address object) external view override returns(bool) {
167
- return _nftIdByAddress[object].gtz();
351
+ _chainNft.mint(registryOwner, registryId);
352
+
353
+ _info[registryNftId] = ObjectInfo(
354
+ registryNftId,
355
+ parentNftId,
356
+ REGISTRY(),
357
+ false, // isInterceptor
358
+ address(this),
359
+ registryOwner,
360
+ ""
361
+ );
362
+ _nftIdByAddress[address(this)] = registryNftId;
363
+ _registryNftId = registryNftId;
168
364
  }
169
365
 
170
366
 
171
- function getInfo(NftId nftId) external view override returns(RegistryInfo memory info) {
172
- return _info[nftId];
367
+ /// @dev global registry registration for non mainnet registries
368
+ function _registerGlobalRegistry()
369
+ internal
370
+ {
371
+ uint256 globalRegistryId = _chainNft.GLOBAL_REGISTRY_ID();
372
+
373
+ _chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
374
+
375
+ NftId globalRegistryNftId = toNftId(globalRegistryId);
376
+
377
+ _info[globalRegistryNftId] = ObjectInfo(
378
+ globalRegistryNftId,
379
+ toNftId(_chainNft.PROTOCOL_NFT_ID()), // parent
380
+ REGISTRY(),
381
+ false, // isInterceptor
382
+ address(0), // objectAddress
383
+ NFT_LOCK_ADDRESS, // initialOwner
384
+ "" // data
385
+ );
173
386
  }
174
387
 
175
- function getOwner(NftId nftId) external view override returns(address) {
176
- return _chainNft.ownerOf(nftId.toInt());
388
+ function _registerRegistryService(address registryOwner)
389
+ internal
390
+ {
391
+ uint256 serviceId = _chainNft.calculateTokenId(REGISTRY_SERVICE_TOKEN_SEQUENCE_ID);
392
+ NftId serviceNftId = toNftId(serviceId);
393
+
394
+ _chainNft.mint(registryOwner, serviceId);
395
+
396
+ _info[serviceNftId] = ObjectInfo(
397
+ serviceNftId,
398
+ _registryNftId,
399
+ SERVICE(),
400
+ false, // isInterceptor
401
+ msg.sender, // service deploys registry
402
+ registryOwner, // initialOwner,
403
+ ""
404
+ );
405
+
406
+ _nftIdByAddress[msg.sender] = serviceNftId;
407
+
408
+ string memory serviceName = "RegistryService";
409
+ bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
410
+ _service[serviceNameHash][VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT)] = msg.sender;
411
+ _string[serviceNftId] = serviceName;
412
+ _serviceNftId = serviceNftId;
177
413
  }
178
414
 
179
- function getNftAddress() external view override returns(address nft) {
180
- return address(_chainNft);
415
+ /// @dev defines which object - parent types relations are allowed to register
416
+ // IMPORTANT:
417
+ // 1) EACH object type MUST have only one parent type across ALL mappings
418
+ // 2) DO NOT use object type (e.g. POLCY, BUNDLE, STAKE) as parent type
419
+ // 3) DO NOT use REGISTRY as object type
420
+ // 2) DO NOT use PROTOCOL and "zeroObjectType"
421
+ function _setupValidObjectParentCombinations()
422
+ internal
423
+ {
424
+ // registry as parent, ONLY registry owner
425
+ _isValidContractCombination[TOKEN()][REGISTRY()] = true;
426
+ _isValidContractCombination[SERVICE()][REGISTRY()] = true;
427
+
428
+ // registry as parent, ONLY approved
429
+ _isValidContractCombination[INSTANCE()][REGISTRY()] = true;
430
+
431
+ // instance as parent, ONLY approved
432
+ _isValidContractCombination[PRODUCT()][INSTANCE()] = true;
433
+ _isValidContractCombination[DISTRIBUTION()][INSTANCE()] = true;
434
+ _isValidContractCombination[ORACLE()][INSTANCE()] = true;
435
+ _isValidContractCombination[POOL()][INSTANCE()] = true;
436
+
437
+ // product as parent, ONLY approved
438
+ _isValidObjectCombination[POLICY()][PRODUCT()] = true;
439
+
440
+ // pool as parent, ONLY approved
441
+ _isValidObjectCombination[BUNDLE()][POOL()] = true;
442
+ _isValidObjectCombination[STAKE()][POOL()] = true;
181
443
  }
182
444
  }