@etherisc/gif-next 0.0.2-eb7397c → 0.0.2-eb98db7-932

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 (423) hide show
  1. package/README.md +436 -8
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
  3. package/artifacts/contracts/components/Component.sol/Component.json +705 -31
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +1346 -0
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/{registry/IChainNft.sol/IChainNft.json → components/IComponent.sol/IComponent.json} +284 -223
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +900 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +887 -0
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +806 -0
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +1184 -75
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +1105 -90
  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 +1 -1
  23. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +2102 -510
  24. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  25. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +498 -0
  26. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  27. package/artifacts/contracts/instance/Instance.sol/Instance.json +2780 -459
  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 +1386 -0
  32. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  33. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +1035 -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 +541 -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/{access/IAccess.sol/IAccess.json → module/IBundle.sol/IBundle.json} +2 -2
  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/{policy → module}/IPolicy.sol/IPolicy.json +1 -1
  56. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  57. package/artifacts/contracts/instance/{pool/IPoolModule.sol/IPool.json → module/IRisk.sol/IRisk.json} +2 -2
  58. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  59. package/artifacts/contracts/instance/{component/IComponent.sol/IComponent.json → module/ISetup.sol/ISetup.json} +2 -2
  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 +858 -0
  64. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  65. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +657 -0
  66. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  67. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1085 -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 +743 -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 +1087 -0
  76. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  77. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +729 -0
  78. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  79. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +462 -0
  80. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  81. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +622 -0
  82. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  83. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +398 -0
  84. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  85. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +520 -0
  86. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  87. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +572 -0
  88. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  89. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +336 -0
  90. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  91. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +373 -0
  92. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  93. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1109 -0
  94. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  95. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +717 -0
  96. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  97. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +716 -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 +766 -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 +1 -1
  105. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +239 -2
  106. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  107. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +519 -61
  108. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  109. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +879 -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 +1 -1
  113. package/artifacts/contracts/registry/Registry.sol/Registry.json +567 -75
  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 +1166 -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/{registry/Registry.sol/Registerable.json → shared/INftOwnable.sol/INftOwnable.json} +46 -74
  130. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  131. package/artifacts/contracts/{instance/product/IProductService.sol/IProductService.json → shared/IPolicyHolder.sol/IPolicyHolder.json} +68 -53
  132. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  133. package/artifacts/contracts/{instance/pool/PoolModule.sol/PoolModule.json → shared/IRegisterable.sol/IRegisterable.json} +106 -80
  134. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  135. package/artifacts/contracts/{registry/IRegistry.sol → shared/IRegistryLinked.sol}/IRegistryLinked.json +18 -19
  136. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  137. package/artifacts/contracts/shared/IService.sol/IService.json +258 -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 +414 -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 +510 -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 +1 -1
  177. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  178. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  179. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +2 -2
  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 +1 -1
  189. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
  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/StateId.sol/StateIdLib.dbg.json +4 -0
  205. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +92 -0
  206. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  207. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +77 -2
  208. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  209. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  210. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  211. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +479 -0
  212. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  213. package/artifacts/contracts/types/Version.sol/VersionLib.json +177 -0
  214. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  215. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +49 -0
  216. package/contracts/components/Component.sol +216 -37
  217. package/contracts/components/Distribution.sol +287 -0
  218. package/contracts/components/IComponent.sol +54 -0
  219. package/contracts/components/IDistributionComponent.sol +92 -0
  220. package/contracts/components/IPoolComponent.sol +87 -0
  221. package/contracts/components/IProductComponent.sol +39 -0
  222. package/contracts/components/Pool.sol +242 -17
  223. package/contracts/components/Product.sol +251 -32
  224. package/contracts/instance/BundleManager.sol +125 -0
  225. package/contracts/instance/Cloneable.sol +46 -0
  226. package/contracts/instance/IInstance.sol +87 -15
  227. package/contracts/instance/IInstanceService.sol +59 -0
  228. package/contracts/instance/Instance.sol +270 -43
  229. package/contracts/instance/InstanceAccessManager.sol +297 -0
  230. package/contracts/instance/InstanceReader.sol +293 -0
  231. package/contracts/instance/InstanceService.sol +476 -0
  232. package/contracts/instance/InstanceServiceManager.sol +54 -0
  233. package/contracts/instance/ObjectManager.sol +84 -0
  234. package/contracts/instance/base/ComponentService.sol +134 -0
  235. package/contracts/instance/base/IKeyValueStore.sol +49 -0
  236. package/contracts/instance/base/ILifecycle.sol +30 -0
  237. package/contracts/instance/base/KeyValueStore.sol +172 -0
  238. package/contracts/instance/base/Lifecycle.sol +100 -0
  239. package/contracts/instance/module/IAccess.sol +47 -0
  240. package/contracts/instance/module/IBundle.sol +20 -0
  241. package/contracts/instance/module/IDistribution.sol +40 -0
  242. package/contracts/instance/module/IPolicy.sol +47 -0
  243. package/contracts/instance/module/IRisk.sol +11 -0
  244. package/contracts/instance/module/ISetup.sol +48 -0
  245. package/contracts/instance/module/ITreasury.sol +23 -0
  246. package/contracts/instance/service/ApplicationService.sol +268 -0
  247. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  248. package/contracts/instance/service/BundleService.sol +298 -0
  249. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  250. package/contracts/instance/service/ClaimService.sol +151 -0
  251. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  252. package/contracts/instance/service/DistributionService.sol +346 -0
  253. package/contracts/instance/service/DistributionServiceManager.sol +51 -0
  254. package/contracts/instance/service/IApplicationService.sol +82 -0
  255. package/contracts/instance/service/IBundleService.sol +54 -0
  256. package/contracts/instance/service/IClaimService.sol +61 -0
  257. package/contracts/instance/service/IDistributionService.sol +73 -0
  258. package/contracts/instance/service/IPolicyService.sol +89 -0
  259. package/contracts/instance/service/IPoolService.sol +20 -0
  260. package/contracts/instance/service/IProductService.sol +40 -0
  261. package/contracts/instance/service/PolicyService.sol +476 -0
  262. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  263. package/contracts/instance/service/PoolService.sol +109 -0
  264. package/contracts/instance/service/PoolServiceManager.sol +51 -0
  265. package/contracts/instance/service/ProductService.sol +233 -0
  266. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  267. package/contracts/registry/ChainNft.sol +138 -109
  268. package/contracts/registry/IRegistry.sol +78 -49
  269. package/contracts/registry/IRegistryService.sol +67 -0
  270. package/contracts/registry/ITransferInterceptor.sol +6 -0
  271. package/contracts/registry/Registry.sol +398 -116
  272. package/contracts/registry/RegistryAccessManager.sol +216 -0
  273. package/contracts/registry/RegistryService.sol +283 -0
  274. package/contracts/registry/RegistryServiceManager.sol +62 -0
  275. package/contracts/registry/ReleaseManager.sol +322 -0
  276. package/contracts/registry/TokenRegistry.sol +116 -0
  277. package/contracts/shared/ContractDeployerLib.sol +72 -0
  278. package/contracts/shared/ERC165.sol +27 -0
  279. package/contracts/shared/INftOwnable.sol +23 -0
  280. package/contracts/shared/IPolicyHolder.sol +26 -0
  281. package/contracts/shared/IRegisterable.sol +15 -0
  282. package/contracts/shared/IRegistryLinked.sol +12 -0
  283. package/contracts/shared/IService.sol +16 -0
  284. package/contracts/shared/IVersionable.sol +53 -0
  285. package/contracts/shared/NftOwnable.sol +120 -0
  286. package/contracts/shared/PolicyHolder.sol +81 -0
  287. package/contracts/shared/ProxyManager.sol +169 -0
  288. package/contracts/shared/Registerable.sol +74 -0
  289. package/contracts/shared/RegistryLinked.sol +48 -0
  290. package/contracts/shared/Service.sol +58 -0
  291. package/contracts/shared/TokenHandler.sol +27 -0
  292. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  293. package/contracts/shared/Versionable.sol +59 -0
  294. package/contracts/test/TestFee.sol +25 -0
  295. package/contracts/test/TestRegisterable.sol +18 -0
  296. package/contracts/test/TestRoleId.sol +14 -0
  297. package/contracts/test/TestService.sol +25 -0
  298. package/contracts/test/TestToken.sol +26 -0
  299. package/contracts/test/TestVersion.sol +44 -0
  300. package/contracts/test/TestVersionable.sol +17 -0
  301. package/contracts/test/Usdc.sol +26 -0
  302. package/contracts/types/AddressSet.sol +58 -0
  303. package/contracts/types/Blocknumber.sol +76 -18
  304. package/contracts/types/ChainId.sol +18 -10
  305. package/contracts/types/ClaimId.sol +52 -0
  306. package/contracts/types/DistributorType.sol +55 -0
  307. package/contracts/types/Fee.sol +56 -0
  308. package/contracts/types/Key32.sol +50 -0
  309. package/contracts/types/NftId.sol +48 -11
  310. package/contracts/types/NftIdSet.sol +62 -0
  311. package/contracts/types/NumberId.sol +52 -0
  312. package/contracts/types/ObjectType.sol +156 -0
  313. package/contracts/types/PayoutId.sol +54 -0
  314. package/contracts/types/Referral.sol +85 -0
  315. package/contracts/types/RiskId.sol +43 -0
  316. package/contracts/types/RoleId.sol +90 -0
  317. package/contracts/types/StateId.sol +105 -0
  318. package/contracts/types/Timestamp.sol +89 -17
  319. package/contracts/types/UFixed.sol +193 -75
  320. package/contracts/types/Version.sol +107 -0
  321. package/package.json +21 -6
  322. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  323. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  324. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  325. package/artifacts/contracts/components/IPool.sol/IPoolComponent.json +0 -179
  326. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  327. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -192
  328. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  329. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  330. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  331. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  332. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  333. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  334. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  335. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  336. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  337. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  338. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  339. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  340. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  341. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  342. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  343. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  344. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  345. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +0 -50
  346. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  347. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  348. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  349. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  350. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  351. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  352. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  353. package/artifacts/contracts/instance/access/Access.sol/AccessModule.json +0 -400
  354. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  355. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  356. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  357. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  358. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  359. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  360. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.json +0 -336
  361. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  362. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.json +0 -327
  363. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  364. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -147
  365. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  366. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  367. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +0 -179
  368. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  369. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -245
  370. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  371. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -94
  372. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  373. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.json +0 -24
  374. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  375. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  376. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.json +0 -231
  377. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  378. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.json +0 -231
  379. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  380. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  381. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.json +0 -149
  382. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  383. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  384. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  385. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  386. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  387. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  388. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  389. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -167
  390. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  391. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  392. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +0 -24
  393. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  394. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +0 -166
  395. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  396. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  397. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  398. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  399. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  400. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +0 -440
  401. package/contracts/components/IPool.sol +0 -9
  402. package/contracts/components/IProduct.sol +0 -12
  403. package/contracts/experiment/errors/Require.sol +0 -33
  404. package/contracts/experiment/errors/Revert.sol +0 -39
  405. package/contracts/experiment/inheritance/A.sol +0 -56
  406. package/contracts/experiment/inheritance/B.sol +0 -23
  407. package/contracts/experiment/inheritance/C.sol +0 -28
  408. package/contracts/experiment/inheritance/IA.sol +0 -18
  409. package/contracts/experiment/inheritance/IB.sol +0 -9
  410. package/contracts/experiment/inheritance/IC.sol +0 -11
  411. package/contracts/experiment/types/TypeA.sol +0 -42
  412. package/contracts/experiment/types/TypeB.sol +0 -24
  413. package/contracts/instance/access/Access.sol +0 -218
  414. package/contracts/instance/access/IAccess.sol +0 -83
  415. package/contracts/instance/component/ComponentModule.sol +0 -248
  416. package/contracts/instance/component/IComponent.sol +0 -95
  417. package/contracts/instance/policy/IPolicy.sol +0 -66
  418. package/contracts/instance/policy/PolicyModule.sol +0 -107
  419. package/contracts/instance/pool/IPoolModule.sol +0 -41
  420. package/contracts/instance/pool/PoolModule.sol +0 -86
  421. package/contracts/instance/product/IProductService.sol +0 -46
  422. package/contracts/instance/product/ProductService.sol +0 -108
  423. package/contracts/registry/IChainNft.sol +0 -18
