@etherisc/gif-next 0.0.2-ebbe63d → 0.0.2-ebf1a6b-485

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 (329) hide show
  1. package/README.md +524 -2
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +774 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +1279 -0
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/components/IComponent.sol/IComponent.json +447 -0
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +829 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +1029 -0
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +672 -0
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +4 -0
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +1451 -0
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +4 -0
  17. package/artifacts/contracts/components/Product.sol/Product.json +1099 -0
  18. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  19. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +764 -0
  20. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  21. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +185 -0
  22. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +4 -0
  23. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +2422 -0
  24. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  25. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +509 -0
  26. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +4 -0
  27. package/artifacts/contracts/instance/Instance.sol/Instance.json +3326 -0
  28. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  29. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +984 -0
  30. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  31. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1355 -0
  32. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  33. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +1046 -0
  34. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  35. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +693 -0
  36. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  37. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +261 -0
  38. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  39. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +552 -0
  40. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  41. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +429 -0
  42. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  43. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.json +115 -0
  44. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  45. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +502 -0
  46. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  47. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  48. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  49. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +254 -0
  50. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  51. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.json +10 -0
  52. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  53. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.json +10 -0
  54. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  55. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.json +10 -0
  56. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  57. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.json +10 -0
  58. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  59. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.json +10 -0
  60. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  61. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.json +10 -0
  62. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  63. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +968 -0
  64. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  65. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +665 -0
  66. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  67. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1096 -0
  68. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +661 -0
  70. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  71. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +754 -0
  72. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  73. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +637 -0
  74. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  75. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1553 -0
  76. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  77. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +793 -0
  78. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  79. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +556 -0
  80. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  81. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +633 -0
  82. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  83. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +409 -0
  84. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  85. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +858 -0
  86. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  87. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +519 -0
  88. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  89. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +347 -0
  90. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  91. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +384 -0
  92. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  93. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1000 -0
  94. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  95. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +689 -0
  96. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  97. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +727 -0
  98. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  99. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +649 -0
  100. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  101. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +777 -0
  102. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  103. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +649 -0
  104. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +4 -0
  105. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +771 -0
  106. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +4 -0
  107. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +737 -0
  108. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  109. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +890 -0
  110. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  111. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  112. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +4 -0
  113. package/artifacts/contracts/registry/Registry.sol/Registry.json +839 -0
  114. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  115. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  116. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  117. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1177 -0
  118. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  119. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +670 -0
  120. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  121. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
  122. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  123. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +498 -0
  124. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  125. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  126. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  127. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +73 -0
  128. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  129. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +138 -0
  130. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  131. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +129 -0
  132. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  133. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +188 -0
  134. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  135. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.json +48 -0
  136. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  137. package/artifacts/contracts/shared/IService.sol/IService.json +269 -0
  138. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  139. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +55 -0
  140. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  141. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +251 -0
  142. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  143. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
  144. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  145. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +582 -0
  146. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  147. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +352 -0
  148. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  149. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
  150. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  151. package/artifacts/contracts/shared/Service.sol/Service.json +425 -0
  152. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  153. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  154. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  155. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  156. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  157. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +78 -0
  158. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  159. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
  160. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  161. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +383 -0
  162. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  163. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
  164. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  165. package/artifacts/contracts/test/TestService.sol/TestService.json +521 -0
  166. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  167. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +376 -0
  168. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  169. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
  170. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  171. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +104 -0
  172. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  173. package/artifacts/contracts/test/Usdc.sol/USDC.json +376 -0
  174. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  175. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  176. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  177. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +174 -0
  178. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +4 -0
  179. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +10 -0
  180. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  181. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
  182. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  183. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  184. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  185. package/artifacts/contracts/types/Fee.sol/FeeLib.json +257 -0
  186. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  187. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +125 -0
  188. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +4 -0
  189. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +153 -0
  190. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  191. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +33 -0
  192. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  193. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  194. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  195. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +92 -0
  196. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  197. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
  198. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  199. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  200. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  201. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  202. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  203. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
  204. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  205. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -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 +4 -0
  209. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +267 -0
  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/Component.sol +221 -0
  219. package/contracts/components/Distribution.sol +293 -0
  220. package/contracts/components/IComponent.sol +68 -0
  221. package/contracts/components/IDistributionComponent.sol +79 -0
  222. package/contracts/components/IPoolComponent.sol +151 -0
  223. package/contracts/components/IProductComponent.sol +40 -0
  224. package/contracts/components/Pool.sol +378 -0
  225. package/contracts/components/Product.sol +289 -0
  226. package/contracts/instance/BundleManager.sol +125 -0
  227. package/contracts/instance/Cloneable.sol +46 -0
  228. package/contracts/instance/IInstance.sol +92 -0
  229. package/contracts/instance/IInstanceService.sol +59 -0
  230. package/contracts/instance/Instance.sol +291 -0
  231. package/contracts/instance/InstanceAccessManager.sol +297 -0
  232. package/contracts/instance/InstanceReader.sol +293 -0
  233. package/contracts/instance/InstanceService.sol +490 -0
  234. package/contracts/instance/InstanceServiceManager.sol +54 -0
  235. package/contracts/instance/ObjectManager.sol +84 -0
  236. package/contracts/instance/base/ComponentService.sol +134 -0
  237. package/contracts/instance/base/IKeyValueStore.sol +49 -0
  238. package/contracts/instance/base/ILifecycle.sol +30 -0
  239. package/contracts/instance/base/KeyValueStore.sol +172 -0
  240. package/contracts/instance/base/Lifecycle.sol +100 -0
  241. package/contracts/instance/module/IAccess.sol +47 -0
  242. package/contracts/instance/module/IBundle.sol +21 -0
  243. package/contracts/instance/module/IDistribution.sol +41 -0
  244. package/contracts/instance/module/IPolicy.sol +72 -0
  245. package/contracts/instance/module/IRisk.sol +11 -0
  246. package/contracts/instance/module/ISetup.sol +46 -0
  247. package/contracts/instance/module/ITreasury.sol +23 -0
  248. package/contracts/instance/service/ApplicationService.sol +349 -0
  249. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  250. package/contracts/instance/service/BundleService.sol +299 -0
  251. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  252. package/contracts/instance/service/ClaimService.sol +151 -0
  253. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  254. package/contracts/instance/service/DistributionService.sol +394 -0
  255. package/contracts/instance/service/DistributionServiceManager.sol +51 -0
  256. package/contracts/instance/service/IApplicationService.sol +82 -0
  257. package/contracts/instance/service/IBundleService.sol +55 -0
  258. package/contracts/instance/service/IClaimService.sol +61 -0
  259. package/contracts/instance/service/IDistributionService.sol +86 -0
  260. package/contracts/instance/service/IPolicyService.sol +70 -0
  261. package/contracts/instance/service/IPoolService.sol +20 -0
  262. package/contracts/instance/service/IProductService.sol +40 -0
  263. package/contracts/instance/service/PolicyService.sol +402 -0
  264. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  265. package/contracts/instance/service/PoolService.sol +109 -0
  266. package/contracts/instance/service/PoolServiceManager.sol +51 -0
  267. package/contracts/instance/service/ProductService.sol +233 -0
  268. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  269. package/contracts/registry/ChainNft.sol +202 -0
  270. package/contracts/registry/IRegistry.sol +99 -0
  271. package/contracts/registry/IRegistryService.sol +67 -0
  272. package/contracts/registry/ITransferInterceptor.sol +6 -0
  273. package/contracts/registry/Registry.sol +464 -0
  274. package/contracts/registry/RegistryAccessManager.sol +216 -0
  275. package/contracts/registry/RegistryService.sol +283 -0
  276. package/contracts/registry/RegistryServiceManager.sol +62 -0
  277. package/contracts/registry/ReleaseManager.sol +322 -0
  278. package/contracts/registry/TokenRegistry.sol +116 -0
  279. package/contracts/shared/ContractDeployerLib.sol +72 -0
  280. package/contracts/shared/ERC165.sol +27 -0
  281. package/contracts/shared/INftOwnable.sol +23 -0
  282. package/contracts/shared/IPolicyHolder.sol +26 -0
  283. package/contracts/shared/IRegisterable.sol +15 -0
  284. package/contracts/shared/IRegistryLinked.sol +12 -0
  285. package/contracts/shared/IService.sol +18 -0
  286. package/contracts/shared/IVersionable.sol +53 -0
  287. package/contracts/shared/NftOwnable.sol +120 -0
  288. package/contracts/shared/PolicyHolder.sol +81 -0
  289. package/contracts/shared/ProxyManager.sol +169 -0
  290. package/contracts/shared/Registerable.sol +74 -0
  291. package/contracts/shared/RegistryLinked.sol +48 -0
  292. package/contracts/shared/Service.sol +58 -0
  293. package/contracts/shared/TokenHandler.sol +27 -0
  294. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  295. package/contracts/shared/Versionable.sol +59 -0
  296. package/contracts/test/TestFee.sol +25 -0
  297. package/contracts/test/TestRegisterable.sol +18 -0
  298. package/contracts/test/TestRoleId.sol +14 -0
  299. package/contracts/test/TestService.sol +25 -0
  300. package/contracts/{Dip.sol → test/TestToken.sol} +5 -5
  301. package/contracts/test/TestVersion.sol +44 -0
  302. package/contracts/test/TestVersionable.sol +17 -0
  303. package/contracts/test/Usdc.sol +26 -0
  304. package/contracts/types/AddressSet.sol +58 -0
  305. package/contracts/types/Blocknumber.sol +118 -0
  306. package/contracts/types/ChainId.sol +38 -0
  307. package/contracts/types/ClaimId.sol +52 -0
  308. package/contracts/types/DistributorType.sol +55 -0
  309. package/contracts/types/Fee.sol +56 -0
  310. package/contracts/types/Key32.sol +50 -0
  311. package/contracts/types/NftId.sol +72 -0
  312. package/contracts/types/NftIdSet.sol +62 -0
  313. package/contracts/types/NumberId.sol +52 -0
  314. package/contracts/types/ObjectType.sol +156 -0
  315. package/contracts/types/PayoutId.sol +54 -0
  316. package/contracts/types/Referral.sol +85 -0
  317. package/contracts/types/RiskId.sol +43 -0
  318. package/contracts/types/RoleId.sol +95 -0
  319. package/contracts/types/Seconds.sol +54 -0
  320. package/contracts/types/StateId.sol +105 -0
  321. package/contracts/types/Timestamp.sol +126 -0
  322. package/contracts/types/UFixed.sol +325 -0
  323. package/contracts/types/Version.sol +107 -0
  324. package/package.json +26 -10
  325. package/artifacts/contracts/Dip.sol/DIP.dbg.json +0 -4
  326. package/artifacts/contracts/Dip.sol/DIP.json +0 -338
  327. package/artifacts/contracts/Lock.sol/Lock.dbg.json +0 -4
  328. package/artifacts/contracts/Lock.sol/Lock.json +0 -74
  329. package/contracts/Lock.sol +0 -34
