@etherisc/gif-next 0.0.2-ed4dd55 → 0.0.2-ef2f083-203

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