@etherisc/gif-next 0.0.2-80a82e6 → 0.0.2-81d7358-706

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 (427) hide show
  1. package/README.md +364 -8
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +4 -0
  3. package/artifacts/contracts/{registry/IChainNft.sol/IChainNft.json → components/BaseComponent.sol/BaseComponent.json} +262 -232
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +675 -0
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +4 -0
  7. package/artifacts/contracts/{instance/access/Access.sol/AccessModule.json → components/IBaseComponent.sol/IBaseComponent.json} +217 -220
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +152 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +275 -0
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +157 -0
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +683 -54
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +604 -60
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +4 -0
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +66 -0
  20. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +4 -0
  21. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +24 -0
  22. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +4 -0
  23. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +42 -0
  24. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +2 -2
  26. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +2 -2
  28. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +2 -2
  30. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +2 -2
  32. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  36. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +4 -0
  39. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +59 -0
  40. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +4 -0
  41. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +124 -0
  42. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +4 -0
  43. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +74 -0
  44. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +4 -0
  45. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +124 -0
  46. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +4 -0
  47. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +207 -0
  48. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  49. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +2 -2
  50. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  51. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +2 -2
  52. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  53. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  54. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  55. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +788 -0
  56. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  57. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +185 -0
  58. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  59. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1298 -453
  60. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  61. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +448 -0
  62. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  63. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +570 -0
  64. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  65. package/artifacts/contracts/instance/Instance.sol/Instance.json +2541 -573
  66. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  67. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +1047 -0
  68. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  69. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +763 -0
  70. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  71. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1422 -0
  72. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  73. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +963 -0
  74. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  75. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +460 -0
  76. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  77. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +285 -0
  78. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  79. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +532 -0
  80. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  81. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +113 -0
  82. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  83. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +429 -0
  84. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  85. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.json +115 -0
  86. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  87. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +502 -0
  88. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  89. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  90. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  91. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +254 -0
  92. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  93. package/artifacts/contracts/instance/{access/IAccess.sol/IAccess.json → module/IBundle.sol/IBundle.json} +2 -2
  94. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  95. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.json +10 -0
  96. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  97. package/artifacts/contracts/instance/{policy → module}/IPolicy.sol/IPolicy.json +1 -1
  98. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  99. package/artifacts/contracts/instance/{pool/IPoolModule.sol/IPool.json → module/IRisk.sol/IRisk.json} +2 -2
  100. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  101. package/artifacts/contracts/instance/{component/IComponent.sol/IComponent.json → module/ISetup.sol/ISetup.json} +2 -2
  102. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  103. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.json +10 -0
  104. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  105. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +945 -0
  106. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  107. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +432 -0
  108. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
  109. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +814 -0
  110. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  111. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +693 -0
  112. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  113. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +420 -0
  114. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  115. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +669 -0
  116. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +4 -0
  117. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +466 -0
  118. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  119. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +446 -0
  120. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  121. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +664 -0
  122. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  123. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +499 -0
  124. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  125. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +536 -0
  126. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  127. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +993 -0
  128. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  129. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +464 -0
  130. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  131. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +727 -0
  132. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  133. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +420 -0
  134. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  135. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +777 -0
  136. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  137. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +420 -0
  138. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  139. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +239 -2
  140. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  141. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +428 -63
  142. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  143. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +976 -0
  144. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  145. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  146. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  147. package/artifacts/contracts/registry/Registry.sol/Registry.json +484 -77
  148. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  149. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  150. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  151. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1195 -0
  152. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  153. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +451 -0
  154. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  155. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +546 -0
  156. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  157. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +397 -0
  158. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  159. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  160. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  161. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
  162. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  163. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +127 -0
  164. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  165. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +201 -0
  166. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  167. package/artifacts/contracts/shared/IService.sol/IService.json +421 -0
  168. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  169. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +205 -0
  170. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  171. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  172. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  173. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  174. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  175. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +274 -0
  176. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
  177. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +442 -0
  178. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  179. package/artifacts/contracts/shared/Service.sol/Service.json +468 -0
  180. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  181. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  182. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  183. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  184. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  185. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +228 -0
  186. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  187. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
  188. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  189. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +305 -0
  190. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  191. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
  192. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  193. package/artifacts/contracts/test/TestService.sol/TestService.json +600 -0
  194. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  195. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +376 -0
  196. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  197. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
  198. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  199. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +286 -0
  200. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  201. package/artifacts/contracts/test/Usdc.sol/USDC.json +376 -0
  202. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  203. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  204. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  205. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +174 -0
  206. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  207. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +2 -2
  208. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  209. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  210. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  211. package/artifacts/contracts/types/Fee.sol/FeeLib.json +257 -0
  212. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  213. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +125 -0
  214. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  215. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
  216. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  217. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +33 -0
  218. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  219. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  220. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  221. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +92 -0
  222. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  223. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  224. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  225. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  226. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  227. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
  228. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +4 -0
  229. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +92 -0
  230. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +4 -0
  231. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +249 -0
  232. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  233. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  234. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  235. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +479 -0
  236. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  237. package/artifacts/contracts/types/Version.sol/VersionLib.json +177 -0
  238. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  239. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +49 -0
  240. package/contracts/components/BaseComponent.sol +159 -0
  241. package/contracts/components/Distribution.sol +163 -0
  242. package/contracts/components/IBaseComponent.sol +34 -0
  243. package/contracts/components/IDistributionComponent.sol +44 -0
  244. package/contracts/components/IPoolComponent.sol +66 -0
  245. package/contracts/components/IProductComponent.sol +35 -0
  246. package/contracts/components/Pool.sol +260 -18
  247. package/contracts/components/Product.sol +262 -36
  248. package/contracts/experiment/cloning/Cloner.sol +47 -0
  249. package/contracts/experiment/errors/Require.sol +10 -5
  250. package/contracts/experiment/errors/Revert.sol +13 -8
  251. package/contracts/experiment/inheritance/A.sol +8 -11
  252. package/contracts/experiment/inheritance/B.sol +10 -5
  253. package/contracts/experiment/inheritance/C.sol +11 -5
  254. package/contracts/experiment/inheritance/IA.sol +2 -7
  255. package/contracts/experiment/inheritance/IB.sol +3 -2
  256. package/contracts/experiment/inheritance/IC.sol +4 -3
  257. package/contracts/experiment/statemachine/Dummy.sol +27 -0
  258. package/contracts/experiment/statemachine/ISM.sol +25 -0
  259. package/contracts/experiment/statemachine/SM.sol +57 -0
  260. package/contracts/experiment/statemachine/SimpleStateMachine.sol +31 -0
  261. package/contracts/experiment/types/TypeA.sol +14 -9
  262. package/contracts/experiment/types/TypeB.sol +14 -9
  263. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
  264. package/contracts/instance/BundleManager.sol +129 -0
  265. package/contracts/instance/Cloneable.sol +46 -0
  266. package/contracts/instance/IInstance.sol +57 -15
  267. package/contracts/instance/IInstanceBase.sol +26 -0
  268. package/contracts/instance/IInstanceService.sol +40 -0
  269. package/contracts/instance/Instance.sol +257 -45
  270. package/contracts/instance/InstanceAccessManager.sol +303 -0
  271. package/contracts/instance/InstanceBase.sol +41 -0
  272. package/contracts/instance/InstanceReader.sol +315 -0
  273. package/contracts/instance/InstanceService.sol +350 -0
  274. package/contracts/instance/InstanceServiceManager.sol +54 -0
  275. package/contracts/instance/ObjectManager.sol +101 -0
  276. package/contracts/instance/base/ComponentServiceBase.sol +82 -0
  277. package/contracts/instance/base/IInstanceBase.sol +23 -0
  278. package/contracts/instance/base/IKeyValueStore.sol +49 -0
  279. package/contracts/instance/base/ILifecycle.sol +30 -0
  280. package/contracts/instance/base/KeyValueStore.sol +172 -0
  281. package/contracts/instance/base/Lifecycle.sol +100 -0
  282. package/contracts/instance/module/IAccess.sol +48 -0
  283. package/contracts/instance/module/IBundle.sol +20 -0
  284. package/contracts/instance/module/IDistribution.sol +39 -0
  285. package/contracts/instance/module/IPolicy.sol +45 -0
  286. package/contracts/instance/module/IRisk.sol +11 -0
  287. package/contracts/instance/module/ISetup.sol +46 -0
  288. package/contracts/instance/module/ITreasury.sol +23 -0
  289. package/contracts/instance/service/BundleService.sol +260 -0
  290. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  291. package/contracts/instance/service/ComponentOwnerService.sol +315 -0
  292. package/contracts/instance/service/DistributionService.sol +113 -0
  293. package/contracts/instance/service/DistributionServiceManager.sol +51 -0
  294. package/contracts/instance/service/IBundleService.sol +45 -0
  295. package/contracts/instance/service/IComponentOwnerService.sol +20 -0
  296. package/contracts/instance/service/IDistributionService.sol +12 -0
  297. package/contracts/instance/service/IPolicyService.sol +87 -0
  298. package/contracts/instance/service/IPoolService.sol +20 -0
  299. package/contracts/instance/service/IProductService.sol +40 -0
  300. package/contracts/instance/service/PolicyService.sol +503 -0
  301. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  302. package/contracts/instance/service/PoolService.sol +124 -0
  303. package/contracts/instance/service/PoolServiceManager.sol +51 -0
  304. package/contracts/instance/service/ProductService.sol +170 -0
  305. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  306. package/contracts/registry/ChainNft.sol +138 -109
  307. package/contracts/registry/IRegistry.sol +71 -50
  308. package/contracts/registry/IRegistryService.sol +58 -0
  309. package/contracts/registry/ITransferInterceptor.sol +6 -0
  310. package/contracts/registry/Registry.sol +331 -117
  311. package/contracts/registry/RegistryAccessManager.sol +210 -0
  312. package/contracts/registry/RegistryService.sol +323 -0
  313. package/contracts/registry/RegistryServiceManager.sol +62 -0
  314. package/contracts/registry/ReleaseManager.sol +348 -0
  315. package/contracts/registry/TokenRegistry.sol +110 -0
  316. package/contracts/shared/ContractDeployerLib.sol +72 -0
  317. package/contracts/shared/ERC165.sol +25 -0
  318. package/contracts/shared/INftOwnable.sol +22 -0
  319. package/contracts/shared/IRegisterable.sol +17 -0
  320. package/contracts/shared/IService.sol +16 -0
  321. package/contracts/shared/IVersionable.sol +96 -0
  322. package/contracts/shared/NftOwnable.sol +134 -0
  323. package/contracts/shared/ProxyManager.sol +94 -0
  324. package/contracts/shared/Registerable.sol +90 -0
  325. package/contracts/shared/RegisterableUpgradable.sol +16 -0
  326. package/contracts/shared/Service.sol +58 -0
  327. package/contracts/shared/TokenHandler.sol +27 -0
  328. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  329. package/contracts/shared/Versionable.sol +147 -0
  330. package/contracts/test/TestFee.sol +25 -0
  331. package/contracts/test/TestRegisterable.sol +18 -0
  332. package/contracts/test/TestRoleId.sol +14 -0
  333. package/contracts/test/TestService.sol +25 -0
  334. package/contracts/test/TestToken.sol +26 -0
  335. package/contracts/test/TestVersion.sol +44 -0
  336. package/contracts/test/TestVersionable.sol +17 -0
  337. package/contracts/test/Usdc.sol +26 -0
  338. package/contracts/types/AddressSet.sol +58 -0
  339. package/contracts/types/Blocknumber.sol +118 -0
  340. package/contracts/types/ChainId.sol +24 -10
  341. package/contracts/types/DistributorType.sol +55 -0
  342. package/contracts/types/Fee.sol +56 -0
  343. package/contracts/types/Key32.sol +50 -0
  344. package/contracts/types/NftId.sol +50 -10
  345. package/contracts/types/NftIdSet.sol +62 -0
  346. package/contracts/types/NumberId.sol +52 -0
  347. package/contracts/types/ObjectType.sol +152 -0
  348. package/contracts/types/Referral.sol +85 -0
  349. package/contracts/types/RiskId.sol +43 -0
  350. package/contracts/types/RoleId.sol +90 -0
  351. package/contracts/types/StateId.sol +105 -0
  352. package/contracts/types/Timestamp.sol +127 -0
  353. package/contracts/types/UFixed.sol +325 -0
  354. package/contracts/types/Version.sol +107 -0
  355. package/package.json +21 -6
  356. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  357. package/artifacts/contracts/components/Component.sol/Component.json +0 -179
  358. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  359. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  360. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  361. package/artifacts/contracts/components/IPool.sol/IPoolComponent.json +0 -179
  362. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  363. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -192
  364. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  365. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  366. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  367. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  368. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  369. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  370. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  371. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.json +0 -336
  372. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  373. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.json +0 -327
  374. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  375. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -147
  376. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  377. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  378. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +0 -179
  379. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  380. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -245
  381. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  382. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -94
  383. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  384. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.json +0 -24
  385. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  386. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  387. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.json +0 -231
  388. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  389. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.json +0 -231
  390. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  391. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  392. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.json +0 -149
  393. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  394. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.json +0 -162
  395. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  396. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  397. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  398. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.json +0 -114
  399. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  400. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  401. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  402. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -167
  403. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  404. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  405. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +0 -24
  406. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  407. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +0 -166
  408. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  409. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  410. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  411. package/artifacts/contracts/registry/Registry.sol/Registerable.json +0 -166
  412. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  413. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  414. package/contracts/components/Component.sol +0 -62
  415. package/contracts/components/IPool.sol +0 -9
  416. package/contracts/components/IProduct.sol +0 -12
  417. package/contracts/instance/access/Access.sol +0 -218
  418. package/contracts/instance/access/IAccess.sol +0 -83
  419. package/contracts/instance/component/ComponentModule.sol +0 -248
  420. package/contracts/instance/component/IComponent.sol +0 -95
  421. package/contracts/instance/policy/IPolicy.sol +0 -66
  422. package/contracts/instance/policy/PolicyModule.sol +0 -107
  423. package/contracts/instance/pool/IPoolModule.sol +0 -41
  424. package/contracts/instance/pool/PoolModule.sol +0 -86
  425. package/contracts/instance/product/IProductService.sol +0 -46
  426. package/contracts/instance/product/ProductService.sol +0 -108
  427. package/contracts/registry/IChainNft.sol +0 -18
