@etherisc/gif-next 0.0.2-cc253b3 → 0.0.2-cc74a8b-656

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 (433) hide show
  1. package/README.md +359 -8
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
  3. package/artifacts/contracts/components/Component.sol/Component.json +694 -31
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +1329 -0
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/components/IComponent.sol/IComponent.json +605 -0
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +969 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +1064 -0
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +830 -0
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +1250 -87
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +1026 -90
  18. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  19. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  20. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  21. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +778 -0
  22. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  23. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +190 -0
  24. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  25. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1960 -485
  26. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  27. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +633 -0
  28. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  29. package/artifacts/contracts/instance/Instance.sol/Instance.json +2689 -459
  30. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  31. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +1330 -0
  32. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  33. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1289 -0
  34. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  35. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +1179 -0
  36. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  37. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +741 -0
  38. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  39. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +256 -0
  40. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  41. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +607 -0
  42. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  43. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +429 -0
  44. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  45. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.json +115 -0
  46. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  47. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +532 -0
  48. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  49. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +194 -0
  50. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  51. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +237 -0
  52. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  53. package/artifacts/contracts/instance/{access/IAccess.sol/IAccess.json → module/IBundle.sol/IBundle.json} +2 -2
  54. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  55. package/artifacts/contracts/instance/{component/IComponent.sol/IComponent.json → module/IComponents.sol/IComponents.json} +2 -2
  56. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  57. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.json +10 -0
  58. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  59. package/artifacts/contracts/instance/{policy → module}/IPolicy.sol/IPolicy.json +1 -1
  60. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  61. package/artifacts/contracts/instance/{pool/IPoolModule.sol/IPool.json → module/IRisk.sol/IRisk.json} +2 -2
  62. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  63. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.json +10 -0
  64. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  65. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.json +10 -0
  66. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  67. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +1039 -0
  68. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +673 -0
  70. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  71. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1231 -0
  72. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  73. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +721 -0
  74. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  75. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +817 -0
  76. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  77. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +641 -0
  78. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  79. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1798 -0
  80. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  81. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +805 -0
  82. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  83. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +622 -0
  84. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  85. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +659 -0
  86. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  87. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +475 -0
  88. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  89. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +1090 -0
  90. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  91. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +606 -0
  92. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  93. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +844 -0
  94. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  95. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +450 -0
  96. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  97. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1092 -0
  98. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  99. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +697 -0
  100. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  101. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +1237 -0
  102. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  103. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +661 -0
  104. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  105. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +840 -0
  106. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  107. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +653 -0
  108. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  109. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +252 -2
  110. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  111. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +536 -59
  112. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  113. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +866 -0
  114. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  115. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +52 -0
  116. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  117. package/artifacts/contracts/registry/Registry.sol/Registry.json +583 -72
  118. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  119. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  120. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  121. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1158 -0
  122. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  123. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +670 -0
  124. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  125. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +559 -0
  126. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  127. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +498 -0
  128. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  129. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  130. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  131. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +73 -0
  132. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  133. package/artifacts/contracts/{registry/Registry.sol/Registerable.json → shared/INftOwnable.sol/INftOwnable.json} +46 -74
  134. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  135. package/artifacts/contracts/{instance/product/IProductService.sol/IProductService.json → shared/IPolicyHolder.sol/IPolicyHolder.json} +68 -53
  136. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  137. package/artifacts/contracts/{instance/pool/PoolModule.sol/PoolModule.json → shared/IRegisterable.sol/IRegisterable.json} +106 -80
  138. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  139. package/artifacts/contracts/{registry/IRegistry.sol → shared/IRegistryLinked.sol}/IRegistryLinked.json +18 -19
  140. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  141. package/artifacts/contracts/shared/IService.sol/IService.json +335 -0
  142. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  143. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +55 -0
  144. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  145. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +251 -0
  146. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  147. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
  148. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  149. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +582 -0
  150. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  151. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +352 -0
  152. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  153. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
  154. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  155. package/artifacts/contracts/{registry/IChainNft.sol/IChainNft.json → shared/Service.sol/Service.json} +261 -217
  156. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  157. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  158. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  159. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  160. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  161. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +78 -0
  162. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  163. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
  164. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  165. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +383 -0
  166. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  167. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
  168. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  169. package/artifacts/contracts/test/TestService.sol/TestService.json +596 -0
  170. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  171. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +376 -0
  172. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  173. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
  174. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  175. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +104 -0
  176. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  177. package/artifacts/contracts/test/Usdc.sol/USDC.json +376 -0
  178. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  179. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  180. package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +4 -0
  181. package/artifacts/contracts/types/Amount.sol/AmountLib.json +161 -0
  182. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  183. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +174 -0
  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/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  187. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
  188. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  189. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  190. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  191. package/artifacts/contracts/types/Fee.sol/FeeLib.json +288 -0
  192. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  193. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +125 -0
  194. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  195. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +104 -6
  196. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  197. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +33 -0
  198. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  199. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  200. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  201. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +92 -0
  202. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  203. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
  204. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  205. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +142 -0
  206. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  207. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  208. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  209. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
  210. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  211. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  212. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +4 -0
  213. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +92 -0
  214. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +4 -0
  215. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +267 -0
  216. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  217. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  218. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  219. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +479 -0
  220. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  221. package/artifacts/contracts/types/Version.sol/VersionLib.json +177 -0
  222. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  223. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +49 -0
  224. package/contracts/components/Component.sol +231 -40
  225. package/contracts/components/Distribution.sol +280 -0
  226. package/contracts/components/IComponent.sol +76 -0
  227. package/contracts/components/IDistributionComponent.sol +71 -0
  228. package/contracts/components/IPoolComponent.sol +113 -0
  229. package/contracts/components/IProductComponent.sol +40 -0
  230. package/contracts/components/Pool.sol +292 -18
  231. package/contracts/components/Product.sol +260 -33
  232. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
  233. package/contracts/instance/BundleManager.sol +127 -0
  234. package/contracts/instance/Cloneable.sol +51 -0
  235. package/contracts/instance/IInstance.sol +93 -15
  236. package/contracts/instance/IInstanceService.sol +72 -0
  237. package/contracts/instance/Instance.sol +306 -43
  238. package/contracts/instance/InstanceAccessManager.sol +527 -0
  239. package/contracts/instance/InstanceReader.sol +291 -0
  240. package/contracts/instance/InstanceService.sol +495 -0
  241. package/contracts/instance/InstanceServiceManager.sol +54 -0
  242. package/contracts/instance/ObjectManager.sol +82 -0
  243. package/contracts/instance/base/ComponentService.sol +121 -0
  244. package/contracts/instance/base/IKeyValueStore.sol +49 -0
  245. package/contracts/instance/base/ILifecycle.sol +30 -0
  246. package/contracts/instance/base/KeyValueStore.sol +180 -0
  247. package/contracts/instance/base/Lifecycle.sol +109 -0
  248. package/contracts/instance/module/IAccess.sol +54 -0
  249. package/contracts/instance/module/IBundle.sol +23 -0
  250. package/contracts/instance/module/IComponents.sol +41 -0
  251. package/contracts/instance/module/IDistribution.sol +41 -0
  252. package/contracts/instance/module/IPolicy.sol +72 -0
  253. package/contracts/instance/module/IRisk.sol +11 -0
  254. package/contracts/instance/module/ISetup.sol +33 -0
  255. package/contracts/instance/module/ITreasury.sol +23 -0
  256. package/contracts/instance/service/ApplicationService.sol +350 -0
  257. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  258. package/contracts/instance/service/BundleService.sol +431 -0
  259. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  260. package/contracts/instance/service/ClaimService.sol +151 -0
  261. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  262. package/contracts/instance/service/DistributionService.sol +435 -0
  263. package/contracts/instance/service/DistributionServiceManager.sol +51 -0
  264. package/contracts/instance/service/IApplicationService.sol +82 -0
  265. package/contracts/instance/service/IBundleService.sol +93 -0
  266. package/contracts/instance/service/IClaimService.sol +61 -0
  267. package/contracts/instance/service/IDistributionService.sol +99 -0
  268. package/contracts/instance/service/IPolicyService.sol +72 -0
  269. package/contracts/instance/service/IPoolService.sol +99 -0
  270. package/contracts/instance/service/IProductService.sol +40 -0
  271. package/contracts/instance/service/PolicyService.sol +362 -0
  272. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  273. package/contracts/instance/service/PoolService.sol +303 -0
  274. package/contracts/instance/service/PoolServiceManager.sol +51 -0
  275. package/contracts/instance/service/ProductService.sol +210 -0
  276. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  277. package/contracts/registry/ChainNft.sol +145 -108
  278. package/contracts/registry/IRegistry.sol +80 -49
  279. package/contracts/registry/IRegistryService.sol +68 -0
  280. package/contracts/registry/ITransferInterceptor.sol +7 -0
  281. package/contracts/registry/Registry.sol +404 -119
  282. package/contracts/registry/RegistryAccessManager.sol +216 -0
  283. package/contracts/registry/RegistryService.sol +282 -0
  284. package/contracts/registry/RegistryServiceManager.sol +62 -0
  285. package/contracts/registry/ReleaseManager.sol +324 -0
  286. package/contracts/registry/TokenRegistry.sol +116 -0
  287. package/contracts/shared/ContractDeployerLib.sol +72 -0
  288. package/contracts/shared/ERC165.sol +27 -0
  289. package/contracts/shared/INftOwnable.sol +23 -0
  290. package/contracts/shared/IPolicyHolder.sol +26 -0
  291. package/contracts/shared/IRegisterable.sol +15 -0
  292. package/contracts/shared/IRegistryLinked.sol +12 -0
  293. package/contracts/shared/IService.sol +16 -0
  294. package/contracts/shared/IVersionable.sol +53 -0
  295. package/contracts/shared/NftOwnable.sol +120 -0
  296. package/contracts/shared/PolicyHolder.sol +81 -0
  297. package/contracts/shared/ProxyManager.sol +169 -0
  298. package/contracts/shared/Registerable.sol +74 -0
  299. package/contracts/shared/RegistryLinked.sol +48 -0
  300. package/contracts/shared/Service.sol +72 -0
  301. package/contracts/shared/TokenHandler.sol +33 -0
  302. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  303. package/contracts/shared/Versionable.sol +59 -0
  304. package/contracts/test/TestFee.sol +25 -0
  305. package/contracts/test/TestRegisterable.sol +18 -0
  306. package/contracts/test/TestRoleId.sol +14 -0
  307. package/contracts/test/TestService.sol +25 -0
  308. package/contracts/test/TestToken.sol +26 -0
  309. package/contracts/test/TestVersion.sol +44 -0
  310. package/contracts/test/TestVersionable.sol +17 -0
  311. package/contracts/test/Usdc.sol +26 -0
  312. package/contracts/types/AddressSet.sol +58 -0
  313. package/contracts/types/Amount.sol +60 -0
  314. package/contracts/types/Blocknumber.sol +119 -0
  315. package/contracts/types/ChainId.sol +24 -10
  316. package/contracts/types/ClaimId.sol +52 -0
  317. package/contracts/types/DistributorType.sol +55 -0
  318. package/contracts/types/Fee.sol +64 -0
  319. package/contracts/types/Key32.sol +50 -0
  320. package/contracts/types/NftId.sol +63 -9
  321. package/contracts/types/NftIdSet.sol +62 -0
  322. package/contracts/types/NumberId.sol +52 -0
  323. package/contracts/types/ObjectType.sol +157 -0
  324. package/contracts/types/PayoutId.sol +54 -0
  325. package/contracts/types/Referral.sol +89 -0
  326. package/contracts/types/RiskId.sol +43 -0
  327. package/contracts/types/RoleId.sol +97 -0
  328. package/contracts/types/Seconds.sol +54 -0
  329. package/contracts/types/StateId.sol +106 -0
  330. package/contracts/types/Timestamp.sol +127 -0
  331. package/contracts/types/UFixed.sol +326 -0
  332. package/contracts/types/Version.sol +108 -0
  333. package/package.json +21 -6
  334. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  335. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  336. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  337. package/artifacts/contracts/components/IPool.sol/IPoolComponent.json +0 -179
  338. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  339. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -192
  340. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  341. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  342. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  343. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  344. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  345. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  346. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  347. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  348. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  349. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  350. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  351. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  352. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  353. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  354. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  355. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  356. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  357. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +0 -50
  358. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  359. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  360. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  361. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  362. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  363. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  364. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  365. package/artifacts/contracts/instance/access/Access.sol/AccessModule.json +0 -400
  366. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  367. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  368. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  369. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  370. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  371. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  372. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.json +0 -336
  373. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  374. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.json +0 -327
  375. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  376. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -147
  377. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  378. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  379. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +0 -179
  380. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  381. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -245
  382. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  383. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -94
  384. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  385. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.json +0 -24
  386. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  387. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  388. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.json +0 -231
  389. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  390. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.json +0 -231
  391. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  392. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  393. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.json +0 -149
  394. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  395. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  396. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  397. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  398. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  399. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  400. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  401. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -167
  402. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  403. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  404. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +0 -24
  405. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  406. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +0 -166
  407. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  408. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  409. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  410. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  411. package/contracts/components/IPool.sol +0 -9
  412. package/contracts/components/IProduct.sol +0 -12
  413. package/contracts/experiment/errors/Require.sol +0 -33
  414. package/contracts/experiment/errors/Revert.sol +0 -39
  415. package/contracts/experiment/inheritance/A.sol +0 -56
  416. package/contracts/experiment/inheritance/B.sol +0 -23
  417. package/contracts/experiment/inheritance/C.sol +0 -28
  418. package/contracts/experiment/inheritance/IA.sol +0 -18
  419. package/contracts/experiment/inheritance/IB.sol +0 -9
  420. package/contracts/experiment/inheritance/IC.sol +0 -11
  421. package/contracts/experiment/types/TypeA.sol +0 -42
  422. package/contracts/experiment/types/TypeB.sol +0 -24
  423. package/contracts/instance/access/Access.sol +0 -218
  424. package/contracts/instance/access/IAccess.sol +0 -83
  425. package/contracts/instance/component/ComponentModule.sol +0 -248
  426. package/contracts/instance/component/IComponent.sol +0 -95
  427. package/contracts/instance/policy/IPolicy.sol +0 -66
  428. package/contracts/instance/policy/PolicyModule.sol +0 -107
  429. package/contracts/instance/pool/IPoolModule.sol +0 -41
  430. package/contracts/instance/pool/PoolModule.sol +0 -86
  431. package/contracts/instance/product/IProductService.sol +0 -46
  432. package/contracts/instance/product/ProductService.sol +0 -108
  433. package/contracts/registry/IChainNft.sol +0 -18
