@etherisc/gif-next 0.0.2-d911522 → 0.0.2-da06f3b-803

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