@etherisc/gif-next 0.0.2-dc7e4cb-141 → 0.0.2-dd8c542-531

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 (422) hide show
  1. package/README.md +242 -11
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  3. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +302 -23
  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 +1 -1
  7. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +217 -23
  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 +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +90 -171
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +55 -177
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +615 -63
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +620 -70
  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/Revert.sol/Revert.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  36. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  39. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  40. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  41. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  42. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  43. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  44. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  45. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  46. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  47. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +788 -0
  48. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  49. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +185 -0
  50. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +4 -0
  51. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +1082 -0
  52. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  53. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +909 -1202
  54. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  55. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +448 -0
  56. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  57. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +496 -0
  58. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  59. package/artifacts/contracts/instance/Instance.sol/Instance.json +2487 -1191
  60. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  61. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +940 -0
  62. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +1 -1
  63. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +572 -122
  64. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  65. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1422 -0
  66. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  67. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +1066 -0
  68. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +560 -0
  70. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  71. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +285 -0
  72. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  73. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +521 -0
  74. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  75. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +113 -0
  76. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  77. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +429 -0
  78. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  79. package/artifacts/contracts/instance/{module/lifecycle/ILifecycle.sol/ILifecycleModule.json → base/ILifecycle.sol/ILifecycle.json} +10 -77
  80. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  81. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +502 -0
  82. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  83. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  84. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  85. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +211 -0
  86. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  87. package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
  88. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  89. package/artifacts/contracts/instance/module/{access/IAccess.sol/IAccess.json → IDistribution.sol/IDistribution.json} +2 -2
  90. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  91. package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
  92. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  93. package/artifacts/contracts/instance/module/{risk/IRisk.sol → IRisk.sol}/IRisk.json +1 -1
  94. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  95. package/artifacts/contracts/instance/module/{pool/IPoolModule.sol/IPool.json → ISetup.sol/ISetup.json} +2 -2
  96. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  97. package/artifacts/contracts/instance/module/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
  98. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  99. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +923 -0
  100. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  101. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +440 -0
  102. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  103. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +400 -77
  104. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  105. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +671 -0
  106. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  107. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +428 -0
  108. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  109. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +669 -0
  110. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  111. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +185 -83
  112. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  113. package/artifacts/contracts/instance/service/{ComponentServiceBase.sol/ComponentServiceBase.json → IDistributionService.sol/IDistributionService.json} +212 -66
  114. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  115. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +664 -0
  116. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  117. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +200 -77
  118. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  119. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +209 -150
  120. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  121. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +971 -0
  122. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  123. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +464 -0
  124. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  125. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +325 -91
  126. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  127. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +428 -0
  128. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  129. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +312 -230
  130. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  131. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +420 -0
  132. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  133. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +186 -12
  134. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  135. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +309 -41
  136. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  137. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +886 -0
  138. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  139. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  140. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  141. package/artifacts/contracts/registry/Registry.sol/Registry.json +385 -129
  142. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  143. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1195 -0
  144. package/artifacts/contracts/registry/RegistryServiceAccessManager.sol/RegistryServiceAccessManager.dbg.json +4 -0
  145. package/artifacts/contracts/registry/RegistryServiceAccessManager.sol/RegistryServiceAccessManager.json +275 -0
  146. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  147. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +451 -0
  148. package/artifacts/contracts/registry/RegistryServiceReleaseManager.sol/RegistryServiceReleaseManager.dbg.json +4 -0
  149. package/artifacts/contracts/registry/RegistryServiceReleaseManager.sol/RegistryServiceReleaseManager.json +521 -0
  150. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  151. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +397 -0
  152. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  153. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  154. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  155. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  156. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  157. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +127 -0
  158. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  159. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +117 -37
  160. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  161. package/artifacts/contracts/{instance/service → shared}/IService.sol/IService.json +183 -62
  162. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  163. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +55 -14
  164. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  165. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  166. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  167. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  168. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  169. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +190 -37
  170. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
  171. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +442 -0
  172. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  173. package/artifacts/contracts/{instance/service/ServiceBase.sol/ServiceBase.json → shared/Service.sol/Service.json} +224 -56
  174. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  175. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  176. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  177. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  178. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  179. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +78 -14
  180. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  181. package/artifacts/contracts/test/TestFee.sol/TestFee.json +4 -4
  182. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  183. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +204 -36
  184. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  185. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +44 -10
  186. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  187. package/artifacts/contracts/test/TestService.sol/TestService.json +289 -68
  188. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  189. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
  190. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  191. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  192. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  193. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +103 -23
  194. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  195. package/artifacts/contracts/test/Usdc.sol/USDC.json +91 -53
  196. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  197. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  198. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  199. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  200. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  201. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  202. package/artifacts/contracts/types/Fee.sol/FeeLib.json +52 -13
  203. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  204. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +125 -0
  205. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  206. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
  207. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  208. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  209. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  210. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  211. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  212. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  213. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  214. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  215. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  216. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  217. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  218. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
  219. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  220. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  221. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  222. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +15 -2
  223. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  224. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  225. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  226. package/artifacts/contracts/types/UFixed.sol/{UFixedMathLib.json → UFixedLib.json} +3 -3
  227. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  228. package/artifacts/contracts/types/Version.sol/VersionLib.json +40 -2
  229. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  230. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
  231. package/contracts/components/BaseComponent.sol +75 -32
  232. package/contracts/components/Distribution.sol +163 -0
  233. package/contracts/components/IBaseComponent.sol +15 -3
  234. package/contracts/components/IDistributionComponent.sol +44 -0
  235. package/contracts/components/IPoolComponent.sol +19 -10
  236. package/contracts/components/IProductComponent.sol +25 -9
  237. package/contracts/components/Pool.sol +132 -35
  238. package/contracts/components/Product.sol +211 -36
  239. package/contracts/experiment/cloning/Cloner.sol +47 -0
  240. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
  241. package/contracts/instance/BundleManager.sol +129 -0
  242. package/contracts/instance/Cloneable.sol +46 -0
  243. package/contracts/instance/IAccessManagerSimple.sol +391 -0
  244. package/contracts/instance/IInstance.sol +53 -46
  245. package/contracts/instance/IInstanceBase.sol +26 -0
  246. package/contracts/instance/IInstanceService.sol +34 -0
  247. package/contracts/instance/Instance.sol +447 -49
  248. package/contracts/instance/InstanceAccessManager.sol +288 -0
  249. package/contracts/instance/InstanceBase.sol +33 -63
  250. package/contracts/instance/InstanceReader.sol +315 -0
  251. package/contracts/instance/InstanceService.sol +299 -0
  252. package/contracts/instance/InstanceServiceManager.sol +58 -0
  253. package/contracts/instance/ObjectManager.sol +101 -0
  254. package/contracts/instance/base/ComponentServiceBase.sol +72 -0
  255. package/contracts/instance/base/IInstanceBase.sol +23 -0
  256. package/contracts/instance/base/IKeyValueStore.sol +49 -0
  257. package/contracts/instance/base/ILifecycle.sol +30 -0
  258. package/contracts/instance/base/KeyValueStore.sol +172 -0
  259. package/contracts/instance/{module/lifecycle/LifecycleModule.sol → base/Lifecycle.sol} +51 -40
  260. package/contracts/instance/module/IAccess.sol +38 -0
  261. package/contracts/instance/module/IBundle.sol +20 -0
  262. package/contracts/instance/module/IDistribution.sol +39 -0
  263. package/contracts/instance/module/IPolicy.sol +45 -0
  264. package/contracts/instance/module/IRisk.sol +11 -0
  265. package/contracts/instance/module/ISetup.sol +46 -0
  266. package/contracts/instance/module/ITreasury.sol +23 -0
  267. package/contracts/instance/service/BundleService.sol +260 -0
  268. package/contracts/instance/service/BundleServiceManager.sol +55 -0
  269. package/contracts/instance/service/ComponentOwnerService.sol +244 -100
  270. package/contracts/instance/service/DistributionService.sol +114 -0
  271. package/contracts/instance/service/DistributionServiceManager.sol +55 -0
  272. package/contracts/instance/service/IBundleService.sol +45 -0
  273. package/contracts/instance/service/IComponentOwnerService.sol +1 -3
  274. package/contracts/instance/service/IDistributionService.sol +12 -0
  275. package/contracts/instance/service/IPolicyService.sol +87 -0
  276. package/contracts/instance/service/IPoolService.sol +8 -18
  277. package/contracts/instance/service/IProductService.sol +21 -39
  278. package/contracts/instance/service/PolicyService.sol +503 -0
  279. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  280. package/contracts/instance/service/PoolService.sol +87 -88
  281. package/contracts/instance/service/PoolServiceManager.sol +55 -0
  282. package/contracts/instance/service/ProductService.sol +106 -293
  283. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  284. package/contracts/registry/ChainNft.sol +79 -36
  285. package/contracts/registry/IRegistry.sol +45 -25
  286. package/contracts/registry/IRegistryService.sol +54 -0
  287. package/contracts/registry/ITransferInterceptor.sol +6 -0
  288. package/contracts/registry/Registry.sol +292 -288
  289. package/contracts/registry/RegistryService.sol +330 -0
  290. package/contracts/registry/RegistryServiceAccessManager.sol +210 -0
  291. package/contracts/registry/RegistryServiceManager.sol +60 -0
  292. package/contracts/registry/RegistryServiceReleaseManager.sol +366 -0
  293. package/contracts/registry/TokenRegistry.sol +110 -0
  294. package/contracts/shared/ContractDeployerLib.sol +72 -0
  295. package/contracts/shared/ERC165.sol +6 -2
  296. package/contracts/shared/INftOwnable.sol +22 -0
  297. package/contracts/shared/IRegisterable.sol +8 -15
  298. package/contracts/shared/IService.sol +16 -0
  299. package/contracts/shared/IVersionable.sol +55 -11
  300. package/contracts/shared/NftOwnable.sol +134 -0
  301. package/contracts/shared/ProxyManager.sol +94 -0
  302. package/contracts/shared/Registerable.sol +63 -59
  303. package/contracts/shared/RegisterableUpgradable.sol +16 -0
  304. package/contracts/shared/Service.sol +58 -0
  305. package/contracts/shared/TokenHandler.sol +27 -0
  306. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  307. package/contracts/shared/Versionable.sol +113 -55
  308. package/contracts/test/TestFee.sol +2 -2
  309. package/contracts/test/TestRegisterable.sol +5 -6
  310. package/contracts/test/TestRoleId.sol +2 -2
  311. package/contracts/test/TestService.sol +7 -14
  312. package/contracts/types/DistributorType.sol +55 -0
  313. package/contracts/types/Fee.sol +10 -5
  314. package/contracts/types/Key32.sol +50 -0
  315. package/contracts/types/NftId.sol +16 -1
  316. package/contracts/types/NftIdSet.sol +26 -24
  317. package/contracts/types/NumberId.sol +52 -0
  318. package/contracts/types/ObjectType.sol +51 -14
  319. package/contracts/types/Referral.sol +85 -0
  320. package/contracts/types/RiskId.sol +43 -0
  321. package/contracts/types/RoleId.sol +66 -11
  322. package/contracts/types/StateId.sol +12 -2
  323. package/contracts/types/Timestamp.sol +7 -3
  324. package/contracts/types/UFixed.sol +128 -12
  325. package/contracts/types/Version.sol +13 -1
  326. package/package.json +4 -3
  327. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
  328. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
  329. package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.dbg.json +0 -4
  330. package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.json +0 -50
  331. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
  332. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
  333. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
  334. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  335. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
  336. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
  337. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -276
  338. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
  339. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
  340. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -276
  341. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.dbg.json +0 -4
  342. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.json +0 -10
  343. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.dbg.json +0 -4
  344. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.json +0 -10
  345. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.dbg.json +0 -4
  346. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.json +0 -10
  347. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  348. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +0 -188
  349. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
  350. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
  351. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  352. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +0 -188
  353. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  354. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.json +0 -134
  355. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +0 -4
  356. package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +0 -4
  357. package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.json +0 -221
  358. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  359. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  360. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -261
  361. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  362. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -261
  363. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  364. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  365. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -149
  366. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  367. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -149
  368. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
  369. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
  370. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -10
  371. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
  372. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -10
  373. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  374. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  375. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -533
  376. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  377. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
  378. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  379. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -533
  380. package/artifacts/contracts/instance/service/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  381. package/artifacts/contracts/instance/service/IService.sol/IService.dbg.json +0 -4
  382. package/artifacts/contracts/instance/service/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  383. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  384. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -452
  385. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
  386. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
  387. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
  388. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
  389. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
  390. package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -387
  391. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
  392. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -393
  393. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  394. package/contracts/experiment/statemachine/README.md +0 -112
  395. package/contracts/instance/IInstanceLinked.sol +0 -8
  396. package/contracts/instance/IServiceLinked.sol +0 -12
  397. package/contracts/instance/module/access/Access.sol +0 -149
  398. package/contracts/instance/module/access/IAccess.sol +0 -53
  399. package/contracts/instance/module/bundle/BundleModule.sol +0 -228
  400. package/contracts/instance/module/bundle/IBundle.sol +0 -53
  401. package/contracts/instance/module/compensation/CompensationModule.sol +0 -8
  402. package/contracts/instance/module/compensation/ICompensation.sol +0 -10
  403. package/contracts/instance/module/component/ComponentModule.sol +0 -103
  404. package/contracts/instance/module/component/IComponent.sol +0 -53
  405. package/contracts/instance/module/lifecycle/ILifecycle.sol +0 -47
  406. package/contracts/instance/module/policy/IPolicy.sol +0 -60
  407. package/contracts/instance/module/policy/PolicyModule.sol +0 -84
  408. package/contracts/instance/module/pool/IPoolModule.sol +0 -41
  409. package/contracts/instance/module/pool/PoolModule.sol +0 -87
  410. package/contracts/instance/module/risk/IRisk.sol +0 -10
  411. package/contracts/instance/module/risk/RiskModule.sol +0 -8
  412. package/contracts/instance/module/treasury/ITreasury.sol +0 -103
  413. package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
  414. package/contracts/instance/module/treasury/TreasuryModule.sol +0 -152
  415. package/contracts/instance/service/ComponentServiceBase.sol +0 -41
  416. package/contracts/instance/service/IService.sol +0 -15
  417. package/contracts/instance/service/ServiceBase.sol +0 -39
  418. package/contracts/registry/IChainNft.sol +0 -21
  419. package/contracts/registry/IRegistryLinked.sol +0 -8
  420. package/contracts/shared/IOwnable.sol +0 -6
  421. package/contracts/test/TestPool.sol +0 -22
  422. package/contracts/test/TestProduct.sol +0 -44
