@etherisc/gif-next 0.0.2-9b97b55 → 0.0.2-9d3eab3-323

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