@etherisc/gif-next 0.0.2-aa0bd77 → 0.0.2-aad7ee0-660

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