@@ -0,0 +1,99 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
+
6
+ import {NftId} from "../types/NftId.sol";
7
+ import {ObjectType} from "../types/ObjectType.sol";
8
+ import {VersionPart} from "../types/Version.sol";
9
+ import {Timestamp} from "../types/Timestamp.sol";
10
+
11
+ interface IRegistry is IERC165 {
12
+
13
+ event LogRegistration(NftId nftId, NftId parentNftId, ObjectType objectType, bool isInterceptor, address objectAddress, address initialOwner);
14
+ event LogServiceRegistration(VersionPart majorVersion, ObjectType domain);
15
+
16
+ // registerService()
17
+ error CallerNotReleaseManager();
18
+ error ServiceAlreadyRegistered(address service);
19
+
20
+ // register()
21
+ error CallerNotRegistryService();
22
+ error ServiceRegistration();
23
+
24
+ // registerWithCustomTypes()
25
+ error CoreTypeRegistration();
26
+
27
+ // _register()
28
+ error ZeroParentAddress();
29
+ error InvalidTypesCombination(ObjectType objectType, ObjectType parentType);
30
+ error ContractAlreadyRegistered(address objectAddress);
31
+
32
+ struct ObjectInfo {
33
+ NftId nftId;
34
+ NftId parentNftId;
35
+ ObjectType objectType;
36
+ bool isInterceptor;
37
+ address objectAddress;
38
+ address initialOwner;
39
+ bytes data;
40
+ }// TODO delete nftId and initialOwner(if not used) from struct
41
+ // TODO strong disagree, keep nftId there (lets keep get object info return object consistent)
42
+
43
+ struct ReleaseInfo {
44
+ ObjectType[] domains;
45
+ Timestamp createdAt;
46
+ //Timestamp updatedAt;
47
+ }
48
+
49
+ function registerService(
50
+ ObjectInfo memory serviceInfo,
51
+ VersionPart serviceVersion,
52
+ ObjectType serviceDomain
53
+ ) external returns(NftId nftId);
54
+
55
+ function register(ObjectInfo memory info) external returns (NftId nftId);
56
+
57
+ function registerWithCustomType(ObjectInfo memory info) external returns (NftId nftId);
58
+
59
+ function getInitialVersion() external view returns (VersionPart);
60
+
61
+ function getNextVersion() external view returns (VersionPart);
62
+
63
+ function getLatestVersion() external view returns (VersionPart);
64
+
65
+ function getReleaseInfo(VersionPart version) external view returns (ReleaseInfo memory);
66
+
67
+ function getObjectCount() external view returns (uint256);
68
+
69
+ function getNftId() external view returns (NftId nftId);
70
+
71
+ function getNftId(address objectAddress) external view returns (NftId nftId);
72
+
73
+ function ownerOf(NftId nftId) external view returns (address);
74
+
75
+ function ownerOf(address contractAddress) external view returns (address);
76
+
77
+ function getObjectInfo(NftId nftId) external view returns (ObjectInfo memory info);
78
+
79
+ function getObjectInfo(address object) external view returns (ObjectInfo memory info);
80
+
81
+ function isRegistered(NftId nftId) external view returns (bool);
82
+
83
+ function isRegistered(address contractAddress) external view returns (bool);
84
+
85
+ function isRegisteredService(address contractAddress) external view returns (bool);
86
+
87
+ function isValidRelease(VersionPart version) external view returns (bool);
88
+
89
+ function getServiceAddress(
90
+ ObjectType serviceDomain,
91
+ VersionPart releaseVersion
92
+ ) external view returns (address serviceAddress);
93
+
94
+ function getReleaseManagerAddress() external view returns (address);
95
+
96
+ function getChainNftAddress() external view returns (address);
97
+
98
+ function getOwner() external view returns (address);
99
+ }
@@ -0,0 +1,67 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
5
+
6
+ import {NftId} from "../types/NftId.sol";
7
+ import {ObjectType} from "../types/ObjectType.sol";
8
+ import {RoleId} from "../types/RoleId.sol";
9
+ import {IService} from "../shared/IService.sol";
10
+ import {IRegistry} from "./IRegistry.sol";
11
+
12
+ import {IRegisterable} from "../shared/IRegisterable.sol";
13
+ import {IComponent} from "../components/IComponent.sol";
14
+
15
+ interface IRegistryService is
16
+ IService,
17
+ IAccessManaged
18
+ {
19
+ error SelfRegistration();
20
+ error NotRegistryOwner();
21
+
22
+ error NotService();
23
+ error NotInstance();
24
+ error NotProduct();
25
+ error NotPool();
26
+ error NotDistribution();
27
+
28
+ error UnexpectedRegisterableType(ObjectType expected, ObjectType found);
29
+ error NotRegisterableOwner(address expectedOwner);
30
+ error RegisterableOwnerIsZero();
31
+ error RegisterableOwnerIsRegistered();
32
+ error InvalidInitialOwner(address initialOwner);
33
+ error InvalidAddress(address registerableAddress);
34
+
35
+ struct FunctionConfig
36
+ {
37
+ ObjectType serviceDomain;
38
+ bytes4[] selectors;
39
+ }
40
+
41
+ function getFunctionConfigs()
42
+ external
43
+ pure
44
+ returns(
45
+ FunctionConfig[] memory config
46
+ );
47
+
48
+ // TODO used by service -> add owner arg
49
+ function registerInstance(IRegisterable instance, address owner)
50
+ external returns(IRegistry.ObjectInfo memory info);
51
+
52
+ function registerProduct(IComponent product, address owner)
53
+ external returns(IRegistry.ObjectInfo memory info);
54
+
55
+ function registerPool(IComponent pool, address owner)
56
+ external returns(IRegistry.ObjectInfo memory info);
57
+
58
+ function registerDistribution(IComponent distribution, address owner)
59
+ external returns(IRegistry.ObjectInfo memory info);
60
+
61
+ function registerDistributor(IRegistry.ObjectInfo memory info) external returns(NftId nftId);
62
+
63
+ function registerPolicy(IRegistry.ObjectInfo memory info) external returns(NftId nftId);
64
+
65
+ function registerBundle(IRegistry.ObjectInfo memory info) external returns(NftId nftId);
66
+ }
67
+
@@ -0,0 +1,6 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ interface ITransferInterceptor {
5
+ function nftTransferFrom(address from, address to, uint256 tokenId) external;
6
+ }
@@ -0,0 +1,464 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
+
6
+ import {NftId, toNftId, zeroNftId} from "../types/NftId.sol";
7
+ import {VersionPart} from "../types/Version.sol";
8
+ import {ObjectType, PROTOCOL, REGISTRY, TOKEN, SERVICE, INSTANCE, STAKE, PRODUCT, DISTRIBUTION, DISTRIBUTOR, ORACLE, POOL, POLICY, BUNDLE} from "../types/ObjectType.sol";
9
+
10
+ import {ChainNft} from "./ChainNft.sol";
11
+ import {IRegistry} from "./IRegistry.sol";
12
+ import {ReleaseManager} from "./ReleaseManager.sol";
13
+
14
+ // IMPORTANT
15
+ // Each NFT minted by registry is accosiated with:
16
+ // 1) NFT owner
17
+ // 2) registred contract OR object stored in registered (parent) contract
18
+ // Four registration flows:
19
+ // 1) IService address by release manager (SERVICE of domain SERVICE aka registry service aka release creation)
20
+ // 2) IService address by release manager (SERVICE of domain !SERVICE aka regular service)
21
+ // 3) IRegisterable address by regular service (INSTANCE, PRODUCT, POOL, DISTRIBUTION, ORACLE)
22
+ // 4) state object by regular service (POLICY, BUNDLE, STAKE)
23
+
24
+ contract Registry is
25
+ IRegistry
26
+ {
27
+ address public constant NFT_LOCK_ADDRESS = address(0x1);
28
+ uint256 public constant REGISTRY_TOKEN_SEQUENCE_ID = 2;
29
+ string public constant EMPTY_URI = "";
30
+
31
+ mapping(NftId nftId => ObjectInfo info) private _info;
32
+ mapping(address object => NftId nftId) private _nftIdByAddress;
33
+
34
+ mapping(VersionPart version => mapping(ObjectType serviceDomain => address)) private _service;
35
+
36
+ mapping(ObjectType objectType => bool) private _coreTypes;
37
+
38
+ mapping(ObjectType objectType => mapping(
39
+ ObjectType parentType => bool)) private _coreContractCombinations;
40
+
41
+ mapping(ObjectType objectType => mapping(
42
+ ObjectType parentType => bool)) private _coreObjectCombinations;
43
+
44
+ NftId private _registryNftId;
45
+ ChainNft private _chainNft;
46
+
47
+ ReleaseManager private _releaseManager;
48
+
49
+ modifier onlyRegistryService() {
50
+ if(!_releaseManager.isActiveRegistryService(msg.sender)) {
51
+ revert CallerNotRegistryService();
52
+ }
53
+ _;
54
+ }
55
+
56
+ modifier onlyReleaseManager() {
57
+ if(msg.sender != address(_releaseManager)) {
58
+ revert CallerNotReleaseManager();
59
+ }
60
+ _;
61
+ }
62
+
63
+ constructor()
64
+ {
65
+ _releaseManager = ReleaseManager(msg.sender);
66
+
67
+ // deploy NFT
68
+ _chainNft = new ChainNft(address(this));
69
+
70
+ // initial registry setup
71
+ _registerProtocol();
72
+ _registerRegistry();
73
+
74
+ // set object types and object parent relations
75
+ _setupValidCoreTypesAndCombinations();
76
+ }
77
+
78
+ function registerService(
79
+ ObjectInfo memory info,
80
+ VersionPart version,
81
+ ObjectType domain
82
+ )
83
+ external
84
+ onlyReleaseManager
85
+ returns(NftId nftId)
86
+ {
87
+ /* must be guaranteed by release manager
88
+ if(info.objectType != SERVICE()) {
89
+ revert();
90
+ }
91
+ if(info.parentType != REGISTRY()) {
92
+ revert();
93
+ }
94
+ info.initialOwner == NFT_LOCK_ADDRESS <- if services are access managed
95
+ */
96
+
97
+ if(_service[version][domain] > address(0)) {
98
+ revert ServiceAlreadyRegistered(info.objectAddress);
99
+ }
100
+
101
+ _service[version][domain] = info.objectAddress; // nftId;
102
+
103
+ nftId = _register(info);
104
+
105
+ emit LogServiceRegistration(version, domain);
106
+ }
107
+
108
+ function register(ObjectInfo memory info)
109
+ external
110
+ onlyRegistryService
111
+ returns(NftId nftId)
112
+ {
113
+ ObjectType objectType = info.objectType;
114
+ ObjectType parentType = _info[info.parentNftId].objectType;
115
+
116
+ // TODO do not need it here -> SERVICE is no longer part of _coreContractCombinations
117
+ // no service registrations
118
+ if(objectType == SERVICE()) {
119
+ revert ServiceRegistration();
120
+ }
121
+
122
+ // only valid core types combinations
123
+ if(info.objectAddress == address(0))
124
+ {
125
+ if(_coreObjectCombinations[objectType][parentType] == false) {
126
+ revert InvalidTypesCombination(objectType, parentType);
127
+ }
128
+ }
129
+ else
130
+ {
131
+ if(_coreContractCombinations[objectType][parentType] == false) {
132
+ revert InvalidTypesCombination(objectType, parentType);
133
+ }
134
+ }
135
+
136
+ nftId = _register(info);
137
+ }
138
+
139
+ function registerWithCustomType(ObjectInfo memory info)
140
+ external
141
+ onlyRegistryService
142
+ returns(NftId nftId)
143
+ {
144
+ ObjectType objectType = info.objectType;
145
+ ObjectType parentType = _info[info.parentNftId].objectType;
146
+
147
+ if(_coreTypes[objectType]) {
148
+ revert CoreTypeRegistration();
149
+ }
150
+
151
+ if(
152
+
153
+ parentType == PROTOCOL() ||
154
+ parentType == REGISTRY() ||
155
+ parentType == SERVICE()
156
+ ) {
157
+ revert InvalidTypesCombination(objectType, parentType);
158
+ }
159
+
160
+ _register(info);
161
+ }
162
+
163
+
164
+ /// @dev earliest GIF major version
165
+ function getInitialVersion() external view returns (VersionPart) {
166
+ return _releaseManager.getInitialVersion();
167
+ }
168
+
169
+ // TODO make distinction between active an not yet active version
170
+ // need to be thought trough, not yet clear if necessary
171
+ // need to answer question: what is the latest version during the upgrade process?
172
+ // likely setting up a new gif version does not fit into a single tx
173
+ // in this case we might want to have a period where the latest version is
174
+ // in the process of being set up while the latest active version is 1 major release smaller
175
+ /// @dev latest GIF major version (might not yet be active)
176
+ function getNextVersion() external view returns (VersionPart) {
177
+ return _releaseManager.getNextVersion();
178
+ }
179
+
180
+ /// @dev latest active GIF release version
181
+ function getLatestVersion() external view returns (VersionPart) {
182
+ return _releaseManager.getLatestVersion();
183
+ }
184
+
185
+ function getReleaseInfo(VersionPart version) external view returns (ReleaseInfo memory) {
186
+ return _releaseManager.getReleaseInfo(version);
187
+ }
188
+
189
+ function getObjectCount() external view override returns (uint256) {
190
+ return _chainNft.totalSupply();
191
+ }
192
+
193
+ function getReleaseManagerAddress() external view returns (address) {
194
+ return address(_releaseManager);
195
+ }
196
+
197
+ function getNftId() external view returns (NftId nftId) {
198
+ return _registryNftId;
199
+ }
200
+
201
+ function getNftId(address object) external view override returns (NftId id) {
202
+ return _nftIdByAddress[object];
203
+ }
204
+
205
+ function ownerOf(NftId nftId) public view override returns (address) {
206
+ return _chainNft.ownerOf(nftId.toInt());
207
+ }
208
+
209
+ function ownerOf(address contractAddress) public view returns (address) {
210
+ return _chainNft.ownerOf(_nftIdByAddress[contractAddress].toInt());
211
+ }
212
+
213
+ function getObjectInfo(NftId nftId) external view override returns (ObjectInfo memory) {
214
+ return _info[nftId];
215
+ }
216
+
217
+ function getObjectInfo(address object) external view override returns (ObjectInfo memory) {
218
+ return _info[_nftIdByAddress[object]];
219
+ }
220
+
221
+ function isRegistered(NftId nftId) public view override returns (bool) {
222
+ return _info[nftId].objectType.gtz();
223
+ }
224
+
225
+ function isRegistered(address object) external view override returns (bool) {
226
+ return _nftIdByAddress[object].gtz();
227
+ }
228
+
229
+ function isRegisteredService(address object) external view override returns (bool) {
230
+ return _info[_nftIdByAddress[object]].objectType == SERVICE();
231
+ }
232
+
233
+ function isValidRelease(VersionPart version) external view returns (bool)
234
+ {
235
+ return _releaseManager.isValidRelease(version);
236
+ }
237
+
238
+ function getServiceAddress(
239
+ ObjectType serviceDomain,
240
+ VersionPart releaseVersion
241
+ ) external view returns (address service)
242
+ {
243
+ // TODO how can I get service address while release is not validated/activated ?!! -> user will check validity of release on its own
244
+ //if(_releaseManager.isValidRelease(releaseVersion)) {
245
+ service = _service[releaseVersion][serviceDomain];
246
+ //}
247
+ }
248
+
249
+ function getChainNftAddress() external view override returns (address) {
250
+ return address(_chainNft);
251
+ }
252
+
253
+ function getOwner() public view returns (address owner) {
254
+ return ownerOf(address(this));
255
+ }
256
+
257
+ // IERC165
258
+
259
+ function supportsInterface(bytes4 interfaceId) external pure returns (bool) {
260
+ if(interfaceId == type(IERC165).interfaceId || interfaceId == type(IRegistry).interfaceId) {
261
+ return true;
262
+ }
263
+
264
+ return false;
265
+ }
266
+
267
+ // Internals
268
+
269
+ /// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
270
+ // TODO registration of precompile addresses
271
+ function _register(ObjectInfo memory info)
272
+ internal
273
+ returns(NftId nftId)
274
+ {
275
+ ObjectType objectType = info.objectType;
276
+ NftId parentNftId = info.parentNftId;
277
+ ObjectInfo memory parentInfo = _info[parentNftId];
278
+ ObjectType parentType = parentInfo.objectType; // see function header
279
+ address parentAddress = parentInfo.objectAddress;
280
+
281
+ // parent is contract -> need to check? -> check before minting
282
+ // special case: global registry nft as parent when not on mainnet -> global registry address is 0
283
+ // special case: when parentNftId == _chainNft.mint(), check for zero parent address before mint
284
+ // special case: when parentNftId == _chainNft.mint() && objectAddress == initialOwner
285
+ if(parentAddress == address(0)) {
286
+ revert ZeroParentAddress();
287
+ }
288
+
289
+ address interceptor = _getInterceptor(info.isInterceptor, info.objectAddress, parentInfo.isInterceptor, parentAddress);
290
+
291
+ // TODO does external call
292
+ // compute next nftId, do all checks and stores, mint() at most end...
293
+ uint256 mintedTokenId = _chainNft.mint(
294
+ info.initialOwner,
295
+ interceptor,
296
+ EMPTY_URI);
297
+ nftId = toNftId(mintedTokenId);
298
+
299
+ // TODO move nftId out of info struct
300
+ // getters by nftId -> return struct without nftId
301
+ // getters by address -> return nftId AND struct
302
+ info.nftId = nftId;
303
+ _info[nftId] = info;
304
+
305
+ if(info.objectAddress > address(0))
306
+ {
307
+ address contractAddress = info.objectAddress;
308
+
309
+ if(_nftIdByAddress[contractAddress].gtz()) {
310
+ revert ContractAlreadyRegistered(contractAddress);
311
+ }
312
+
313
+ _nftIdByAddress[contractAddress] = nftId;
314
+ }
315
+
316
+ emit LogRegistration(nftId, parentNftId, objectType, info.isInterceptor, info.objectAddress, info.initialOwner);
317
+ }
318
+
319
+ /// @dev obtain interceptor address for this nft if applicable, address(0) otherwise
320
+ function _getInterceptor(
321
+ bool isInterceptor,
322
+ address objectAddress,
323
+ bool parentIsInterceptor,
324
+ address parentObjectAddress
325
+ )
326
+ internal
327
+ view
328
+ returns (address interceptor)
329
+ {
330
+ if (objectAddress == address(0)) {
331
+ if (parentIsInterceptor) {
332
+ return parentObjectAddress;
333
+ } else {
334
+ return address(0);
335
+ }
336
+ }
337
+
338
+ if (isInterceptor) {
339
+ return objectAddress;
340
+ }
341
+
342
+ return address(0);
343
+ }
344
+
345
+ // Internals called only in constructor
346
+
347
+ /// @dev protocol registration used to anchor the dip ecosystem relations
348
+ function _registerProtocol()
349
+ private
350
+ {
351
+ uint256 protocolId = _chainNft.PROTOCOL_NFT_ID();
352
+ NftId protocolNftId = toNftId(protocolId);
353
+
354
+ _info[protocolNftId] = ObjectInfo({
355
+ nftId: protocolNftId,
356
+ parentNftId: zeroNftId(),
357
+ objectType: PROTOCOL(),
358
+ isInterceptor: false,
359
+ objectAddress: address(0),
360
+ initialOwner: NFT_LOCK_ADDRESS,
361
+ data: ""
362
+ });
363
+
364
+ _chainNft.mint(NFT_LOCK_ADDRESS, protocolId);
365
+ }
366
+
367
+ /// @dev registry registration
368
+ /// might also register the global registry when not on mainnet
369
+ function _registerRegistry()
370
+ private
371
+ {
372
+ uint256 registryId = _chainNft.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID);
373
+ NftId registryNftId = toNftId(registryId);
374
+ NftId parentNftId;
375
+
376
+ if(registryId != _chainNft.GLOBAL_REGISTRY_ID())
377
+ {// we're not the global registry
378
+ _registerGlobalRegistry();
379
+ parentNftId = toNftId(_chainNft.GLOBAL_REGISTRY_ID());
380
+ }
381
+ else
382
+ {// we are global registry
383
+ parentNftId = toNftId(_chainNft.PROTOCOL_NFT_ID());
384
+ }
385
+
386
+ _info[registryNftId] = ObjectInfo({
387
+ nftId: registryNftId,
388
+ parentNftId: parentNftId,
389
+ objectType: REGISTRY(),
390
+ isInterceptor: false,
391
+ objectAddress: address(this),
392
+ initialOwner: NFT_LOCK_ADDRESS,
393
+ data: ""
394
+ });
395
+ _nftIdByAddress[address(this)] = registryNftId;
396
+ _registryNftId = registryNftId;
397
+
398
+ _chainNft.mint(NFT_LOCK_ADDRESS, registryId);
399
+ }
400
+
401
+ /// @dev global registry registration for non mainnet registries
402
+ function _registerGlobalRegistry()
403
+ private
404
+ {
405
+ uint256 globalRegistryId = _chainNft.GLOBAL_REGISTRY_ID();
406
+ NftId globalRegistryNftId = toNftId(globalRegistryId);
407
+
408
+ _info[globalRegistryNftId] = ObjectInfo({
409
+ nftId: globalRegistryNftId,
410
+ parentNftId: toNftId(_chainNft.PROTOCOL_NFT_ID()),
411
+ objectType: REGISTRY(),
412
+ isInterceptor: false,
413
+ objectAddress: address(0),
414
+ initialOwner: NFT_LOCK_ADDRESS,
415
+ data: ""
416
+ });
417
+
418
+ _chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
419
+ }
420
+
421
+ /// @dev defines which object - parent types relations are allowed to register
422
+ // IMPORTANT:
423
+ // 1) EACH object type MUST have only one parent type across ALL mappings
424
+ // 2) DO NOT use object type (e.g. POLCY, BUNDLE, STAKE) as parent type
425
+ // 3) DO NOT use REGISTRY as object type
426
+ // 2) DO NOT use PROTOCOL and "zeroObjectType"
427
+ function _setupValidCoreTypesAndCombinations()
428
+ private
429
+ {
430
+ _coreTypes[REGISTRY()] = true;
431
+ _coreTypes[SERVICE()] = true;
432
+ _coreTypes[TOKEN()] = true;
433
+ _coreTypes[INSTANCE()] = true;
434
+ _coreTypes[PRODUCT()] = true;
435
+ _coreTypes[POOL()] = true;
436
+ _coreTypes[DISTRIBUTION()] = true;
437
+ _coreTypes[POLICY()] = true;
438
+ _coreTypes[BUNDLE()] = true;
439
+ _coreTypes[STAKE()] = true;
440
+
441
+ // registry as parent, ONLY registry owner
442
+ //_coreContractCombinations[REGISTRY()][REGISTRY()] = true; // only for global regstry
443
+ _coreContractCombinations[TOKEN()][REGISTRY()] = true;
444
+ //_coreContractCombinations[SERVICE()][REGISTRY()] = true;// do not need it here -> registerService() registers exactly this combination
445
+
446
+ // registry as parent, ONLY approved
447
+ _coreContractCombinations[INSTANCE()][REGISTRY()] = true;
448
+
449
+ // instance as parent, ONLY approved
450
+ _coreContractCombinations[PRODUCT()][INSTANCE()] = true;
451
+ _coreContractCombinations[DISTRIBUTION()][INSTANCE()] = true;
452
+ _coreContractCombinations[ORACLE()][INSTANCE()] = true;
453
+ _coreContractCombinations[POOL()][INSTANCE()] = true;
454
+
455
+ _coreObjectCombinations[DISTRIBUTOR()][DISTRIBUTION()] = true;
456
+
457
+ // product as parent, ONLY approved
458
+ _coreObjectCombinations[POLICY()][PRODUCT()] = true;
459
+
460
+ // pool as parent, ONLY approved
461
+ _coreObjectCombinations[BUNDLE()][POOL()] = true;
462
+ _coreObjectCombinations[STAKE()][POOL()] = true;
463
+ }
464
+ }