@etherisc/gif-next 0.0.2-b22ff39-218 → 0.0.2-b244df3-779

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