@etherisc/gif-next 0.0.2-886fd8b → 0.0.2-89368f7-609

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