@@ -1,182 +1,396 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
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
4
 
9
- contract RegistryLinked is IRegistryLinked {
5
+ import {NftId, toNftId, zeroNftId} from "../types/NftId.sol";
6
+ import {VersionPart} from "../types/Version.sol";
7
+ import {ObjectType, PROTOCOL, REGISTRY, TOKEN, SERVICE, INSTANCE, STAKE, PRODUCT, DISTRIBUTION, ORACLE, POOL, POLICY, BUNDLE} from "../types/ObjectType.sol";
10
8
 
11
- IRegistry internal _registry;
12
-
13
- constructor(address registry) {
14
- _registry = IRegistry(registry);
9
+ import {ERC165} from "../shared/ERC165.sol";
10
+
11
+ import {ChainNft} from "./ChainNft.sol";
12
+ import {IRegistry} from "./IRegistry.sol";
13
+ import {ReleaseManager} from "./ReleaseManager.sol";
14
+
15
+ // IMPORTANT
16
+ // Each NFT minted by registry is accosiated with:
17
+ // 1) NFT owner
18
+ // 2) registred contract OR object stored in registered (parent) contract
19
+ // Four registration flows:
20
+ // 1) IService address by release manager (SERVICE of domain SERVICE aka registry service aka release creation)
21
+ // 2) IService address by release manager (SERVICE of domain !SERVICE aka regular service)
22
+ // 3) IRegisterable address by regular service (INSTANCE, PRODUCT, POOL, DISTRIBUTION, ORACLE)
23
+ // 4) state object by regular service (POLICY, BUNDLE, STAKE)
24
+
25
+ contract Registry is
26
+ ERC165,
27
+ IRegistry
28
+ {
29
+ address public constant NFT_LOCK_ADDRESS = address(0x1);
30
+ uint256 public constant REGISTRY_TOKEN_SEQUENCE_ID = 2;
31
+ string public constant EMPTY_URI = "";
32
+
33
+ mapping(NftId nftId => ObjectInfo info) internal _info;
34
+ mapping(address object => NftId nftId) internal _nftIdByAddress;
35
+
36
+ mapping(VersionPart version => mapping(ObjectType serviceDomain => address)) _service;
37
+
38
+ mapping(ObjectType objectType => mapping(
39
+ ObjectType parentType => bool)) internal _isValidContractCombination;
40
+
41
+ mapping(ObjectType objectType => mapping(
42
+ ObjectType parentType => bool)) internal _isValidObjectCombination;
43
+
44
+ NftId internal _registryNftId;
45
+ ChainNft internal _chainNft;
46
+
47
+ ReleaseManager internal _releaseManager;
48
+
49
+ modifier onlyRegistryService() {
50
+ if(!_releaseManager.isActiveRegistryService(msg.sender)) {
51
+ revert CallerNotRegistryService();
52
+ }
53
+ _;
15
54
  }
16
55
 
17
- function getRegistry() external view override returns(IRegistry registry) {
18
- return _registry;
56
+ modifier onlyReleaseManager() {
57
+ if(msg.sender != address(_releaseManager)) {
58
+ revert CallerNotReleaseManager();
59
+ }
60
+ _;
19
61
  }
20
62
 
21
- }
63
+ constructor()
64
+ {
65
+ _releaseManager = ReleaseManager(msg.sender);
22
66
 
67
+ // deploy NFT
68
+ _chainNft = new ChainNft(address(this));// adds 10kb to deployment size
23
69
 
24
- abstract contract Registerable is
25
- RegistryLinked,
26
- IRegisterable
27
- {
28
- using NftIdLib for NftId;
70
+ // initial registry setup
71
+ _registerProtocol();
72
+ _registerRegistry();
29
73
 
30
- address private _initialOwner;
31
-
32
- constructor(address registry)
33
- RegistryLinked(registry)
74
+ // set object parent relations
75
+ _setupValidObjectParentCombinations();
76
+
77
+ _registerInterface(type(IRegistry).interfaceId);
78
+ }
79
+
80
+ function registerService(
81
+ ObjectInfo memory info,
82
+ VersionPart version,
83
+ ObjectType domain
84
+ )
85
+ external
86
+ onlyReleaseManager
87
+ returns(NftId nftId)
34
88
  {
35
- _initialOwner = msg.sender;
89
+ /* must be guaranteed by release manager
90
+ if(info.objectType != SERVICE()) {
91
+ revert();
92
+ }
93
+ info.initialOwner = NFT_LOCK_ADDRESS <- if services are access managed
94
+ */
95
+
96
+ if(_service[version][domain] > address(0)) {
97
+ revert ServiceAlreadyRegistered(info.objectAddress);
98
+ }
99
+
100
+ _service[version][domain] = info.objectAddress; // nftId;
101
+
102
+ nftId = _register(info);
103
+
104
+ emit LogServiceRegistration(version, domain);
36
105
  }
37
106
 
38
- // getType, getData and register need to be implemented by concrete contract
107
+ function register(ObjectInfo memory info)
108
+ external
109
+ onlyRegistryService
110
+ returns(NftId nftId)
111
+ {
112
+ // no service registrations
113
+ if(info.objectType == SERVICE()) {
114
+ revert ServiceRegistration();
115
+ }
39
116
 
40
- function isRegisterable() external pure override returns(bool) {
41
- return true;
117
+ nftId = _register(info);
42
118
  }
43
119
 
44
- function getInitialOwner() public view override returns(address deployer) {
45
- return _initialOwner;
120
+ /// @dev earliest GIF major version
121
+ function getMajorVersionMin() external view returns (VersionPart) {
122
+ return _releaseManager.getInitialVersion();
46
123
  }
47
124
 
48
- function isRegistered() public view override returns(bool) {
49
- NftId nftId = _registry.getNftId(address(this));
50
- return nftId.gtz();
125
+ // TODO make distinction between active an not yet active version
126
+ // need to be thought trough, not yet clear if necessary
127
+ // need to answer question: what is the latest version during the upgrade process?
128
+ // likely setting up a new gif version does not fit into a single tx
129
+ // in this case we might want to have a period where the latest version is
130
+ // in the process of being set up while the latest active version is 1 major release smaller
131
+ /// @dev latest GIF major version (might not yet be active)
132
+ function getMajorVersionMax() external view returns (VersionPart) {
133
+ return _releaseManager.getNextVersion();
51
134
  }
52
135
 
53
- function getNftId() public view override returns(NftId nftId) {
54
- return _registry.getNftId(address(this));
136
+ /// @dev latest active GIF release version
137
+ function getMajorVersion() external view returns (VersionPart) {
138
+ return _releaseManager.getLatestVersion();
55
139
  }
56
140
 
57
- function getOwner() public view override returns(address owner) {
58
- NftId id = _registry.getNftId(address(this));
59
- owner = _registry.getOwner(id);
60
- return owner != address(0) ? owner : _initialOwner;
141
+ function getReleaseInfo(VersionPart version) external view returns (ReleaseInfo memory)
142
+ {
143
+ return _releaseManager.getReleaseInfo(version);
61
144
  }
62
145
 
63
- }
146
+ function getObjectCount() external view override returns (uint256) {
147
+ return _chainNft.totalSupply();
148
+ }
64
149
 
65
- contract Registry is IRegistry {
66
- using NftIdLib for NftId;
67
- string public constant EMPTY_URI = "";
150
+ function getNftId() external view returns (NftId nftId) {
151
+ return _registryNftId;
152
+ }
153
+
154
+ function getNftId(address object) external view override returns (NftId id) {
155
+ return _nftIdByAddress[object];
156
+ }
68
157
 
69
- mapping(NftId nftId => RegistryInfo info) private _info;
70
- mapping(NftId nftId => address owner) private _owner;
71
- mapping(address object => NftId nftId) private _nftIdByAddress;
158
+ function ownerOf(NftId nftId) public view override returns (address) {
159
+ return _chainNft.ownerOf(nftId.toInt());
160
+ }
72
161
 
73
- IChainNft private _chainNft;
162
+ function ownerOf(address contractAddress) public view returns (address) {
163
+ return _chainNft.ownerOf(_nftIdByAddress[contractAddress].toInt());
164
+ }
74
165
 
75
- function initialize(address chainNft) external {
76
- require(address(_chainNft) == address(0), "ERROR:REG-001:ALREADY_INITIALIZED");
77
- _chainNft = IChainNft(chainNft);
166
+ function getObjectInfo(NftId nftId) external view override returns (ObjectInfo memory) {
167
+ return _info[nftId];
78
168
  }
79
169
 
80
- function TOKEN() public pure override returns(uint256) { return 30; }
81
- function INSTANCE() public pure override returns(uint256) { return 40; }
82
- function PRODUCT() public pure override returns(uint256) { return 50; }
83
- function ORACLE() public pure override returns(uint256) { return 60; }
84
- function POOL() public pure override returns(uint256) { return 70; }
85
- function POLICY() public pure override returns(uint256) { return 80; }
86
- function BUNDLE() public pure override returns(uint256) { return 90; }
170
+ function getObjectInfo(address object) external view override returns (ObjectInfo memory) {
171
+ return _info[_nftIdByAddress[object]];
172
+ }
87
173
 
88
- function register(address objectAddress) external override returns(NftId nftId) {
89
- require(_nftIdByAddress[objectAddress].eqz(), "ERROR:REG-002:ALREADY_REGISTERED");
174
+ function isRegistered(NftId nftId) public view override returns (bool) {
175
+ return _info[nftId].objectType.gtz();
176
+ }
90
177
 
91
- IRegisterable registerable = IRegisterable(objectAddress);
92
- require(registerable.isRegisterable(), "ERROR:REG-003:NOT_REGISTERABLE");
178
+ function isRegistered(address object) external view override returns (bool) {
179
+ return _nftIdByAddress[object].gtz();
180
+ }
93
181
 
94
- // check parent exists (for objects not instances)
95
- if(registerable.getType() != INSTANCE()) {
96
- RegistryInfo memory parentInfo = _info[registerable.getParentNftId()];
97
- require(parentInfo.nftId.gtz(), "ERROR:REG-004:PARENT_NOT_FOUND");
98
- // check validity of parent relation, valid relations are
99
- // policy -> product, bundle -> pool, product -> instance, pool -> instance
100
- }
182
+ function isRegisteredService(address object) external view override returns (bool) {
183
+ return _nftIdByAddress[object].gtz() && _info[_nftIdByAddress[object]].objectType == SERVICE();
184
+ }
101
185
 
102
- uint256 mintedTokenId = _chainNft.mint(
103
- registerable.getInitialOwner(),
104
- EMPTY_URI);
105
- nftId = toNftId(mintedTokenId);
106
-
107
- RegistryInfo memory info = RegistryInfo(
108
- nftId,
109
- registerable.getParentNftId(),
110
- registerable.getType(),
111
- objectAddress,
112
- registerable.getInitialOwner()
113
- );
186
+ function getServiceAddress(
187
+ ObjectType serviceDomain,
188
+ VersionPart releaseVersion
189
+ ) external view returns (address)
190
+ {
191
+ return _service[releaseVersion][serviceDomain];
192
+ }
114
193
 
115
- _info[nftId] = info;
116
- _nftIdByAddress[objectAddress] = nftId;
194
+ function getChainNft() external view override returns (ChainNft) {
195
+ return _chainNft;
196
+ }
117
197
 
118
- // add logging
198
+ function getOwner() public view returns (address owner) {
199
+ return ownerOf(address(this));
119
200
  }
120
201
 
202
+ // Internals
121
203
 
122
- function registerObjectForInstance(
123
- NftId parentNftId,
124
- uint256 objectType,
125
- address initialOwner
126
- )
127
- external
128
- override
129
- // TODO add onlyRegisteredInstance
204
+ /// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
205
+ // TODO registration of precompile addresses
206
+ function _register(ObjectInfo memory info)
207
+ internal
130
208
  returns(NftId nftId)
131
209
  {
132
- // TODO add more validation
133
- require(
134
- objectType == POLICY() || objectType == BUNDLE(),
135
- "ERROR:REG-005:TYPE_INVALID");
210
+ ObjectType objectType = info.objectType;
211
+ NftId parentNftId = info.parentNftId;
212
+ ObjectInfo memory parentInfo = _info[parentNftId];
213
+ ObjectType parentType = parentInfo.objectType; // see function header
214
+ address parentAddress = parentInfo.objectAddress;
215
+
216
+ // parent is contract -> need to check? -> check before minting
217
+ // special case: global registry nft as parent when not on mainnet -> global registry address is 0
218
+ // special case: when parentNftId == _chainNft.mint(), check for zero parent address before mint
219
+ // special case: when parentNftId == _chainNft.mint() && objectAddress == initialOwner
220
+ if(parentAddress == address(0)) {
221
+ revert ZeroParentAddress();
222
+ }
223
+
224
+ address interceptor = _getInterceptor(info.isInterceptor, info.objectAddress, parentInfo.isInterceptor, parentAddress);
136
225
 
226
+ // TODO does external call
227
+ // compute next nftId, do all checks and stores, mint() at most end...
137
228
  uint256 mintedTokenId = _chainNft.mint(
138
- initialOwner,
229
+ info.initialOwner,
230
+ interceptor,
139
231
  EMPTY_URI);
140
232
  nftId = toNftId(mintedTokenId);
141
233
 
142
- RegistryInfo memory info = RegistryInfo(
143
- nftId,
144
- parentNftId,
145
- objectType,
146
- address(0),
147
- initialOwner
148
- );
149
-
234
+ // TODO move nftId out of info struct
235
+ // getters by nftId -> return struct without nftId
236
+ // getters by address -> return nftId AND struct
237
+ info.nftId = nftId;
150
238
  _info[nftId] = info;
151
239
 
152
- // add logging
153
- }
240
+ if(info.objectAddress > address(0))
241
+ {
242
+ // parent is registered + object-parent types are valid
243
+ if(_isValidContractCombination[objectType][parentType] == false) {
244
+ revert InvalidTypesCombination(objectType, parentType);
245
+ }
154
246
 
247
+ address contractAddress = info.objectAddress;
155
248
 
156
- function getObjectCount() external view override returns(uint256) {
157
- return _chainNft.totalSupply();
249
+ if(_nftIdByAddress[contractAddress].gtz()) {
250
+ revert ContractAlreadyRegistered(contractAddress);
251
+ }
252
+
253
+ _nftIdByAddress[contractAddress] = nftId;
254
+ }
255
+ else
256
+ {
257
+ if(_isValidObjectCombination[objectType][parentType] == false) {
258
+ revert InvalidTypesCombination(objectType, parentType);
259
+ }
260
+ }
261
+
262
+ emit LogRegistration(nftId, parentNftId, objectType, info.isInterceptor, info.objectAddress, info.initialOwner);
158
263
  }
159
264
 
265
+ /// @dev obtain interceptor address for this nft if applicable, address(0) otherwise
266
+ function _getInterceptor(
267
+ bool isInterceptor,
268
+ address objectAddress,
269
+ bool parentIsInterceptor,
270
+ address parentObjectAddress
271
+ )
272
+ internal
273
+ view
274
+ returns (address interceptor)
275
+ {
276
+ if (objectAddress == address(0)) {
277
+ if (parentIsInterceptor) {
278
+ return parentObjectAddress;
279
+ } else {
280
+ return address(0);
281
+ }
282
+ }
160
283
 
161
- function getNftId(address object) external view override returns(NftId id) {
162
- return _nftIdByAddress[object];
284
+ if (isInterceptor) {
285
+ return objectAddress;
286
+ }
287
+
288
+ return address(0);
163
289
  }
164
290
 
291
+ // Internals called only in constructor
165
292
 
166
- function isRegistered(address object) external view override returns(bool) {
167
- return _nftIdByAddress[object].gtz();
293
+ /// @dev protocol registration used to anchor the dip ecosystem relations
294
+ function _registerProtocol()
295
+ private
296
+ {
297
+ uint256 protocolId = _chainNft.PROTOCOL_NFT_ID();
298
+ NftId protocolNftId = toNftId(protocolId);
299
+
300
+ _info[protocolNftId] = ObjectInfo({
301
+ nftId: protocolNftId,
302
+ parentNftId: zeroNftId(),
303
+ objectType: PROTOCOL(),
304
+ isInterceptor: false,
305
+ objectAddress: address(0),
306
+ initialOwner: NFT_LOCK_ADDRESS,
307
+ data: ""
308
+ });
309
+
310
+ _chainNft.mint(NFT_LOCK_ADDRESS, protocolId);
168
311
  }
169
312
 
313
+ /// @dev registry registration
314
+ /// might also register the global registry when not on mainnet
315
+ function _registerRegistry()
316
+ private
317
+ {
318
+ uint256 registryId = _chainNft.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID);
319
+ NftId registryNftId = toNftId(registryId);
320
+ NftId parentNftId;
321
+
322
+ if(registryId != _chainNft.GLOBAL_REGISTRY_ID())
323
+ {// we're not the global registry
324
+ _registerGlobalRegistry();
325
+ parentNftId = toNftId(_chainNft.GLOBAL_REGISTRY_ID());
326
+ }
327
+ else
328
+ {// we are global registry
329
+ parentNftId = toNftId(_chainNft.PROTOCOL_NFT_ID());
330
+ }
170
331
 
171
- function getInfo(NftId nftId) external view override returns(RegistryInfo memory info) {
172
- return _info[nftId];
332
+ _info[registryNftId] = ObjectInfo({
333
+ nftId: registryNftId,
334
+ parentNftId: parentNftId,
335
+ objectType: REGISTRY(),
336
+ isInterceptor: false,
337
+ objectAddress: address(this),
338
+ initialOwner: NFT_LOCK_ADDRESS,
339
+ data: ""
340
+ });
341
+ _nftIdByAddress[address(this)] = registryNftId;
342
+ _registryNftId = registryNftId;
343
+
344
+ _chainNft.mint(NFT_LOCK_ADDRESS, registryId);
173
345
  }
174
346
 
175
- function getOwner(NftId nftId) external view override returns(address) {
176
- return _chainNft.ownerOf(nftId.toInt());
347
+ /// @dev global registry registration for non mainnet registries
348
+ function _registerGlobalRegistry()
349
+ private
350
+ {
351
+ uint256 globalRegistryId = _chainNft.GLOBAL_REGISTRY_ID();
352
+ NftId globalRegistryNftId = toNftId(globalRegistryId);
353
+
354
+ _info[globalRegistryNftId] = ObjectInfo({
355
+ nftId: globalRegistryNftId,
356
+ parentNftId: toNftId(_chainNft.PROTOCOL_NFT_ID()),
357
+ objectType: REGISTRY(),
358
+ isInterceptor: false,
359
+ objectAddress: address(0),
360
+ initialOwner: NFT_LOCK_ADDRESS,
361
+ data: ""
362
+ });
363
+
364
+ _chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
177
365
  }
178
366
 
179
- function getNftAddress() external view override returns(address nft) {
180
- return address(_chainNft);
367
+ /// @dev defines which object - parent types relations are allowed to register
368
+ // IMPORTANT:
369
+ // 1) EACH object type MUST have only one parent type across ALL mappings
370
+ // 2) DO NOT use object type (e.g. POLCY, BUNDLE, STAKE) as parent type
371
+ // 3) DO NOT use REGISTRY as object type
372
+ // 2) DO NOT use PROTOCOL and "zeroObjectType"
373
+ function _setupValidObjectParentCombinations()
374
+ private
375
+ {
376
+ // registry as parent, ONLY registry owner
377
+ _isValidContractCombination[TOKEN()][REGISTRY()] = true;
378
+ _isValidContractCombination[SERVICE()][REGISTRY()] = true;
379
+
380
+ // registry as parent, ONLY approved
381
+ _isValidContractCombination[INSTANCE()][REGISTRY()] = true;
382
+
383
+ // instance as parent, ONLY approved
384
+ _isValidContractCombination[PRODUCT()][INSTANCE()] = true;
385
+ _isValidContractCombination[DISTRIBUTION()][INSTANCE()] = true;
386
+ _isValidContractCombination[ORACLE()][INSTANCE()] = true;
387
+ _isValidContractCombination[POOL()][INSTANCE()] = true;
388
+
389
+ // product as parent, ONLY approved
390
+ _isValidObjectCombination[POLICY()][PRODUCT()] = true;
391
+
392
+ // pool as parent, ONLY approved
393
+ _isValidObjectCombination[BUNDLE()][POOL()] = true;
394
+ _isValidObjectCombination[STAKE()][POOL()] = true;
181
395
  }
182
- }
396
+ }