@etherisc/gif-next 0.0.2-ed4dd55 → 0.0.2-efef0ea-320

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