@etherisc/gif-next 0.0.2-71f849b → 0.0.2-72dc555-736

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