@@ -1,182 +1,464 @@
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
+
153
+ parentType == PROTOCOL() ||
154
+ parentType == REGISTRY() ||
155
+ parentType == SERVICE()
156
+ ) {
157
+ revert InvalidTypesCombination(objectType, parentType);
158
+ }
159
+
160
+ _register(info);
46
161
  }
47
162
 
48
- function isRegistered() public view override returns(bool) {
49
- NftId nftId = _registry.getNftId(address(this));
50
- return nftId.gtz();
163
+
164
+ /// @dev earliest GIF major version
165
+ function getInitialVersion() external view returns (VersionPart) {
166
+ return _releaseManager.getInitialVersion();
51
167
  }
52
168
 
53
- function getNftId() public view override returns(NftId nftId) {
54
- return _registry.getNftId(address(this));
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();
55
178
  }
56
179
 
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;
180
+ /// @dev latest active GIF release version
181
+ function getLatestVersion() external view returns (VersionPart) {
182
+ return _releaseManager.getLatestVersion();
61
183
  }
62
184
 
63
- }
185
+ function getReleaseInfo(VersionPart version) external view returns (ReleaseInfo memory) {
186
+ return _releaseManager.getReleaseInfo(version);
187
+ }
64
188
 
65
- contract Registry is IRegistry {
66
- using NftIdLib for NftId;
67
- string public constant EMPTY_URI = "";
189
+ function getObjectCount() external view override returns (uint256) {
190
+ return _chainNft.totalSupply();
191
+ }
68
192
 
69
- mapping(NftId nftId => RegistryInfo info) private _info;
70
- mapping(NftId nftId => address owner) private _owner;
71
- mapping(address object => NftId nftId) private _nftIdByAddress;
193
+ function getReleaseManagerAddress() external view returns (address) {
194
+ return address(_releaseManager);
195
+ }
72
196
 
73
- IChainNft private _chainNft;
197
+ function getNftId() external view returns (NftId nftId) {
198
+ return _registryNftId;
199
+ }
74
200
 
75
- function initialize(address chainNft) external {
76
- require(address(_chainNft) == address(0), "ERROR:REG-001:ALREADY_INITIALIZED");
77
- _chainNft = IChainNft(chainNft);
201
+ function getNftId(address object) external view override returns (NftId id) {
202
+ return _nftIdByAddress[object];
78
203
  }
79
204
 
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; }
205
+ function ownerOf(NftId nftId) public view override returns (address) {
206
+ return _chainNft.ownerOf(nftId.toInt());
207
+ }
87
208
 
88
- function register(address objectAddress) external override returns(NftId nftId) {
89
- require(_nftIdByAddress[objectAddress].eqz(), "ERROR:REG-002:ALREADY_REGISTERED");
209
+ function ownerOf(address contractAddress) public view returns (address) {
210
+ return _chainNft.ownerOf(_nftIdByAddress[contractAddress].toInt());
211
+ }
90
212
 
91
- IRegisterable registerable = IRegisterable(objectAddress);
92
- require(registerable.isRegisterable(), "ERROR:REG-003:NOT_REGISTERABLE");
213
+ function getObjectInfo(NftId nftId) external view override returns (ObjectInfo memory) {
214
+ return _info[nftId];
215
+ }
93
216
 
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
- }
217
+ function getObjectInfo(address object) external view override returns (ObjectInfo memory) {
218
+ return _info[_nftIdByAddress[object]];
219
+ }
101
220
 
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
- );
221
+ function isRegistered(NftId nftId) public view override returns (bool) {
222
+ return _info[nftId].objectType.gtz();
223
+ }
114
224
 
