@etherisc/gif-next 0.0.2-96853ac-143 → 0.0.2-984cc08-642

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