@@ -1,381 +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";
3
8
 
4
9
  import {IRegisterable} from "../shared/IRegisterable.sol";
5
- import {IService} from "../instance/service/IService.sol";
10
+ import {IService} from "../shared/IService.sol";
11
+ import {ERC165} from "../shared/ERC165.sol";
6
12
 
7
- import {IChainNft} from "./IChainNft.sol";
8
13
  import {ChainNft} from "./ChainNft.sol";
9
14
  import {IRegistry} from "./IRegistry.sol";
10
- import {NftId, toNftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
11
- import {VersionPart} from "../types/Version.sol";
12
- import {ObjectType, PROTOCOL, REGISTRY, TOKEN, SERVICE, INSTANCE, STAKE, PRODUCT, DISTRIBUTOR, ORACLE, POOL, POLICY, BUNDLE} from "../types/ObjectType.sol";
15
+ import {IRegistryService} from "./IRegistryService.sol";
16
+ import {ITransferInterceptor} from "./ITransferInterceptor.sol";
17
+ import {RegistryServiceReleaseManager} from "./RegistryServiceReleaseManager.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)
13
28
 
14
- // TODO make registry upgradable
15
29
  contract Registry is
16
- IRegisterable,
30
+ ERC165,
17
31
  IRegistry
18
32
  {
19
- using NftIdLib for NftId;
20
-
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;
21
37
  string public constant EMPTY_URI = "";
22
38
 
23
- mapping(NftId nftId => ObjectInfo info) private _info;
24
- mapping(NftId nftId => address owner) private _owner;
25
- mapping(address object => NftId nftId) private _nftIdByAddress;
26
- mapping(ObjectType objectType => bool) private _isValidType;
27
- mapping(ObjectType objectType => mapping(ObjectType objectParentType => bool)) private _isValidParentType;
28
-
29
- mapping(NftId nftId => string stringValue) private _string;
30
- mapping(bytes32 serviceNameHash => mapping(VersionPart majorVersion => address service)) _service;
31
-
32
- NftId private _nftId;
33
- IChainNft private _chainNft;
34
- ChainNft private _chainNftInternal;
35
- address private _initialOwner;
36
-
37
- // @dev will own protocol nft and registry nft(s) minted during initialize
38
- address private _protocolOwner;
39
-
40
- // TODO refactor once registry becomes upgradable
41
- // @Dev the protocol owner will get ownership of the
42
- // protocol nft and the global registry nft minted in this
43
- // initializer function
44
- function initialize(
45
- address chainNft,
46
- address protocolOwner
47
- )
48
- public
49
- {
50
- require(
51
- address(_chainNft) == address(0),
52
- "ERROR:REG-001:ALREADY_INITIALIZED"
53
- );
39
+ mapping(NftId nftId => ObjectInfo info) internal _info;
40
+ mapping(address object => NftId nftId) internal _nftIdByAddress;
54
41
 
55
- _initialOwner = msg.sender;
56
- _protocolOwner = protocolOwner;
42
+ mapping(ObjectType objectType => mapping(
43
+ ObjectType parentType => bool)) internal _isValidContractCombination;
57
44
 
58
- _chainNft = IChainNft(chainNft);
59
- _chainNftInternal = ChainNft(chainNft);
45
+ mapping(ObjectType objectType => mapping(
46
+ ObjectType parentType => bool)) internal _isValidObjectCombination;
60
47
 
61
- // initial registry setup
62
- _registerProtocol();
63
- _nftId = _registerRegistry();
48
+ NftId internal _registryNftId;
49
+ ChainNft internal _chainNft;
50
+
51
+ RegistryServiceReleaseManager internal _releaseManager;
64
52
 
65
- // setup rules for further registrations
66
- _setupValidTypes();
67
- _setupValidParentTypes();
53
+ modifier onlyRegistryService() {
54
+ if(!_releaseManager.isActiveRegistryService(msg.sender)) {
55
+ revert CallerNotRegistryService();
56
+ }
57
+ _;
68
58
  }
69
59
 
60
+ modifier onlyReleaseManager() {
61
+ if(msg.sender != address(_releaseManager)) {
62
+ revert CallerNotReleaseManager();
63
+ }
64
+ _;
65
+ }
70
66
 
71
- function register(
72
- address objectAddress
73
- )
74
- // TODO add authz (only services may register components etc)
75
- // we have to check how we do authz for registring services (just restrict to protocol owner/registry owner)
76
- external override returns (NftId nftId) {
77
- require(
78
- _nftIdByAddress[objectAddress].eqz(),
79
- "ERROR:REG-002:ALREADY_REGISTERED"
80
- );
81
-
82
- IRegisterable registerable = IRegisterable(objectAddress);
83
- require(
84
- registerable.supportsInterface(type(IRegisterable).interfaceId),
85
- "ERROR:REG-003:NOT_REGISTERABLE"
86
- );
87
-
88
- ObjectType objectType = registerable.getType();
89
- require(
90
- _isValidType[objectType],
91
- "ERROR:REG-004:TYPE_INVALID"
92
- );
93
-
94
- NftId parentNftId = registerable.getParentNftId();
95
- require(
96
- isRegistered(parentNftId),
97
- "ERROR:REG-005:PARENT_NOT_REGISTERED"
98
- );
99
-
100
- require(
101
- _isValidParentType[objectType][_info[parentNftId].objectType],
102
- "ERROR:REG-006:PARENT_TYPE_INVALID"
103
- );
104
-
105
- // also check that nftId and parentNFtId are on the same chain if applicable
106
-
107
- // nft minting
108
- uint256 mintedTokenId = _chainNft.mint(
109
- registerable.getOwner(),
110
- EMPTY_URI
111
- );
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");
112
71
 
113
- nftId = toNftId(mintedTokenId);
72
+ _releaseManager = RegistryServiceReleaseManager(releaseManager);
114
73
 
115
- // special case services
116
- if(registerable.getType() == SERVICE()) {
117
- IService service = IService(objectAddress);
118
- require(
119
- service.supportsInterface(type(IService).interfaceId),
120
- "ERROR:REG-007:NOT_SERVICE"
121
- );
122
-
123
- string memory serviceName = service.getName();
124
- VersionPart majorVersion = service.getMajorVersion();
125
- bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
126
-
127
- // service specific state
128
- _string[nftId] = serviceName;
129
-
130
- require(
131
- _service[serviceNameHash][majorVersion] == address(0),
132
- "ERROR:REG-008:ALREADY_REGISTERED"
133
- );
134
- _service[serviceNameHash][majorVersion] = objectAddress;
135
- }
74
+ // deploy NFT
75
+ _chainNft = new ChainNft(address(this));// adds 10kb to deployment size
76
+
77
+ // initial registry setup
78
+ _registerProtocol();
79
+ _registerRegistry();
80
+
81
+ // set object parent relations
82
+ _setupValidObjectParentCombinations();
136
83
 
137
- // create object info and link nft id with it
138
- _registerObjectInfo(registerable, nftId);
84
+ _registerInterface(type(IRegistry).interfaceId);
139
85
  }
140
86
 
87
+ function registerService(ObjectInfo memory info)
88
+ external
89
+ onlyReleaseManager
90
+ returns(NftId nftId)
91
+ {
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);
99
+ }
141
100
 
142
- function registerObjectForInstance(
143
- NftId parentNftId,
144
- ObjectType objectType,
145
- address initialOwner,
146
- bytes memory data
147
- )
101
+ function register(ObjectInfo memory info)
148
102
  external
149
- override
150
- returns (
151
- // TODO add onlyRegisteredInstance
152
- NftId nftId
153
- )
103
+ onlyRegistryService
104
+ returns(NftId nftId)
154
105
  {
155
- // TODO add more validation
156
- require(
157
- objectType == POLICY() || objectType == BUNDLE(),
158
- "ERROR:REG-010:TYPE_INVALID"
159
- );
106
+ // no service registrations
107
+ if(info.objectType == SERVICE()) {
108
+ revert ServiceRegistration();
109
+ }
160
110
 
161
- uint256 mintedTokenId = _chainNft.mint(initialOwner, EMPTY_URI);
162
- nftId = toNftId(mintedTokenId);
111
+ nftId = _register(info);
112
+ }
163
113
 
164
- ObjectInfo memory info = ObjectInfo(
165
- nftId,
166
- parentNftId,
167
- objectType,
168
- address(0),
169
- initialOwner,
170
- data
171
- );
114
+ /// @dev earliest GIF major version
115
+ function getMajorVersionMin() external view returns (VersionPart) {
116
+ return _releaseManager.getInitialVersion();
117
+ }
172
118
 
173
- _info[nftId] = info;
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();
128
+ }
174
129
 
175
- // add logging
130
+ /// @dev latest active GIF release version
131
+ function getMajorVersion() external view returns (VersionPart) {
132
+ return _releaseManager.getLatestVersion();
176
133
  }
177
134
 
178
135
  function getObjectCount() external view override returns (uint256) {
179
136
  return _chainNft.totalSupply();
180
137
  }
181
138
 
182
- function getNftId(
183
- address object
184
- ) external view override returns (NftId id) {
139
+ function getNftId() external view returns (NftId nftId) {
140
+ return _registryNftId;
141
+ }
142
+
143
+ function getNftId(address object) external view override returns (NftId id) {
185
144
  return _nftIdByAddress[object];
186
145
  }
187
146
 
188
- function isRegistered(
189
- NftId nftId
190
- ) public view override returns (bool) {
191
- return _info[nftId].objectType.gtz();
147
+ function ownerOf(NftId nftId) public view override returns (address) {
148
+ return _chainNft.ownerOf(nftId.toInt());
192
149
  }
193
150
 
194
- function isRegistered(
195
- address object
196
- ) external view override returns (bool) {
197
- return _nftIdByAddress[object].gtz();
151
+ function ownerOf(address contractAddress) public view returns (address) {
152
+ return _chainNft.ownerOf(_nftIdByAddress[contractAddress].toInt());
198
153
  }
199
154
 
200
- function getObjectInfo(
201
- NftId nftId
202
- ) external view override returns (ObjectInfo memory info) {
155
+ function getObjectInfo(NftId nftId) external view override returns (ObjectInfo memory) {
203
156
  return _info[nftId];
204
157
  }
205
158
 
206
- function getName(
207
- NftId nftId
208
- ) external view returns (string memory name) {
209
- return _string[nftId];
159
+ function getObjectInfo(address object) external view override returns (ObjectInfo memory) {
160
+ return _info[_nftIdByAddress[object]];
210
161
  }
211
162
 
212
- function getOwner(NftId nftId) external view override returns (address) {
213
- return _chainNft.ownerOf(nftId.toInt());
163
+ function isRegistered(NftId nftId) public view override returns (bool) {
164
+ return _info[nftId].objectType.gtz();
214
165
  }
215
166
 
216
- function getChainNft() external view override returns (IChainNft) {
217
- return _chainNft;
167
+ function isRegistered(address object) external view override returns (bool) {
168
+ return _nftIdByAddress[object].gtz();
218
169
  }
219
170
 
220
- // special case to retrive a gif service
221
- function getServiceAddress(string memory serviceName, VersionPart majorVersion) external view override returns (address serviceAddress) {
222
- bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
223
- return _service[serviceNameHash][majorVersion];
171
+ function isRegisteredService(address object) external view override returns (bool) {
172
+ return _nftIdByAddress[object].gtz() && _info[_nftIdByAddress[object]].objectType == SERVICE();
224
173
  }
225
174
 
226
- // from IERC165
227
- function supportsInterface(bytes4 interfaceId) external pure override returns (bool) {
228
- return interfaceId == type(IRegistry).interfaceId;
175
+ function getServiceAddress(
176
+ ObjectType serviceType,
177
+ VersionPart releaseVersion
178
+ ) external view returns (address)
179
+ {
180
+ return _releaseManager.getService(releaseVersion, serviceType);
229
181
  }
230
182
 
231
- // from IRegistryLinked
232
- function getRegistry() external view override returns (IRegistry registry) {
233
- return this;
183
+ function getChainNft() external view override returns (ChainNft) {
184
+ return _chainNft;
234
185
  }
235
186
 
236
- // from IRegisterable
237
- function register() external pure override returns (NftId nftId) {
238
- return zeroNftId();
187
+ function getOwner() public view returns (address owner) {
188
+ return ownerOf(address(this));
239
189
  }
240
190
 
241
- function getType() external pure override returns (ObjectType objectType) {
242
- return REGISTRY();
243
- }
191
+ // Internals
244
192
 
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
197
+ returns(NftId nftId)
198
+ {
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
+ }
245
212
 
246
- function getOwner() public view override returns (address owner) {
247
- return _nftId.gtz() ? this.getOwner(_nftId) : _initialOwner;
248
- }
213
+ address interceptor = _getInterceptor(info.isInterceptor, info.objectAddress, parentInfo.isInterceptor, parentAddress);
249
214
 
250
- function getNftId() external view override (IRegisterable, IRegistry) returns (NftId nftId) {
251
- return _nftId;
252
- }
215
+ // TODO does external call
216
+ // compute next nftId, do all checks and stores, mint() at most end...
217
+ uint256 mintedTokenId = _chainNft.mint(
218
+ info.initialOwner,
219
+ interceptor,
220
+ EMPTY_URI);
221
+ nftId = toNftId(mintedTokenId);
222
+
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;
227
+ _info[nftId] = info;
253
228
 
254
- function getParentNftId() external view returns (NftId nftId) {
255
- // we're the global registry
256
- if(block.chainid == 1) {
257
- return toNftId(_chainNftInternal.PROTOCOL_NFT_ID());
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
+ }
235
+
236
+ address contractAddress = info.objectAddress;
237
+
238
+ if(_nftIdByAddress[contractAddress].gtz()) {
239
+ revert ContractAlreadyRegistered(contractAddress);
240
+ }
241
+
242
+ _nftIdByAddress[contractAddress] = nftId;
258
243
  }
259
- else {
260
- return toNftId(_chainNftInternal.GLOBAL_REGISTRY_ID());
244
+ else
245
+ {
246
+ if(_isValidObjectCombination[objectType][parentType] == false) {
247
+ revert InvalidTypesCombination(objectType, parentType);
248
+ }
261
249
  }
262
- }
263
250
 
264
- function getData() external pure returns (bytes memory data) {
265
- return "";
251
+ emit LogRegistration(nftId, parentNftId, objectType, info.isInterceptor, info.objectAddress, info.initialOwner);
266
252
  }
267
253
 
268
- // registry specific functions
269
- function getProtocolOwner() external view override returns (address) {
270
- return _protocolOwner;
271
- }
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
272
 
273
- /// @dev defines which types are allowed to register
274
- function _setupValidTypes() internal {
275
- _isValidType[REGISTRY()] = true; // only for global registry
276
- _isValidType[TOKEN()] = true;
277
- _isValidType[SERVICE()] = true;
278
- _isValidType[INSTANCE()] = true;
279
- _isValidType[STAKE()] = true;
280
- _isValidType[PRODUCT()] = true;
281
- _isValidType[ORACLE()] = true;
282
- _isValidType[POOL()] = true;
283
- _isValidType[POLICY()] = true;
284
- _isValidType[BUNDLE()] = true;
285
- }
273
+ if (isInterceptor) {
274
+ return objectAddress;
275
+ }
286
276
 
287
- /// @dev defines which types - parent type relations are allowed to register
288
- function _setupValidParentTypes() internal {
289
- // registry as parent
290
- _isValidParentType[TOKEN()][REGISTRY()] = true;
291
- _isValidParentType[SERVICE()][REGISTRY()] = true;
292
- _isValidParentType[INSTANCE()][REGISTRY()] = true;
293
-
294
- // instance as parent
295
- _isValidParentType[PRODUCT()][INSTANCE()] = true;
296
- _isValidParentType[DISTRIBUTOR()][INSTANCE()] = true;
297
- _isValidParentType[ORACLE()][INSTANCE()] = true;
298
- _isValidParentType[POOL()][INSTANCE()] = true;
299
-
300
- // product as parent
301
- _isValidParentType[POLICY()][PRODUCT()] = true;
302
-
303
- // pool as parent
304
- _isValidParentType[BUNDLE()][POOL()] = true;
305
- _isValidParentType[STAKE()][POOL()] = true;
277
+ return address(0);
306
278
  }
307
279
 
280
+ // Internals called only in constructor
281
+
308
282
  /// @dev protocol registration used to anchor the dip ecosystem relations
309
- function _registerProtocol() virtual internal {
310
- uint256 protocolId = _chainNftInternal.PROTOCOL_NFT_ID();
311
- _chainNftInternal.mint(_protocolOwner, protocolId);
312
-
313
- NftId protocolNftid = toNftId(protocolId);
314
- ObjectInfo memory protocolInfo = ObjectInfo(
315
- protocolNftid,
316
- zeroNftId(), // parent nft id
317
- PROTOCOL(),
318
- address(0), // contract address
319
- _protocolOwner,
320
- "" // data
321
- );
322
-
323
- _info[protocolNftid] = protocolInfo;
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);
324
300
  }
325
301
 
326
302
  /// @dev registry registration
327
303
  /// might also register the global registry when not on mainnet
328
- function _registerRegistry() virtual internal returns (NftId registryNftId) {
329
- uint256 registryId = _chainNftInternal.calculateTokenId(2);
330
- registryNftId = toNftId(registryId);
304
+ function _registerRegistry()
305
+ private
306
+ {
307
+ uint256 registryId = _chainNft.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID);
308
+ NftId registryNftId = toNftId(registryId);
309
+ NftId parentNftId;
331
310
 
332
- // we're not the global registry
333
- if(registryId != _chainNftInternal.GLOBAL_REGISTRY_ID()) {
311
+ if(registryId != _chainNft.GLOBAL_REGISTRY_ID())
312
+ {// we're not the global registry
334
313
  _registerGlobalRegistry();
314
+ parentNftId = toNftId(_chainNft.GLOBAL_REGISTRY_ID());
315
+ }
316
+ else
317
+ {// we are global registry
318
+ parentNftId = toNftId(_chainNft.PROTOCOL_NFT_ID());
335
319
  }
336
320
 
337
- _chainNftInternal.mint(_protocolOwner, registryId);
338
- _registerObjectInfo(this, registryNftId);
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);
339
334
  }
340
335
 
341
-
342
336
  /// @dev global registry registration for non mainnet registries
343
- function _registerGlobalRegistry() virtual internal {
344
- uint256 globalRegistryId = _chainNftInternal.GLOBAL_REGISTRY_ID();
345
- _chainNftInternal.mint(_protocolOwner, globalRegistryId);
346
-
337
+ function _registerGlobalRegistry()
338
+ private
339
+ {
340
+ uint256 globalRegistryId = _chainNft.GLOBAL_REGISTRY_ID();
347
341
  NftId globalRegistryNftId = toNftId(globalRegistryId);
348
- ObjectInfo memory globalRegistryInfo = ObjectInfo(
349
- globalRegistryNftId,
350
- toNftId(_chainNftInternal.PROTOCOL_NFT_ID()),
351
- REGISTRY(),
352
- address(0), // contract address
353
- _protocolOwner,
354
- "" // data
355
- );
356
-
357
- _info[globalRegistryNftId] = globalRegistryInfo;
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);
358
354
  }
359
355
 
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;
360
368
 
361
- function _registerObjectInfo(
362
- IRegisterable registerable,
363
- NftId nftId
364
- ) internal virtual {
365
- address objectAddress = address(registerable);
366
- ObjectInfo memory info = ObjectInfo(
367
- nftId,
368
- registerable.getParentNftId(),
369
- registerable.getType(),
370
- objectAddress,
371
- registerable.getOwner(),
372
- registerable.getData()
373
- );
369
+ // registry as parent, ONLY approved
370
+ _isValidContractCombination[INSTANCE()][REGISTRY()] = true;
374
371
 
375
- _info[nftId] = info;
376
- _nftIdByAddress[objectAddress] = nftId;
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
377
 
378
- // add logging
379
- }
378
+ // product as parent, ONLY approved
379
+ _isValidObjectCombination[POLICY()][PRODUCT()] = true;
380
380
 
381
- }
381
+ // pool as parent, ONLY approved
382
+ _isValidObjectCombination[BUNDLE()][POOL()] = true;
383
+ _isValidObjectCombination[STAKE()][POOL()] = true;
384
+ }
385
+ }