115
- _info[nftId] = info;
116
- _nftIdByAddress[objectAddress] = nftId;
225
+ function isRegistered(address object) external view override returns (bool) {
226
+ return _nftIdByAddress[object].gtz();
227
+ }
117
228
 
118
- // add logging
229
+ function isRegisteredService(address object) external view override returns (bool) {
230
+ return _info[_nftIdByAddress[object]].objectType == SERVICE();
119
231
  }
120
232
 
233
+ function isValidRelease(VersionPart version) external view returns (bool)
234
+ {
235
+ return _releaseManager.isValidRelease(version);
236
+ }
121
237
 
122
- function registerObjectForInstance(
123
- NftId parentNftId,
124
- uint256 objectType,
125
- address initialOwner
126
- )
127
- external
128
- override
129
- // TODO add onlyRegisteredInstance
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
130
273
  returns(NftId nftId)
131
274
  {
132
- // TODO add more validation
133
- require(
134
- objectType == POLICY() || objectType == BUNDLE(),
135
- "ERROR:REG-005:TYPE_INVALID");
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);
136
290
 
291
+ // TODO does external call
292
+ // compute next nftId, do all checks and stores, mint() at most end...
137
293
  uint256 mintedTokenId = _chainNft.mint(
138
- initialOwner,
294
+ info.initialOwner,
295
+ interceptor,
139
296
  EMPTY_URI);
