@etherisc/gif-next 0.0.2-a0d749a → 0.0.2-a196164-289

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 (366) hide show
  1. package/README.md +155 -7
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +4 -0
  3. package/artifacts/contracts/components/{Component.sol/Component.json → BaseComponent.sol/BaseComponent.json} +48 -53
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +405 -0
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +4 -0
  7. package/artifacts/contracts/components/{IPool.sol/IPoolComponent.json → IBaseComponent.sol/IBaseComponent.json} +48 -53
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +340 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +487 -0
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +370 -0
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +405 -40
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +258 -45
  18. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +2 -2
  20. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +2 -2
  22. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +2 -2
  24. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +2 -2
  26. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +4 -0
  33. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +59 -0
  34. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +4 -0
  35. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +124 -0
  36. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +4 -0
  37. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +74 -0
  38. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +4 -0
  39. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +124 -0
  40. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +4 -0
  41. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +207 -0
  42. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  43. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +2 -2
  44. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  45. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +2 -2
  46. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  47. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1403 -247
  48. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +4 -0
  49. package/artifacts/contracts/instance/{component/IComponent.sol → IInstanceLinked.sol}/IInstanceLinked.json +1 -1
  50. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  51. package/artifacts/contracts/instance/Instance.sol/Instance.json +1778 -373
  52. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  53. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +387 -0
  54. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  55. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +113 -0
  56. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  57. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +560 -0
  58. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  59. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.json +115 -0
  60. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +4 -0
  61. package/artifacts/contracts/instance/{component/ComponentModule.sol/ComponentModule.json → base/IService.sol/IService.json} +152 -138
  62. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  63. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.json +463 -0
  64. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  65. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +710 -0
  66. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  67. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  68. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +4 -0
  69. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.json +10 -0
  70. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +4 -0
  71. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.json +387 -0
  72. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +4 -0
  73. package/artifacts/contracts/instance/{access → module/access}/Access.sol/AccessModule.json +85 -152
  74. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +4 -0
  75. package/artifacts/contracts/instance/{access → module/access}/IAccess.sol/IAccess.json +1 -1
  76. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +4 -0
  77. package/artifacts/contracts/instance/{access → module/access}/IAccess.sol/IAccessModule.json +96 -99
  78. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +4 -0
  79. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +297 -0
  80. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +4 -0
  81. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.json +10 -0
  82. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +4 -0
  83. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +297 -0
  84. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +4 -0
  85. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +117 -0
  86. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +4 -0
  87. package/artifacts/contracts/instance/{component → module/component}/IComponent.sol/IComponent.json +1 -1
  88. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +4 -0
  89. package/artifacts/contracts/instance/{product/IProductService.sol/IProductService.json → module/component/IComponent.sol/IComponentModule.json} +56 -53
  90. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +4 -0
  91. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +10 -0
  92. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +4 -0
  93. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.json +10 -0
  94. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +4 -0
  95. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.json +10 -0
  96. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +4 -0
  97. package/artifacts/contracts/instance/{policy → module/policy}/IPolicy.sol/IPolicy.json +1 -1
  98. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +4 -0
  99. package/artifacts/contracts/instance/{policy → module/policy}/IPolicy.sol/IPolicyModule.json +159 -106
  100. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +4 -0
  101. package/artifacts/contracts/instance/{policy → module/policy}/PolicyModule.sol/PolicyModule.json +159 -106
  102. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +4 -0
  103. package/artifacts/contracts/instance/{pool → module/pool}/IPoolModule.sol/IPool.json +1 -1
  104. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +4 -0
  105. package/artifacts/contracts/instance/{pool → module/pool}/IPoolModule.sol/IPoolModule.json +57 -62
  106. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +4 -0
  107. package/artifacts/contracts/instance/{pool → module/pool}/PoolModule.sol/PoolModule.json +50 -68
  108. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +4 -0
  109. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.json +10 -0
  110. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +4 -0
  111. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +113 -0
  112. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +4 -0
  113. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +131 -0
  114. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +4 -0
  115. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.json +10 -0
  116. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +4 -0
  117. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +511 -0
  118. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  119. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +76 -0
  120. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +4 -0
  121. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +511 -0
  122. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
  123. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +618 -0
  124. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  125. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +507 -0
  126. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +4 -0
  127. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +405 -0
  128. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  129. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +366 -0
  130. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  131. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +481 -0
  132. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  133. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +671 -0
  134. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  135. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +630 -0
  136. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  137. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +945 -0
  138. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  139. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +65 -2
  140. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +1 -1
  141. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  142. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +103 -77
  143. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  144. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +24 -0
  145. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  146. package/artifacts/contracts/registry/Registry.sol/Registry.json +194 -69
  147. package/artifacts/contracts/registry/RegistryUpgradeable.sol/RegistryUpgradeable.dbg.json +4 -0
  148. package/artifacts/contracts/registry/RegistryUpgradeable.sol/RegistryUpgradeable.json +711 -0
  149. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  150. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
  151. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +4 -0
  152. package/artifacts/contracts/{registry/IRegistry.sol → shared/IOwnable.sol}/IOwnable.json +1 -1
  153. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  154. package/artifacts/contracts/{registry/IRegistry.sol → shared/IRegisterable.sol}/IRegisterable.json +18 -63
  155. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  156. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +205 -0
  157. package/artifacts/contracts/shared/Proxy.sol/Proxy.dbg.json +4 -0
  158. package/artifacts/contracts/shared/Proxy.sol/Proxy.json +235 -0
  159. package/artifacts/contracts/shared/Proxy.sol/ProxyWithProxyAdminGetter.dbg.json +4 -0
  160. package/artifacts/contracts/shared/Proxy.sol/ProxyWithProxyAdminGetter.json +129 -0
  161. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  162. package/artifacts/contracts/{registry/Registry.sol → shared/Registerable.sol}/Registerable.json +18 -63
  163. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  164. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +251 -0
  165. package/artifacts/contracts/shared/VersionableUpgradeable.sol/VersionableUpgradeable.dbg.json +4 -0
  166. package/artifacts/contracts/shared/VersionableUpgradeable.sol/VersionableUpgradeable.json +228 -0
  167. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +4 -0
  168. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +405 -0
  169. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  170. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
  171. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +4 -0
  172. package/artifacts/contracts/test/TestPool.sol/TestPool.json +578 -0
  173. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +4 -0
  174. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +575 -0
  175. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  176. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +137 -0
  177. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  178. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
  179. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  180. package/artifacts/contracts/test/TestService.sol/TestService.json +466 -0
  181. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  182. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +338 -0
  183. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  184. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
  185. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  186. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +293 -0
  187. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  188. package/artifacts/contracts/test/Usdc.sol/USDC.json +338 -0
  189. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  190. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  191. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  192. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  193. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  194. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +2 -2
  195. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  196. package/artifacts/contracts/types/Fee.sol/FeeLib.json +257 -0
  197. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  198. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +111 -0
  199. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  200. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
  201. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  202. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +10 -0
  203. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  204. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +92 -0
  205. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +4 -0
  206. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +99 -0
  207. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  208. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  209. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  210. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +30 -0
  211. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +4 -0
  212. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +92 -0
  213. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  214. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +64 -2
  215. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +1 -1
  216. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +88 -62
  217. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  218. package/artifacts/contracts/types/Version.sol/VersionLib.json +177 -0
  219. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  220. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +30 -0
  221. package/contracts/components/BaseComponent.sol +94 -0
  222. package/contracts/components/Distribution.sol +132 -0
  223. package/contracts/components/IBaseComponent.sol +19 -0
  224. package/contracts/components/IDistributionComponent.sol +47 -0
  225. package/contracts/components/IPoolComponent.sol +71 -0
  226. package/contracts/components/IProductComponent.sol +38 -0
  227. package/contracts/components/Pool.sol +223 -10
  228. package/contracts/components/Product.sol +192 -20
  229. package/contracts/experiment/statemachine/Dummy.sol +27 -0
  230. package/contracts/experiment/statemachine/ISM.sol +25 -0
  231. package/contracts/experiment/statemachine/README.md +112 -0
  232. package/contracts/experiment/statemachine/SM.sol +57 -0
  233. package/contracts/experiment/statemachine/SimpleStateMachine.sol +31 -0
  234. package/contracts/instance/IInstance.sol +43 -8
  235. package/contracts/instance/IInstanceLinked.sol +8 -0
  236. package/contracts/instance/Instance.sol +52 -42
  237. package/contracts/instance/base/ComponentServiceBase.sol +42 -0
  238. package/contracts/instance/base/IInstanceBase.sol +22 -0
  239. package/contracts/instance/base/IKeyValueStore.sol +50 -0
  240. package/contracts/instance/base/ILifecycle.sol +30 -0
  241. package/contracts/instance/base/IService.sol +15 -0
  242. package/contracts/instance/base/InstanceBase.sol +91 -0
  243. package/contracts/instance/base/KeyValueStore.sol +161 -0
  244. package/contracts/instance/base/Lifecycle.sol +100 -0
  245. package/contracts/instance/base/ModuleBase.sol +57 -0
  246. package/contracts/instance/base/ServiceBase.sol +37 -0
  247. package/contracts/instance/module/access/Access.sol +149 -0
  248. package/contracts/instance/module/access/IAccess.sol +53 -0
  249. package/contracts/instance/module/bundle/BundleModule.sol +134 -0
  250. package/contracts/instance/module/bundle/IBundle.sol +53 -0
  251. package/contracts/instance/module/component/ComponentModule.sol +70 -0
  252. package/contracts/instance/module/component/IComponent.sol +28 -0
  253. package/contracts/instance/module/distribution/DistributionModule.sol +17 -0
  254. package/contracts/instance/module/distribution/IDistribution.sol +10 -0
  255. package/contracts/instance/module/policy/IPolicy.sol +63 -0
  256. package/contracts/instance/module/policy/PolicyModule.sol +91 -0
  257. package/contracts/instance/module/pool/IPoolModule.sol +40 -0
  258. package/contracts/instance/module/pool/PoolModule.sol +90 -0
  259. package/contracts/instance/module/risk/IRisk.sol +26 -0
  260. package/contracts/instance/module/risk/RiskModule.sol +62 -0
  261. package/contracts/instance/module/treasury/ITreasury.sol +82 -0
  262. package/contracts/instance/module/treasury/TokenHandler.sol +48 -0
  263. package/contracts/instance/module/treasury/TreasuryModule.sol +138 -0
  264. package/contracts/instance/service/ComponentOwnerService.sol +157 -0
  265. package/contracts/instance/service/DistributionService.sol +59 -0
  266. package/contracts/instance/service/IComponentOwnerService.sol +22 -0
  267. package/contracts/instance/service/IDistributionService.sol +12 -0
  268. package/contracts/instance/service/IPoolService.sol +37 -0
  269. package/contracts/instance/service/IProductService.sol +107 -0
  270. package/contracts/instance/service/PoolService.sol +149 -0
  271. package/contracts/instance/service/ProductService.sol +509 -0
  272. package/contracts/registry/ChainNft.sol +61 -37
  273. package/contracts/registry/IRegistry.sol +27 -50
  274. package/contracts/registry/IRegistryLinked.sol +8 -0
  275. package/contracts/registry/Registry.sol +282 -110
  276. package/contracts/registry/RegistryUpgradeable.sol +548 -0
  277. package/contracts/shared/ERC165.sol +21 -0
  278. package/contracts/shared/IOwnable.sol +6 -0
  279. package/contracts/shared/IRegisterable.sol +24 -0
  280. package/contracts/shared/IVersionable.sol +65 -0
  281. package/contracts/shared/Proxy.sol +89 -0
  282. package/contracts/shared/Registerable.sol +86 -0
  283. package/contracts/shared/Versionable.sol +99 -0
  284. package/contracts/shared/VersionableUpgradeable.sol +120 -0
  285. package/contracts/test/TestDistribution.sol +21 -0
  286. package/contracts/test/TestFee.sol +25 -0
  287. package/contracts/test/TestPool.sol +25 -0
  288. package/contracts/test/TestProduct.sol +72 -0
  289. package/contracts/test/TestRegisterable.sol +19 -0
  290. package/contracts/test/TestRoleId.sol +14 -0
  291. package/contracts/test/TestService.sol +32 -0
  292. package/contracts/test/TestToken.sol +26 -0
  293. package/contracts/test/TestVersion.sol +44 -0
  294. package/contracts/test/TestVersionable.sol +17 -0
  295. package/contracts/test/Usdc.sol +26 -0
  296. package/contracts/types/AddressSet.sol +58 -0
  297. package/contracts/types/Fee.sol +56 -0
  298. package/contracts/types/Key32.sol +45 -0
  299. package/contracts/types/NftId.sol +22 -1
  300. package/contracts/types/NftIdSet.sol +60 -0
  301. package/contracts/types/ObjectType.sol +131 -0
  302. package/contracts/types/ReferralId.sol +48 -0
  303. package/contracts/types/RiskId.sol +43 -0
  304. package/contracts/types/RoleId.sol +38 -0
  305. package/contracts/types/StateId.sol +101 -0
  306. package/contracts/types/Timestamp.sol +22 -1
  307. package/contracts/types/UFixed.sol +26 -22
  308. package/contracts/types/Version.sol +103 -0
  309. package/package.json +14 -5
  310. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  311. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  312. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  313. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  314. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  315. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -192
  316. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  317. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  318. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  319. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  320. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  321. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  322. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  323. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  324. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  325. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -147
  326. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  327. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  328. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +0 -179
  329. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  330. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -245
  331. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  332. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -94
  333. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  334. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  335. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  336. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  337. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  338. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  339. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  340. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  341. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  342. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  343. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  344. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  345. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  346. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -167
  347. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  348. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  349. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  350. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  351. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  352. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  353. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  354. package/contracts/components/Component.sol +0 -60
  355. package/contracts/components/IPool.sol +0 -9
  356. package/contracts/components/IProduct.sol +0 -9
  357. package/contracts/instance/access/Access.sol +0 -165
  358. package/contracts/instance/access/IAccess.sol +0 -63
  359. package/contracts/instance/component/ComponentModule.sol +0 -213
  360. package/contracts/instance/component/IComponent.sol +0 -73
  361. package/contracts/instance/policy/IPolicy.sol +0 -51
  362. package/contracts/instance/policy/PolicyModule.sol +0 -91
  363. package/contracts/instance/pool/IPoolModule.sol +0 -29
  364. package/contracts/instance/pool/PoolModule.sol +0 -73
  365. package/contracts/instance/product/IProductService.sol +0 -36
  366. package/contracts/instance/product/ProductService.sol +0 -112