@@ -1,182 +1,467 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
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;
3
40
 
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";
41
+ mapping(ObjectType objectType => mapping(
42
+ ObjectType parentType => bool)) private _coreObjectCombinations;
8
43
 
9
- contract RegistryLinked is IRegistryLinked {
44
+ NftId private _registryNftId;
45
+ ChainNft private _chainNft;
10
46
 
11
- IRegistry internal _registry;
12
-
13
- constructor(address registry) {
14
- _registry = IRegistry(registry);
47
+ ReleaseManager private _releaseManager;
48
+
49
+ modifier onlyRegistryService() {
50
+ if(!_releaseManager.isActiveRegistryService(msg.sender)) {
51
+ revert CallerNotRegistryService();
52
+ }
53
+ _;
15
54
  }
16
55
 
17
- function getRegistry() external view override returns(IRegistry registry) {
18
- return _registry;
56
+ modifier onlyReleaseManager() {
57
+ if(msg.sender != address(_releaseManager)) {
58
+ revert CallerNotReleaseManager();
59
+ }
60
+ _;
19
61
  }
20
62
 
21
- }
63
+ constructor()
64
+ {
65
+ _releaseManager = ReleaseManager(msg.sender);
22
66
 
67
+ // deploy NFT
68
+ _chainNft = new ChainNft(address(this));
23
69
 
24
- abstract contract Registerable is
25
- RegistryLinked,
26
- IRegisterable
27
- {
28
- using NftIdLib for NftId;
70
+ // initial registry setup
71
+ _registerProtocol();
72
+ _registerRegistry();
29
73
 
30
- address private _initialOwner;
31
-
32
- constructor(address registry)
33
- RegistryLinked(registry)
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)
34
86
  {
35
- _initialOwner = msg.sender;
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);
36
106
  }
37
107
 
38
- // getType, getData and register need to be implemented by concrete contract
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
+ }
39
121
 
40
- function isRegisterable() external pure override returns(bool) {
41
- return true;
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);
42
137
  }