140
297
  nftId = toNftId(mintedTokenId);
141
298
 
142
- RegistryInfo memory info = RegistryInfo(
143
- nftId,
144
- parentNftId,
145
- objectType,
146
- address(0),
147
- initialOwner
148
- );
149
-
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;
150
303
  _info[nftId] = info;
151
304
 
152
- // add logging
153
- }
305
+ if(info.objectAddress > address(0))
306
+ {
307
+ address contractAddress = info.objectAddress;
154
308
 
309
+ if(_nftIdByAddress[contractAddress].gtz()) {
310
+ revert ContractAlreadyRegistered(contractAddress);
311
+ }
155
312
 
156
- function getObjectCount() external view override returns(uint256) {
157
- return _chainNft.totalSupply();
313
+ _nftIdByAddress[contractAddress] = nftId;
314
+ }
315
+
316
+ emit LogRegistration(nftId, parentNftId, objectType, info.isInterceptor, info.objectAddress, info.initialOwner);
158
317
  }
159
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
+ }
160
337
 
161
- function getNftId(address object) external view override returns(NftId id) {
162
- return _nftIdByAddress[object];
338
+ if (isInterceptor) {
339
+ return objectAddress;
340
+ }
341
+
342
+ return address(0);
163
343
  }
164
344
 
345
+ // Internals called only in constructor
165
346
 
166
- function isRegistered(address object) external view override returns(bool) {
167
- return _nftIdByAddress[object].gtz();
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);
168
365
  }
169
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
+ }
170
385
 
171
- function getInfo(NftId nftId) external view override returns(RegistryInfo memory info) {
172
- return _info[nftId];
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);
173
399
  }
174
400
 
175
- function getOwner(NftId nftId) external view override returns(address) {
176
- return _chainNft.ownerOf(nftId.toInt());
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);
177
419
  }
178
420
 
179
- function getNftAddress() external view override returns(address nft) {
180
- return address(_chainNft);
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;
181
463
  }
182
464
  }