@etherisc/gif-next 0.0.2-fe77319 → 0.0.2-ff282a4-523

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