@@ -1,80 +1,57 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
- import {NftId} from "../types/NftId.sol";
5
-
6
- interface IOwnable {
7
- function getOwner() external view returns (address owner);
8
- }
9
-
10
- interface IRegistryLinked {
11
- event LogDebug(uint256 idx, address module, string comment);
4
+ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
12
5
 
13
- function getRegistry() external view returns (IRegistry registry);
14
- }
15
-
16
- interface IRegisterable is IOwnable, IRegistryLinked {
17
- function register() external returns (NftId nftId);
18
-
19
- function getNftId() external view returns (NftId nftId);
20
-
21
- function getParentNftId() external view returns (NftId parentNftId);
22
-
23
- function getType() external view returns (uint256 objectType);
24
-
25
- function getData() external view returns (bytes memory data);
26
-
27
- function isRegisterable() external pure returns (bool);
28
-
29
- function getInitialOwner() external view returns (address initialOwner);
30
-
31
- function isRegistered() external view returns (bool);
32
- }
6
+ import {NftId} from "../types/NftId.sol";
7
+ import {ObjectType} from "../types/ObjectType.sol";
8
+ import {VersionPart} from "../types/Version.sol";
9
+ import {IChainNft} from "./IChainNft.sol";
33
10
 
34
- interface IRegistry {
35
- struct RegistryInfo {
11
+ interface IRegistry is IERC165 {
12
+ struct ObjectInfo {
36
13
  NftId nftId;
37
14
  NftId parentNftId;
38
- uint256 objectType;
15
+ ObjectType objectType;
39
16
  address objectAddress;
40
17
  address initialOwner;
18
+ bytes data;
41
19
  }
42
20
 
43
- function TOKEN() external pure returns (uint256);
44
-
45
- function INSTANCE() external pure returns (uint256);
46
-
47
- function PRODUCT() external pure returns (uint256);
48
-
49
- function ORACLE() external pure returns (uint256);
50
-
51
- function POOL() external pure returns (uint256);
52
-
53
- function POLICY() external pure returns (uint256);
54
-
55
- function BUNDLE() external pure returns (uint256);
56
-
57
21
  function register(address objectAddress) external returns (NftId nftId);
58
22
 
59
23
  function registerObjectForInstance(
60
24
  NftId parentNftid,
61
- uint256 objectType,
62
- address initialOwner
25
+ ObjectType objectType,
26
+ address initialOwner,
27
+ bytes memory data
63
28
  ) external returns (NftId nftId);
64
29
 
30
+ function getServiceAddress(string memory serviceName, VersionPart majorVersion) external view returns (address serviceAddress);
31
+
65
32
  function getObjectCount() external view returns (uint256);
66
33
 
34
+ function getNftId() external view returns (NftId nftId);
35
+
67
36
  function getNftId(
68
37
  address objectAddress
69
38
  ) external view returns (NftId nftId);
70
39
 
71
- function getInfo(
40
+ function getObjectInfo(
72
41
  NftId nftId
73
- ) external view returns (RegistryInfo memory info);
42
+ ) external view returns (ObjectInfo memory info);
43
+
44
+ function getName(
45
+ NftId nftId
46
+ ) external view returns (string memory name);
47
+
48
+ function getProtocolOwner() external view returns (address);
74
49
 
75
50
  function getOwner(NftId nftId) external view returns (address ownerAddress);
76
51
 
52
+ function isRegistered(NftId nftId) external view returns (bool);
53
+
77
54
  function isRegistered(address objectAddress) external view returns (bool);
78
55
 
79
- function getNftAddress() external view returns (address nft);
56
+ function getChainNft() external view returns (IChainNft);
80
57
  }
@@ -0,0 +1,8 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRegistry} from "../registry/IRegistry.sol";
5
+
6
+ interface IRegistryLinked {
7
+ function getRegistry() external view returns (IRegistry registry);
8
+ }
@@ -1,107 +1,78 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
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";
8
-
9
- contract RegistryLinked is IRegistryLinked {
10
- IRegistry internal _registry;
4
+ import {IRegisterable} from "../shared/IRegisterable.sol";
5
+ import {IService} from "../instance/base/IService.sol";
11
6
 
12
- constructor(address registry) {
13
- _registry = IRegistry(registry);
14
- }
15
-
16
- function getRegistry() external view override returns (IRegistry registry) {
17
- return _registry;
18
- }
19
- }
20
-
21
- abstract contract Registerable is RegistryLinked, IRegisterable {
7
+ import {IChainNft} from "./IChainNft.sol";
8
+ import {ChainNft} from "./ChainNft.sol";
9
+ import {IRegistry} from "./IRegistry.sol";
10
+ import {NftId, toNftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
11
+ import {VersionPart} from "../types/Version.sol";
12
+ import {ObjectType, PROTOCOL, REGISTRY, TOKEN, SERVICE, INSTANCE, STAKE, PRODUCT, DISTRIBUTION, ORACLE, POOL, POLICY, BUNDLE} from "../types/ObjectType.sol";
13
+
14
+ // TODO make registry upgradable
15
+ contract Registry is
16
+ IRegisterable,
17
+ IRegistry
18
+ {
22
19
  using NftIdLib for NftId;
23
20
 
24
- address private _initialOwner;
25
-
26
- constructor(address registry) RegistryLinked(registry) {
27
- _initialOwner = msg.sender;
28
- }
29
-
30
- // getType, getData and register need to be implemented by concrete contract
31
-
32
- function isRegisterable() external pure override returns (bool) {
33
- return true;
34
- }
35
-
36
- function getInitialOwner() public view override returns (address deployer) {
37
- return _initialOwner;
38
- }
39
-
40
- function isRegistered() public view override returns (bool) {
41
- NftId nftId = _registry.getNftId(address(this));
42
- return nftId.gtz();
43
- }
44
-
45
- function getNftId() public view override returns (NftId nftId) {
46
- return _registry.getNftId(address(this));
47
- }
48
-
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;
53
- }
54
- }
55
-
56
- contract Registry is IRegistry {
57
- using NftIdLib for NftId;
58
21
  string public constant EMPTY_URI = "";
59
22
 
60
- mapping(NftId nftId => RegistryInfo info) private _info;
61
- mapping(NftId nftId => address owner) private _owner;
23
+ mapping(NftId nftId => ObjectInfo info) private _info;
62
24
  mapping(address object => NftId nftId) private _nftIdByAddress;
25
+ mapping(ObjectType objectType => bool) private _isValidType;
26
+ mapping(ObjectType objectType => mapping(ObjectType objectParentType => bool)) private _isValidParentType;
63
27
 
28
+ mapping(NftId nftId => string stringValue) private _string;
29
+ mapping(bytes32 serviceNameHash => mapping(VersionPart majorVersion => address service)) _service;
30
+
31
+ NftId private _nftId;
64
32
  IChainNft private _chainNft;
33
+ ChainNft private _chainNftInternal;
34
+ address private _initialOwner;
65
35
 
66
- function initialize(address chainNft) external {
36
+ // @dev will own protocol nft and registry nft(s) minted during initialize
37
+ address private _protocolOwner;
38
+
39
+ // TODO refactor once registry becomes upgradable
40
+ // @Dev the protocol owner will get ownership of the
41
+ // protocol nft and the global registry nft minted in this
42
+ // initializer function
43
+ function initialize(
44
+ address chainNft,
45
+ address protocolOwner
46
+ )
47
+ public
48
+ {
67
49
  require(
68
50
  address(_chainNft) == address(0),
69
51
  "ERROR:REG-001:ALREADY_INITIALIZED"
70
52
  );
71
- _chainNft = IChainNft(chainNft);
72
- }
73
-
74
- function TOKEN() public pure override returns (uint256) {
75
- return 30;
76
- }
77
53
 
78
- function INSTANCE() public pure override returns (uint256) {
79
- return 40;
80
- }
54
+ _initialOwner = msg.sender;
55
+ _protocolOwner = protocolOwner;
81
56
 
82
- function PRODUCT() public pure override returns (uint256) {
83
- return 50;
84
- }
57
+ _chainNft = IChainNft(chainNft);
58
+ _chainNftInternal = ChainNft(chainNft);
85
59
 
86
- function ORACLE() public pure override returns (uint256) {
87
- return 60;
88
- }
60
+ // initial registry setup
61
+ _registerProtocol();
62
+ _nftId = _registerRegistry();
89
63
 
90
- function POOL() public pure override returns (uint256) {
91
- return 70;
64
+ // setup rules for further registrations
65
+ _setupValidTypes();
66
+ _setupValidParentTypes();
92
67
  }
93
68
 
94
- function POLICY() public pure override returns (uint256) {
95
- return 80;
96
- }
97
-
98
- function BUNDLE() public pure override returns (uint256) {
99
- return 90;
100
- }
101
69
 
102
70
  function register(
103
71
  address objectAddress
104
- ) external override returns (NftId nftId) {
72
+ )
73
+ // TODO add authz (only services may register components etc)
74
+ // we have to check how we do authz for registring services (just restrict to protocol owner/registry owner)
75
+ external override returns (NftId nftId) {
105
76
  require(
106
77
  _nftIdByAddress[objectAddress].eqz(),
107
78
  "ERROR:REG-002:ALREADY_REGISTERED"
@@ -109,44 +80,69 @@ contract Registry is IRegistry {
109
80
 
110
81
  IRegisterable registerable = IRegisterable(objectAddress);
111
82
  require(
112
- registerable.isRegisterable(),
83
+ registerable.supportsInterface(type(IRegisterable).interfaceId),
113
84
  "ERROR:REG-003:NOT_REGISTERABLE"
114
85
  );
115
86
 
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
124
- }
87
+ ObjectType objectType = registerable.getType();
88
+ require(
89
+ _isValidType[objectType],
90
+ "ERROR:REG-004:TYPE_INVALID"
91
+ );
125
92
 
93
+ NftId parentNftId = registerable.getParentNftId();
94
+ require(
95
+ isRegistered(parentNftId),
96
+ "ERROR:REG-005:PARENT_NOT_REGISTERED"
97
+ );
98
+
99
+ require(
100
+ _isValidParentType[objectType][_info[parentNftId].objectType],
101
+ "ERROR:REG-006:PARENT_TYPE_INVALID"
102
+ );
103
+
104
+ // also check that nftId and parentNFtId are on the same chain if applicable
105
+
106
+ // nft minting
126
107
  uint256 mintedTokenId = _chainNft.mint(
127
- registerable.getInitialOwner(),
108
+ registerable.getOwner(),
128
109
  EMPTY_URI
129
110
  );
130
- nftId = toNftId(mintedTokenId);
131
111
 
132
- RegistryInfo memory info = RegistryInfo(
133
- nftId,
134
- registerable.getParentNftId(),
135
- registerable.getType(),
136
- objectAddress,
137
- registerable.getInitialOwner()
138
- );
112
+ nftId = toNftId(mintedTokenId);
139
113
 
140
- _info[nftId] = info;
141
- _nftIdByAddress[objectAddress] = nftId;
114
+ // special case services
115
+ if(registerable.getType() == SERVICE()) {
116
+ IService service = IService(objectAddress);
117
+ require(
118
+ service.supportsInterface(type(IService).interfaceId),
119
+ "ERROR:REG-007:NOT_SERVICE"
120
+ );
121
+
122
+ string memory serviceName = service.getName();
123
+ VersionPart majorVersion = service.getMajorVersion();
124
+ bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
125
+
126
+ // service specific state
127
+ _string[nftId] = serviceName;
128
+
129
+ require(
130
+ _service[serviceNameHash][majorVersion] == address(0),
131
+ "ERROR:REG-008:ALREADY_REGISTERED"
132
+ );
133
+ _service[serviceNameHash][majorVersion] = objectAddress;
134
+ }
142
135
 
143
- // add logging
136
+ // create object info and link nft id with it
137
+ _registerObjectInfo(registerable, nftId);
144
138
  }
145
139
 
140
+
146
141
  function registerObjectForInstance(
147
142
  NftId parentNftId,
148
- uint256 objectType,
149
- address initialOwner
143
+ ObjectType objectType,
144
+ address initialOwner,
145
+ bytes memory data
150
146
  )
151
147
  external
152
148
  override
@@ -158,18 +154,19 @@ contract Registry is IRegistry {
158
154
  // TODO add more validation
159
155
  require(
160
156
  objectType == POLICY() || objectType == BUNDLE(),
161
- "ERROR:REG-005:TYPE_INVALID"
157
+ "ERROR:REG-010:TYPE_INVALID"
162
158
  );
163
159
 
164
160
  uint256 mintedTokenId = _chainNft.mint(initialOwner, EMPTY_URI);
165
161
  nftId = toNftId(mintedTokenId);
166
162
 
167
- RegistryInfo memory info = RegistryInfo(
163
+ ObjectInfo memory info = ObjectInfo(
168
164
  nftId,
169
165
  parentNftId,
170
166
  objectType,
171
167
  address(0),
172
- initialOwner
168
+ initialOwner,
169
+ data
173
170
  );
174
171
 
175
172
  _info[nftId] = info;
@@ -187,23 +184,198 @@ contract Registry is IRegistry {
187
184
  return _nftIdByAddress[object];
188
185
  }
189
186
 
187
+ function isRegistered(
188
+ NftId nftId
189
+ ) public view override returns (bool) {
190
+ return _info[nftId].objectType.gtz();
191
+ }
192
+
190
193
  function isRegistered(
191
194
  address object
192
195
  ) external view override returns (bool) {
193
196
  return _nftIdByAddress[object].gtz();
194
197
  }
195
198
 
196
- function getInfo(
199
+ function getObjectInfo(
197
200
  NftId nftId
198
- ) external view override returns (RegistryInfo memory info) {
201
+ ) external view override returns (ObjectInfo memory info) {
199
202
  return _info[nftId];
200
203
  }
201
204
 
205
+ function getName(
206
+ NftId nftId
207
+ ) external view returns (string memory name) {
208
+ return _string[nftId];
209
+ }
210
+
202
211
  function getOwner(NftId nftId) external view override returns (address) {
203
212
  return _chainNft.ownerOf(nftId.toInt());
204
213
  }
205
214
 
206
- function getNftAddress() external view override returns (address nft) {
207
- return address(_chainNft);
215
+ function getChainNft() external view override returns (IChainNft) {
216
+ return _chainNft;
217
+ }
218
+
219
+ // special case to retrive a gif service
220
+ function getServiceAddress(string memory serviceName, VersionPart majorVersion) external view override returns (address serviceAddress) {
221
+ bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
222
+ return _service[serviceNameHash][majorVersion];
223
+ }
224
+
225
+ // from IERC165
226
+ function supportsInterface(bytes4 interfaceId) external pure override returns (bool) {
227
+ return interfaceId == type(IRegistry).interfaceId;
228
+ }
229
+
230
+ // from IRegistryLinked
231
+ function getRegistry() external view override returns (IRegistry registry) {
232
+ return this;
233
+ }
234
+
235
+ // from IRegisterable
236
+ function register() external pure override returns (NftId nftId) {
237
+ return zeroNftId();
208
238
  }
239
+
240
+ function getType() external pure override returns (ObjectType objectType) {
241
+ return REGISTRY();
242
+ }
243
+
244
+
245
+ function getOwner() public view override returns (address owner) {
246
+ return _nftId.gtz() ? this.getOwner(_nftId) : _initialOwner;
247
+ }
248
+
249
+ function getNftId() external view override (IRegisterable, IRegistry) returns (NftId nftId) {
250
+ return _nftId;
251
+ }
252
+
253
+ function getParentNftId() external view returns (NftId nftId) {
254
+ // we're the global registry
255
+ if(block.chainid == 1) {
256
+ return toNftId(_chainNftInternal.PROTOCOL_NFT_ID());
257
+ }
258
+ else {
259
+ return toNftId(_chainNftInternal.GLOBAL_REGISTRY_ID());
260
+ }
261
+ }
262
+
263
+ function getData() external pure returns (bytes memory data) {
264
+ return "";
265
+ }
266
+
267
+ // registry specific functions
268
+ function getProtocolOwner() external view override returns (address) {
269
+ return _protocolOwner;
270
+ }
271
+
272
+ /// @dev defines which types are allowed to register
273
+ function _setupValidTypes() internal {
274
+ _isValidType[REGISTRY()] = true; // only for global registry
275
+ _isValidType[TOKEN()] = true;
276
+ _isValidType[SERVICE()] = true;
277
+ _isValidType[INSTANCE()] = true;
278
+ _isValidType[STAKE()] = true;
279
+ _isValidType[PRODUCT()] = true;
280
+ _isValidType[ORACLE()] = true;
281
+ _isValidType[POOL()] = true;
282
+ _isValidType[DISTRIBUTION()] = true;
283
+ _isValidType[POLICY()] = true;
284
+ _isValidType[BUNDLE()] = true;
285
+ }
286
+
287
+ /// @dev defines which types - parent type relations are allowed to register
288
+ function _setupValidParentTypes() internal {
289
+ // registry as parent
290
+ _isValidParentType[TOKEN()][REGISTRY()] = true;
291
+ _isValidParentType[SERVICE()][REGISTRY()] = true;
292
+ _isValidParentType[INSTANCE()][REGISTRY()] = true;
293
+
294
+ // instance as parent
295
+ _isValidParentType[PRODUCT()][INSTANCE()] = true;
296
+ _isValidParentType[DISTRIBUTION()][INSTANCE()] = true;
297
+ _isValidParentType[ORACLE()][INSTANCE()] = true;
298
+ _isValidParentType[POOL()][INSTANCE()] = true;
299
+
300
+ // product as parent
301
+ _isValidParentType[POLICY()][PRODUCT()] = true;
302
+
303
+ // pool as parent
304
+ _isValidParentType[BUNDLE()][POOL()] = true;
305
+ _isValidParentType[STAKE()][POOL()] = true;
306
+ }
307
+
308
+ /// @dev protocol registration used to anchor the dip ecosystem relations
309
+ function _registerProtocol() virtual internal {
310
+ uint256 protocolId = _chainNftInternal.PROTOCOL_NFT_ID();
311
+ _chainNftInternal.mint(_protocolOwner, protocolId);
312
+
313
+ NftId protocolNftid = toNftId(protocolId);
314
+ ObjectInfo memory protocolInfo = ObjectInfo(
315
+ protocolNftid,
316
+ zeroNftId(), // parent nft id
317
+ PROTOCOL(),
318
+ address(0), // contract address
319
+ _protocolOwner,
320
+ "" // data
321
+ );
322
+
323
+ _info[protocolNftid] = protocolInfo;
324
+ }
325
+
326
+ /// @dev registry registration
327
+ /// might also register the global registry when not on mainnet
328
+ function _registerRegistry() virtual internal returns (NftId registryNftId) {
329
+ uint256 registryId = _chainNftInternal.calculateTokenId(2);
330
+ registryNftId = toNftId(registryId);
331
+
332
+ // we're not the global registry
333
+ if(registryId != _chainNftInternal.GLOBAL_REGISTRY_ID()) {
334
+ _registerGlobalRegistry();
335
+ }
336
+
337
+ _chainNftInternal.mint(_protocolOwner, registryId);
338
+ _registerObjectInfo(this, registryNftId);
339
+ }
340
+
341
+
342
+ /// @dev global registry registration for non mainnet registries
343
+ function _registerGlobalRegistry() virtual internal {
344
+ uint256 globalRegistryId = _chainNftInternal.GLOBAL_REGISTRY_ID();
345
+ _chainNftInternal.mint(_protocolOwner, globalRegistryId);
346
+
347
+ NftId globalRegistryNftId = toNftId(globalRegistryId);
348
+ ObjectInfo memory globalRegistryInfo = ObjectInfo(
349
+ globalRegistryNftId,
350
+ toNftId(_chainNftInternal.PROTOCOL_NFT_ID()),
351
+ REGISTRY(),
352
+ address(0), // contract address
353
+ _protocolOwner,
354
+ "" // data
355
+ );
356
+
357
+ _info[globalRegistryNftId] = globalRegistryInfo;
358
+ }
359
+
360
+
361
+ function _registerObjectInfo(
362
+ IRegisterable registerable,
363
+ NftId nftId
364
+ ) internal virtual {
365
+ address objectAddress = address(registerable);
366
+ ObjectInfo memory info = ObjectInfo(
367
+ nftId,
368
+ registerable.getParentNftId(),
369
+ registerable.getType(),
370
+ objectAddress,
371
+ registerable.getOwner(),
372
+ registerable.getData()
373
+ );
374
+
375
+ _info[nftId] = info;
376
+ _nftIdByAddress[objectAddress] = nftId;
377
+
378
+ // add logging
379
+ }
380
+
209
381
  }