43
138
 
44
- function getInitialOwner() public view override returns(address deployer) {
45
- return _initialOwner;
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
+ parentType == PROTOCOL() ||
153
+ parentType == REGISTRY() ||
154
+ parentType == SERVICE()
155
+ ) {
156
+ revert InvalidTypesCombination(objectType, parentType);
157
+ }
158
+
159
+ _register(info);
46
160
  }
47
161
 
48
- function isRegistered() public view override returns(bool) {
49
- NftId nftId = _registry.getNftId(address(this));
50
- return nftId.gtz();
162
+
163
+ /// @dev earliest GIF major version
164
+ function getInitialVersion() external view returns (VersionPart) {
165
+ return _releaseManager.getInitialVersion();
51
166
  }
52
167
 
53
- function getNftId() public view override returns(NftId nftId) {
54
- return _registry.getNftId(address(this));
168
+ // TODO make distinction between active an not yet active version
169
+ // need to be thought trough, not yet clear if necessary
170
+ // need to answer question: what is the latest version during the upgrade process?
171
+ // likely setting up a new gif version does not fit into a single tx
172
+ // in this case we might want to have a period where the latest version is
173
+ // in the process of being set up while the latest active version is 1 major release smaller
174
+ /// @dev latest GIF major version (might not yet be active)
175
+ function getNextVersion() external view returns (VersionPart) {
176
+ return _releaseManager.getNextVersion();
55
177
  }
56
178
 
57
- function getOwner() public view override returns(address owner) {
58
- NftId id = _registry.getNftId(address(this));
59
- owner = _registry.getOwner(id);
60
- return owner != address(0) ? owner : _initialOwner;
179
+ /// @dev latest active GIF release version
180
+ function getLatestVersion() external view returns (VersionPart) {
181
+ return _releaseManager.getLatestVersion();
61
182
  }
62
183
 
63
- }
184
+ function getReleaseInfo(VersionPart version) external view returns (ReleaseInfo memory) {
185
+ return _releaseManager.getReleaseInfo(version);
186
+ }
64
187
 
65
- contract Registry is IRegistry {
66
- using NftIdLib for NftId;
67
- string public constant EMPTY_URI = "";
188
+ function getObjectCount() external view returns (uint256) {
189
+ return _chainNft.totalSupply();
190
+ }
68
191
 
69
- mapping(NftId nftId => RegistryInfo info) private _info;
70
- mapping(NftId nftId => address owner) private _owner;
71
- mapping(address object => NftId nftId) private _nftIdByAddress;
192
+ function getReleaseManagerAddress() external view returns (address) {
193
+ return address(_releaseManager);
194
+ }
72
195
 
73
- IChainNft private _chainNft;
196
+ function getNftId() external view returns (NftId nftId) {
197
+ return _registryNftId;
198
+ }
74
199
 
75
- function initialize(address chainNft) external {
76
- require(address(_chainNft) == address(0), "ERROR:REG-001:ALREADY_INITIALIZED");
77
- _chainNft = IChainNft(chainNft);
200
+ function getNftId(address object) external view returns (NftId id) {
201
+ return _nftIdByAddress[object];
78
202
  }
79
203
 
80
- function TOKEN() public pure override returns(uint256) { return 30; }
81
- function INSTANCE() public pure override returns(uint256) { return 40; }
82
- function PRODUCT() public pure override returns(uint256) { return 50; }
83
- function ORACLE() public pure override returns(uint256) { return 60; }
84
- function POOL() public pure override returns(uint256) { return 70; }
85
- function POLICY() public pure override returns(uint256) { return 80; }
86
- function BUNDLE() public pure override returns(uint256) { return 90; }
204
+ function ownerOf(NftId nftId) public view returns (address) {
205
+ return _chainNft.ownerOf(nftId.toInt());
206
+ }
87
207
 
88
- function register(address objectAddress) external override returns(NftId nftId) {
89
- require(_nftIdByAddress[objectAddress].eqz(), "ERROR:REG-002:ALREADY_REGISTERED");
208
+ function ownerOf(address contractAddress) public view returns (address) {
209
+ return _chainNft.ownerOf(_nftIdByAddress[contractAddress].toInt());
210
+ }
90
211
 
91
- IRegisterable registerable = IRegisterable(objectAddress);
92
- require(registerable.isRegisterable(), "ERROR:REG-003:NOT_REGISTERABLE");
212
+ function getObjectInfo(NftId nftId) external view returns (ObjectInfo memory) {
213
+ return _info[nftId];
214
+ }
93
215
 
94
- // check parent exists (for objects not instances)
95
- if(registerable.getType() != INSTANCE()) {
96
- RegistryInfo memory parentInfo = _info[registerable.getParentNftId()];
97
- require(parentInfo.nftId.gtz(), "ERROR:REG-004:PARENT_NOT_FOUND");
98
- // check validity of parent relation, valid relations are
99
- // policy -> product, bundle -> pool, product -> instance, pool -> instance
100
- }
216
+ function getObjectInfo(address object) external view returns (ObjectInfo memory) {
217
+ return _info[_nftIdByAddress[object]];
218
+ }
101
219
 
102
- uint256 mintedTokenId = _chainNft.mint(
103
- registerable.getInitialOwner(),
104
- EMPTY_URI);
105
- nftId = toNftId(mintedTokenId);
106
-
107
- RegistryInfo memory info = RegistryInfo(
108
- nftId,
109
- registerable.getParentNftId(),
110
- registerable.getType(),
111
- objectAddress,
112
- registerable.getInitialOwner()
113
- );
220
+ function isRegistered(NftId nftId) public view returns (bool) {
221
+ return _info[nftId].objectType.gtz();
222
+ }
114
223
 
115
- _info[nftId] = info;
116
- _nftIdByAddress[objectAddress] = nftId;
224
+ function isRegistered(address object) external view returns (bool) {
225
+ return _nftIdByAddress[object].gtz();
226
+ }
117
227
 
118
- // add logging
228
+ function isRegisteredService(address object) external view returns (bool) {
229
+ return _info[_nftIdByAddress[object]].objectType == SERVICE();
119
230
  }
120
231
 
232
+ function isRegisteredComponent(address object) external view returns (bool) {
233
+ NftId objectParentNftId = _info[_nftIdByAddress[object]].parentNftId;
234
+ return _info[objectParentNftId].objectType == INSTANCE();
235
+ }
121
236
 
122
- function registerObjectForInstance(
123
- NftId parentNftId,
124
- uint256 objectType,
125
- address initialOwner
126
- )
127
- external
128
- override
129
- // TODO add onlyRegisteredInstance
130
- returns(NftId nftId)
237
+ function isValidRelease(VersionPart version) external view returns (bool)
131
238
  {
132
- // TODO add more validation
133
- require(
134
- objectType == POLICY() || objectType == BUNDLE(),
135
- "ERROR:REG-005:TYPE_INVALID");
239
+ return _releaseManager.isValidRelease(version);
240
+ }
136
241
 
137
- uint256 mintedTokenId = _chainNft.mint(
138
- initialOwner,
139
- EMPTY_URI);
140
- nftId = toNftId(mintedTokenId);
242
+ function getServiceAddress(
243
+ ObjectType serviceDomain,
244
+ VersionPart releaseVersion
245
+ ) external view returns (address service)
246
+ {
247
+ // TODO how can I get service address while release is not validated/activated ?!! -> user will check validity of release on its own
248
+ //if(_releaseManager.isValidRelease(releaseVersion)) {
249
+ service = _service[releaseVersion][serviceDomain];
250
+ //}
251
+ }
141
252
 
142
- RegistryInfo memory info = RegistryInfo(
143
- nftId,
144
- parentNftId,
145
- objectType,
146
- address(0),
147
- initialOwner
148
- );
253
+ function getChainNftAddress() external view override returns (address) {
254
+ return address(_chainNft);
255
+ }
149
256
 
150
- _info[nftId] = info;
257
+ function getOwner() public view returns (address owner) {
258
+ return ownerOf(address(this));
259
+ }
260
+
261
+ // IERC165
151
262
 
152
- // add logging
263
+ function supportsInterface(bytes4 interfaceId) external pure returns (bool) {
264
+ if(interfaceId == type(IERC165).interfaceId || interfaceId == type(IRegistry).interfaceId) {
265
+ return true;
266
+ }
267
+
268
+ return false;
153
269
  }
154
270
 
271
+ // Internals
155
272
 
156
- function getObjectCount() external view override returns(uint256) {
157
- return _chainNft.totalSupply();
273
+ /// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
274
+ // TODO registration of precompile addresses
275
+ function _register(ObjectInfo memory info)
276
+ internal
277
+ returns(NftId nftId)
278
+ {
279
+ ObjectType objectType = info.objectType;
280
+ NftId parentNftId = info.parentNftId;
281
+ ObjectInfo memory parentInfo = _info[parentNftId];
282
+ ObjectType parentType = parentInfo.objectType; // see function header
283
+ address parentAddress = parentInfo.objectAddress;
284
+
285
+ // parent is contract -> need to check? -> check before minting
286
+ // special case: global registry nft as parent when not on mainnet -> global registry address is 0
287
+ // special case: when parentNftId == _chainNft.mint(), check for zero parent address before mint
288
+ // special case: when parentNftId == _chainNft.mint() && objectAddress == initialOwner
289
+ if(parentAddress == address(0)) {
290
+ revert ZeroParentAddress();
291
+ }
292
+
293
+ address interceptor = _getInterceptor(info.isInterceptor, info.objectAddress, parentInfo.isInterceptor, parentAddress);
294
+ uint256 tokenId = _chainNft.getNextTokenId();
295
+ nftId = toNftId(tokenId);
296
+
297
+ info.nftId = nftId;
298
+ _info[nftId] = info;
299
+
300
+ if(info.objectAddress > address(0))
301
+ {
302
+ address contractAddress = info.objectAddress;
303
+
304
+ if(_nftIdByAddress[contractAddress].gtz()) {
305
+ revert ContractAlreadyRegistered(contractAddress);
306
+ }
307
+
308
+ _nftIdByAddress[contractAddress] = nftId;
309
+ }
310
+
311
+ emit LogRegistration(nftId, parentNftId, objectType, info.isInterceptor, info.objectAddress, info.initialOwner);
312
+
313
+ // calls nft receiver(1) and interceptor(2)
314
+ uint256 mintedTokenId = _chainNft.mint(
315
+ info.initialOwner,
316
+ interceptor,
317
+ EMPTY_URI);
318
+ assert(mintedTokenId == tokenId);
319
+
158
320
  }
159
321
 
322
+ /// @dev obtain interceptor address for this nft if applicable, address(0) otherwise
323
+ function _getInterceptor(
324
+ bool isInterceptor,
325
+ address objectAddress,
326
+ bool parentIsInterceptor,
327
+ address parentObjectAddress
328
+ )
329
+ internal
330
+ view
331
+ returns (address interceptor)
332
+ {
333
+ if (objectAddress == address(0)) {
334
+ if (parentIsInterceptor) {
335
+ return parentObjectAddress;
336
+ } else {
337
+ return address(0);
338
+ }
339
+ }
340
+
341
+ if (isInterceptor) {
342
+ return objectAddress;
343
+ }
160
344
 
161
- function getNftId(address object) external view override returns(NftId id) {
162
- return _nftIdByAddress[object];
345
+ return address(0);
163
346
  }
164
347
 
348
+ // Internals called only in constructor
165
349
 
166
- function isRegistered(address object) external view override returns(bool) {
167
- return _nftIdByAddress[object].gtz();
350
+ /// @dev protocol registration used to anchor the dip ecosystem relations
351
+ function _registerProtocol()
352
+ private
353
+ {
354
+ uint256 protocolId = _chainNft.PROTOCOL_NFT_ID();
355
+ NftId protocolNftId = toNftId(protocolId);
356
+
357
+ _info[protocolNftId] = ObjectInfo({
358
+ nftId: protocolNftId,
359
+ parentNftId: zeroNftId(),
360
+ objectType: PROTOCOL(),
361
+ isInterceptor: false,
362
+ objectAddress: address(0),
363
+ initialOwner: NFT_LOCK_ADDRESS,
364
+ data: ""
365
+ });
366
+
367
+ _chainNft.mint(NFT_LOCK_ADDRESS, protocolId);
168
368
  }
169
369
 
370
+ /// @dev registry registration
371
+ /// might also register the global registry when not on mainnet
372
+ function _registerRegistry()
373
+ private
374
+ {
375
+ uint256 registryId = _chainNft.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID);
376
+ NftId registryNftId = toNftId(registryId);
377
+ NftId parentNftId;
378
+
379
+ if(registryId != _chainNft.GLOBAL_REGISTRY_ID())
380
+ {// we're not the global registry
381
+ _registerGlobalRegistry();
382
+ parentNftId = toNftId(_chainNft.GLOBAL_REGISTRY_ID());
383
+ }
384
+ else
385
+ {// we are global registry
386
+ parentNftId = toNftId(_chainNft.PROTOCOL_NFT_ID());
387
+ }
170
388
 
171
- function getInfo(NftId nftId) external view override returns(RegistryInfo memory info) {
172
- return _info[nftId];
389
+ _info[registryNftId] = ObjectInfo({
390
+ nftId: registryNftId,
391
+ parentNftId: parentNftId,
392
+ objectType: REGISTRY(),
393
+ isInterceptor: false,
394
+ objectAddress: address(this),
395
+ initialOwner: NFT_LOCK_ADDRESS,
396
+ data: ""
397
+ });
398
+ _nftIdByAddress[address(this)] = registryNftId;
399
+ _registryNftId = registryNftId;
400
+
401
+ _chainNft.mint(NFT_LOCK_ADDRESS, registryId);
173
402
  }
174
403
 
175
- function getOwner(NftId nftId) external view override returns(address) {
176
- return _chainNft.ownerOf(nftId.toInt());
404
+ /// @dev global registry registration for non mainnet registries
405
+ function _registerGlobalRegistry()
406
+ private
407
+ {
408
+ uint256 globalRegistryId = _chainNft.GLOBAL_REGISTRY_ID();
409
+ NftId globalRegistryNftId = toNftId(globalRegistryId);
410
+
411
+ _info[globalRegistryNftId] = ObjectInfo({
412
+ nftId: globalRegistryNftId,
413
+ parentNftId: toNftId(_chainNft.PROTOCOL_NFT_ID()),
414
+ objectType: REGISTRY(),
415
+ isInterceptor: false,
416
+ objectAddress: address(0),
417
+ initialOwner: NFT_LOCK_ADDRESS,
418
+ data: ""
419
+ });
420
+
421
+ _chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
177
422
  }
178
423
 
179
- function getNftAddress() external view override returns(address nft) {
180
- return address(_chainNft);
424
+ /// @dev defines which object - parent types relations are allowed to register
425
+ // IMPORTANT:
426
+ // 1) EACH object type MUST have only one parent type across ALL mappings
427
+ // 2) DO NOT use object type (e.g. POLCY, BUNDLE, STAKE) as parent type
428
+ // 3) DO NOT use REGISTRY as object type
429
+ // 2) DO NOT use PROTOCOL and "zeroObjectType"
430
+ function _setupValidCoreTypesAndCombinations()
431
+ private
432
+ {
433
+ _coreTypes[REGISTRY()] = true;
434
+ _coreTypes[SERVICE()] = true;
435
+ _coreTypes[TOKEN()] = true;
436
+ _coreTypes[INSTANCE()] = true;
437
+ _coreTypes[PRODUCT()] = true;
438
+ _coreTypes[POOL()] = true;
439
+ _coreTypes[DISTRIBUTION()] = true;
440
+ _coreTypes[POLICY()] = true;
441
+ _coreTypes[BUNDLE()] = true;
442
+ _coreTypes[STAKE()] = true;
443
+
444
+ // registry as parent, ONLY registry owner
445
+ //_coreContractCombinations[REGISTRY()][REGISTRY()] = true; // only for global regstry
446
+ _coreContractCombinations[TOKEN()][REGISTRY()] = true;
447
+ //_coreContractCombinations[SERVICE()][REGISTRY()] = true;// do not need it here -> registerService() registers exactly this combination
448
+
449
+ // registry as parent, ONLY approved
450
+ _coreContractCombinations[INSTANCE()][REGISTRY()] = true;
451
+
452
+ // instance as parent, ONLY approved
453
+ _coreContractCombinations[PRODUCT()][INSTANCE()] = true;
454
+ _coreContractCombinations[DISTRIBUTION()][INSTANCE()] = true;
455
+ _coreContractCombinations[ORACLE()][INSTANCE()] = true;
456
+ _coreContractCombinations[POOL()][INSTANCE()] = true;
457
+
458
+ _coreObjectCombinations[DISTRIBUTOR()][DISTRIBUTION()] = true;
459
+
460
+ // product as parent, ONLY approved
461
+ _coreObjectCombinations[POLICY()][PRODUCT()] = true;
462
+
463
+ // pool as parent, ONLY approved
464
+ _coreObjectCombinations[BUNDLE()][POOL()] = true;
465
+ _coreObjectCombinations[STAKE()][POOL()] = true;
181
466
  }
182
467
  }